(Jens, Marian)
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Apr 2008 14:44:04 +0000 (14:44 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Apr 2008 14:44:04 +0000 (14:44 +0000)
Adding check routines to the agent
- Check availability of SE

Adding staging status information
- Enable staging
- Check if the file is staged

TPC/macros/testTPC/AliTPCjobs.cxx
TPC/macros/testTPC/agent.sh

index 08a23ce..6eda07f 100644 (file)
@@ -34,9 +34,15 @@ public:
   
   void    SetLock(TString jobID);
   void    SetDone(TString jobID);
+  void    SetFail(TString jobID){
+
+  Int_t   Stage(TString inputData,TString jobID);
+
   Bool_t  IsLocked(TString jobID);
+  Bool_t  IsFail(TString jobID);
+  Bool_t  IsStaged(TString inputData);
 
-  TString  fJobFile;    
+  TString  fJobFile;
   TString  fWorkDir;
   ClassDef(AliTPCJobs,0)
 };
@@ -81,6 +87,11 @@ Bool_t AliTPCJobs::GetNextJob(){
     ins>>inputData;
     ins>>outputDir;
     ins>>action;
+    if (!IsStaged(inputData)){
+       Stage(inputData,id);
+       continue;
+    }
+    if (IsFail(id)) continue;
     if (!IsLocked(id)){
       hasJob=kTRUE;
       break;
@@ -102,6 +113,26 @@ void    AliTPCJobs::SetDone(TString jobID){
   gSystem->Exec(Form("touch out/%s.done", jobID.Data()));
 }
 
+void    AliTPCJobs::SetFail(TString jobID){
+  printf("touch out/%s.fail\n",jobID.Data());
+  gSystem->Exec(Form("touch out/%s.fail", jobID.Data()));
+}
+
+void  AliTPCJobs::Stage(TString inputData, TString jobID){
+  //
+  // stage file
+  //
+  inputData.ReplaceAll("root://voalice04.cern.ch:1094/","");
+  char command[1000];
+  sprintf(command,"stager_get -M %s \| grep SUBREQUEST_FAILED ",inputData.Data());
+  FILE *pipe = gSystem->OpenPipe(command,"r");
+  TString result;
+  result.Gets(pipe);
+  gSystem->ClosePipe(pipe);
+  if ( result.Contains("SUBREQUEST_FAILED") ){
+      SetFail(jobID);
+  }
+}
 
 Bool_t    AliTPCJobs::IsLocked(TString jobID){
   TString path = "out/";
@@ -112,6 +143,32 @@ Bool_t    AliTPCJobs::IsLocked(TString jobID){
   return (status==0);
 }
 
+Bool_t    AliTPCJobs::IsLocked(TString jobID){
+  TString path = "out/";
+  path+=jobID;
+  path+=".fail";
+  Long_t pid; Long_t psize; Long_t pflags; Long_t pmodtime;
+  Int_t status = gSystem->GetPathInfo(path,&pid,&psize,&pflags,&pmodtime);
+  return (status==0);
+}
+
+Bool_t  AliTPCJobs::IsStaged(TString inputData){
+  //
+  // check if file bname is staged
+  //
+  inputData.ReplaceAll("root://voalice04.cern.ch:1094/","");
+  char command[1000];
+  sprintf(command,"stager_qry -M %s \| grep /castor \| gawk  \'{ print $3;}\'",inputData.Data());
+  FILE *pipe = gSystem->OpenPipe(command,"r");
+  TString result;
+  result.Gets(pipe);
+  gSystem->ClosePipe(pipe);
+  if ( result.Contains("STAGED") ) return kTRUE;
+
+  return kFALSE;
+}
+
+
 
 void AliTPCJobs::ProcessJob(TString jobID, TString inputData, TString outputDir, TString   action){
   //
@@ -134,8 +191,14 @@ void AliTPCJobs::ProcessJob(TString jobID, TString inputData, TString outputDir,
     gSystem->Exec(command);
     printf("\n\n");
 
-  }
-  
+    // create temp work dir
+//    TString processDir=fWorkDir+jobID+action;
+//    Int_t res = gSystem->mkdir(processDir,kTRUE);
+//    if ( res==-1 ){
+//     AliWarning(Form("Cannot create dir/already exists: '%s'",processDir.Data()));
+//     return;
+//    }
+//  }
   SetDone(jobID);
 }
 
index 3896831..62f4216 100755 (executable)
@@ -34,9 +34,9 @@
 #
 #     CERN SETUP - THIS WILL BE DONE IN USER ENV in future
 #
-export     AGENTINPUTTYPE=2 
+#export     AGENTINPUTTYPE=2 
 #use       0-XRD  1-ALIEN  2-CASTOR
-export     OCDB_PATH=local:///afs/cern.ch/alice/tpctest/OCDB     
+#export     OCDB_PATH=local:///afs/cern.ch/alice/tpctest/OCDB     
 #
 
 
@@ -78,8 +78,51 @@ uname -a
 #export workdir
 export jobhome=`pwd`
 
-cd $1
+#try to cd to workdir
+res=`cd $1 || echo no`
+if [ "x$res" == "xno" ]; then
+  echo "could not cd to workdir '$1'"
+  exit 1
+fi
+
+# check if we are able to write to this dir, the alien SE, can readback from the alien SE and delete stuff
+touch agend_alien_tst.txt || exit 1
+date >> agend_alien_tst.txt
+#copy to alien
+alien_cp -d agend_alien_tst.txt alien:${alien_HOME}agend_alien_tst.txt@$AGENTSE
+
+#see if it is there
+res=`alien_ls ${alien_HOME}agend_alien_tst.txt | grep agend_alien_tst`
+if [ "x$res" == "x" ]; then
+  echo "could not write on storage element '$AGENTSE'"
+  exit 1
+fi
+
+#copy back
+alien_cp -n alien:${alien_HOME}agend_alien_tst.txt agend_alien_tst_back.txt 
+res=`diff agend_alien_tst.txt agend_alien_tst_back.txt`
+if [ "x$res" != "x" ]; then
+  echo "problems reading from storage element '$AGENTSE'"
+  exit 1
+fi
+
+#try to delete from alien
+res=`alien_rm -d ${alien_HOME}agend_alien_tst.txt`
+if [ "x$res" != "x" ]; then
+  echo "cannot delete from storage element '$AGENTSE'"
+  exit 1
+fi
+
+#try to delete local files
+res=`rm agend_alien_tst*`
+if [ "x$res" != "x" ]; then
+  echo "cannot delete local files"
+  exit 1
+fi
+
+
+
 aliroot -b -q $ALICE_ROOT/TPC/macros/testTPC/AliTPCjobs.cxx
 
-#alien_cp -d job.list alien:${alien_HOME}job.list@ALICE::GSI::SE 
+#alien_cp -d job.list alien:${alien_HOME}job.list@$AGENTSE