Changeset 30417
- Timestamp:
- Jan 28, 2011, 2:31:03 PM (15 years ago)
- Location:
- tags/ipp-20101215/ippTools
- Files:
-
- 6 edited
- 3 copied
-
share (modified) (1 prop)
-
share/Makefile.am (modified) (2 diffs)
-
share/magictool_setgotocleaned.sql (copied) (copied from trunk/ippTools/share/magictool_setgotocleaned.sql )
-
share/magictool_tocleanup.sql (copied) (copied from trunk/ippTools/share/magictool_tocleanup.sql )
-
share/pubtool_pending.sql (modified) (1 prop)
-
share/regtool_checkstatus.sql (copied) (copied from trunk/ippTools/share/regtool_checkstatus.sql )
-
src/magictool.c (modified) (7 diffs, 1 prop)
-
src/magictool.h (modified) (1 diff, 1 prop)
-
src/magictoolConfig.c (modified) (2 diffs, 1 prop)
Legend:
- Unmodified
- Added
- Removed
-
tags/ipp-20101215/ippTools/share
- Property svn:mergeinfo changed
/trunk/ippTools/share merged: 30352,30373,30377,30387
- Property svn:mergeinfo changed
-
tags/ipp-20101215/ippTools/share/Makefile.am
r30049 r30417 246 246 magictool_exposure.sql \ 247 247 magictool_setfull.sql \ 248 magictool_setgotocleaned.sql \ 249 magictool_tocleanup.sql \ 248 250 magicdstool_clearstatefaults.sql \ 249 251 magicdstool_change_file_data_state.sql \ … … 333 335 regtool_updatebyqueryimfile.sql \ 334 336 regtool_pendingburntoolimfile.sql \ 337 regtool_checkstatus.sql \ 335 338 stacktool_associationdefine_select.sql \ 336 339 stacktool_definebyquery_insert.sql \ -
tags/ipp-20101215/ippTools/share/pubtool_pending.sql
- Property svn:mergeinfo changed (with no actual effect on merging)
-
tags/ipp-20101215/ippTools/src/magictool.c
- Property svn:mergeinfo set to
r30403 r30417 49 49 static bool censorrunMode(pxConfig *config); 50 50 static bool exposureMode(pxConfig *config); 51 static bool setgotocleanedMode(pxConfig *config); 52 static bool tocleanupMode(pxConfig *config); 53 static bool setworkdirstateMode(pxConfig *config); 51 54 52 55 static bool setmagicRunState(pxConfig *config, psS64 magic_id, const char *state, psString setString); … … 89 92 MODECASE(MAGICTOOL_MODE_CENSORRUN, censorrunMode); 90 93 MODECASE(MAGICTOOL_MODE_EXPOSURE, exposureMode); 94 MODECASE(MAGICTOOL_MODE_SETGOTOCLEANED, setgotocleanedMode); 95 MODECASE(MAGICTOOL_MODE_TOCLEANUP, tocleanupMode); 96 MODECASE(MAGICTOOL_MODE_SETWORKDIRSTATE, setworkdirstateMode); 91 97 default: 92 98 psAbort("invalid option (this should not happen)"); … … 837 843 psFree(where); 838 844 839 840 // First look for tree nodes that need to be processed 845 // First look for branch nodes that need to be processed. 841 846 // These get priority over skycells because they are from runs 842 // that are already in progress 847 // that are already in progress and there are fewer of them. 848 // When we looked for skycells first we got starved. 843 849 844 850 // first find incomplete magicRuns … … 849 855 } 850 856 851 // we limit the query even though it is cheap (only magic_id is selected) 852 853 // XXX: The following comment no longer applies 854 // XXX: if the first 1000 unfinished magicRuns have no ready nodes 855 // that haven't faulted, later runs won't get returned even though 856 // they have work to do. When we used a limit of 100 we actually ran 857 // into this problem. Since we're using labels a limit of 1000 will 858 // probably be ok. 857 // Find outstanding magicRuns in new state. 858 // We limit the query, but this is problematic. In practice do 859 // we need to? 860 // XXX: If the first 1000 magicRuns have no branch nodes ready 861 // but higher runs do we they won't be noticed. 862 // Perhaps have this limit be an argument. 859 863 { 860 864 psString limitString = psDBGenerateLimitSQL( 1000 ); … … 886 890 return false; 887 891 } 892 888 893 if (!psArrayLength(magicRuns)) { 889 // no magicRuns pending. Nothing to do894 // no pending magicRuns nothing to do 890 895 psTrace("magictool", PS_LOG_INFO, "no rows found"); 891 psFree(magicRuns);892 896 return true; 893 897 } 894 895 898 psArray *output = psArrayAllocEmpty(100); 896 // the following is indented because I removed a conditional and I decided not to shift over 899 900 { 897 901 query = pxDataGet("magictool_toprocess_tree.sql"); 898 902 if (!query) { … … 994 998 } 995 999 } 996 // the above code is indented because I removed a conditional block and I decided not to shift it over997 998 // look for "inputs" that need to processed1000 } 1001 1002 // look for "inputs" (skycells) that need to processed 999 1003 query = pxDataGet("magictool_toprocess_inputs.sql"); 1000 1004 if (!query) { … … 1633 1637 return true; 1634 1638 } 1639 static bool setgotocleanedMode(pxConfig *config) 1640 { 1641 PS_ASSERT_PTR_NON_NULL(config, false); 1642 1643 psMetadata *where = psMetadataAlloc(); 1644 PXOPT_COPY_S64(config->args, where, "-magic_id", "magicRun.magic_id", "=="); 1645 PXOPT_COPY_S64(config->args, where, "-exp_id", "magicRun.exp_id", "=="); 1646 PXOPT_COPY_STR(config->args, where, "-label", "magicRun.label", "LIKE"); 1647 PXOPT_COPY_STR(config->args, where, "-data_group", "magicRun.data_group", "LIKE"); 1648 1649 PXOPT_LOOKUP_STR(set_label, config->args, "-set_label", false, false); 1650 1651 psString query = psStringCopy("UPDATE magicRun SET workdir_state = 'goto_cleaned'\n"); 1652 if (set_label) { 1653 psStringAppend(&query, ", label = '%s'", set_label); 1654 } 1655 // This mode doubles as a revert function for cleanup errors 1656 PXOPT_LOOKUP_BOOL(clearfault, config->args, "-clearfault", false); 1657 if (!clearfault) { 1658 psStringAppend(&query, "WHERE workdir_state = 'dirty'"); 1659 } else { 1660 psStringAppend(&query, "WHERE workdir_state = 'error_cleaned'"); 1661 } 1662 psStringAppend(&query, "\nAND (magicRun.state = 'full' OR magicRun.state = 'drop')"); 1663 1664 // Require search parameters unless we're just clearing faults 1665 if (psListLength(where->list)) { 1666 psString clause = psDBGenerateWhereConditionSQL(where, NULL); 1667 psStringAppend(&query, "\nAND %s", clause); 1668 psFree(clause); 1669 psFree(where); 1670 } else if ( !clearfault) { 1671 psError(PS_ERR_UNKNOWN, false, "search parameters are required"); 1672 psFree(where); 1673 return false; 1674 } 1675 1676 if (!p_psDBRunQuery(config->dbh, query)) { 1677 psError(PS_ERR_UNKNOWN, false, "database error"); 1678 psFree(query); 1679 return false; 1680 } 1681 psFree(query); 1682 1683 return true; 1684 } 1685 1686 static bool setworkdirstateMode(pxConfig *config) 1687 { 1688 PS_ASSERT_PTR_NON_NULL(config, false); 1689 1690 // required 1691 PXOPT_LOOKUP_S64(magic_id, config->args, "-magic_id", true, false); 1692 PXOPT_LOOKUP_STR(workdir_state, config->args, "-set_workdir_state", true, false); 1693 1694 if (strcmp(workdir_state, "cleaned") && strcmp(workdir_state, "error_cleaned")) { 1695 psError(PS_ERR_UNKNOWN, true, "%s is not a valid value for workdir_state", workdir_state); 1696 return false; 1697 } 1698 1699 psString query = NULL; 1700 psStringAppend(&query, "UPDATE magicRun SET workdir_state = '%s' WHERE magic_id = %" PRId64, workdir_state, magic_id); 1701 1702 if (!p_psDBRunQuery(config->dbh, query)) { 1703 psError(PS_ERR_UNKNOWN, false, "database error"); 1704 psFree(query); 1705 return false; 1706 } 1707 psFree(query); 1708 1709 return true; 1710 } 1711 static bool tocleanupMode(pxConfig *config) 1712 { 1713 PS_ASSERT_PTR_NON_NULL(config, false); 1714 1715 psMetadata *where = psMetadataAlloc(); 1716 PXOPT_COPY_S64(config->args, where, "-magic_id", "magicRun.magic_id", "=="); 1717 pxAddLabelSearchArgs (config, where, "-label", "magicRun.label", "=="); 1718 pxAddLabelSearchArgs (config, where, "-data_group", "magicRun.data_group", "=="); 1719 1720 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 1721 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 1722 1723 psString query = pxDataGet("magictool_tocleanup.sql"); 1724 if (!query) { 1725 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1726 return false; 1727 } 1728 1729 if (psListLength(where->list)) { 1730 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1731 psStringAppend(&query, " AND %s", whereClause); 1732 psFree(whereClause); 1733 } 1734 psFree(where); 1735 1736 psStringAppend(&query, "\nORDER BY priority DESC, magic_id"); 1737 1738 // treat limit == 0 as "no limit" 1739 if (limit) { 1740 psString limitString = psDBGenerateLimitSQL(limit); 1741 psStringAppend(&query, " %s", limitString); 1742 psFree(limitString); 1743 } 1744 1745 if (!p_psDBRunQuery(config->dbh, query)) { 1746 psError(PS_ERR_UNKNOWN, false, "database error"); 1747 psFree(query); 1748 return false; 1749 } 1750 psFree(query); 1751 1752 psArray *output = p_psDBFetchResult(config->dbh); 1753 if (!output) { 1754 psErrorCode err = psErrorCodeLast(); 1755 switch (err) { 1756 case PS_ERR_DB_CLIENT: 1757 psError(PXTOOLS_ERR_SYS, false, "database error"); 1758 case PS_ERR_DB_SERVER: 1759 psError(PXTOOLS_ERR_PROG, false, "database error"); 1760 default: 1761 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 1762 } 1763 1764 return false; 1765 } 1766 if (!psArrayLength(output)) { 1767 psTrace("magictool", PS_LOG_INFO, "no rows found"); 1768 psFree(output); 1769 return true; 1770 } 1771 1772 if (psArrayLength(output)) { 1773 // negative simple so the default is true 1774 if (!ippdbPrintMetadatas(stdout, output, "tocleanup", !simple)) { 1775 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1776 psFree(output); 1777 return false; 1778 } 1779 } 1780 1781 psFree(output); 1782 1783 return true; 1784 } -
tags/ipp-20101215/ippTools/src/magictool.h
- Property svn:mergeinfo set to
r27982 r30417 43 43 MAGICTOOL_MODE_CENSORRUN, 44 44 MAGICTOOL_MODE_EXPOSURE, 45 MAGICTOOL_MODE_SETGOTOCLEANED, 46 MAGICTOOL_MODE_TOCLEANUP, 47 MAGICTOOL_MODE_SETWORKDIRSTATE, 45 48 } MAGICtoolMode; 46 49 -
tags/ipp-20101215/ippTools/src/magictoolConfig.c
- Property svn:mergeinfo set to
r29495 r30417 178 178 psMetadataAddBool(exposureArgs, PS_LIST_TAIL, "-inverse", 0, "select the inverse subtraction?", false); 179 179 psMetadataAddBool(exposureArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false); 180 181 // -setgotocleaned 182 psMetadata *setgotocleanedArgs = psMetadataAlloc(); 183 psMetadataAddS64(setgotocleanedArgs, PS_LIST_TAIL, "-magic_id", 0, "select by magictool ID", 0); 184 psMetadataAddS64(setgotocleanedArgs, PS_LIST_TAIL, "-exp_id", 0, "select by exposure ID)", 0); 185 psMetadataAddStr(setgotocleanedArgs, PS_LIST_TAIL, "-label", 0, "select by label", NULL); 186 psMetadataAddStr(setgotocleanedArgs, PS_LIST_TAIL, "-data_group", 0, "select by data_group", NULL); 187 psMetadataAddStr(setgotocleanedArgs, PS_LIST_TAIL, "-set_label", 0, "set new label", NULL); 188 psMetadataAddBool(setgotocleanedArgs, PS_LIST_TAIL, "-clearfault", 0, "clear cleanup errors", NULL); 189 190 // -tocleanup 191 psMetadata *tocleanupArgs = psMetadataAlloc(); 192 psMetadataAddS64(tocleanupArgs, PS_LIST_TAIL, "-magic_id", 0, "search by magic ID", 0); 193 psMetadataAddStr(tocleanupArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by label", NULL); 194 psMetadataAddStr(tocleanupArgs, PS_LIST_TAIL, "-data_group", PS_META_DUPLICATE_OK, "search by label", NULL); 195 psMetadataAddU64(tocleanupArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0); 196 psMetadataAddBool(tocleanupArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false); 197 198 // -setworkdirstate 199 psMetadata *setworkdirstateArgs = psMetadataAlloc(); 200 psMetadataAddS64(setworkdirstateArgs, PS_LIST_TAIL, "-magic_id", 0, "select by magictool ID (required)", 0); 201 psMetadataAddStr(setworkdirstateArgs, PS_LIST_TAIL, "-set_workdir_state", 0, "new workdir_state (required)", 0); 180 202 181 203 psFree(now); … … 202 224 PXOPT_ADD_MODE("-censorrun", "", MAGICTOOL_MODE_CENSORRUN, censorrunArgs); 203 225 PXOPT_ADD_MODE("-exposure", "", MAGICTOOL_MODE_EXPOSURE, exposureArgs); 226 PXOPT_ADD_MODE("-setgotocleaned", "", MAGICTOOL_MODE_SETGOTOCLEANED, setgotocleanedArgs); 227 PXOPT_ADD_MODE("-tocleanup", "", MAGICTOOL_MODE_TOCLEANUP, tocleanupArgs); 228 PXOPT_ADD_MODE("-setworkdirstate", "", MAGICTOOL_MODE_SETWORKDIRSTATE, setworkdirstateArgs); 204 229 205 230 if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
Note:
See TracChangeset
for help on using the changeset viewer.
