IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 29290


Ignore:
Timestamp:
Sep 30, 2010, 3:29:17 PM (16 years ago)
Author:
bills
Message:

from trunk add fault_count columns to pstampJob and pstampDependent.
Don't revert after more than 5 faults

Location:
tags/ipp-20100823
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • tags/ipp-20100823/dbconfig/pstamp.md

    r28294 r29290  
    4646    options     S64         64
    4747    dep_id      S64         0
     48    fault_count S32         0
    4849END
    4950
     
    5960    outdir      STR         255
    6061    fault       S16         0
     62    fault_count S32         0
    6163END
    6264
  • tags/ipp-20100823/ippTools/share/pstamptool_revertdependent.sql

    r28146 r29290  
    33    JOIN pstampRequest USING(req_id)
    44SET pstampDependent.fault = 0
     5-- fault count hook %s
    56WHERE pstampDependent.state = 'new'
    67    AND (pstampDependent.fault > 0)
  • tags/ipp-20100823/ippTools/share/pstamptool_revertjob.sql

    r26213 r29290  
    22    JOIN pstampRequest USING(req_id)
    33SET pstampJob.fault = 0
     4 -- clear fault count clause goes here %s
    45WHERE  pstampRequest.state = 'run'
    56    AND pstampJob.state = 'run'
  • tags/ipp-20100823/ippTools/src/pstamptool.c

    r29146 r29290  
    4646static bool pendingjobMode(pxConfig *config);
    4747static bool updatejobMode(pxConfig *config);
     48static bool stopdependentjobMode(pxConfig *config);
    4849static bool revertjobMode(pxConfig *config);
    4950static bool addprojectMode(pxConfig *config);
     
    6364    break;
    6465
     66// XXX make this a configurable parameter
     67#define PSTAMP_MAX_JOB_FAULTS 5
     68#define PSTAMP_MAX_DEP_FAULTS 5
    6569
    6670int main(int argc, char **argv)
     
    8993        MODECASE(PSTAMPTOOL_MODE_PENDINGJOB, pendingjobMode);
    9094        MODECASE(PSTAMPTOOL_MODE_UPDATEJOB, updatejobMode);
     95        MODECASE(PSTAMPTOOL_MODE_STOPDEPENDENTJOB, stopdependentjobMode);
    9196        MODECASE(PSTAMPTOOL_MODE_REVERTJOB, revertjobMode);
    9297        MODECASE(PSTAMPTOOL_MODE_ADDPROJECT, addprojectMode);
     
    715720            outputBase,
    716721            options,
    717             dep_id
     722            dep_id,
     723            0   // fault_count
    718724            )) {
    719725        psError(PS_ERR_UNKNOWN, false, "database error");
     
    909915        psStringAppend(&query, "\n %c pstampJob.fault = %d", c, fault);
    910916        c = ',';
     917        psStringAppend(&query, ", pstampJob.fault_count = pstampJob.fault_count+ 1");
    911918    }
    912919   
     
    925932    psU64 affected = psDBAffectedRows(config->dbh);
    926933    psLogMsg("pstamptool", PS_LOG_INFO, "Updated %" PRIu64 " pstampJobs", affected);
     934
     935    return true;
     936}
     937// Terminate jobs which have dependents setting both the pstampDependent and pstampJob.fault
     938static bool stopdependentjobMode(pxConfig *config)
     939{
     940    PS_ASSERT_PTR_NON_NULL(config, false);
     941
     942    PXOPT_LOOKUP_S32(fault,  config->args, "-set_fault",  true, false);
     943
     944    psMetadata *where = psMetadataAlloc();
     945
     946    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
     947    PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
     948    PXOPT_COPY_S64(config->args, where, "-dep_id", "dep_id", "==");
     949    PXOPT_COPY_S32(config->args, where, "-fault",  "pstampDependent.fault", "==");
     950
     951    // XXX: How about selecting by pstampRequest.label? No. That is too dangerous by itself.
     952
     953    psString query = pxDataGet("pstamptool_stopdependentjob.sql");
     954
     955    if (psListLength(where->list)) {
     956        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     957        psStringAppend(&query, " AND %s", whereClause);
     958        psFree(whereClause);
     959    } else {
     960        psFree(where);
     961        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
     962        return false;
     963    }
     964    psFree(where);
     965
     966    if (!p_psDBRunQueryF(config->dbh, query, fault, fault)) {
     967        psError(PS_ERR_UNKNOWN, false, "database error");
     968        psFree(query);
     969        return false;
     970    }
     971    psFree(query);
     972
     973    psU64 affected = psDBAffectedRows(config->dbh);
     974    psLogMsg("pstamptool", PS_LOG_INFO, "Updated %" PRIu64 " pstampJobs and pstampDependents", affected);
    927975
    928976    return true;
     
    941989    pxAddLabelSearchArgs(config, where, "-label", "pstampRequest.label", "LIKE");
    942990
     991    PXOPT_LOOKUP_BOOL(clear_fault_count, config->args, "-clear_fault_count", false);
     992
    943993    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     994
    944995    // XXX: we don't actually use -limit. It doesn't work for UPDATE
    945996    // it's an allowed arg because add_poll_args adds it
     
    9491000    // By default only revert faults < PSTAMP_FIRST_ERROR_CODE which are our "ipp exit codes"
    9501001    // codes larger than that are the pstamp request interface.
    951     // Don't fault those unless -fault waa provided
     1002    // Don't fault those unless -fault was explicitly provided
    9521003    psString faultClause = psStringCopy("");
    9531004    if (!fault) {
     
    9681019    psFree(where);
    9691020
    970     if (!p_psDBRunQueryF(config->dbh, query, faultClause)) {
     1021    // don't keep reverting once the number of faults reaches some value unless
     1022    // a parameter asking us to clear that count is provided
     1023    psString faultCountClause = NULL;
     1024    if (clear_fault_count) {
     1025        psStringAppend(&faultCountClause, "\n, pstampJob.fault_count = 0");
     1026    } else {
     1027        psStringAppend(&query, " AND pstampJob.fault_count < %d", PSTAMP_MAX_JOB_FAULTS);
     1028    }
     1029
     1030    if (!p_psDBRunQueryF(config->dbh, query, faultCountClause, faultClause)) {
     1031        psFree(faultCountClause);
    9711032        psFree(faultClause);
    9721033        psFree(query);
     
    9761037
    9771038    psFree(faultClause);
     1039    psFree(faultCountClause);
     1040    psFree(query);
    9781041
    9791042    return true;
     
    11801243        need_magic,
    11811244        outdir,
    1182         0               // fault
     1245        0,              // fault
     1246        0               // fault_count
    11831247        )) {
    11841248        if (!psDBRollback(config->dbh)) {
     
    13021366        psStringAppend(&query, "%s fault = %d", needComma ? ", " : "", fault);
    13031367        needComma = true;
     1368        psStringAppend(&query, ", pstampDependent.fault_count = pstampDependent.fault_count + 1");
    13041369    }
    13051370    psStringAppend(&query, " WHERE dep_id = %" PRId64, dep_id);
     
    13271392    PXOPT_COPY_S64(config->args, where, "-fault", "pstampDependent.fault", "==");
    13281393    PXOPT_COPY_S64(config->args, where, "-dep_id", "dep_id", "==");
     1394    PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
     1395    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
    13291396    pxAddLabelSearchArgs(config, where, "-label", "pstampRequest.label", "==");
     1397    PXOPT_LOOKUP_BOOL(clear_fault_count, config->args, "-clear_fault_count", false);
    13301398
    13311399    // XXX: we don't actually use -limit. It doesn't work for UPDATE
     
    13581426    }
    13591427
    1360     if (!p_psDBRunQuery(config->dbh, query)) {
     1428    // don't keep reverting once the number of faults reaches some value unless
     1429    // a parameter asking us to clear that count is provided
     1430    psString faultCountClause = NULL;
     1431    if (clear_fault_count) {
     1432        psStringAppend(&faultCountClause, "\n, pstampDependent.fault_count = 0");
     1433    } else {
     1434        psStringAppend(&faultCountClause, " ");
     1435        psStringAppend(&query, " AND pstampDependent.fault_count < %d", PSTAMP_MAX_DEP_FAULTS);
     1436    }
     1437
     1438    if (!p_psDBRunQueryF(config->dbh, query, faultCountClause)) {
    13611439        psError(PS_ERR_UNKNOWN, false, "database error");
    13621440        psFree(query);
  • tags/ipp-20100823/ippTools/src/pstamptoolConfig.c

    r29146 r29290  
    170170    psMetadataAddS16(updatejobArgs, PS_LIST_TAIL, "-set_fault", 0,            "new result", 0);
    171171
     172    // -stopdependentjob
     173    psMetadata *stopdependentjobArgs = psMetadataAlloc();
     174    psMetadataAddS64(stopdependentjobArgs, PS_LIST_TAIL,  "-req_id", 0,       "req_id of jobs to update", 0);
     175    psMetadataAddS64(stopdependentjobArgs, PS_LIST_TAIL,  "-job_id", 0,       "job_id of jobs to update", 0);
     176    psMetadataAddS64(stopdependentjobArgs, PS_LIST_TAIL,  "-dep_id", 0,       "dep_id of jobs to update", 0);
     177    psMetadataAddS16(stopdependentjobArgs, PS_LIST_TAIL,  "-fault", 0,        "current value for dependent fault", 0);
     178    psMetadataAddS16(stopdependentjobArgs, PS_LIST_TAIL,  "-set_fault", 0,    "new fault value for job and dependent (required)", 0);
     179
    172180    // -revertjob
    173181    psMetadata *revertjobArgs = psMetadataAlloc();
     
    177185    psMetadataAddS16(revertjobArgs, PS_LIST_TAIL, "-fault",  0,     "fault to revert", 0);
    178186    psMetadataAddStr(revertjobArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by pstampRequest label (LIKE comparision)", NULL);
     187    psMetadataAddBool(revertjobArgs, PS_LIST_TAIL, "-clear_fault_count", 0,       "clear job fault count", false);
    179188    psMetadataAddBool(revertjobArgs, PS_LIST_TAIL, "-all", 0,       "revert all faulted jobs", false);
    180189    psMetadataAddU64(revertjobArgs, PS_LIST_TAIL, "-limit", 0,      "limit result set to N items", 0);
     
    201210    // -revertdependent
    202211    psMetadata *revertdependentArgs = psMetadataAlloc();
    203     psMetadataAddS64(revertdependentArgs, PS_LIST_TAIL, "-dep_id", 0, "define id for dependent", 0);
     212    psMetadataAddS64(revertdependentArgs, PS_LIST_TAIL, "-dep_id", 0, "search by dep_id for dependent", 0);
     213    psMetadataAddS64(revertdependentArgs, PS_LIST_TAIL, "-job_id", 0, "search by job_ idfor dependent", 0);
     214    psMetadataAddS64(revertdependentArgs, PS_LIST_TAIL, "-req_id", 0, "search by req_id for dependent", 0);
    204215    psMetadataAddStr(revertdependentArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK,   "define label for dependent ", NULL);
    205     psMetadataAddS16(revertdependentArgs, PS_LIST_TAIL, "-fault",  0,   "define fault", 0);
    206     psMetadataAddU64(revertdependentArgs, PS_LIST_TAIL, "-limit", 0,      "limit result set to N items", 0);
     216    psMetadataAddS16(revertdependentArgs, PS_LIST_TAIL, "-fault",  0, "search by dependent fault", 0);
     217    psMetadataAddBool(revertdependentArgs, PS_LIST_TAIL, "-clear_fault_count", 0,       "clear job fault count", false);
     218    psMetadataAddU64(revertdependentArgs, PS_LIST_TAIL, "-limit", 0,  "limit result set to N items", 0);
    207219
    208220    // -pendingdependent
     
    263275    PXOPT_ADD_MODE("-pendingjob",      "", PSTAMPTOOL_MODE_PENDINGJOB,   pendingjobArgs);
    264276    PXOPT_ADD_MODE("-updatejob",       "", PSTAMPTOOL_MODE_UPDATEJOB,    updatejobArgs);
     277    PXOPT_ADD_MODE("-stopdependentjob", "", PSTAMPTOOL_MODE_STOPDEPENDENTJOB,  stopdependentjobArgs);
    265278    PXOPT_ADD_MODE("-revertjob",       "", PSTAMPTOOL_MODE_REVERTJOB,    revertjobArgs);
    266279
Note: See TracChangeset for help on using the changeset viewer.