Adding job handler (Marian)
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 7 Feb 2008 20:25:42 +0000 (20:25 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 7 Feb 2008 20:25:42 +0000 (20:25 +0000)
TPC/macros/testTPC/AliTPCjobs.cxx [new file with mode: 0644]

diff --git a/TPC/macros/testTPC/AliTPCjobs.cxx b/TPC/macros/testTPC/AliTPCjobs.cxx
new file mode 100644 (file)
index 0000000..34493d8
--- /dev/null
@@ -0,0 +1,109 @@
+#include <fstream>
+#include <TFile.h>
+#include <TSystem.h>
+
+/*
+.L $ALICE_ROOT/TPC/macros/testTPC/AliTPCjobs.cxx+
+AliTPCJobs jobs;
+jobs.fJobFile="job.list"
+*/
+class AliTPCJobs : public TNamed{
+public:
+  AliTPCJobs();
+  void ProcessAllJobs();
+  Bool_t GetNextJob();
+  void ProcessJob(TString jobID, TString inputData, TString outputDir, TString   action);
+  
+  void    SetLock(TString jobID);
+  void    SetDone(TString jobID);
+  Bool_t  IsLocked(TString jobID);
+
+  TString  fJobFile;    
+  TString  fWorkDir;
+};
+
+
+AliTPCJobs::AliTPCJobs(){
+  // 
+  //
+  //
+  gSystem->Load("libXrdClient.so");
+  gSystem->Load("libNetx.so");
+}
+
+void AliTPCJobs::ProcessAllJobs(){
+  //
+  //
+  //
+  Int_t counter=0;
+  while (GetNextJob()){
+    //
+    printf("PROCESSING JOB\n",counter);
+    counter++;
+    if (!GetNextJob()) break;   
+  }
+}
+
+
+Bool_t AliTPCJobs::GetNextJob(){
+  ifstream in;
+  in.open(fJobFile);
+  TString id;
+  TString inputData;
+  TString outputDir;
+  TString action;
+  Bool_t hasJob=kFALSE;
+  while(in.good()) {
+    in>>id;
+    in>>inputData;
+    in>>outputDir;
+    in>>action;
+    if (!IsLocked(id)){
+      hasJob=kTRUE;
+      break;
+    }
+  }
+  printf("Process %s\n",id.Data());
+  if (hasJob) ProcessJob(id,inputData,outputDir, action);
+  return hasJob;
+}
+
+
+void    AliTPCJobs::SetLock(TString jobID){
+  printf("touch out/%s.lock\n",jobID.Data());
+  gSystem->Exec(Form("touch out/%s.lock",jobID.Data()));
+}
+
+void    AliTPCJobs::SetDone(TString jobID){ 
+  printf("touch out/%s.done\n",jobID.Data());
+  gSystem->Exec(Form("touch out/%s.done", jobID.Data()));
+}
+
+
+Bool_t    AliTPCJobs::IsLocked(TString jobID){
+  TString path = "out/";
+  path+=jobID;
+  path+=".lock";
+  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);
+}
+
+
+void AliTPCJobs::ProcessJob(TString jobID, TString inputData, TString outputDir, TString   action){
+  //
+  //
+  // 1. Create lock file
+  // 2. Get Input data
+  // 3. Process data
+  // 4. Create Done file
+  SetLock(jobID);
+  if (action.Contains("COPY")){
+    char command[10000];
+      sprintf(command,"xrdcp -d 1 -DIFirstConnectMaxCnt 2 -DIConnectTimeout 2 -DIRequestTimeout 2 -DIMaxRedirectcount 2 -DIRedirCntTimeout 2 %s\t%s\n",inputData.Data(), outputDir.Data());
+    printf("Exec\t%s\n", command);
+    gSystem->Exec(command);
+    //TFile::Cp(inputData.Data(), outputDir.Data());
+  }
+  SetDone(jobID);
+}