IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 33119


Ignore:
Timestamp:
Jan 19, 2012, 3:39:28 PM (14 years ago)
Author:
bills
Message:

Add support for pstampJobs that depend on other jobs. This will be used to implement
working dependency checking for detectability queries

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/dbconfig/pstamp.md

    r32772 r33119  
    4848    dep_id      S64         0
    4949    fault_count S32         0
     50    parent_id   S64         0
     51    is_parent   BOOL        f
    5052END
    5153
  • trunk/ippTools/share/pstamptool_pendingjob.sql

    r27856 r33119  
    1 SELECT pstampJob.*,
    2     IFNULL(Label.priority, 10000) AS priority
     1SELECT * FROM
     2(SELECT pstampJob.*,
     3    IFNULL(Label.priority, 10000) AS priority,
     4    0 AS myParent,
     5    0 AS runningChildren
    36FROM pstampJob
    47    JOIN pstampRequest USING(req_id)
     
    912    AND pstampJob.state = 'run'
    1013    AND pstampJob.fault = 0
     14    AND NOT is_parent
    1115    AND (dep_id = 0 OR pstampDependent.state = 'full')
    1216    AND (Label.active OR Label.active IS NULL)
     17    -- where hook 1 %s
     18UNION
     19SELECT * FROM
     20  (SELECT pstampJob.*,
     21        IFNULL(Label.priority, 10000) AS priority
     22    FROM pstampJob
     23        JOIN pstampRequest USING(req_id)
     24        LEFT JOIN pstampDependent USING(dep_id)
     25        LEFT JOIN Label ON pstampRequest.label = Label.label
     26    WHERE pstampRequest.state = 'run'
     27        AND pstampRequest.fault = 0
     28        AND pstampJob.state = 'run'
     29        AND pstampJob.fault = 0
     30        AND is_parent
     31        AND (dep_id = 0 OR pstampDependent.state = 'full')
     32        AND (Label.active OR Label.active IS NULL)
     33        -- where hook 2 %s
     34    ) as parentJob
     35    LEFT JOIN
     36    (SELECT parent_id AS myParent,
     37            count(job_id) as runningChildren
     38        FROM pstampRequest JOIN pstampJob USING(req_id)
     39        WHERE pstampRequest.state ='run'
     40            AND pstampJob.state = 'run'
     41            AND pstampJob.parent_id
     42        GROUP BY parent_id
     43    ) as childJobs
     44    ON childJobs.myParent = parentJob.job_id
     45    WHERE runningChildren IS NULL
     46) AS theQuery
     47
     48
  • trunk/ippTools/share/pstamptool_stopdependentjob.sql

    r29248 r33119  
    55SET pstampJob.state = 'stop',
    66    pstampJob.fault = %d,
    7     pstampDependent.fault = %d
     7    pstampDependent.fault = %d,
     8    pstampDependent.state = '%s'
    89WHERE pstampJob.state = 'run'
    910    AND pstampDependent.state = 'new'
  • trunk/ippTools/share/pxadmin_create_tables.sql

    r33032 r33119  
    14421442        fault SMALLINT,
    14431443        PRIMARY KEY(req_id),
    1444         KEY(req_id)
     1444        KEY(req_id),
     1445        KEY(state),
     1446        KEY(fault),
     1447        KEY(label)
    14451448) ENGINE=innodb DEFAULT CHARSET=latin1;
    14461449
     
    14561459        options BIGINT,
    14571460        dep_id BIGINT,
     1461        fault_count INT,
     1462        parent_id BIGINT DEFAULT NULL,
     1463        is_parent TINYINT DEFAULT 0,
    14581464        PRIMARY KEY(job_id, req_id),
    14591465        KEY(job_id),
     1466        KEY(req_id),
     1467        KEY(state),
     1468        KEY(fault),
     1469        KEY(dep_id),
     1470        KEY(parent_id),
     1471        KEY(is_parent),
    14601472        FOREIGN KEY(req_id) REFERENCES pstampRequest(req_id)
    14611473) ENGINE=innodb DEFAULT CHARSET=latin1;
     
    14681480        component  VARCHAR(64),
    14691481        imagedb    VARCHAR(64),
     1482        outdir     VARCHAR(255),
    14701483        rlabel     VARCHAR(64),
    14711484        need_magic TINYINT,
    1472         outdir     VARCHAR(255),
    14731485        fault      SMALLINT,
    14741486        fault_count INT,
     
    14771489        KEY(stage),
    14781490        KEY(stage_id),
     1491        KEY(component),
     1492        KEY(imagedb),
    14791493        KEY(fault)
    14801494) ENGINE=innodb DEFAULT CHARSET=latin1;
  • trunk/ippTools/src/pstamptool.c

    r32786 r33119  
    704704    PXOPT_LOOKUP_S16(fault,       config->args, "-fault",      false, false);
    705705    PXOPT_LOOKUP_S64(exp_id,      config->args, "-exp_id",     false, false);
    706     PXOPT_LOOKUP_S64(options,     config->args, "-options",     false, false);
     706    PXOPT_LOOKUP_S64(options,     config->args, "-options",    false, false);
    707707    PXOPT_LOOKUP_S64(dep_id,      config->args, "-dep_id",     false, false);
     708    PXOPT_LOOKUP_S64(parent_id,   config->args, "-parent_id",  false, false);
     709    PXOPT_LOOKUP_BOOL(is_parent,  config->args, "-is_parent",  false);
    708710
    709711    // unless the job is being inserted with stop state require outputBase
     
    716718    if (!strcmp(job_type, "get_image") || !strcmp(job_type, "detect_query") || !strcmp(job_type, "none")) {
    717719        stampJob = false;
     720    } else if (!strcmp(job_type, "child")) {
     721        // job_type child's only action is to resolve a dependent
     722        // XXX: IS this necessary?
     723        if (!dep_id) {
     724            psError(PS_ERR_UNKNOWN, true, "dep_id required for child job\n");
     725            return false;
     726        }
     727        if (is_parent) {
     728            psError(PS_ERR_UNKNOWN, true, "job type child can not be a parent job\n");
     729            return false;
     730        }
     731        stampJob = false;
     732    } else if (!strcmp(job_type, "mosaic")) {
     733        stampJob = false;
     734        is_parent = true;
    718735    } else if (!strcmp(job_type, "stamp")) {
    719736        stampJob = true;
     
    723740    }
    724741    if (!pstampJobInsert(config->dbh,
    725             0, // job_id
     742            0,          // job_id
    726743            req_id,
    727744            rownum,
     
    733750            options,
    734751            dep_id,
    735             0   // fault_count
     752            0,          // fault_count
     753            parent_id,
     754            is_parent
    736755            )) {
    737756        psError(PS_ERR_UNKNOWN, false, "database error");
     
    842861
    843862    // use psDBGenerateWhereSQL because the SQL yields an intermediate table
     863    psString whereStr = NULL;
    844864    if (psListLength(where->list)) {
    845865        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    846         psStringAppend(&query, " AND %s", whereClause);
     866        psStringAppend(&whereStr, "\n AND %s", whereClause);
    847867        psFree(whereClause);
     868    } else {
     869        psStringAppend(&whereStr, "%s", "");
    848870    }
    849871    psFree(where);
     
    858880    }
    859881
    860     if (!p_psDBRunQuery(config->dbh, query)) {
    861         psError(PS_ERR_UNKNOWN, false, "database error");
    862         psFree(query);
    863         return false;
    864     }
     882    if (!p_psDBRunQueryF(config->dbh, query, whereStr, whereStr)) {
     883        psError(PS_ERR_UNKNOWN, false, "database error");
     884        psFree(whereStr);
     885        psFree(query);
     886        return false;
     887    }
     888    psFree(whereStr);
    865889    psFree(query);
    866890
     
    956980
    957981    PXOPT_LOOKUP_S32(fault,  config->args, "-set_fault",  true, false);
     982    PXOPT_LOOKUP_STR(state,  config->args, "-set_state",  false, false);
    958983
    959984    psMetadata *where = psMetadataAlloc();
     
    9861011    psFree(where);
    9871012
    988     if (!p_psDBRunQueryF(config->dbh, query, fault, fault)) {
     1013    if (!p_psDBRunQueryF(config->dbh, query, fault, fault, state)) {
    9891014        psError(PS_ERR_UNKNOWN, false, "database error");
    9901015        psFree(query);
  • trunk/ippTools/src/pstamptoolConfig.c

    r32786 r33119  
    144144    psMetadataAddS64(addjobArgs, PS_LIST_TAIL, "-options", 0,          "define options", 0);
    145145    psMetadataAddS64(addjobArgs, PS_LIST_TAIL, "-dep_id", 0,           "define job dep_id", 0);
     146    psMetadataAddS64(addjobArgs, PS_LIST_TAIL, "-parent_id", 0,        "define parent's job_id", 0);
     147    psMetadataAddBool(addjobArgs, PS_LIST_TAIL, "-is_parent", 0,       "define whether job has children", false);
    146148    psMetadataAddS16(addjobArgs, PS_LIST_TAIL, "-fault", 0,            "define job result", 0);
    147149
     
    186188    psMetadataAddS32(stopdependentjobArgs, PS_LIST_TAIL,  "-fault_count", 0,   "select by fault_count (>=)", 0);
    187189    psMetadataAddS16(stopdependentjobArgs, PS_LIST_TAIL,  "-set_fault", 0,    "new fault value for job and dependent (required)", 0);
     190    psMetadataAddStr(stopdependentjobArgs, PS_LIST_TAIL, "-set_state", 0,            "new pstampDependent.state", "new");
    188191    psMetadataAddStr(stopdependentjobArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by pstampJob label (LIKE comparision)", NULL);
    189192    psMetadataAddU64(stopdependentjobArgs, PS_LIST_TAIL, "-limit", 0,      "not used", 0);
Note: See TracChangeset for help on using the changeset viewer.