Implemented merging in stages. Instead of submitting one merging job per master,...
authoragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 29 Jul 2010 13:24:29 +0000 (13:24 +0000)
committeragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 29 Jul 2010 13:24:29 +0000 (13:24 +0000)
commit7c2cd90ace88ee052cb64c5a4765b321aaa77261
treebd09cae25c176a88decf3854e66ed37ce40efd11
parent732bb806215a5e0561b4549df8d57fb53c8111bc
Implemented merging in stages. Instead of submitting one merging job per master, the plugin now sends nfiles/nperchunk+1 jobs, each merging a subset of nperchunk files.
The number of files merged in a chunk is the one set via: plugin->SetMaxMergeFiles(nperchunk)
This works only when having the plugin in SetMergeViaJDL() mode. Running the analysis with the plugin in in "terminate" mode will submit merging at stage 1. When the submitted merging jobs are in a final state, the user can rerun in "terminate" mode. This will either resubmit the jobs that failed in the previous stage or just submit jobs for the next stage.
When the current stage fulfills nfiles_for_stage_N <= nperchunk, the final merging job will also run the analysis in "terminate" mode.
The intermediate files are calles: output-Stage%02d_%04d and are NOT cleaned up in the current implementation - the user should do it.
Note: Do NOT run "terminate" mode if existing merging jobs are not yet in a final state, as this will resubmit ALL jobs that have not yet registered their output, even if these are successful.

Run scenario:
1. Analysis via plugin using:
  plugin->SetMergeViaJDL();
  plugin->SetMaxMergeFiles(10);
  plugin->SetRunMode("full")
...
  mgr->StartAnalysis("grid")
This will submit a master job which is split say in 1000 jobs, each producing output1.root, ..., outputN.root

2. All jobs finished (maybe after resubmission) even if some failed (due to corrupted inputs or whatever)
We are left with 980 successful jobs.
  plugin->SetRunMode("terminate")
...
  mgr->StartAnalysis("grid")
This will submit 980/10 meging jobs. The K-th job will produce for the output N the file: output-Stage01_000K.root
Wait until jobs are done, resubmit failing ones -> ALL merging jobs must succeed

3. We have now 98 Stage01 merged files. Redoing step 2 will submit 98/10+1=10 jobs stage 2.
These will produce 10 files outputN-Stage02_000K.root

4. Redoing stage 2 when these jobs finished, the plugin will submit finally a single merging job.
After merging, the job will run the analysis "terminate" phase.
ANALYSIS/AliAnalysisAlien.cxx
ANALYSIS/AliAnalysisAlien.h