IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 18531


Ignore:
Timestamp:
Jul 15, 2008, 9:40:36 AM (18 years ago)
Author:
bills
Message:

Many changes related to fault handling and changes to the database tables.

Location:
trunk/ippTools/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/src/pstamptool.c

    r18377 r18531  
    22 * pstamptool.c
    33 *
    4  * Copyright (C) 2008  Joshua Hoblitt
     4 * Copyright (C) 2008
    55 *
    66 * This program is free software; you can redistribute it and/or modify it
     
    3939static bool pendingReqMode(pxConfig *config);
    4040static bool processedReqMode(pxConfig *config);
     41static bool revertReqMode(pxConfig *config);
    4142static bool addJobMode(pxConfig *config);
    4243static bool listJobMode(pxConfig *config);
     
    7172        MODECASE(PSTAMPTOOL_MODE_PENDINGREQ, pendingReqMode);
    7273        MODECASE(PSTAMPTOOL_MODE_PROCESSEDREQ, processedReqMode);
     74        MODECASE(PSTAMPTOOL_MODE_REVERTREQ, revertReqMode);
    7375        MODECASE(PSTAMPTOOL_MODE_ADDJOB, addJobMode);
    7476        MODECASE(PSTAMPTOOL_MODE_LISTJOB, listJobMode);
     
    258260}
    259261
    260 #define  MAGIC_STR  "$REQ_ID"
    261 
    262 // Replace $REQ_ID with the value of the request id if present in the outFileset
    263 
    264 static bool
    265 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 magic
    275     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 
    303262static bool addReqMode(pxConfig *config)
    304263{
     
    316275        return false;
    317276    }
    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     }
    327277
    328278    // Data Store ID is optional
     
    337287
    338288    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)) {
    343292        psError(PS_ERR_UNKNOWN, false, "database error");
    344293        return false;
     
    354303
    355304    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     }
    360305
    361306    printf("%" PRId64 "\n", req_id);
     
    446391    }
    447392
    448     psString query =
     393    psString query = NULL;
     394    psStringAppend(&query,
    449395        "SELECT * FROM pstampRequest WHERE state = 'run' AND "
    450396            "(SELECT count(*) FROM pstampJob WHERE pstampJob.req_id = pstampRequest.req_id "
    451             " AND pstampJob.state != 'stop') = 0" ;
     397            " AND pstampJob.state != 'stop') = 0" );
    452398
    453399    // treat limit == 0 as "no limit"
     
    594540        return false;
    595541    }
    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)) {
    608605        psError(PS_ERR_UNKNOWN, false, "database error");
    609606        psFree(query);
     
    612609
    613610    psU64 affected = psDBAffectedRows(config->dbh);
    614     if (affected != 1) {
     611    // note zero is not an error
     612    if (affected > 1) {
    615613        psError(PS_ERR_UNKNOWN, false, "should have affected one row but %"
    616614                                        PRIu64 " rows were modified", affected);
     
    620618    return true;
    621619}
     620
     621static 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
    622653static bool addJobMode(pxConfig *config)
    623654{
     
    646677    }
    647678
     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    }
    648688    psString uri = psMetadataLookupStr(&status, config->args, "-uri");
    649689    if (!status) {
     
    696736        stateString = "run";
    697737    }
    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";
    705745    }
    706746
     
    709749    if (stampJob) {
    710750        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')";
    713753    } else {
    714754        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)) {
    720760        psError(PS_ERR_UNKNOWN, false, "database error");
    721761        return false;
     
    915955        return false;
    916956    }
    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("");
    926966    } else {
    927         psStringAppend(&resultStr, ", result = '%s'", jobResult);
     967        psStringAppend(&faultStr, ", fault = '%s'", fault);
    928968    }
    929969       
    930 
    931     // XXX: check state for a legal value
    932 
    933970    char *query ="UPDATE pstampJob"
    934971                 " SET state = '%s' %s"
    935972                 " WHERE job_id = '%s'";
    936973
    937     if (!p_psDBRunQuery(config->dbh, query, state, resultStr, job_id)) {
     974    if (!p_psDBRunQuery(config->dbh, query, state, faultStr, job_id)) {
    938975        psError(PS_ERR_UNKNOWN, false, "database error");
    939976        psFree(query);
    940977        return false;
    941978    }
    942     psFree(resultStr);
     979    psFree(faultStr);
    943980
    944981    psU64 affected = psDBAffectedRows(config->dbh);
  • trunk/ippTools/src/pstamptool.h

    r18377 r18531  
    3333    PSTAMPTOOL_MODE_PENDINGREQ,
    3434    PSTAMPTOOL_MODE_PROCESSEDREQ,
     35    PSTAMPTOOL_MODE_REVERTREQ,
    3536    PSTAMPTOOL_MODE_ADDJOB,
    3637    PSTAMPTOOL_MODE_LISTJOB,
  • trunk/ippTools/src/pstamptoolConfig.c

    r18377 r18531  
    7979    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-ds_id", 0,
    8080            "define request ds_id", NULL);
    81     psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-out_fileset", 0,
    82             "define request output_fileset", NULL);
    8381
    8482    // -pendingreq
     
    113111    psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-state", 0,
    114112            "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);
    115128
    116129    // -addjob
     
    120133    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-req_id", 0,
    121134            "define job req_id", NULL);
     135    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-rownum", 0,
     136            "define job rownum", NULL);
    122137    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-job_type", 0,
    123138            "define job job_type", NULL);
     
    128143    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-state", 0,
    129144            "new state", NULL);
    130     psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-result", 0,
     145    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-fault", 0,
    131146            "new result", NULL);
    132147
     
    157172    psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-state", 0,
    158173            "new state", NULL);
    159     psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-result", 0,
     174    psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-fault", 0,
    160175            "new result", NULL);
    161176
     
    187202    PXOPT_ADD_MODE("-listreq",         "", PSTAMPTOOL_MODE_LISTREQ,      listreqArgs);
    188203    PXOPT_ADD_MODE("-completedreq",    "", PSTAMPTOOL_MODE_COMPLETEDREQ, completedreqArgs);
     204    PXOPT_ADD_MODE("-revertreq",       "", PSTAMPTOOL_MODE_REVERTREQ,    revertreqArgs);
    189205
    190206    PXOPT_ADD_MODE("-addjob",          "", PSTAMPTOOL_MODE_ADDJOB,       addjobArgs);
Note: See TracChangeset for help on using the changeset viewer.