Index: /tags/ipp-20100525/ippTools/share/pstamptool_getdependent.sql
===================================================================
--- /tags/ipp-20100525/ippTools/share/pstamptool_getdependent.sql	(revision 28146)
+++ /tags/ipp-20100525/ippTools/share/pstamptool_getdependent.sql	(revision 28147)
@@ -1,5 +1,3 @@
 SELECT DISTINCT pstampDependent.*
 FROM pstampDependent
--- JOIN pstampJob USING(dep_id)
--- JOIN pstampRequest USING(req_id)
 WHERE pstampDependent.state = 'new'
Index: /tags/ipp-20100525/ippTools/share/pstamptool_revertdependent.sql
===================================================================
--- /tags/ipp-20100525/ippTools/share/pstamptool_revertdependent.sql	(revision 28146)
+++ /tags/ipp-20100525/ippTools/share/pstamptool_revertdependent.sql	(revision 28147)
@@ -4,2 +4,3 @@
 SET pstampDependent.fault = 0
 WHERE pstampDependent.state = 'new'
+    AND (pstampDependent.fault > 0)
Index: /tags/ipp-20100525/ippTools/src/pstamptool.c
===================================================================
--- /tags/ipp-20100525/ippTools/src/pstamptool.c	(revision 28146)
+++ /tags/ipp-20100525/ippTools/src/pstamptool.c	(revision 28147)
@@ -30,4 +30,5 @@
 #include "pxdata.h"
 #include "pstamptool.h"
+#include "pstamp.h"
 
 static bool adddatastoreMode(pxConfig *config);
@@ -941,10 +942,10 @@
     PXOPT_LOOKUP_S16(fault, config->args, "-fault",  false, false);
 
-    // By default only revert faults < 10 which are our "ipp exit codes"
+    // By default only revert faults < PSTAMP_FIRST_ERROR_CODE which are our "ipp exit codes"
     // codes larger than that are the pstamp request interface.
     // Don't fault those unless -fault waa provided
-    psString faultClause = "";
+    psString faultClause = psStringCopy("");
     if (!fault) {
-        faultClause = " \nAND (pstampJob.fault < 10)";
+        psStringAppend(&faultClause, " \nAND (pstampJob.fault < %d)", PSTAMP_FIRST_ERROR_CODE);
     }
 
@@ -963,7 +964,11 @@
 
     if (!p_psDBRunQueryF(config->dbh, query, faultClause)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        return false;
-    }
+        psFree(faultClause);
+        psFree(query);
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+
+    psFree(faultClause);
 
     return true;
@@ -1135,4 +1140,9 @@
             psFree(output);
             return false;
+        }
+        psS32 fault = psMetadataLookupS64(NULL, dep, "fault");
+        if (fault > 0) {
+            fprintf(stderr, "existing dependent has fault %d\n", fault);
+            exit (fault);
         }
         printf("%" PRId64 "\n", dep_id);
@@ -1317,4 +1327,7 @@
         return false;
     }
+
+    PXOPT_LOOKUP_S16(fault,      config->args, "-fault",          false, false);
+
     psString query = pxDataGet("pstamptool_revertdependent.sql");
     if (!query) {
@@ -1328,4 +1341,10 @@
     psFree(where);
 
+    if (!fault) {
+        // unless asked to clear a specific fault value, restrict reverts to fault codes
+        // that are less than the minimum fault in the API
+        psStringAppend(&query, " AND (pstampDependent.fault < %d)", PSTAMP_FIRST_ERROR_CODE);
+    }
+
     if (!p_psDBRunQuery(config->dbh, query)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
Index: /tags/ipp-20100525/pstamp/scripts/pstamp_checkdependent.pl
===================================================================
--- /tags/ipp-20100525/pstamp/scripts/pstamp_checkdependent.pl	(revision 28146)
+++ /tags/ipp-20100525/pstamp/scripts/pstamp_checkdependent.pl	(revision 28147)
@@ -307,5 +307,5 @@
             # ... and fault the dependent so that we have a record of the error
             my_die("failed to find warpSkyCelllMap for warpRun $warp_id skycell_id $skycell_id",
-                $PS_EXIT_DATA_ERROR);
+                $PSTAMP_GONE);
         }
 
Index: /tags/ipp-20100525/pstamp/scripts/pstampparse.pl
===================================================================
--- /tags/ipp-20100525/pstamp/scripts/pstampparse.pl	(revision 28146)
+++ /tags/ipp-20100525/pstamp/scripts/pstampparse.pl	(revision 28147)
@@ -829,12 +829,23 @@
             run(command => $command, verbose => $verbose);
         unless ($success) {
-            my_die("$command failed", $PS_EXIT_UNKNOWN_ERROR);
-        }
-        my $output = join "", @$stdout_buf;
-        chomp $output;
-        $dep_id = $output;
-        #
-        # XXX: need to fault the request or something
-        my_die("pstamptool -getdependent returned invalid dep_id", $PS_EXIT_PROG_ERROR) if !$dep_id;
+            my $fault = $error_code >> 8;
+            print STDERR "$command failed with fault $fault\n";
+            if ($fault >= 10) {
+                $$r_dep_id = 0;
+                $$r_fault = $fault;
+                $$r_jobState = 'stop';
+                return;
+            }
+            # for now just die. Later pstamptool will return the whole dependent so we can
+            # examine the fault code
+            my_die("$command failed with unexpected fault value: $fault", $PS_EXIT_UNKNOWN_ERROR);
+        } else {
+            my $output = join "", @$stdout_buf;
+            chomp $output;
+            $dep_id = $output;
+            #
+            # XXX: need to fault the request or something
+            my_die("pstamptool -getdependent returned invalid dep_id", $PS_EXIT_PROG_ERROR) if !$dep_id;
+        }
     } else {
         print STDERR "skipping $command\n";
Index: /tags/ipp-20100525/pstamp/src/pstamp.h
===================================================================
--- /tags/ipp-20100525/pstamp/src/pstamp.h	(revision 28146)
+++ /tags/ipp-20100525/pstamp/src/pstamp.h	(revision 28147)
@@ -9,4 +9,5 @@
 typedef enum {
         PSTAMP_SUCCESS          = 0,
+	PSTAMP_FIRST_ERROR_CODE = 10,
 	PSTAMP_SYSTEM_ERROR     = 10,
 	PSTAMP_NOT_IMPLEMENTED  = 11,
