Index: /trunk/ippToPsps/perl/checkOdmStatus.pl
===================================================================
--- /trunk/ippToPsps/perl/checkOdmStatus.pl	(revision 29257)
+++ /trunk/ippToPsps/perl/checkOdmStatus.pl	(revision 29258)
@@ -90,7 +90,7 @@
 
     print "\n";
-    printf("+----------------------+--------------+--------------+----------------+---------------+---------+----------+\n");
-    printf("|      Timestamp       |    Batch     |  Exposure ID | Loaded to ODM? | Merge worthy? | Merged? | Deleted? |\n");
-    printf("+----------------------+--------------+--------------+----------------+---------------+---------+----------+\n");
+    printf("+----------------------+--------------+--------------+----------------+--------------+--------------+---------+----------+\n");
+    printf("|      Timestamp       |    Batch     |  Exposure ID | Loaded to ODM? | Load failed? |Merge worthy? | Merged? | Deleted? |\n");
+    printf("+----------------------+--------------+--------------+----------------+--------------+--------------+---------+----------+\n");
 
     # loop round batches
@@ -101,5 +101,5 @@
     my $numDeleted = 0;
     foreach $batch ( @{$batches} ) {
-        my ($timestamp, $type, $expId, $batchId, $surveyType, $deleted, $dvoDb, $processed, $onDatastore, $loadedToOdm, $mergeWorthy, $merged) =  @{$batch};
+        my ($timestamp, $type, $expId, $batchId, $surveyType, $deleted, $dvoDb, $processed, $onDatastore, $loadedToOdm, $loadFailed, $mergeWorthy, $merged) =  @{$batch};
 
         if (!$onDatastore) {next;}
@@ -125,14 +125,14 @@
         $numBatchesToCheck++;
 
-
         # if not merged then update by polling ODM for status
-        if (!$merged) {
-
-            if (checkODM($batch->getName(), \$loadedToOdm, \$mergeWorthy, \$merged)) {$numChecked++;}
+        if (!$merged && !$loadFailed) {
+
+            if (checkODM($batch->getName(), \$loadedToOdm, \$loadFailed, \$mergeWorthy, \$merged)) {$numChecked++;}
             else {next;}
         }
 
         # delete from datastore
-        if (defined $product && !$deleted && $loadedToOdm && $mergeWorthy) {
+        if (defined $product && !$deleted && $loadedToOdm && ($mergeWorthy || $loadFailed)) {
+
 
             $deleted = $datastore->remove($batch->getName());
@@ -149,10 +149,11 @@
 
         # update database
-        $ippToPspsDb->updateODMStatus($batchId, $expId, $loadedToOdm, $mergeWorthy, $merged, $deleted);
-        printf( "| %18s  | %11s  | %10d   |    %6s      |    %6s     | %6s  |  %5s   |\n", 
+        $ippToPspsDb->updateODMStatus($batchId, $expId, $loadedToOdm, $loadFailed, $mergeWorthy, $merged, $deleted);
+        printf( "| %18s  | %11s  | %10d   |    %6s      |    %6s    |   %6s     | %6s  |  %5s   |\n", 
                 $timestamp, 
                 $batch->getName(), 
                 $expId, 
                 $loadedToOdm ? "yes" : "no", 
+                $loadFailed ? "yes" : "no", 
                 $mergeWorthy ? "yes" : "no", 
                 $merged ? "yes" : "no",
@@ -160,6 +161,5 @@
     }
 
-    printf("+----------------------+--------------+--------------+----------------+---------------+---------+----------+\n");
-
+    printf("+----------------------+--------------+--------------+----------------+--------------+--------------+---------+----------+\n");
     printf( "* Successfully checked %d batch%s out of %d\n", $numChecked, ($numChecked==1) ? "" : "es", $numBatchesToCheck);
     printf( "* Successfully removed %d batch%s from the datastore\n", $numRemovedFromDatastore, ($numRemovedFromDatastore==1) ? "" : "es");
@@ -174,5 +174,5 @@
 ########################################################################################
 sub checkODM {
-    my ($batchName, $loadedToOdm, $mergeWorthy, $merged) = @_;
+    my ($batchName, $loadedToOdm, $loadFailed, $mergeWorthy, $merged) = @_;
 
     my $statusFilter = "*";
@@ -194,17 +194,23 @@
 
     my ($tempFile, $tempName) = tempfile( "/tmp/ippToPsps_odmXml.XXXX", UNLINK => !$save_temps);
+    #print $response->content. "\n";
     print $tempFile $response->content;
     close($tempFile);
 
     ${$loadedToOdm} = 0;
+    ${$loadFailed} = 0;
     ${$mergeWorthy} = 0;
     ${$merged} = 0;
 
-    parseXml($tempName, $loadedToOdm, $mergeWorthy, $merged);
+    parseXml($tempName, $loadedToOdm, $loadFailed, $mergeWorthy, $merged);
+
+    unlink($tempFile);
 
     return 1;
 }
 
-######################################################################################y
+
+
+########################################################################################
 # 
 # Parses ODM XML
@@ -212,5 +218,5 @@
 ########################################################################################
 sub parseXml {
-    my ($xmlFile, $loadedToOdm, $mergeWorthy, $merged) = @_;
+    my ($xmlFile, $loadedToOdm, $loadFailed, $mergeWorthy, $merged) = @_;
 
     my $parser = XML::LibXML->new;
@@ -218,5 +224,13 @@
     my $xc = XML::LibXML::XPathContext->new($doc);
     $xc->registerNs('ArrayOfOdmBatchState', 'PanSTARRS.Services.OdmWebService');
-    my $result = $xc->findvalue('//ArrayOfOdmBatchState:Message');
+    my $result = $xc->findvalue('//ArrayOfOdmBatchState:BatchState');
+
+    if ($result =~ m/failed/) { 
+        ${$loadFailed} = 1;
+        ${$loadedToOdm} = 1;
+    return;
+    }
+
+    $result = $xc->findvalue('//ArrayOfOdmBatchState:Message');
     ${$loadedToOdm} = 0;
     ${$mergeWorthy} = 0;
