IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 25199


Ignore:
Timestamp:
Aug 25, 2009, 3:30:28 PM (17 years ago)
Author:
bills
Message:

Modernize reverting of errors.
If pstampRequest.state = 'new' previous try at parsing was incomplete so delete any existing jobs
Only revert requests if the state is not 'stop'.
Only revert jobs if request and job state is 'run'

Location:
trunk/ippTools
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/share/pstamptool_pendingjob.sql

    r25108 r25199  
    1 SELECT *
    2  FROM pstampJob
    3  WHERE state = 'run'
    4     AND fault = 0
     1SELECT pstampJob.*
     2FROM pstampJob
     3    JOIN pstampRequest using(req_id)
     4WHERE pstampRequest.state = 'run'
     5    AND pstampRequest.fault = 0
     6    AND pstampJob.state = 'run'
     7    AND pstampJob.fault = 0
  • trunk/ippTools/share/pstamptool_pendingreq.sql

    r21413 r25199  
    77    USING(ds_id)
    88 WHERE pstampRequest.state = 'new'
     9    AND pstampRequest.fault = 0
  • trunk/ippTools/src/pstamptool.c

    r25109 r25199  
    4444static bool pendingjobMode(pxConfig *config);
    4545static bool updatejobMode(pxConfig *config);
     46static bool revertjobMode(pxConfig *config);
    4647static bool addprojectMode(pxConfig *config);
    4748static bool projectMode(pxConfig *config);
     
    8081        MODECASE(PSTAMPTOOL_MODE_PENDINGJOB, pendingjobMode);
    8182        MODECASE(PSTAMPTOOL_MODE_UPDATEJOB, updatejobMode);
     83        MODECASE(PSTAMPTOOL_MODE_REVERTJOB, revertjobMode);
    8284        MODECASE(PSTAMPTOOL_MODE_ADDPROJECT, addprojectMode);
    8385        MODECASE(PSTAMPTOOL_MODE_MODPROJECT, modprojectMode);
     
    491493    PS_ASSERT_PTR_NON_NULL(config, false);
    492494
    493     PXOPT_LOOKUP_S64(req_id,     config->args, "-req_id",     true, false);
    494 
    495     // printf("Revert request %" PRId64 "\n", req_id);
     495    psMetadata *where = psMetadataAlloc();
     496
     497    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
     498    PXOPT_COPY_S64(config->args, where, "-fault", "req_id", "==");
     499    PXOPT_COPY_STR(config->args, where, "-state", "pstampRequest.state", "==");
     500
     501    if (!psListLength(where->list)) {
     502        psFree(where);
     503        psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
     504        return false;
     505    }
     506
     507    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     508    psFree(where);
     509
     510    // delete any jobs that were queued by requests that didn't complete parsing (pstampRequest.state = 'new'
     511    // If state =  'run' was supplied this will be a no-op
     512    psString query = pxDataGet("pstamptool_revertreq_deletejobs.sql");
     513    psStringAppend(&query, " AND %s", whereClause);
     514    if (!p_psDBRunQuery(config->dbh, query)) {
     515        psError(PS_ERR_UNKNOWN, false, "database error");
     516        return false;
     517    }
     518    psFree(query);
     519
     520    // clear fault for requests
     521    query = pxDataGet("pstamptool_revertreq.sql");
     522    psStringAppend(&query, " AND %s", whereClause);
    496523   
    497     if (!p_psDBRunQueryF(config->dbh, "DELETE FROM pstampJob where req_id = %" PRId64, req_id)) {
    498         psError(PS_ERR_UNKNOWN, false, "database error");
    499         return false;
    500     }
    501     if (!p_psDBRunQueryF(config->dbh,
    502         "UPDATE pstampRequest set state ='new', name=NULL, reqType=NULL, fault=0 where req_id = %" PRId64, req_id)) {
    503         psError(PS_ERR_UNKNOWN, false, "database error");
    504         return false;
    505     }
     524    psFree(whereClause);
     525
     526    if (!p_psDBRunQuery(config->dbh, query)) {
     527        psError(PS_ERR_UNKNOWN, false, "database error");
     528        return false;
     529    }
     530    psFree(query);
    506531
    507532    return true;
     
    734759    return true;
    735760}
     761
     762static bool revertjobMode(pxConfig *config)
     763{
     764    PS_ASSERT_PTR_NON_NULL(config, false);
     765
     766    psMetadata *where = psMetadataAlloc();
     767
     768    PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
     769    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
     770    PXOPT_COPY_S64(config->args, where, "-fault",  "fault", "==");
     771
     772    if (!psListLength(where->list)) {
     773        psFree(where);
     774        psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
     775        return false;
     776    }
     777
     778    psString query = pxDataGet("pstamptool_revertjob.sql");
     779    psString whereClause = psDBGenerateWhereConditionSQL(where, "pstampJob");
     780    psStringAppend(&query, " AND %s", whereClause);
     781    psFree(whereClause);
     782    psFree(where);
     783   
     784    if (!p_psDBRunQuery(config->dbh, query)) {
     785        psError(PS_ERR_UNKNOWN, false, "database error");
     786        return false;
     787    }
     788
     789    return true;
     790}
    736791static bool addprojectMode(pxConfig *config)
    737792{
  • trunk/ippTools/src/pstamptool.h

    r19760 r25199  
    3939    PSTAMPTOOL_MODE_JOBRESULT,
    4040    PSTAMPTOOL_MODE_UPDATEJOB,
     41    PSTAMPTOOL_MODE_REVERTJOB,
    4142    PSTAMPTOOL_MODE_ADDPROJECT,
    4243    PSTAMPTOOL_MODE_MODPROJECT,
  • trunk/ippTools/src/pstamptoolConfig.c

    r25075 r25199  
    9797    // -revertreq
    9898    psMetadata *revertreqArgs = psMetadataAlloc();
    99     psMetadataAddS64(revertreqArgs, PS_LIST_TAIL, "-req_id", 0,            "req_id for which to revert", 0);
     99    psMetadataAddS64(revertreqArgs, PS_LIST_TAIL, "-req_id", 0,     "req_id to revert", 0);
     100    psMetadataAddS16(revertreqArgs, PS_LIST_TAIL, "-fault",  0,     "fault to revert", 0);
     101    psMetadataAddStr(revertreqArgs, PS_LIST_TAIL, "-state", 0,      "state to revert", NULL);
    100102
    101103    // -addjob
     
    129131    psMetadataAddStr(updatejobArgs, PS_LIST_TAIL, "-fault", 0,            "new result", NULL);
    130132
     133    // -revertjob
     134    psMetadata *revertjobArgs = psMetadataAlloc();
     135    psMetadataAddS64(revertjobArgs, PS_LIST_TAIL, "-req_id", 0,     "req_id to revert", 0);
     136    psMetadataAddS64(revertjobArgs, PS_LIST_TAIL, "-job_id", 0,     "job_id to revert", 0);
     137    psMetadataAddS16(revertjobArgs, PS_LIST_TAIL, "-fault",  0,     "fault to revert", 0);
     138
    131139    // -addproject
    132140    psMetadata *addprojectArgs = psMetadataAlloc();
     
    159167    PXOPT_ADD_MODE("-addreq",          "", PSTAMPTOOL_MODE_ADDREQ,       addreqArgs);
    160168    PXOPT_ADD_MODE("-pendingreq",      "", PSTAMPTOOL_MODE_PENDINGREQ,   pendingreqArgs);
    161     PXOPT_ADD_MODE("-updatereq",    "", PSTAMPTOOL_MODE_UPDATEREQ, updatereqArgs);
     169    PXOPT_ADD_MODE("-updatereq",       "", PSTAMPTOOL_MODE_UPDATEREQ, updatereqArgs);
    162170    PXOPT_ADD_MODE("-listreq",         "", PSTAMPTOOL_MODE_LISTREQ,      listreqArgs);
    163171    PXOPT_ADD_MODE("-completedreq",    "", PSTAMPTOOL_MODE_COMPLETEDREQ, completedreqArgs);
     
    167175    PXOPT_ADD_MODE("-listjob",         "", PSTAMPTOOL_MODE_LISTJOB,      listjobArgs);
    168176    PXOPT_ADD_MODE("-pendingjob",      "", PSTAMPTOOL_MODE_PENDINGJOB,   pendingjobArgs);
    169     PXOPT_ADD_MODE("-updatejob",    "", PSTAMPTOOL_MODE_UPDATEJOB, updatejobArgs);
     177    PXOPT_ADD_MODE("-updatejob",       "", PSTAMPTOOL_MODE_UPDATEJOB,    updatejobArgs);
     178    PXOPT_ADD_MODE("-revertjob",       "", PSTAMPTOOL_MODE_REVERTJOB,    revertjobArgs);
    170179
    171180    PXOPT_ADD_MODE("-adddatastore",    "", PSTAMPTOOL_MODE_ADDDATASTORE, adddatastoreArgs);
Note: See TracChangeset for help on using the changeset viewer.