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()
{