Changeset 18531
- Timestamp:
- Jul 15, 2008, 9:40:36 AM (18 years ago)
- Location:
- trunk/ippTools/src
- Files:
-
- 3 edited
-
pstamptool.c (modified) (15 diffs)
-
pstamptool.h (modified) (1 diff)
-
pstamptoolConfig.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/pstamptool.c
r18377 r18531 2 2 * pstamptool.c 3 3 * 4 * Copyright (C) 2008 Joshua Hoblitt4 * Copyright (C) 2008 5 5 * 6 6 * This program is free software; you can redistribute it and/or modify it … … 39 39 static bool pendingReqMode(pxConfig *config); 40 40 static bool processedReqMode(pxConfig *config); 41 static bool revertReqMode(pxConfig *config); 41 42 static bool addJobMode(pxConfig *config); 42 43 static bool listJobMode(pxConfig *config); … … 71 72 MODECASE(PSTAMPTOOL_MODE_PENDINGREQ, pendingReqMode); 72 73 MODECASE(PSTAMPTOOL_MODE_PROCESSEDREQ, processedReqMode); 74 MODECASE(PSTAMPTOOL_MODE_REVERTREQ, revertReqMode); 73 75 MODECASE(PSTAMPTOOL_MODE_ADDJOB, addJobMode); 74 76 MODECASE(PSTAMPTOOL_MODE_LISTJOB, listJobMode); … … 258 260 } 259 261 260 #define MAGIC_STR "$REQ_ID"261 262 // Replace $REQ_ID with the value of the request id if present in the outFileset263 264 static bool265 updateFilesetID(pxConfig *config, psS64 req_id, psString outFileset)266 {267 char *magic;268 269 magic = strcasestr(outFileset, MAGIC_STR);270 if (magic == NULL) {271 return true;272 }273 274 // find part of the string after the magic275 char *after = magic + strlen(MAGIC_STR);276 277 if (*after == 0) {278 after = NULL;279 }280 281 psString converted = NULL;282 if (magic > outFileset) {283 int len = magic - outFileset;284 converted = psStringAlloc(len + 1);285 strncpy(converted, outFileset, len);286 converted[len] = 0;287 }288 289 psStringAppend(&converted, "%" PRId64, req_id);290 if (after) {291 psStringAppend(&converted, after);292 }293 294 if (!p_psDBRunQuery(config->dbh, "UPDATE pstampRequest set outFileset = '%s' WHERE req_id = %" PRId64,295 converted, req_id)) {296 psError(PS_ERR_UNKNOWN, false, "database error");297 return false;298 }299 300 return true;301 }302 303 262 static bool addReqMode(pxConfig *config) 304 263 { … … 316 275 return false; 317 276 } 318 psString outFileset = psMetadataLookupStr(&status, config->args, "-out_fileset");319 if (!status) {320 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -out_fileset");321 return false;322 }323 if (!outFileset) {324 psError(PS_ERR_UNKNOWN, true, "-out_fileset is required");325 return false;326 }327 277 328 278 // Data Store ID is optional … … 337 287 338 288 char *query ="INSERT INTO pstampRequest" 339 " (state, uri, ds_id, outFileset, resultsFile)" 340 " VALUES( 'new', '%s', %s, '%s', 0)"; 341 342 if (!p_psDBRunQuery(config->dbh, query, uri, ds_id, outFileset)) { 289 " (state, uri, ds_id, fault)" 290 " VALUES( 'new', '%s', %s, 0 )"; 291 if (!p_psDBRunQuery(config->dbh, query, uri, ds_id)) { 343 292 psError(PS_ERR_UNKNOWN, false, "database error"); 344 293 return false; … … 354 303 355 304 psS64 req_id = psDBLastInsertID(config->dbh); 356 if (!updateFilesetID(config, req_id, outFileset)) {357 psError(PS_ERR_UNKNOWN, false, "failed to update fileset id\n");358 return false;359 }360 305 361 306 printf("%" PRId64 "\n", req_id); … … 446 391 } 447 392 448 psString query = 393 psString query = NULL; 394 psStringAppend(&query, 449 395 "SELECT * FROM pstampRequest WHERE state = 'run' AND " 450 396 "(SELECT count(*) FROM pstampJob WHERE pstampJob.req_id = pstampRequest.req_id " 451 " AND pstampJob.state != 'stop') = 0" ;397 " AND pstampJob.state != 'stop') = 0" ); 452 398 453 399 // treat limit == 0 as "no limit" … … 594 540 return false; 595 541 } 596 if (!state) { 597 psError(PS_ERR_UNKNOWN, true, "-state is required"); 598 return false; 599 } 600 601 // XXX: check state for a legal value 602 603 char *query ="UPDATE pstampRequest" 604 " SET state = '%s'" 605 " WHERE req_id = '%s'"; 606 607 if (!p_psDBRunQuery(config->dbh, query, state, req_id)) { 542 psString outProduct = psMetadataLookupStr(&status, config->args, "-outProduct"); 543 if (!status) { 544 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -outProduct"); 545 return false; 546 } 547 psString fault = psMetadataLookupStr(&status, config->args, "-fault"); 548 if (!status) { 549 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -fault"); 550 return false; 551 } 552 553 psString uri = psMetadataLookupStr(&status, config->args, "-uri"); 554 if (!status) { 555 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -uri"); 556 return false; 557 } 558 psString name = psMetadataLookupStr(&status, config->args, "-name"); 559 if (!status) { 560 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -name"); 561 return false; 562 } 563 psString reqType = psMetadataLookupStr(&status, config->args, "-reqType"); 564 if (!status) { 565 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -reqType"); 566 return false; 567 } 568 569 psString query = NULL; 570 psStringAppend(&query, "UPDATE pstampRequest SET"); 571 572 char c = ' '; 573 if (state) { 574 psStringAppend(&query, "%c state = '%s'", c, state); 575 c = ','; 576 } 577 if (outProduct) { 578 psStringAppend(&query, "%c outProduct = '%s'", c, outProduct); 579 c = ','; 580 } 581 if (fault) { 582 psStringAppend(&query, "%c fault = %s", c, fault); 583 c = ','; 584 } 585 if (uri) { 586 psStringAppend(&query, "%c uri = '%s'", c, uri); 587 c = ','; 588 } 589 if (name) { 590 psStringAppend(&query, "%c name = '%s'", c, name); 591 c = ','; 592 } 593 if (reqType) { 594 psStringAppend(&query, "%c reqType = '%s'", c, reqType); 595 c = ','; 596 } 597 if (!state && !outProduct && !fault && !uri && !name && !reqType) { 598 psError(PS_ERR_UNKNOWN, true, "at least one of state, outProduct, fault, uri, name, and reqType must be specified"); 599 return false; 600 } 601 602 psStringAppend(&query, " WHERE req_id = '%s'", req_id); 603 604 if (!p_psDBRunQuery(config->dbh, query)) { 608 605 psError(PS_ERR_UNKNOWN, false, "database error"); 609 606 psFree(query); … … 612 609 613 610 psU64 affected = psDBAffectedRows(config->dbh); 614 if (affected != 1) { 611 // note zero is not an error 612 if (affected > 1) { 615 613 psError(PS_ERR_UNKNOWN, false, "should have affected one row but %" 616 614 PRIu64 " rows were modified", affected); … … 620 618 return true; 621 619 } 620 621 static bool revertReqMode(pxConfig *config) 622 { 623 bool status; 624 625 PS_ASSERT_PTR_NON_NULL(config, false); 626 627 psS64 req_id = psMetadataLookupS64(&status, config->args, "-req_id"); 628 if (!status) { 629 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -req_id"); 630 return false; 631 } 632 if (!req_id) { 633 psError(PS_ERR_UNKNOWN, true, "-req_id is required"); 634 return false; 635 } 636 637 638 printf("Revert request %" PRId64 "\n", req_id); 639 640 if (!p_psDBRunQuery(config->dbh, "DELETE FROM pstampJob where req_id = %" PRId64, req_id)) { 641 psError(PS_ERR_UNKNOWN, false, "database error"); 642 return false; 643 } 644 if (!p_psDBRunQuery(config->dbh, 645 "UPDATE pstampRequest set state ='new', fault=0 where req_id = %" PRId64, req_id)) { 646 psError(PS_ERR_UNKNOWN, false, "database error"); 647 return false; 648 } 649 650 return true; 651 } 652 622 653 static bool addJobMode(pxConfig *config) 623 654 { … … 646 677 } 647 678 679 psString rownum = psMetadataLookupStr(&status, config->args, "-rownum"); 680 if (!status) { 681 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -rownum"); 682 return false; 683 } 684 if (!rownum) { 685 psError(PS_ERR_UNKNOWN, true, "-rownum is required"); 686 return false; 687 } 648 688 psString uri = psMetadataLookupStr(&status, config->args, "-uri"); 649 689 if (!status) { … … 696 736 stateString = "run"; 697 737 } 698 psString result = psMetadataLookupStr(&status, config->args, "-result");699 if (!status) { 700 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for - result");701 return false; 702 } 703 if (! result) {704 result = "0";738 psString fault = psMetadataLookupStr(&status, config->args, "-fault"); 739 if (!status) { 740 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -fault"); 741 return false; 742 } 743 if (!fault) { 744 fault = "0"; 705 745 } 706 746 … … 709 749 if (stampJob) { 710 750 query ="INSERT INTO pstampJob" 711 " (req_id, state, jobType, uri, outputBase, result, args)"712 " VALUES( %s, '%s', '%s', '%s', '%s', %s, '%s')";751 " (req_id, rownum, state, jobType, uri, outputBase, fault, args)" 752 " VALUES( %s, '%s', '%s', '%s', '%s', '%s', %s, '%s')"; 713 753 } else { 714 754 query ="INSERT INTO pstampJob" 715 " (req_id, state, jobType, uri, outputBase, result)"716 " VALUES( %s, '%s', '%s', '%s', '%s', %s)";717 } 718 719 if (!p_psDBRunQuery(config->dbh, query, req_id, stateString, job_type, uri, outputBase, result, argString)) {755 " (req_id, rownum, state, jobType, uri, outputBase, fault)" 756 " VALUES( %s, '%s', '%s', '%s', '%s', '%s', %s)"; 757 } 758 759 if (!p_psDBRunQuery(config->dbh, query, req_id, rownum, stateString, job_type, uri, outputBase, fault, argString)) { 720 760 psError(PS_ERR_UNKNOWN, false, "database error"); 721 761 return false; … … 915 955 return false; 916 956 } 917 psString jobResult = psMetadataLookupStr(&status, config->args, "-result");918 if (!status) { 919 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for - result");920 return false; 921 } 922 923 psString resultStr = NULL;924 if (! jobResult) {925 resultStr = psStringCopy("");957 psString fault = psMetadataLookupStr(&status, config->args, "-fault"); 958 if (!status) { 959 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -fault"); 960 return false; 961 } 962 963 psString faultStr = NULL; 964 if (!fault) { 965 faultStr = psStringCopy(""); 926 966 } else { 927 psStringAppend(& resultStr, ", result = '%s'", jobResult);967 psStringAppend(&faultStr, ", fault = '%s'", fault); 928 968 } 929 969 930 931 // XXX: check state for a legal value932 933 970 char *query ="UPDATE pstampJob" 934 971 " SET state = '%s' %s" 935 972 " WHERE job_id = '%s'"; 936 973 937 if (!p_psDBRunQuery(config->dbh, query, state, resultStr, job_id)) {974 if (!p_psDBRunQuery(config->dbh, query, state, faultStr, job_id)) { 938 975 psError(PS_ERR_UNKNOWN, false, "database error"); 939 976 psFree(query); 940 977 return false; 941 978 } 942 psFree( resultStr);979 psFree(faultStr); 943 980 944 981 psU64 affected = psDBAffectedRows(config->dbh); -
trunk/ippTools/src/pstamptool.h
r18377 r18531 33 33 PSTAMPTOOL_MODE_PENDINGREQ, 34 34 PSTAMPTOOL_MODE_PROCESSEDREQ, 35 PSTAMPTOOL_MODE_REVERTREQ, 35 36 PSTAMPTOOL_MODE_ADDJOB, 36 37 PSTAMPTOOL_MODE_LISTJOB, -
trunk/ippTools/src/pstamptoolConfig.c
r18377 r18531 79 79 psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-ds_id", 0, 80 80 "define request ds_id", NULL); 81 psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-out_fileset", 0,82 "define request output_fileset", NULL);83 81 84 82 // -pendingreq … … 113 111 psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-state", 0, 114 112 "new state", NULL); 113 psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-outProduct", 0, 114 "define request outProduct", NULL); 115 psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-fault", 0, 116 "define request fault code", NULL); 117 psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-uri", 0, 118 "define the uri", NULL); 119 psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-name", 0, 120 "define the name", NULL); 121 psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-reqType", 0, 122 "define the reqType", NULL); 123 124 // -revertreq 125 psMetadata *revertreqArgs = psMetadataAlloc(); 126 psMetadataAddS64(revertreqArgs, PS_LIST_TAIL, "-req_id", 0, 127 "req_id for which to revert", 0); 115 128 116 129 // -addjob … … 120 133 psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-req_id", 0, 121 134 "define job req_id", NULL); 135 psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-rownum", 0, 136 "define job rownum", NULL); 122 137 psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-job_type", 0, 123 138 "define job job_type", NULL); … … 128 143 psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-state", 0, 129 144 "new state", NULL); 130 psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "- result", 0,145 psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-fault", 0, 131 146 "new result", NULL); 132 147 … … 157 172 psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-state", 0, 158 173 "new state", NULL); 159 psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "- result", 0,174 psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-fault", 0, 160 175 "new result", NULL); 161 176 … … 187 202 PXOPT_ADD_MODE("-listreq", "", PSTAMPTOOL_MODE_LISTREQ, listreqArgs); 188 203 PXOPT_ADD_MODE("-completedreq", "", PSTAMPTOOL_MODE_COMPLETEDREQ, completedreqArgs); 204 PXOPT_ADD_MODE("-revertreq", "", PSTAMPTOOL_MODE_REVERTREQ, revertreqArgs); 189 205 190 206 PXOPT_ADD_MODE("-addjob", "", PSTAMPTOOL_MODE_ADDJOB, addjobArgs);
Note:
See TracChangeset
for help on using the changeset viewer.
