Changeset 30586 for branches/czw_branch/20101203/ippTools/src/regtool.c
- Timestamp:
- Feb 11, 2011, 4:29:48 PM (15 years ago)
- Location:
- branches/czw_branch/20101203
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
ippTools/src/regtool.c (modified) (31 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/czw_branch/20101203
- Property svn:mergeinfo changed
-
branches/czw_branch/20101203/ippTools/src/regtool.c
r30118 r30586 51 51 static bool updatebyqueryMode(pxConfig *config); 52 52 53 static bool checkstatusMode(pxConfig *config); 54 53 55 static bool exportrunMode(pxConfig *config); 54 56 static bool importrunMode(pxConfig *config); … … 74 76 // imfile 75 77 MODECASE(REGTOOL_MODE_PENDINGIMFILE, pendingimfileMode); 76 MODECASE(REGTOOL_MODE_CHECKBURNTOOLIMFILE, checkburntoolimfileMode);77 MODECASE(REGTOOL_MODE_PENDINGBURNTOOLIMFILE, pendingburntoolimfileMode);78 MODECASE(REGTOOL_MODE_CHECKBURNTOOLIMFILE, checkburntoolimfileMode); 79 MODECASE(REGTOOL_MODE_PENDINGBURNTOOLIMFILE, pendingburntoolimfileMode); 78 80 MODECASE(REGTOOL_MODE_ADDPROCESSEDIMFILE, addprocessedimfileMode); 79 81 MODECASE(REGTOOL_MODE_PROCESSEDIMFILE, processedimfileMode); … … 90 92 MODECASE(REGTOOL_MODE_FINISHCOMPRESSEXP, finishcompressexpMode); 91 93 MODECASE(REGTOOL_MODE_CLEARDUPEXP, cleardupexpMode); 94 MODECASE(REGTOOL_MODE_CHECKSTATUS, checkstatusMode); 92 95 MODECASE(REGTOOL_MODE_EXPORTRUN, exportrunMode); 93 96 MODECASE(REGTOOL_MODE_IMPORTRUN, importrunMode); … … 95 98 psAbort("invalid option (this should not happen)"); 96 99 } 97 100 psTrace("regtool",9,"Attempting to free config\n"); 98 101 psFree(config); 99 102 pmConfigDone(); … … 180 183 } 181 184 185 186 187 182 188 static bool checkburntoolimfileMode(pxConfig *config) 183 189 { … … 187 193 PXOPT_LOOKUP_STR(exp_name, config->args, "-exp_name", true, false); 188 194 PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false); 189 PXOPT_LOOKUP_STR(date, config->args, "-date", true, false); 195 PXOPT_LOOKUP_STR(dateobs_begin, config->args, "-dateobs_begin", true, false); 196 PXOPT_LOOKUP_STR(dateobs_end, config->args, "-dateobs_end", true, false); 190 197 PXOPT_LOOKUP_S32(valid_burntool, config->args, "-valid_burntool", true, false); 191 198 // optional … … 201 208 psFree(query); 202 209 query = rep; 210 211 // convert regular class_id format to summitImfile.class_id format 212 rep = psStringCopy(class_id); 213 psFree(class_id); 214 class_id = rep; 215 216 psStringSubstitute(&class_id,"ota","XY"); 203 217 204 218 psStringSubstitute(&query,exp_name,"@EXP_NAME@"); 205 219 psStringSubstitute(&query,class_id,"@CLASS_ID@"); 206 psStringSubstitute(&query,date,"@DATE@"); 207 208 fprintf(stderr,"%s",query); 220 psStringSubstitute(&query,dateobs_begin,"@DATEOBS_BEGIN@"); 221 psStringSubstitute(&query,dateobs_end,"@DATEOBS_END@"); 222 223 // fprintf(stderr,"%s",query); 209 224 210 225 if (!p_psDBRunQuery(config->dbh, query)) { … … 215 230 } 216 231 psFree(query); 217 232 218 233 psArray *output = p_psDBFetchResult(config->dbh); 219 234 if (!output) { … … 227 242 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 228 243 } 229 244 230 245 return false; 231 246 } 232 247 if (!psArrayLength(output)) { 233 248 psTrace("regtool", PS_LOG_INFO, "no rows found"); 234 psFree(output);235 249 return true; 236 250 } … … 242 256 psMetadata *row = output->data[i]; 243 257 258 if (strcasecmp(psMetadataLookupStr(NULL,row,"download_state"),"drop") == 0) { 259 continue; 260 } 261 244 262 if ((psMetadataLookupS32(NULL,row,"is_downloaded") != 1)|| 245 (psMetadataLookupS32(NULL,row,"is_registered") != 1)) {263 (psMetadataLookupS32(NULL,row,"is_registered") != 1)) { 246 264 ok_to_burn = false; 247 265 } … … 255 273 already_burned = false; 256 274 } 257 275 258 276 if (previous_uri) { 259 277 psMetadataAddStr(row,PS_LIST_TAIL,"previous_uri",PS_META_REPLACE,"",previous_uri); … … 264 282 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); 265 283 } 266 284 267 285 // negate simple so the default is true 268 286 if (!ippdbPrintMetadatas(stdout, output, "regBurntoolImfile", !simple)) { … … 271 289 return false; 272 290 } 273 291 274 292 psFree(output); 275 293 276 294 277 295 return(true); 278 296 279 297 } 280 298 … … 284 302 285 303 // required 286 PXOPT_LOOKUP_STR(date, config->args, "-date", true, false); 304 PXOPT_LOOKUP_STR(dateobs_begin, config->args, "-dateobs_begin", true, false); 305 PXOPT_LOOKUP_STR(dateobs_end, config->args, "-dateobs_end", true, false); 287 306 PXOPT_LOOKUP_S32(valid_burntool, config->args, "-valid_burntool", true, false); 288 307 // optional … … 297 316 psFree(query); 298 317 query = rep; 299 300 psStringSubstitute(&query,date,"@DATE@"); 301 302 // fprintf(stderr,"%s",query); 318 319 psStringSubstitute(&query,dateobs_begin,"@DATEOBS_BEGIN@"); 320 psStringSubstitute(&query,dateobs_end,"@DATEOBS_END@"); 321 322 // fprintf(stderr,"%s",query); 303 323 304 324 if (!p_psDBRunQuery(config->dbh, query)) { … … 309 329 } 310 330 psFree(query); 311 331 312 332 psArray *output = p_psDBFetchResult(config->dbh); 313 333 if (!output) { … … 321 341 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 322 342 } 323 343 324 344 return false; 325 345 } 346 347 // fprintf (stderr, "found %ld rows\n", output->n); 326 348 if (!psArrayLength(output)) { 327 349 psTrace("regtool", PS_LOG_INFO, "no rows found"); … … 337 359 psString this_class_id = NULL; 338 360 psArray *results = psArrayAllocEmpty(60); // List of suggested imfiles to burntool. 339 361 340 362 for (long i = 0; i < output->n; i++) { 341 363 psMetadata *row = output->data[i]; 342 364 365 if (strcasecmp(psMetadataLookupStr(NULL,row,"download_state"),"drop") == 0) { 366 continue; 367 } 368 369 bool status = false; 370 char *tmp_id = psMetadataLookupStr(&status,row,"summit_class_id"); 371 if (!status) { 372 // fprintf (stderr, "incomplete on %s\n", psMetadataLookupStr(NULL,row,"exp_name")); 373 continue; 374 } 375 343 376 // Add the information about this row and the previous, if it exists. 344 377 // Write the class_id stuff for debugging. 345 this_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 346 psStringSubstitute(&this_class_id,"XY","ota"); 378 // this_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 379 this_class_id = psStringCopy(tmp_id); 380 347 381 psMetadataAddStr(row,PS_LIST_TAIL,"this_class_id",PS_META_REPLACE,"",this_class_id); 382 348 383 if (previous_class_id) { 349 384 psMetadataAddStr(row,PS_LIST_TAIL,"previous_class_id",PS_META_REPLACE,"",previous_class_id); … … 353 388 continue; 354 389 } 390 391 if (0 && !strcmp(this_class_id, "ota44")) { 392 printf("STAT 1: %s (%d %d) %d %d %d\n", 393 this_class_id, 394 ok_to_burn, already_burned, 395 psMetadataLookupS32(NULL,row,"burntool_state"), 396 psMetadataLookupS32(NULL,row,"is_registered"), 397 psMetadataLookupS32(NULL,row,"is_downloaded")); 398 } 399 355 400 // Determine if we've crossed a class_id boundary, as this resets the bits. 356 401 if (previous_class_id) { 357 402 if (strcmp(this_class_id,previous_class_id) != 0) { 358 ok_to_burn = true; 359 already_burned = true; 360 previous_uri = NULL; 403 ok_to_burn = true; 404 already_burned = true; 405 previous_uri = NULL; 406 // fprintf (stderr, "crossed boundary: %s : %s to %s\n", psMetadataLookupStr(NULL,row,"exp_name"), previous_class_id, this_class_id); 361 407 } 362 408 } … … 364 410 // Write the URIs as well. 365 411 this_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Duplicate, but helpful for my debugging. 366 psMetadataAddStr(row,PS_LIST_TAIL,"this_uri",PS_META_REPLACE,"",this_uri); 412 psMetadataAddStr(row,PS_LIST_TAIL,"this_uri",PS_META_REPLACE,"",this_uri); 367 413 if (previous_uri) { 368 414 psMetadataAddStr(row,PS_LIST_TAIL,"previous_uri",PS_META_REPLACE,"",previous_uri); … … 372 418 // Convert bits of the SQL query into booleans describing the data state 373 419 if ((psMetadataLookupS32(NULL,row,"is_downloaded") != 1)|| 374 (psMetadataLookupS32(NULL,row,"is_registered") != 1)) {375 // printf("I claim this isn't downloaded or registered? %s %s\n",this_uri,this_class_id);376 ok_to_burn = false;420 (psMetadataLookupS32(NULL,row,"is_registered") != 1)) { 421 // printf("I claim this isn't downloaded or registered? %s %s\n",this_uri,this_class_id); 422 ok_to_burn = false; 377 423 } 378 424 if (already_burned == false) { 379 //printf("already_burned looks false %s %s\n",this_uri,this_class_id);380 ok_to_burn = false;425 // printf("already_burned looks false %s %s\n",this_uri,this_class_id); 426 ok_to_burn = false; 381 427 } 382 428 if (abs(psMetadataLookupS32(NULL,row,"burntool_state")) == valid_burntool) { … … 391 437 // Check the uri for this exposure 392 438 if (!this_uri) { 393 ok_to_burn = false; 394 already_burned = false; 395 396 // Save this round for next round. 397 psFree(previous_class_id); 398 psFree(previous_uri); 399 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 400 psStringSubstitute(&previous_class_id,"XY","ota"); 401 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 402 continue; 403 } 404 405 // printf("STATUS: %s %s %s %s (%d %d) %d %d %d\n",this_uri,previous_uri,this_class_id,previous_class_id,ok_to_burn,already_burned,psMetadataLookupS32(NULL,row,"burntool_state"),psMetadataLookupS32(NULL,row,"is_registered"),psMetadataLookupS32(NULL,row,"is_downloaded")); 406 407 // If the state of this imfile is not "pending_burntool" then we can't burn it. 439 ok_to_burn = false; 440 already_burned = false; 441 442 // fprintf (stderr, "missing uri: %s %s\n", psMetadataLookupStr(NULL,row,"exp_name"), this_class_id); 443 444 // Save this round for next round. 445 psFree(previous_class_id); 446 psFree(previous_uri); 447 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"summit_class_id")); 448 psStringSubstitute(&previous_class_id,"ota","XY"); 449 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 450 continue; 451 } 452 453 if (0 && !strcmp(this_class_id, "ota44")) { 454 printf("STATUS: %s %s %s %s (%d %d) %d %d %d\n",this_uri,previous_uri,this_class_id,previous_class_id,ok_to_burn,already_burned,psMetadataLookupS32(NULL,row,"burntool_state"),psMetadataLookupS32(NULL,row,"is_registered"),psMetadataLookupS32(NULL,row,"is_downloaded")); 455 } 456 // If the state of this imfile is not "pending_burntool" then we can't burn it. 408 457 if (!ignore_state) { 409 458 psString imfile_state = psMetadataLookupStr(NULL,row,"imfile_state"); 410 459 411 460 if (!imfile_state) { // imfile state is NULL, so we probably aren't registered. 412 ok_to_burn = false; 413 414 // Save this round for next round. 415 psFree(previous_class_id); 416 psFree(previous_uri); 417 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 418 psStringSubstitute(&previous_class_id,"XY","ota"); 419 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 420 continue; 461 ok_to_burn = false; 462 463 // fprintf (stderr, "missing imfile_state: %s %s\n", psMetadataLookupStr(NULL,row,"exp_name"), this_class_id); 464 465 // Save this round for next round. 466 psFree(previous_class_id); 467 psFree(previous_uri); 468 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"summit_class_id")); 469 psStringSubstitute(&previous_class_id,"ota","XY"); 470 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 471 continue; 421 472 } 422 if (strcmp("pending_burntool",imfile_state) != 0) { // Probably the state is full, do not twiddle states 423 // Save this round for next round. 424 psFree(previous_class_id); 425 psFree(previous_uri); 426 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 427 psStringSubstitute(&previous_class_id,"XY","ota"); 428 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 429 continue; 473 if (strcmp("pending_burntool",imfile_state) != 0) { // Probably the state is full, do not twiddle states 474 475 if (0 && strcmp(imfile_state, "full")) { 476 fprintf (stderr, "not pending nor full: %s %s %s\n", psMetadataLookupStr(NULL,row,"exp_name"), this_class_id, imfile_state); 477 } 478 479 // Save this round for next round. 480 psFree(previous_class_id); 481 psFree(previous_uri); 482 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"summit_class_id")); 483 psStringSubstitute(&previous_class_id,"ota","XY"); 484 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 485 continue; 430 486 } 431 487 } 432 488 433 489 // Determine if we've already suggested an entry for this ota, and if not, copy this 434 490 // suggestion into our output result list. … … 437 493 psFree(previous_class_id); 438 494 psFree(previous_uri); 439 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row," tmp_class_id"));440 psStringSubstitute(&previous_class_id," XY","ota");441 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 495 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"summit_class_id")); 496 psStringSubstitute(&previous_class_id,"ota","XY"); 497 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 442 498 continue; 443 499 } … … 448 504 psFree(previous_class_id); 449 505 psFree(previous_uri); 450 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row," tmp_class_id"));451 psStringSubstitute(&previous_class_id," XY","ota");452 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 453 } 454 506 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"summit_class_id")); 507 psStringSubstitute(&previous_class_id,"ota","XY"); 508 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 509 } 510 455 511 // negate simple so the default is true 456 512 if (!ippdbPrintMetadatas(stdout, results, "regPendingBurntoolImfile", !simple)) { … … 460 516 return false; 461 517 } 462 518 463 519 psFree(output); 464 520 psFree(results); 465 521 466 522 467 523 return(true); 468 469 } 470 471 524 525 } 526 527 472 528 473 529 static bool addprocessedimfileMode(pxConfig *config) … … 545 601 PXOPT_LOOKUP_STR(md5sum, config->args, "-md5sum", false, false); 546 602 PXOPT_LOOKUP_BOOL(video_cells, config->args, "-video_cells", false); 547 603 548 604 PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false); 549 605 PXOPT_LOOKUP_S16(quality, config->args, "-quality", false, false); … … 618 674 bytes, 619 675 md5sum, 620 video_cells, 621 0 // burntool_state676 0, // burntool_state 677 video_cells 622 678 )) { 623 679 psError(PS_ERR_UNKNOWN, false, "database error"); … … 771 827 psStringAppend(&query, " AND %s", whereClause); 772 828 psFree(whereClause); 773 } else {774 psFree(where);775 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");776 return false;777 829 } 778 830 psFree(where); … … 806 858 PXOPT_LOOKUP_STR(set_state, config->args, "-set_state", false, false); 807 859 808 if ((fault == INT16_MAX) && !isfinite(burntool_state) && !(set_state)) {860 if ((fault == INT16_MAX) && (burntool_state == INT16_MAX) && !set_state) { 809 861 psError(PS_ERR_UNKNOWN, false, "one of -fault or -burntool_state or -set_state must be selected"); 810 862 return false; 811 863 } 812 if ((fault != INT16_MAX) && isfinite(burntool_state)) {864 if ((fault != INT16_MAX) && (burntool_state != INT16_MAX)) { 813 865 psError(PS_ERR_UNKNOWN, false, "only one of -fault or -burntool_state must be selected"); 814 866 return false; … … 1312 1364 if (!pxchipQueueByExpTag(config, 1313 1365 exp_id, 1314 chip_workdir,1366 chip_workdir, 1315 1367 label, 1316 data_group,1317 dist_group,1368 data_group, 1369 dist_group, 1318 1370 reduction, 1319 1371 NULL, // expgroup … … 1831 1883 } 1832 1884 1885 static bool checkstatusMode(pxConfig *config) 1886 { 1887 PS_ASSERT_PTR_NON_NULL(config,false); 1888 1889 // required 1890 PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false); 1891 // Conditionally required 1892 PXOPT_LOOKUP_STR(dateobs_begin, config->args, "-dateobs_begin", false, false); 1893 PXOPT_LOOKUP_STR(dateobs_end, config->args, "-dateobs_end", false, false); 1894 PXOPT_LOOKUP_STR(date, config->args, "-date", false, false); 1895 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 1896 1897 psString query = pxDataGet("regtool_checkstatus.sql"); 1898 if (!query) { 1899 psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement"); 1900 return false; 1901 } 1902 psString rep = psStringCopy(query); 1903 psFree(query); 1904 query = rep; 1905 psStringSubstitute(&class_id,"ota","XY"); 1906 psStringSubstitute(&query,class_id,"@CLASS_ID@"); 1907 1908 if (!date) { 1909 if (!dateobs_begin || !dateobs_end) { 1910 psError(PXTOOLS_ERR_CONFIG, false, "Either -date or -dateobs_begin -dateobs_end is required"); 1911 psFree(query); 1912 return false; 1913 } 1914 psStringAppend(&query," AND summitExp.dateobs >= '%s' AND summitExp.dateobs <= '%s' ", 1915 dateobs_begin,dateobs_end); 1916 } 1917 else { 1918 psStringAppend(&query," AND summitExp.dateobs >= '%sT00:00:00' AND summitExp.dateobs <= '%sT23:59:59' ", 1919 date,date); 1920 } 1921 1922 psStringAppend(&query," ORDER BY summitExp.dateobs "); 1923 1924 if (!p_psDBRunQuery(config->dbh, query)) { 1925 // XXX PS_EXIT_PROG_ERROR (incorrect SQL) or SYS_ERROR (database comms) 1926 psError(PXTOOLS_ERR_PROG, false, "database error"); 1927 psFree(query); 1928 return false; 1929 } 1930 psFree(query); 1931 1932 psArray *output = p_psDBFetchResult(config->dbh); 1933 if (!output) { 1934 psErrorCode err = psErrorCodeLast(); 1935 switch (err) { 1936 case PS_ERR_DB_CLIENT: 1937 psError(PXTOOLS_ERR_SYS, false, "database error"); 1938 case PS_ERR_DB_SERVER: 1939 psError(PXTOOLS_ERR_PROG, false, "database error"); 1940 default: 1941 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 1942 } 1943 1944 return false; 1945 } 1946 if (!psArrayLength(output)) { 1947 psTrace("regtool", PS_LOG_INFO, "no rows found"); 1948 return true; 1949 } 1950 1951 if (!ippdbPrintMetadatas(stdout, output, "regCheckStatus", !simple)) { 1952 psError(PXTOOLS_ERR_PROG, false, "failed to print array"); 1953 psFree(output); 1954 return false; 1955 } 1956 1957 psFree(output); 1958 1959 return(true); 1960 } 1961 1833 1962 bool exportrunMode(pxConfig *config) 1834 1963 {
Note:
See TracChangeset
for help on using the changeset viewer.
