IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 26927


Ignore:
Timestamp:
Feb 12, 2010, 12:21:48 PM (16 years ago)
Author:
watersc1
Message:

Implement stackstack diff mode, based on already existing warpstack code.

Rework cleanup sql a bit to be lighter on the database server.

Location:
trunk/ippTools
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/share/Makefile.am

    r26912 r26927  
    100100     difftool_definewarpwarp_select.sql \
    101101     difftool_definewarpwarp_insert.sql \
     102     difftool_definestackstack_part0.sql \
     103     difftool_definestackstack_part1.sql \
    102104     difftool_donecleanup.sql \
    103105     difftool_export_input_skyfile.sql \
  • trunk/ippTools/share/difftool_pendingcleanuprun.sql

    r25800 r26927  
    2525            USING(exp_id)
    2626        WHERE
     27        @INNERCONSTRAINT@
    2728            (diffRun.state = 'goto_cleaned' OR
    2829             diffRun.state = 'goto_scrubbed' OR
     
    5253            USING(exp_id)
    5354        WHERE
     55        @INNERCONSTRAINT@
    5456            (diffRun.state = 'goto_cleaned' OR
    5557             diffRun.state = 'goto_scrubbed' OR
     
    6466        JOIN diffInputSkyfile
    6567            USING(diff_id)
    66         JOIN stackSumSkyfile
    67             ON  diffInputSkyfile.stack1 = stackSumSkyfile.stack_id
     68--      JOIN stackSumSkyfile
     69--          ON  diffInputSkyfile.stack1 = stackSumSkyfile.stack_id
    6870        JOIN stackInputSkyfile
    6971            ON diffInputSkyfile.stack1 = stackInputSkyfile.stack_id
     
    7981            USING(exp_id)
    8082        WHERE
     83        @INNERCONSTRAINT@
    8184            (diffRun.state = 'goto_cleaned' OR
    8285             diffRun.state = 'goto_scrubbed' OR
     
    9194        JOIN diffInputSkyfile
    9295            USING(diff_id)
    93         JOIN stackSumSkyfile
    94             ON  diffInputSkyfile.stack2 = stackSumSkyfile.stack_id
     96--      JOIN stackSumSkyfile
     97--          ON  diffInputSkyfile.stack2 = stackSumSkyfile.stack_id
    9598        JOIN stackInputSkyfile
    9699            ON diffInputSkyfile.stack2 = stackInputSkyfile.stack_id
     
    106109            USING(exp_id)
    107110        WHERE
     111        @INNERCONSTRAINT@
    108112            (diffRun.state = 'goto_cleaned' OR
    109113             diffRun.state = 'goto_scrubbed' OR
  • trunk/ippTools/src/difftool.c

    r26909 r26927  
    4343static bool definewarpstackMode(pxConfig *config);
    4444static bool definewarpwarpMode(pxConfig *config);
     45static bool definestackstackMode(pxConfig *config);
    4546static bool pendingcleanuprunMode(pxConfig *config);
    4647static bool pendingcleanupskyfileMode(pxConfig *config);
     
    8990        MODECASE(DIFFTOOL_MODE_DEFINEWARPSTACK,       definewarpstackMode);
    9091        MODECASE(DIFFTOOL_MODE_DEFINEWARPWARP,        definewarpwarpMode);
     92        MODECASE(DIFFTOOL_MODE_DEFINESTACKSTACK,      definestackstackMode);
    9193        MODECASE(DIFFTOOL_MODE_PENDINGCLEANUPRUN,     pendingcleanuprunMode);
    9294        MODECASE(DIFFTOOL_MODE_PENDINGCLEANUPSKYFILE, pendingcleanupskyfileMode);
     
    18311833}
    18321834
     1835static bool definestackstackMode(pxConfig *config) {
     1836  PS_ASSERT_PTR_NON_NULL(config, false);
     1837
     1838  psMetadata *stack1Where = psMetadataAlloc();
     1839  psMetadata *stack2Where = psMetadataAlloc();
     1840
     1841  PXOPT_COPY_STR(config->args, stack1Where, "-tess_id", "stackRun.tess_id", "==");
     1842  PXOPT_COPY_STR(config->args, stack2Where, "-tess_id", "stackRun.tess_id", "==");
     1843  PXOPT_COPY_STR(config->args, stack1Where, "-filter", "stackRun.filter", "==");
     1844  PXOPT_COPY_STR(config->args, stack2Where, "-filter", "stackRun.filter", "==");
     1845  PXOPT_COPY_STR(config->args, stack1Where, "-skycell_id", "stackRun.skycell_id", "==");
     1846  PXOPT_COPY_STR(config->args, stack2Where, "-skycell_id", "stackRun.skycell_id", "==");
     1847  PXOPT_COPY_STR(config->args, stack1Where, "-input_label", "stackRun.label","==");
     1848  PXOPT_COPY_STR(config->args, stack2Where, "-template_label", "stackRun.label","==");
     1849  PXOPT_COPY_F32(config->args, stack1Where, "-good_frac", "stackSumSkyfile.good_frac", ">=");
     1850  PXOPT_COPY_F32(config->args, stack2Where, "-good_frac", "stackSumSkyfile.good_frac", ">=");
     1851 
     1852  PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false); // required option
     1853  PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false); // option
     1854  PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false); // option
     1855  PXOPT_LOOKUP_TIME(registered, config->args, "-set_registered", false, false);
     1856  PXOPT_LOOKUP_STR(data_group, config->args, "-set_data_group", false, false);
     1857  PXOPT_LOOKUP_STR(dist_group, config->args, "-set_dist_group", false, false);
     1858  PXOPT_LOOKUP_STR(note, config->args, "-set_note", false, false);
     1859 
     1860  PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1861  PXOPT_LOOKUP_BOOL(reRun, config->args, "-rerun", false);
     1862  PXOPT_LOOKUP_BOOL(newTemplates,config->args,"-new-templates", false);
     1863
     1864  PXOPT_LOOKUP_BOOL(available, config->args, "-available", false);
     1865  PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
     1866
     1867  if (!(label)) {
     1868    PXOPT_LOOKUP_STR(label,config->args, "-input_label",true,false);
     1869  }
     1870 
     1871  // Organize the config information into queries.
     1872  psString stack1Query = NULL;
     1873  psString stack2Query = NULL;
     1874
     1875  if (psListLength(stack1Where->list)) {
     1876    psString whereClause = psDBGenerateWhereConditionSQL(stack1Where, NULL);
     1877    psStringAppend(&stack1Query, "\n AND %s", whereClause);
     1878    psFree(whereClause);
     1879  } else {
     1880    stack1Query = psStringCopy("\n");
     1881  }
     1882  psFree(stack1Where);
     1883
     1884  if (psListLength(stack2Where->list)) {
     1885    psString whereClause = psDBGenerateWhereConditionSQL(stack2Where, NULL);
     1886    psStringAppend(&stack2Query, "\n AND %s", whereClause);
     1887    psFree(whereClause);
     1888  } else {
     1889    stack2Query = psStringCopy("\n");
     1890  }
     1891  psFree(stack2Where);
     1892
     1893  // don't queue for stacks that have already been diffed unless requested
     1894  psString diffQuery = NULL;
     1895  if (! (reRun || newTemplates) ) {
     1896    psStringAppend(&diffQuery, "\n AND diff_id IS NULL");
     1897  } else {
     1898    diffQuery = psStringCopy("\n");
     1899  }
     1900
     1901  // find the distinct set of data_groups and filters
     1902  psString query = pxDataGet("difftool_definestackstack_part0.sql");
     1903  if (!query) {
     1904    psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1905    return(false);
     1906  }
     1907 
     1908  if (!psDBTransaction(config->dbh)) {
     1909    psError(PS_ERR_UNKNOWN, false, "database error");
     1910    return(false);
     1911  }
     1912
     1913  if (!p_psDBRunQueryF(config->dbh, query, stack2Query, diffQuery, stack1Query, stack1Query)) {
     1914    psError(PS_ERR_UNKNOWN, false, "database error");
     1915    psFree(query);
     1916    if (!psDBRollback(config->dbh)) {
     1917      psError(PS_ERR_UNKNOWN, false, "database error");
     1918    }
     1919    return false;
     1920  }
     1921  psFree(query);
     1922
     1923  psArray *output = p_psDBFetchResult(config->dbh);
     1924  if (!output) {
     1925    psErrorCode err = psErrorCodeLast();
     1926    switch (err) {
     1927    case PS_ERR_DB_CLIENT:
     1928      psError(PXTOOLS_ERR_SYS, false, "database error");
     1929      break;
     1930    case PS_ERR_DB_SERVER:
     1931      psError(PXTOOLS_ERR_PROG, false, "database error");
     1932      break;
     1933    default:
     1934      psError(PXTOOLS_ERR_PROG, false, "unknown error");
     1935      break;
     1936    }
     1937    if (!psDBRollback(config->dbh)) {
     1938      psError(PS_ERR_UNKNOWN, false, "database error");
     1939    }
     1940    return false;
     1941  }
     1942  if (!psArrayLength(output)) {
     1943    psTrace("difftool", PS_LOG_INFO, "no rows found");
     1944    psFree(output);
     1945    if (!psDBCommit(config->dbh)) {
     1946      psError(PS_ERR_UNKNOWN, false, "database error");
     1947      return false;
     1948    }
     1949    return true;
     1950  }
     1951
     1952  query = pxDataGet("difftool_definestackstack_part1.sql");
     1953  if (pretend) {
     1954    // negative simple so the default is true
     1955    if (!ippdbPrintMetadatas(stdout, output, "diffRunTemp", !simple)) {
     1956      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1957      psFree(output);
     1958      return false;
     1959    }
     1960    psFree(output);
     1961    return true;
     1962  }
     1963
     1964  for (long i = 0; i < output->n; i++) {
     1965    psMetadata *row = output->data[i]; // Output row from query
     1966    bool mdok;                      // Status of MD lookup
     1967
     1968    psString tess_id = psMetadataLookupStr(&mdok,row,"INPUT_tess_id");
     1969    psString this_data_group = psMetadataLookupStr(&mdok,row,"INPUT_data_group");
     1970    psString this_dist_group = psMetadataLookupStr(&mdok,row,"INPUT_dist_group");
     1971    psString this_label = psMetadataLookupStr(&mdok,row,"INPUT_label");
     1972   
     1973    psString this_stack1Query = psStringCopy(stack1Query);
     1974   
     1975    psString thisWhere = psDBGenerateWhereConditionSQL(row,NULL);
     1976    psStringSubstitute(&thisWhere,"stackRun.","INPUT_");
     1977    psStringAppend(&this_stack1Query,"\n AND %s", thisWhere);
     1978    psFree(thisWhere);
     1979   
     1980/*     psTrace("difftool",1, query,stack2Query,diffQuery,this_stack1Query,this_stack1Query); */
     1981    if (!psDBTransaction(config->dbh)) {
     1982      psError(PS_ERR_UNKNOWN, false, "database error");
     1983      return(false);
     1984    }
     1985   
     1986    if (!p_psDBRunQueryF(config->dbh, query, stack2Query, diffQuery, this_stack1Query, this_stack1Query)) {
     1987      psError(PS_ERR_UNKNOWN, false, "database error");
     1988      psFree(query);
     1989      if (!psDBRollback(config->dbh)) {
     1990        psError(PS_ERR_UNKNOWN, false, "database error");
     1991      }
     1992      return false;
     1993    }
     1994    psFree(this_stack1Query);
     1995   
     1996    psArray *diff_id_output = p_psDBFetchResult(config->dbh);
     1997    if (!diff_id_output) {
     1998      psErrorCode err = psErrorCodeLast();
     1999      switch (err) {
     2000      case PS_ERR_DB_CLIENT:
     2001        psError(PXTOOLS_ERR_SYS, false, "database error");
     2002        break;
     2003      case PS_ERR_DB_SERVER:
     2004        psError(PXTOOLS_ERR_PROG, false, "database error");
     2005        break;
     2006      default:
     2007        psError(PXTOOLS_ERR_PROG, false, "unknown error");
     2008        break;
     2009      }
     2010      if (!psDBRollback(config->dbh)) {
     2011        psError(PS_ERR_UNKNOWN, false, "database error");
     2012      }
     2013      return false;
     2014    }
     2015    if (!psArrayLength(diff_id_output)) {
     2016      psTrace("difftool", PS_LOG_INFO, "no rows found");
     2017      psFree(diff_id_output);
     2018      if (!psDBCommit(config->dbh)) {
     2019        psError(PS_ERR_UNKNOWN, false, "database error");
     2020        return false;
     2021      }
     2022      return true;
     2023    }
     2024   
     2025    // ok we've got one create the diffRun
     2026    diffRunRow *run = diffRunRowAlloc(
     2027                                      0,          // ID
     2028                                      "reg",      // state
     2029                                      workdir,
     2030                                      label ? label : this_label,
     2031                                      data_group ? data_group : this_data_group,
     2032                                      dist_group ? dist_group : this_dist_group,
     2033                                      reduction,
     2034                                      NULL,       // dvodb
     2035                                      registered,
     2036                                      tess_id,
     2037                                      false,                 // bothways
     2038                                      false,                 // exposure
     2039                                      0,       // magicked
     2040                                      note
     2041                                      );
     2042    // Commit to database
     2043    if (!diffRunInsertObject(config->dbh, run)) {
     2044      psError(PS_ERR_UNKNOWN, false, "database error");
     2045      psFree(run);
     2046      if (!psDBRollback(config->dbh)) {
     2047        psError(PS_ERR_UNKNOWN, false, "database error");
     2048      }
     2049      return false;
     2050    }
     2051    //    diffRunPrintObject(stdout,run,1);
     2052    run->diff_id = psDBLastInsertID(config->dbh);
     2053    for (long j = 0; j < diff_id_output->n; j++) {
     2054      psMetadata *input_row = diff_id_output->data[j]; // Output row from query
     2055      bool mdok;
     2056      psString in_skycell_id  = psMetadataLookupStr(&mdok,input_row,"skycell_id");
     2057      psS64 in_input_stack_id = psMetadataLookupS64(&mdok,input_row,"stack_id");
     2058      psS64 in_template_stack_id = psMetadataLookupS64(&mdok,input_row,"max_stack_id");
     2059      psString in_tess_id = psMetadataLookupStr(&mdok,input_row,"tess_id");
     2060      psTrace("difftool",1,"%s %ld %ld %s\n",in_skycell_id,in_input_stack_id,in_template_stack_id,in_tess_id);
     2061      diffInputSkyfileRow *input = diffInputSkyfileRowAlloc(
     2062                                                            run->diff_id,   // ID
     2063                                                            in_skycell_id,
     2064                                                            0, // warp1_id
     2065                                                            in_input_stack_id, // stack1
     2066                                                            0, // warp2_id
     2067                                                            in_template_stack_id, // stack2
     2068                                                            in_tess_id,
     2069                                                            0 // diff_skyfile_id
     2070                                                            );
     2071      // Commit to database the input
     2072      if (!diffInputSkyfileInsertObject(config->dbh, input)) {
     2073        psError(PS_ERR_UNKNOWN, false, "database error");
     2074        psFree(input);
     2075        if (!psDBRollback(config->dbh)) {
     2076          psError(PS_ERR_UNKNOWN, false, "database error");
     2077        }
     2078        return false;
     2079      }
     2080      //      diffInputSkyfilePrintObject(stdout,input,1);
     2081      psFree(input);
     2082    }
     2083    psFree(run);
     2084  }
     2085  psFree(query);
     2086  psFree(stack1Query);
     2087  psFree(stack2Query);
     2088  psFree(diffQuery);
     2089  psFree(output);
     2090 
     2091  return(true);
     2092}
    18332093
    18342094static bool pendingcleanuprunMode(pxConfig *config)
     
    18402100
    18412101    psMetadata *where = psMetadataAlloc();
    1842     pxAddLabelSearchArgs (config, where, "-label", "label", "==");
     2102    pxAddLabelSearchArgs (config, where, "-label", "diffRun.label", "==");
    18432103
    18442104    psString query = pxDataGet("difftool_pendingcleanuprun.sql");
     
    18472107        return false;
    18482108    }
    1849 
     2109    // pxDataGet/psStringSubstitute workaround
     2110    psString queryCopy = psStringCopy(query);
     2111    psFree(query);
     2112    query = queryCopy;
     2113   
    18502114    if (where && psListLength(where->list)) {
    18512115        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    1852         psStringAppend(&query, " AND %s", whereClause);
     2116        psStringAppend(&whereClause, " AND ");
     2117        psStringSubstitute(&query,whereClause,"@INNERCONSTRAINT@");
    18532118        psFree(whereClause);
     2119    }
     2120    else {
     2121      psStringSubstitute(&query,NULL,"@INNERCONSTRAINT@");
    18542122    }
    18552123    psFree(where);
     
    18612129        psFree(limitString);
    18622130    }
    1863 
    18642131    //    fprintf(stderr,"%s",query);
     2132
     2133    //fprintf(stderr,"%s",query);
    18652134    if (!p_psDBRunQuery(config->dbh, query)) {
    18662135        psError(PS_ERR_UNKNOWN, false, "database error");
  • trunk/ippTools/src/difftool.h

    r26567 r26927  
    3737    DIFFTOOL_MODE_DEFINEWARPSTACK,
    3838    DIFFTOOL_MODE_DEFINEWARPWARP,
     39    DIFFTOOL_MODE_DEFINESTACKSTACK,
    3940    DIFFTOOL_MODE_PENDINGCLEANUPRUN,
    4041    DIFFTOOL_MODE_PENDINGCLEANUPSKYFILE,
  • trunk/ippTools/src/difftoolConfig.c

    r26909 r26927  
    253253    psMetadataAddStr(definewarpwarpArgs,  PS_LIST_TAIL, "-comment",            0, "search by comment field (LIKE comparison)", NULL);
    254254
     255    // -definestackstack
     256    psMetadata *definestackstackArgs = psMetadataAlloc();
     257    // stack id and exp id searches seem less useful here
     258    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-skycell_id", 0, "search by skycell ID", NULL);
     259    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-tess_id", 0, "search by tess ID", NULL);
     260    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL);
     261    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-input_label", 0, "search by stack label for input", NULL);
     262    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-template_label", 0, "search by stack label for template", NULL);
     263    psMetadataAddF32(definestackstackArgs, PS_LIST_TAIL, "-good_frac", 0, "minimum good fraction of skycell", NAN);
     264    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-set_workdir", 0, "define workdir (required)", NULL);
     265    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-set_label", 0, "define label", NULL);
     266    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-set_reduction", 0, "define reduction class", NULL);
     267    psMetadataAddTime(definestackstackArgs, PS_LIST_TAIL, "-set_registered", 0, "time detrend run was registered", now);
     268    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-set_data_group", 0, "define data group", NULL);
     269    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-set_dist_group", 0, "define dist group", NULL);
     270    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-set_note", 0, "define note", NULL);
     271    psMetadataAddBool(definestackstackArgs, PS_LIST_TAIL, "-rerun", 0, "define new run even if one exists", false);
     272    psMetadataAddBool(definestackstackArgs, PS_LIST_TAIL, "-available", 0, "define new run even if no stacks available for some skycells", false);
     273    psMetadataAddBool(definestackstackArgs, PS_LIST_TAIL, "-new-templates", 0, "also search for diffs with new template", false);
     274    psMetadataAddBool(definestackstackArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
     275    psMetadataAddBool(definestackstackArgs, PS_LIST_TAIL, "-pretend", 0, "list results but do not queue", false);
     276   
     277   
    255278    // -pendingcleanuprun
    256279    psMetadata *pendingcleanuprunArgs = psMetadataAlloc();
     
    327350    PXOPT_ADD_MODE("-definewarpstack",  "", DIFFTOOL_MODE_DEFINEWARPSTACK,   definewarpstackArgs);
    328351    PXOPT_ADD_MODE("-definewarpwarp",   "", DIFFTOOL_MODE_DEFINEWARPWARP,    definewarpwarpArgs);
     352    PXOPT_ADD_MODE("-definestackstack", "", DIFFTOOL_MODE_DEFINESTACKSTACK,  definestackstackArgs);
    329353    PXOPT_ADD_MODE("-pendingcleanuprun",     "show runs that need to be cleaned up", DIFFTOOL_MODE_PENDINGCLEANUPRUN,    pendingcleanuprunArgs);
    330354    PXOPT_ADD_MODE("-pendingcleanupskyfile", "show runs that need to be cleaned up", DIFFTOOL_MODE_PENDINGCLEANUPSKYFILE, pendingcleanupskyfileArgs);
Note: See TracChangeset for help on using the changeset viewer.