Changeset 33518
- Timestamp:
- Mar 13, 2012, 5:55:50 PM (14 years ago)
- Location:
- branches/eam_branches/ipp-20111122/Ohana/src/photdbc
- Files:
-
- 2 added
- 6 edited
-
Makefile (modified) (1 diff)
-
include/dvodist.h (modified) (4 diffs)
-
src/CopyBackupToHost.c (added)
-
src/CopyToHostLocation.c (modified) (2 diffs)
-
src/UseBackupForHost.c (added)
-
src/dvodist.c (modified) (1 diff)
-
src/initialize_dvodist.c (modified) (2 diffs)
-
src/md5_ops.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20111122/Ohana/src/photdbc/Makefile
r33404 r33518 41 41 $(SRC)/HostTableLoad.$(ARCH).o \ 42 42 $(SRC)/AssignSkyToHost.$(ARCH).o \ 43 $(SRC)/CopyBackupToHost.$(ARCH).o \ 44 $(SRC)/UseBackupForHost.$(ARCH).o \ 43 45 $(SRC)/CopyToHostLocation.$(ARCH).o \ 44 46 $(SRC)/CopyFromHostLocation.$(ARCH).o \ -
branches/eam_branches/ipp-20111122/Ohana/src/photdbc/include/dvodist.h
r33404 r33518 15 15 MODE_IN = 2, 16 16 MODE_FIX = 3, 17 MODE_OUT_BACKUP = 4, 18 MODE_USE_BACKUP = 5, 17 19 } ModeType; 18 20 … … 21 23 SkyRegion UserPatch; 22 24 ModeType MODE; 25 26 char *srcHostname; 27 char *dstHostname; 23 28 24 29 void usage(); … … 40 45 41 46 int get_md5_with_copy (char *input, char *output, md5_byte_t *digest); 47 int hexchar_to_int (char input); 48 int get_md5_from_pclient (HostInfo *host, char *filename, md5_byte_t *digest); 49 int get_md5_from_remote (HostInfo *host, char *filename, md5_byte_t *digest); 42 50 43 51 int CheckBusyJob (HostInfo *host, IOBuffer *stdout_buf, IOBuffer *stderr_buf); … … 47 55 48 56 int FixSkyForHost (char *catdir, SkyList *skylist, HostTable *table); 57 58 int UseBackupForHost (char *catdir, SkyList *skylist, HostTable *table); 59 int CopyBackupToHost (char *catdir, SkyList *skylist, HostTable *table); -
branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/CopyToHostLocation.c
r33375 r33518 4 4 # define DELETE_ORIGINAL 0 5 5 // make this a user option 6 7 int get_md5_from_remote (HostInfo *host, char *filename, md5_byte_t *digest);8 int get_md5_from_pclient (HostInfo *host, char *filename, md5_byte_t *digest);9 int hexchar_to_int (char input);10 6 11 7 // XXX collapse this and CopyFromHostLocation (only difference is name of src/tgt and bits set on success) … … 198 194 */ 199 195 200 // XXX this would be better controlled if we used a remote pclient. then we could201 // check things like the exit status and202 int get_md5_from_remote (HostInfo *host, char *filename, md5_byte_t *digest) {203 204 IOBuffer buffer;205 206 char line[1024];207 int Nline = snprintf (line, 1024, "md5sum %s\n", filename);208 assert (Nline < 1024);209 210 write (host->stdio[0], line, Nline);211 212 InitIOBuffer (&buffer, 100);213 int status = EmptyIOBuffer (&buffer, 10000, host->stdio[1]);214 fprintf (stderr, "md5sum status: %d\n", status);215 216 fprintf (stderr, "buffer: %s\n", buffer.buffer);217 218 char result[1024], fileout[1024];219 int Nscan = sscanf (buffer.buffer, "%s %s", result, fileout);220 assert (Nscan == 2);221 assert (strlen(result) == NDIGEST);222 223 memcpy (digest, result, NDIGEST);224 return TRUE;225 }226 227 // pclient version of remote client228 int get_md5_from_pclient (HostInfo *host, char *filename, md5_byte_t *digest) {229 230 IOBuffer buffer, stdout_buf, stderr_buf;231 232 char line[1024];233 int Nline = snprintf (line, 1024, "job md5sum %s\n", filename);234 assert (Nline < 1024);235 236 // fprintf (stderr, "command: %s\n", line);237 238 InitIOBuffer (&buffer, 100);239 InitIOBuffer (&stdout_buf, 100);240 InitIOBuffer (&stderr_buf, 100);241 242 // need to reset pclient for next command...243 if (!PclientCommand (host, "reset", &buffer)) goto escape;244 if (!PclientResponse (host, PCLIENT_PROMPT, &buffer)) goto escape;245 FlushIOBuffer (&buffer);246 247 // start the md5sum command248 if (!PclientCommand (host, line, &buffer)) goto escape;249 if (!PclientResponse (host, PCLIENT_PROMPT, &buffer)) goto escape;250 // XXX for the moment, abort if anything goes wrong251 252 // wait for result253 while (!CheckBusyJob (host, &stdout_buf, &stderr_buf)) {254 FlushIOBuffer (&stdout_buf);255 FlushIOBuffer (&stdout_buf);256 usleep (10000);257 }258 if (stderr_buf.Nbuffer) {259 fprintf (stderr, "error in md5sum: %s\n", stderr_buf.buffer);260 goto escape;261 }262 263 // fprintf (stderr, "result from md5sum: %s\n", stdout_buf.buffer);264 265 char result[1024], fileout[1024];266 int Nscan = sscanf (stdout_buf.buffer, "%s %s", result, fileout);267 if (Nscan != 2) {268 fprintf (stderr, "error reading md5sum: %s\n", stdout_buf.buffer);269 goto escape;270 }271 if (strlen(result) != 2*NDIGEST) {272 fprintf (stderr, "error reading md5sum: %s\n", stdout_buf.buffer);273 goto escape;274 }275 276 // result is the set of 0-f nibbles, convert to the digest277 int i;278 for (i = 0; i < NDIGEST; i++) {279 int value1 = hexchar_to_int (result[2*i+0]);280 int value2 = hexchar_to_int (result[2*i+1]);281 digest[i] = (value1 << 4) + value2;282 // fprintf (stderr, "%02x %c %c\n", digest[i], result[2*i], result[2*i+1]);283 }284 285 // need to reset pclient for next command...286 if (!PclientCommand (host, "reset", &buffer)) goto escape;287 if (!PclientResponse (host, PCLIENT_PROMPT, &buffer)) goto escape;288 289 return TRUE;290 291 escape:292 FreeIOBuffer (&buffer);293 FreeIOBuffer (&stdout_buf);294 FreeIOBuffer (&stderr_buf);295 return FALSE;296 }297 298 int hexchar_to_int (char input) {299 300 switch (input) {301 case '0':302 case '1':303 case '2':304 case '3':305 case '4':306 case '5':307 case '6':308 case '7':309 case '8':310 case '9':311 return input - '0';312 case 'a':313 case 'b':314 case 'c':315 case 'd':316 case 'e':317 case 'f':318 return input - 'a' + 10;319 case 'A':320 case 'B':321 case 'C':322 case 'D':323 case 'E':324 case 'F':325 return input - 'A' + 10;326 default:327 abort();328 }329 } -
branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/dvodist.c
r33407 r33518 27 27 } 28 28 29 if (MODE != MODE_FIX) { 30 CheckHostsAndPaths(hosts); 31 } 32 33 // XXX bad // save once so repeated calls copy data to the same location 34 // XXX bad { 35 // XXX bad char *skyfile = SkyTableFilename (catdir); 36 // XXX bad SkyTableSave (sky, skyfile); 37 // XXX bad } 29 // XXX I would like to do something so a big dvodist operation is easy to recover 30 // XXX BUT, I cannot save the table here without some caution (byteswap to and fro) 38 31 39 32 switch (MODE) { 40 33 case MODE_OUT: 34 CheckHostsAndPaths(hosts); 41 35 AssignSkyToHost (skylist, hosts); 42 36 CopyToHostLocation (catdir, skylist, hosts); 43 37 break; 44 38 case MODE_IN: 39 CheckHostsAndPaths(hosts); 45 40 CopyFromHostLocation (catdir, skylist, hosts); 46 41 break; 47 42 case MODE_FIX: 48 43 FixSkyForHost (catdir, skylist, hosts); 44 break; 45 case MODE_OUT_BACKUP: 46 CopyBackupToHost (catdir, skylist, hosts); 47 break; 48 case MODE_USE_BACKUP: 49 UseBackupForHost (catdir, skylist, hosts); 49 50 break; 50 51 default: -
branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/initialize_dvodist.c
r33404 r33518 20 20 fprintf (stderr, " -v : verbose mode\n"); 21 21 fprintf (stderr, " -params : list the current parameters\n\n"); 22 23 fprintf (stderr, " -out-backup (host1) to (host2) : move *.bck files for host1 to host2\n"); 24 fprintf (stderr, " -use-backup (host1) : use the backup file for host1\n"); 22 25 23 26 exit (2); … … 81 84 remove_argument (N, &argc, argv); 82 85 } 86 if ((N = get_argument (argc, argv, "-out-backup"))) { 87 if (MODE) { 88 fprintf (stderr, "ERROR: cannot use -fix with -in or -out options!\n"); 89 usage(); 90 } 91 // usage dvodist -out-backup (srcHost) to (dstHost) 92 MODE = MODE_OUT_BACKUP; 93 remove_argument (N, &argc, argv); 94 srcHostname = strcreate (argv[N]); 95 remove_argument (N, &argc, argv); 96 remove_argument (N, &argc, argv); // remove 'to' 97 dstHostname = strcreate (argv[N]); 98 remove_argument (N, &argc, argv); 99 } 100 if ((N = get_argument (argc, argv, "-use-backup"))) { 101 if (MODE) { 102 fprintf (stderr, "ERROR: cannot use -fix with -in or -out options!\n"); 103 usage(); 104 } 105 // usage dvodist -out-backup (srcHost) to (dstHost) 106 MODE = MODE_OUT_BACKUP; 107 remove_argument (N, &argc, argv); 108 srcHostname = strcreate (argv[N]); 109 remove_argument (N, &argc, argv); 110 } 83 111 if (!MODE) usage(); 84 112 -
branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/md5_ops.c
r33223 r33518 54 54 } 55 55 56 // XXX this would be better controlled if we used a remote pclient. then we could 57 // check things like the exit status and 58 int get_md5_from_remote (HostInfo *host, char *filename, md5_byte_t *digest) { 59 60 IOBuffer buffer; 61 62 char line[1024]; 63 int Nline = snprintf (line, 1024, "md5sum %s\n", filename); 64 assert (Nline < 1024); 65 66 write (host->stdio[0], line, Nline); 67 68 InitIOBuffer (&buffer, 100); 69 int status = EmptyIOBuffer (&buffer, 10000, host->stdio[1]); 70 fprintf (stderr, "md5sum status: %d\n", status); 71 72 fprintf (stderr, "buffer: %s\n", buffer.buffer); 73 74 char result[1024], fileout[1024]; 75 int Nscan = sscanf (buffer.buffer, "%s %s", result, fileout); 76 assert (Nscan == 2); 77 assert (strlen(result) == NDIGEST); 78 79 memcpy (digest, result, NDIGEST); 80 return TRUE; 81 } 82 83 // pclient version of remote client 84 int get_md5_from_pclient (HostInfo *host, char *filename, md5_byte_t *digest) { 85 86 IOBuffer buffer, stdout_buf, stderr_buf; 87 88 char line[1024]; 89 int Nline = snprintf (line, 1024, "job md5sum %s\n", filename); 90 assert (Nline < 1024); 91 92 // fprintf (stderr, "command: %s\n", line); 93 94 InitIOBuffer (&buffer, 100); 95 InitIOBuffer (&stdout_buf, 100); 96 InitIOBuffer (&stderr_buf, 100); 97 98 // need to reset pclient for next command... 99 if (!PclientCommand (host, "reset", &buffer)) goto escape; 100 if (!PclientResponse (host, PCLIENT_PROMPT, &buffer)) goto escape; 101 FlushIOBuffer (&buffer); 102 103 // start the md5sum command 104 if (!PclientCommand (host, line, &buffer)) goto escape; 105 if (!PclientResponse (host, PCLIENT_PROMPT, &buffer)) goto escape; 106 // XXX for the moment, abort if anything goes wrong 107 108 // wait for result 109 while (!CheckBusyJob (host, &stdout_buf, &stderr_buf)) { 110 FlushIOBuffer (&stdout_buf); 111 FlushIOBuffer (&stdout_buf); 112 usleep (10000); 113 } 114 if (stderr_buf.Nbuffer) { 115 fprintf (stderr, "error in md5sum: %s\n", stderr_buf.buffer); 116 goto escape; 117 } 118 119 // fprintf (stderr, "result from md5sum: %s\n", stdout_buf.buffer); 120 121 char result[1024], fileout[1024]; 122 int Nscan = sscanf (stdout_buf.buffer, "%s %s", result, fileout); 123 if (Nscan != 2) { 124 fprintf (stderr, "error reading md5sum: %s\n", stdout_buf.buffer); 125 goto escape; 126 } 127 if (strlen(result) != 2*NDIGEST) { 128 fprintf (stderr, "error reading md5sum: %s\n", stdout_buf.buffer); 129 goto escape; 130 } 131 132 // result is the set of 0-f nibbles, convert to the digest 133 int i; 134 for (i = 0; i < NDIGEST; i++) { 135 int value1 = hexchar_to_int (result[2*i+0]); 136 int value2 = hexchar_to_int (result[2*i+1]); 137 digest[i] = (value1 << 4) + value2; 138 // fprintf (stderr, "%02x %c %c\n", digest[i], result[2*i], result[2*i+1]); 139 } 140 141 // need to reset pclient for next command... 142 if (!PclientCommand (host, "reset", &buffer)) goto escape; 143 if (!PclientResponse (host, PCLIENT_PROMPT, &buffer)) goto escape; 144 145 return TRUE; 146 147 escape: 148 FreeIOBuffer (&buffer); 149 FreeIOBuffer (&stdout_buf); 150 FreeIOBuffer (&stderr_buf); 151 return FALSE; 152 } 153 154 int hexchar_to_int (char input) { 155 156 switch (input) { 157 case '0': 158 case '1': 159 case '2': 160 case '3': 161 case '4': 162 case '5': 163 case '6': 164 case '7': 165 case '8': 166 case '9': 167 return input - '0'; 168 case 'a': 169 case 'b': 170 case 'c': 171 case 'd': 172 case 'e': 173 case 'f': 174 return input - 'a' + 10; 175 case 'A': 176 case 'B': 177 case 'C': 178 case 'D': 179 case 'E': 180 case 'F': 181 return input - 'A' + 10; 182 default: 183 abort(); 184 } 185 }
Note:
See TracChangeset
for help on using the changeset viewer.
