]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - SHUTTLE/AliShuttle.cxx
Check touchfile is not in AliEn before touching it.
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttle.cxx
index 556a1f46d30d7520f18fe749c0b62ff869720da6..45f2b8d4b59ad626da2b3a56c6ae96534b657378 100644 (file)
@@ -3690,39 +3690,63 @@ Bool_t AliShuttle::TouchFile()
        delete resultLs;
        resultLs = 0x0;
 
-       TString command;
-       command.Form("touch %s/%i", dir.Data(), GetCurrentRun());
-       Log("SHUTTLE", Form("Creating entry in file catalog: %s", command.Data()));
-       TGridResult *resultTouch = dynamic_cast<TGridResult*>(gGrid->Command(command));
-       if (!resultTouch){
-               Log("SHUTTLE",Form("No result for touching command, returning without touching for run %i",GetCurrentRun()));
+        // Before trying to touch, check that the file is not already there (the touch would fail forever, leaving the run in pending)
+        TString lsFileCommand;
+        lsFileCommand.Form("ls %s/%i", dir.Data(), GetCurrentRun());
+        TGridResult *resultLsFile = dynamic_cast<TGridResult*>(gGrid->Command(lsFileCommand));
+       if (!resultLsFile){
+               Log("SHUTTLE",Form("No result for file ls command, returning without touching for run %i",GetCurrentRun()));
                return kFALSE;
        }
-       TMap *mapTouch = dynamic_cast<TMap*>(resultTouch->At(0));
-       if (!mapTouch){
-               Log("SHUTTLE",Form("No map for touching command, returning without touching for run %i",GetCurrentRun()));
-               delete resultTouch;
-               resultTouch = 0x0; 
+        TMap *mapLsFile = dynamic_cast<TMap*>(resultLsFile->At(0));
+       if (!mapLsFile){
+               Log("SHUTTLE",Form("No map for file ls command, returning without touching for run %i",GetCurrentRun()));
+               delete resultLsFile;
+               resultLsFile = 0x0; 
                return kFALSE;
        }
-       TObjString *valueTouch = dynamic_cast<TObjString*>(mapTouch->GetValue("__result__"));
-       if (!valueTouch){
-               Log("SHUTTLE",Form("No value for \"__result__\" key set in the map for touching command, returning without touching for run %i",GetCurrentRun()));
-               delete resultTouch;
-               resultTouch = 0x0; 
-               return kFALSE;
-       }
-       if (valueTouch->GetString()!="1"){
-               Log("SHUTTLE",Form("Failing the touching command, returning without touching for run %i",GetCurrentRun()));
-               delete resultTouch;
-               resultTouch = 0x0; 
-               return kFALSE;
-       }
-       delete resultTouch;
-       resultTouch = 0x0; 
-       Log("SHUTTLE", "Sucessfully touched the file");
-       return kTRUE;
+       TObjString *valueLsFile = dynamic_cast<TObjString*>(mapLsFile->GetValue("name"));
+       if (valueLsFile){
+               Log("SHUTTLE",Form("\"name\" key set in the map for file ls command. Touchfile for run %i already there.",GetCurrentRun()));
+                Log("SHUTTLE", "The file was already there, did not touch it.");
+        }else{
+                TString command;
+                command.Form("touch %s/%i", dir.Data(), GetCurrentRun());
+                Log("SHUTTLE", Form("Creating entry in file catalog: %s", command.Data()));
+                TGridResult *resultTouch = dynamic_cast<TGridResult*>(gGrid->Command(command));
+                if (!resultTouch){
+                        Log("SHUTTLE",Form("No result for touching command, returning without touching for run %i",GetCurrentRun()));
+                        return kFALSE;
+                }
+                TMap *mapTouch = dynamic_cast<TMap*>(resultTouch->At(0));
+                if (!mapTouch){
+                        Log("SHUTTLE",Form("No map for touching command, returning without touching for run %i",GetCurrentRun()));
+                        delete resultTouch;
+                        resultTouch = 0x0; 
+                        return kFALSE;
+                }
+                TObjString *valueTouch = dynamic_cast<TObjString*>(mapTouch->GetValue("__result__"));
+                if (!valueTouch){
+                        Log("SHUTTLE",Form("No value for \"__result__\" key set in the map for touching command, returning without touching for run %i",GetCurrentRun()));
+                        delete resultTouch;
+                        resultTouch = 0x0; 
+                        return kFALSE;
+                }
+                if (valueTouch->GetString()!="1"){
+                        Log("SHUTTLE",Form("Failing the touching command, returning without touching for run %i",GetCurrentRun()));
+                        delete resultTouch;
+                        resultTouch = 0x0; 
+                        return kFALSE;
+                }
+                delete resultLsFile;
+                resultLsFile = 0x0; 
+                delete resultTouch;
+                resultTouch = 0x0;
+                Log("SHUTTLE", "Sucessfully touched the file");
+        }
+        return kTRUE;
 }
+
 //______________________________________________________________________________________________
 UInt_t AliShuttle::GetStartTimeDCSQuery()
 {