Changeset 20172
- Timestamp:
- Oct 15, 2008, 10:01:40 AM (18 years ago)
- Location:
- trunk/ippTools/src
- Files:
-
- 2 edited
-
pztool.c (modified) (7 diffs)
-
pztoolConfig.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/pztool.c
r18561 r20172 46 46 static bool advanceMode(pxConfig *config); 47 47 48 static bool copydoneCompleteExp(pxConfig *config, const char *exp_name, const char *camera, const char *telescope );48 static bool copydoneCompleteExp(pxConfig *config, const char *exp_name, const char *camera, const char *telescope, bool rowLock); 49 49 static psArray *pzGetPendingCameras(pxConfig *config); 50 50 static psArray *pzArrayZip(psArray *arraySet, psS64 limit); … … 397 397 PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false); 398 398 PXOPT_LOOKUP_STR(uri, config->args, "-uri", true, false); 399 PXOPT_LOOKUP_BOOL(row_lock, config->args, "-row_lock", false); 399 400 400 401 // default values … … 423 424 } 424 425 425 if (!copydoneCompleteExp(config, exp_name, camera, telescope )) {426 if (!copydoneCompleteExp(config, exp_name, camera, telescope, row_lock)) { 426 427 // rollback 427 428 if (!psDBRollback(config->dbh)) { … … 445 446 } 446 447 447 static bool copydoneCompleteExp(pxConfig *config, const char *exp_name, const char *camera, const char *telescope )448 static bool copydoneCompleteExp(pxConfig *config, const char *exp_name, const char *camera, const char *telescope, bool row_lock) 448 449 { 449 450 // THIS FUNCTION MUST BE INVOKED FROM INSIDE A TRANSACTION!!! … … 463 464 PXOPT_LOOKUP_STR(label, config->args, "-label", false, false); 464 465 466 465 467 // find all exposures that have had all of their imfiles downloaded but do 466 468 // not appear in newExp … … 498 500 } 499 501 502 // query to get an excluse lock on all rows for this exposure in 503 // pzDownloadImfile 504 psString lock_query = NULL; 505 if (row_lock) { 506 lock_query = psStringCopy("SELECT * FROM pzDownloadImfile"); 507 } 508 500 509 if (psListLength(where->list)) { 501 510 psString whereClause = psDBGenerateWhereSQL(where, NULL); 502 511 psStringAppend(&query, " %s", whereClause); 512 if (row_lock) { 513 psStringAppend(&lock_query, " %s FOR UPDATE", whereClause); 514 } 503 515 psFree(whereClause); 504 516 } 505 517 psFree(where); 506 518 519 // aquire lock on pzDownloadImfile rows 520 // lock persists until a transaction is committed 521 if (row_lock) { 522 if (!p_psDBRunQuery(config->dbh, lock_query)) { 523 psError(PS_ERR_UNKNOWN, false, "database error"); 524 psFree(lock_query); 525 psFree(query); 526 return false; 527 } 528 psFree(lock_query); 529 } 530 531 // find completed exps 507 532 if (!p_psDBRunQuery(config->dbh, query)) { 508 533 psError(PS_ERR_UNKNOWN, false, "database error"); … … 855 880 } 856 881 857 if (!copydoneCompleteExp(config, NULL, NULL, NULL )) {882 if (!copydoneCompleteExp(config, NULL, NULL, NULL, true)) { 858 883 // rollback 859 884 if (!psDBRollback(config->dbh)) { -
trunk/ippTools/src/pztoolConfig.c
r18561 r20172 95 95 psMetadataAddStr(copydoneArgs, PS_LIST_TAIL, "-label", 0, "define the label for the chip stage", NULL); 96 96 psMetadataAddS16(copydoneArgs, PS_LIST_TAIL, "-code", 0, "set fault code", 0); 97 psMetadataAddBool(copydoneArgs, PS_LIST_TAIL, "-row_lock", 0, "lock pzDownImfile rows while advancing an exposure", false); 97 98 98 99 // -copied
Note:
See TracChangeset
for help on using the changeset viewer.
