IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 33518


Ignore:
Timestamp:
Mar 13, 2012, 5:55:50 PM (14 years ago)
Author:
eugene
Message:

add modes to (a) copy original .bck data to backup host and (b) set the bit to use the backup host for some data

Location:
branches/eam_branches/ipp-20111122/Ohana/src/photdbc
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20111122/Ohana/src/photdbc/Makefile

    r33404 r33518  
    4141$(SRC)/HostTableLoad.$(ARCH).o          \
    4242$(SRC)/AssignSkyToHost.$(ARCH).o        \
     43$(SRC)/CopyBackupToHost.$(ARCH).o     \
     44$(SRC)/UseBackupForHost.$(ARCH).o     \
    4345$(SRC)/CopyToHostLocation.$(ARCH).o     \
    4446$(SRC)/CopyFromHostLocation.$(ARCH).o   \
  • branches/eam_branches/ipp-20111122/Ohana/src/photdbc/include/dvodist.h

    r33404 r33518  
    1515    MODE_IN   = 2,
    1616    MODE_FIX  = 3,
     17    MODE_OUT_BACKUP = 4,
     18    MODE_USE_BACKUP = 5,
    1719} ModeType;
    1820
     
    2123SkyRegion UserPatch;
    2224ModeType  MODE;
     25
     26char     *srcHostname;
     27char     *dstHostname;
    2328
    2429void          usage();
     
    4045
    4146int           get_md5_with_copy (char *input, char *output, md5_byte_t *digest);
     47int hexchar_to_int (char input);
     48int get_md5_from_pclient (HostInfo *host, char *filename, md5_byte_t *digest);
     49int get_md5_from_remote (HostInfo *host, char *filename, md5_byte_t *digest);
    4250
    4351int CheckBusyJob (HostInfo *host, IOBuffer *stdout_buf, IOBuffer *stderr_buf);
     
    4755
    4856int FixSkyForHost (char *catdir, SkyList *skylist, HostTable *table);
     57
     58int UseBackupForHost (char *catdir, SkyList *skylist, HostTable *table);
     59int CopyBackupToHost (char *catdir, SkyList *skylist, HostTable *table);
  • branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/CopyToHostLocation.c

    r33375 r33518  
    44# define DELETE_ORIGINAL 0
    55// 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);
    106
    117// XXX collapse this and CopyFromHostLocation (only difference is name of src/tgt and bits set on success)
     
    198194 */
    199195
    200 // XXX this would be better controlled if we used a remote pclient.  then we could
    201 // check things like the exit status and
    202 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 client
    228 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 command
    248   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 wrong
    251 
    252   // wait for result
    253   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 digest
    277   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  
    2727  }
    2828
    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)
    3831
    3932  switch (MODE) {
    4033    case MODE_OUT:
     34      CheckHostsAndPaths(hosts);
    4135      AssignSkyToHost (skylist, hosts);
    4236      CopyToHostLocation (catdir, skylist, hosts);
    4337      break;
    4438    case MODE_IN:
     39      CheckHostsAndPaths(hosts);
    4540      CopyFromHostLocation (catdir, skylist, hosts);
    4641      break;
    4742    case MODE_FIX:
    4843      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);
    4950      break;
    5051    default:
  • branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/initialize_dvodist.c

    r33404 r33518  
    2020  fprintf (stderr, " -v : verbose mode\n");
    2121  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");
    2225
    2326  exit (2);
     
    8184    remove_argument (N, &argc, argv);
    8285  }
     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  }
    83111  if (!MODE) usage();
    84112
  • branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/md5_ops.c

    r33223 r33518  
    5454}
    5555
     56// XXX this would be better controlled if we used a remote pclient.  then we could
     57// check things like the exit status and
     58int 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
     84int 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
     147escape:
     148  FreeIOBuffer (&buffer);
     149  FreeIOBuffer (&stdout_buf);
     150  FreeIOBuffer (&stderr_buf);
     151  return FALSE;
     152}
     153
     154int 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.