]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - SHUTTLE/AliShuttle.cxx
doxy: install THtml converter
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttle.cxx
index 556a1f46d30d7520f18fe749c0b62ff869720da6..75d96728b96b0db9b21440ca0c54ac32fb5b43ef 100644 (file)
@@ -1969,7 +1969,7 @@ Bool_t AliShuttle::QueryShuttleLogbook(const char* whereClause,
        }
 
        // TODO Check field count!
-       const UInt_t nCols = 26;
+       const UInt_t nCols = 27;
        if (aResult->GetFieldCount() != (Int_t) nCols) {
                Log("SHUTTLE", "Invalid SQL result field number!");
                delete aResult;
@@ -2140,19 +2140,25 @@ TMap* AliShuttle::GetValueSet(const char* host, Int_t port, const TSeqCollection
        AliDCSClient client(host, port, fTimeout, fRetries, multiSplit);
 
        TMap* result = 0;
+       UInt_t startQuery = GetStartTimeDCSQuery();
+       UInt_t endQuery = GetEndTimeDCSQuery();
+       if (fCurrentDetector == "GRP" && (endQuery - startQuery) <= 120) { // enlarging DCS query for GRP when a run is shorter than 2 minutes (i.e. the time of forced archival of GRP DPs)
+         Log(fCurrentDetector.Data(), Form("GetValueSet: run lasting less than 120 seconds, enlarging DCS window for DPs retrival to 130 s"));
+         startQuery = endQuery - 130; // we add 130 s to be sure that there is something (even if the archival is forced after 120 s)
+       }
+
        if (type == kAlias)
        {
                //result = client.GetAliasValues(entries, GetCurrentStartTime()-offset, 
                //      GetCurrentEndTime()+offset);
-               result = client.GetAliasValues(entries, GetStartTimeDCSQuery(), 
-                       GetEndTimeDCSQuery());
+
+               result = client.GetAliasValues(entries, startQuery, endQuery);         
        } 
        else if (type == kDP)
        {
                //result = client.GetDPValues(entries, GetCurrentStartTime()-offset, 
                //      GetCurrentEndTime()+offset);
-                       result = client.GetDPValues(entries, GetStartTimeDCSQuery(), 
-                       GetEndTimeDCSQuery());
+                       result = client.GetDPValues(entries, startQuery, endQuery);
        }
 
        if (result == 0)
@@ -3690,39 +3696,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()));
-               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; 
+        // 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;
        }
-       if (valueTouch->GetString()!="1"){
-               Log("SHUTTLE",Form("Failing the 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;
        }
-       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()
 {