Changeset 28938
- Timestamp:
- Aug 17, 2010, 10:42:12 AM (16 years ago)
- Location:
- trunk/ippTools/src
- Files:
-
- 3 edited
-
disttool.c (modified) (3 diffs)
-
disttool.h (modified) (1 diff)
-
disttoolConfig.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/disttool.c
r28536 r28938 34 34 static bool updaterunMode(pxConfig *config); 35 35 static bool revertrunMode(pxConfig *config); 36 static bool rerunMode(pxConfig *config); 36 37 static bool pendingcomponentMode(pxConfig *config); 37 38 static bool addprocessedcomponentMode(pxConfig *config); … … 83 84 MODECASE(DISTTOOL_MODE_UPDATERUN, updaterunMode); 84 85 MODECASE(DISTTOOL_MODE_REVERTRUN, revertrunMode); 86 MODECASE(DISTTOOL_MODE_RERUN, rerunMode); 85 87 MODECASE(DISTTOOL_MODE_PENDINGCOMPONENT, pendingcomponentMode); 86 88 MODECASE(DISTTOOL_MODE_ADDPROCESSEDCOMPONENT, addprocessedcomponentMode); … … 587 589 } 588 590 591 static bool rerunMode(pxConfig *config) 592 { 593 psMetadata *where = psMetadataAlloc(); 594 PXOPT_COPY_S64(config->args, where, "-dist_id", "distRun.dist_id", "=="); 595 PXOPT_COPY_STR(config->args, where, "-stage", "stage", "==");; 596 PXOPT_COPY_S64(config->args, where, "-stage_id", "stage_id", "=="); 597 PXOPT_COPY_STR(config->args, where, "-label", "label", "=="); 598 PXOPT_COPY_STR(config->args, where, "-data_group", "data_group", "=="); 599 600 // require data_group or dist_id to be supplied 601 PXOPT_LOOKUP_STR(data_group, config->args, "-data_group", true, false); 602 PXOPT_LOOKUP_S64(dist_id, config->args, "-dist_id", false, false); 603 if (!data_group && !dist_id) { 604 psError(PXTOOLS_ERR_CONFIG, true, "data_group or dist_id is required"); 605 return false; 606 } 607 PXOPT_LOOKUP_STR(set_label, config->args, "-set_label", false, false); 608 609 psString label_hook = psStringCopy(""); 610 if (set_label) { 611 psStringAppend(&label_hook, ", label = '%s'", set_label); 612 } 613 614 PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false); 615 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 616 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 617 618 619 // It might be useful to be able to query by the parameters of the underlying runs 620 621 if (!psListLength(where->list)) { 622 psFree(where); 623 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required"); 624 return false; 625 } 626 627 psString query = pxDataGet("disttool_rerun_select.sql"); 628 if (!query) { 629 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 630 if (!psDBRollback(config->dbh)) { 631 psError(PS_ERR_UNKNOWN, false, "database error"); 632 } 633 return false; 634 } 635 636 if (psListLength(where->list)) { 637 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 638 psStringAppend(&query, " AND %s", whereClause); 639 psFree(whereClause); 640 } 641 psFree(where); 642 643 if (limit) { 644 psString limitString = psDBGenerateLimitSQL(limit); 645 psStringAppend(&query, " %s", limitString); 646 psFree(limitString); 647 } 648 649 if (!p_psDBRunQuery(config->dbh, query)) { 650 psError(PS_ERR_UNKNOWN, false, "database error"); 651 psFree(query); 652 return false; 653 } 654 psFree(query); 655 656 psArray *output = p_psDBFetchResult(config->dbh); 657 if (!output) { 658 psError(PS_ERR_UNKNOWN, false, "database error"); 659 return false; 660 } 661 if (!psArrayLength(output)) { 662 psTrace("disttool", PS_LOG_INFO, "no rows found"); 663 psFree(output); 664 return true; 665 } 666 667 668 if (pretend) { 669 if (!ippdbPrintMetadatas(stdout, output, "distRunsToUpdate", true)) { 670 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 671 psFree(output); 672 return false; 673 } 674 psFree(output); 675 return true; 676 } 677 678 query = "DELETE FROM distComponent where dist_id = %" PRId64; 679 680 for (long i=0; i < psArrayLength(output); i++) { 681 psMetadata *md = output->data[i]; 682 psS64 dist_id = psMetadataLookupS64(NULL, md, "dist_id"); 683 684 if (!psDBTransaction(config->dbh)) { 685 psError(PS_ERR_UNKNOWN, false, "database error"); 686 return false; 687 } 688 689 if (!p_psDBRunQueryF(config->dbh, query, dist_id)) { 690 psError(PS_ERR_UNKNOWN, false, "database error"); 691 psFree(query); 692 if (!psDBRollback(config->dbh)) { 693 psError(PS_ERR_UNKNOWN, false, "database error"); 694 } 695 return false; 696 } 697 698 if (!p_psDBRunQueryF(config->dbh, 699 "UPDATE distRun SET state = 'new', fault=0 %s WHERE dist_id =%" PRId64, 700 label_hook, dist_id)) { 701 psError(PS_ERR_UNKNOWN, false, "database error"); 702 psFree(query); 703 if (!psDBRollback(config->dbh)) { 704 psError(PS_ERR_UNKNOWN, false, "database error"); 705 } 706 return false; 707 } 708 if (!psDBCommit(config->dbh)) { 709 psError(PS_ERR_UNKNOWN, false, "database error"); 710 return false; 711 } 712 printf("re-running distRun %" PRId64 "\n", dist_id); 713 } 714 715 psFree(output); 716 717 return true; 718 } 589 719 static bool revertrunMode(pxConfig *config) 590 720 { -
trunk/ippTools/src/disttool.h
r26193 r28938 28 28 DISTTOOL_MODE_UPDATERUN, 29 29 DISTTOOL_MODE_REVERTRUN, 30 DISTTOOL_MODE_RERUN, 30 31 DISTTOOL_MODE_PENDINGCOMPONENT, 31 32 DISTTOOL_MODE_ADDPROCESSEDCOMPONENT, -
trunk/ippTools/src/disttoolConfig.c
r28259 r28938 85 85 psMetadataAddS16(updaterunArgs, PS_LIST_TAIL, "-fault", 0, "define fault code", 0); 86 86 87 // -rerun 88 psMetadata *rerunArgs = psMetadataAlloc(); 89 psMetadataAddStr(rerunArgs, PS_LIST_TAIL, "-data_group", 0, "define data_group (required)", NULL); 90 psMetadataAddS64(rerunArgs, PS_LIST_TAIL, "-dist_id", 0, "search by dist_id", 0); 91 psMetadataAddStr(rerunArgs, PS_LIST_TAIL, "-stage", 0, "search by stage", NULL); 92 psMetadataAddS64(rerunArgs, PS_LIST_TAIL, "-stage_id", 0, "search by stage_id", 0); 93 psMetadataAddStr(rerunArgs, PS_LIST_TAIL, "-label", 0, "search by label", NULL); 94 psMetadataAddStr(rerunArgs, PS_LIST_TAIL, "-set_label", 0, "define new label", NULL); 95 psMetadataAddBool(rerunArgs, PS_LIST_TAIL, "-pretend", 0, "don't queue runs just display what would be selected", false); 96 psMetadataAddU64(rerunArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0); 97 psMetadataAddBool(rerunArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false); 98 87 99 // -revertrun 88 100 psMetadata *revertrunArgs = psMetadataAlloc(); … … 327 339 psMetadata *modes = psMetadataAlloc(); 328 340 329 PXOPT_ADD_MODE("-definebyquery", "", DISTTOOL_MODE_DEFINEBYQUERY, definebyqueryArgs); 330 PXOPT_ADD_MODE("-updaterun", "", DISTTOOL_MODE_UPDATERUN, updaterunArgs); 331 PXOPT_ADD_MODE("-revertrun", "", DISTTOOL_MODE_REVERTRUN, revertrunArgs); 341 PXOPT_ADD_MODE("-definebyquery", "define distribution run", DISTTOOL_MODE_DEFINEBYQUERY, definebyqueryArgs); 342 PXOPT_ADD_MODE("-updaterun", "update distRun", DISTTOOL_MODE_UPDATERUN, updaterunArgs); 343 PXOPT_ADD_MODE("-rerun", "reprocess a cleaned distribution run", DISTTOOL_MODE_RERUN, rerunArgs); 344 PXOPT_ADD_MODE("-revertrun", "revert distRun.faults", DISTTOOL_MODE_REVERTRUN, revertrunArgs); 332 345 PXOPT_ADD_MODE("-pendingcomponent", "", DISTTOOL_MODE_PENDINGCOMPONENT, pendingcomponentArgs); 333 346 PXOPT_ADD_MODE("-addprocessedcomponent", "", DISTTOOL_MODE_ADDPROCESSEDCOMPONENT, addprocessedcomponentArgs); 334 PXOPT_ADD_MODE("-revertcomponent", " ", DISTTOOL_MODE_REVERTCOMPONENT, revertcomponentArgs);347 PXOPT_ADD_MODE("-revertcomponent", "revert faulted components", DISTTOOL_MODE_REVERTCOMPONENT, revertcomponentArgs); 335 348 PXOPT_ADD_MODE("-processedcomponent", "", DISTTOOL_MODE_PROCESSEDCOMPONENT, processedcomponentArgs); 336 349 PXOPT_ADD_MODE("-toadvance", "", DISTTOOL_MODE_TOADVANCE, toadvanceArgs); … … 340 353 PXOPT_ADD_MODE("-updatefileset", "", DISTTOOL_MODE_UPDATEFILESET, updatefilesetArgs); 341 354 PXOPT_ADD_MODE("-listfilesets", "", DISTTOOL_MODE_LISTFILESETS, listfilesetsArgs); 342 PXOPT_ADD_MODE("-revertfileset", " ", DISTTOOL_MODE_REVERTFILESET, revertfilesetArgs);355 PXOPT_ADD_MODE("-revertfileset", "revert faulted filesets", DISTTOOL_MODE_REVERTFILESET, revertfilesetArgs); 343 356 PXOPT_ADD_MODE("-queuercrun", "", DISTTOOL_MODE_QUEUERCRUN, queuercrunArgs); 344 357 PXOPT_ADD_MODE("-updatercrun", "", DISTTOOL_MODE_UPDATERCRUN, updatercrunArgs);
Note:
See TracChangeset
for help on using the changeset viewer.
