19 #define TSelVerifyDataSet_cxx
37 ClassImp(TSelVerifyDataSet);
42 TSelVerifyDataSet::TSelVerifyDataSet(TTree *)
50 TSelVerifyDataSet::TSelVerifyDataSet()
58 void TSelVerifyDataSet::InitMembers()
89 void TSelVerifyDataSet::SlaveBegin(TTree *)
93 TNamed* par =
dynamic_cast<TNamed*
>(fInput->FindObject(
"PROOF_VerifyDataSet"));
95 dsname = par->GetTitle();
97 Abort(
"cannot find dataset name: cannot continue", kAbortProcess);
101 par =
dynamic_cast<TNamed*
>(fInput->FindObject(
"PROOF_VerifyDataSetOption"));
103 opts = par->GetTitle();
105 Abort(
"cannot find verify options: cannot continue", kAbortProcess);
109 par =
dynamic_cast<TNamed*
>(fInput->FindObject(
"PROOF_MSS"));
111 fMss = par->GetTitle();
112 PDB(kSelector, 2) Info("SlaveBegin", "dataset MSS: '%s'", fMss.Data());
115 par = dynamic_cast<TNamed*>(fInput->FindObject("PROOF_StageOption"));
117 fStageopts = par->GetTitle();
118 PDB(kSelector, 2) Info("SlaveBegin", "dataset stage options: '%s'", fStageopts.Data());
123 if (!opts.IsNull()) {
125 if (strstr(opts,
"allfiles:") || strchr(opts,
'A'))
126 o |= TDataSetManager::kAllFiles;
127 else if (strstr(opts,
"staged:") || strchr(opts,
'D'))
128 o |= TDataSetManager::kStagedFiles;
130 if (strstr(opts,
"open:") || strchr(opts,
'O'))
131 o |= TDataSetManager::kReopen;
132 if (strstr(opts,
"touch:") || strchr(opts,
'T'))
133 o |= TDataSetManager::kTouch;
134 if (strstr(opts,
"nostagedcheck:") || strchr(opts,
'I'))
135 o |= TDataSetManager::kNoStagedCheck;
137 if (strstr(opts,
"noaction:") || strchr(opts,
'N'))
138 o |= TDataSetManager::kNoAction;
139 if (strstr(opts,
"locateonly:") || strchr(opts,
'L'))
140 o |= TDataSetManager::kLocateOnly;
141 if (strstr(opts,
"stageonly:") || strchr(opts,
'S'))
142 o |= TDataSetManager::kStageOnly;
144 if (strstr(opts,
"verbose:") || strchr(opts,
'V'))
145 o |= TDataSetManager::kDebug;
148 o = TDataSetManager::kReopen | TDataSetManager::kDebug;
151 PDB(kSelector, 1) Info("SlaveBegin", "o=%d", o);
153 fFopt = ((o & TDataSetManager::kAllFiles)) ? -1 : 0;
155 if ((o & TDataSetManager::kStagedFiles)) {
158 if ((o & TDataSetManager::kReopen)) fFopt++;
159 if ((o & TDataSetManager::kTouch)) fFopt++;
161 if ((o & TDataSetManager::kNoStagedCheck)) fFopt += 100;
163 if ((o & TDataSetManager::kStagedFiles) || (o & TDataSetManager::kReopen) || (o & TDataSetManager::kTouch)) {
164 Warning(
"SlaveBegin",
"kAllFiles mode: ignoring kStagedFiles or kReopen"
165 " or kTouch requests");
167 if ((o & TDataSetManager::kNoStagedCheck)) fFopt -= 100;
169 PDB(kSelector, 1) Info("SlaveBegin", "fFopt=%d", fFopt);
172 fSopt = ((o & TDataSetManager::kNoAction)) ? -1 : 0;
174 if ((o & TDataSetManager::kLocateOnly) && (o & TDataSetManager::kStageOnly)) {
175 Error(
"SlaveBegin",
"kLocateOnly and kStageOnly cannot be processed concurrently");
178 if ((o & TDataSetManager::kLocateOnly)) fSopt = 1;
179 if ((o & TDataSetManager::kStageOnly)) fSopt = 2;
180 }
else if ((o & TDataSetManager::kLocateOnly) || (o & TDataSetManager::kStageOnly)) {
181 Warning(
"SlaveBegin",
"kNoAction mode: ignoring kLocateOnly or kStageOnly requests");
183 PDB(kSelector, 1) Info("SlaveBegin", "fSopt=%d", fSopt);
185 fDbg = ((o & TDataSetManager::kDebug)) ? kTRUE : kFALSE;
188 fAllf = (fFopt == -1) ? kTRUE : kFALSE;
189 fCheckstg = (fFopt >= 100 || fFopt < -1) ? kFALSE : kTRUE;
190 if (fFopt >= 0) fFopt %= 100;
191 fNonStgf = (fFopt >= 0 && fFopt < 10) ? kTRUE : kFALSE;
192 fReopen = (fFopt >= 1 && fFopt < 10) ? kTRUE : kFALSE;
193 fTouch = (fFopt >= 2 && fFopt < 10) ? kTRUE : kFALSE;
194 fStgf = (fFopt == 10) ? kTRUE : kFALSE;
196 PDB(kSelector, 1) Info("SlaveBegin",
197 "fAllf=%d fCheckstg=%d fNonStgf=%d fReopen=%d fTouch=%d fStgf=%d",
198 fAllf, fCheckstg, fNonStgf, fReopen, fTouch, fStgf);
201 fNoaction = (fSopt == -1) ? kTRUE : kFALSE;
202 fFullproc = (fSopt == 0) ? kTRUE : kFALSE;
203 fLocateonly = (fSopt == 1) ? kTRUE : kFALSE;
204 fStageonly = (fSopt == 2) ? kTRUE : kFALSE;
206 PDB(kSelector, 1) Info("SlaveBegin",
207 "fNoaction=%d fFullproc=%d fLocateonly=%d fStageonly=%d",
208 fNoaction, fFullproc, fLocateonly, fStageonly);
211 fDoall = (fRopt == 0) ? kTRUE : kFALSE;
212 fGetlistonly = (fRopt == 1) ? kTRUE : kFALSE;
213 fScanlist = (fRopt == 2) ? kTRUE : kFALSE;
215 PDB(kSelector, 1) Info("SlaveBegin",
216 "fDoall=%d fGetlistonly=%d fScanlist=%d",
217 fDoall, fGetlistonly, fScanlist);
219 TString hostname(TUrl(gSystem->HostName()).GetHostFQDN());
220 TString thisordinal = gProofServ ? gProofServ->GetOrdinal() : "n.d";
222 TString::Format("TSelVerifyDataSet_%s_%s", hostname.Data(), thisordinal.Data());
223 fSubDataSet= new TFileCollection(dsname, title);
229 Bool_t TSelVerifyDataSet::Process(Long64_t entry)
231 TDSetElement *fCurrent = 0;
233 if (fInput && (elemPair = dynamic_cast<TPair *>
234 (fInput->FindObject(
"PROOF_CurrentElement")))) {
235 if ((fCurrent = dynamic_cast<TDSetElement *>(elemPair->Value())))
236 Info(
"Process",
"entry %lld: file: '%s'", entry, fCurrent->GetName());
239 Error(
"Process",
"entry %lld: current element not found!", entry);
243 TFileInfo *fileInfo =
dynamic_cast<TFileInfo*
>(fCurrent->GetAssocObj(0));
245 Error(
"Process",
"can not get TFileInfo; returning");
250 Info(
"Process",
"input fileinfo: ");
251 fileInfo->Print(
"L");
254 TFileStager *stager = 0;
255 Bool_t createStager = kFALSE;
257 TFileInfo* newfileinfo =
new TFileInfo(*fileInfo);
258 newfileinfo->SetIndex(fileInfo->GetIndex());
260 if (fDoall || fGetlistonly) {
262 stager = (fMss && strlen(fMss) > 0) ? TFileStager::Open(fMss) : 0;
263 createStager = (stager) ? kFALSE : kTRUE;
269 gSystem->DispatchOneEvent(kTRUE);
271 Bool_t changed = kFALSE;
272 Bool_t touched = kFALSE;
273 Bool_t disappeared = kFALSE;
275 TDataSetManager::CheckStagedStatus(newfileinfo, fFopt, -1, 0, stager, createStager,
276 fDbg, changed, touched, disappeared);
278 if (changed) fChangedDs = kTRUE;
279 if (touched) fTouched++;
280 if (disappeared) fDisappeared++;
284 PDB(kSelector, 1) Info("Process",
285 "fChangedDs = %d, fTouched = %d disappeared = %d",
286 fChangedDs, fTouched, fDisappeared);
290 Info(
"Process",
"updated fileinfo: ");
291 newfileinfo->Print(
"F");
292 fSubDataSet->Add(newfileinfo);
297 if (!fNoaction && (fDoall || fScanlist)) {
301 if (!fDoall && fScanlist) {
302 SafeDelete(newfileinfo);
303 newfileinfo =
new TFileInfo(*fileInfo);
304 newfileinfo->SetIndex(fileInfo->GetIndex());
308 PDB(kSelector, 1) Info("Process",
309 "file appear to be newly staged; %s",
310 newfileinfo->GetFirstUrl()->GetUrl());
313 if (fLocateonly || fStageonly) {
314 stager = (fMss && strlen(fMss) > 0) ? TFileStager::Open(fMss) : 0;
315 createStager = (stager) ? kFALSE : kTRUE;
319 Bool_t changed = kFALSE;
320 Bool_t opened = kFALSE;
321 TDataSetManager::ProcessFile(newfileinfo, fSopt, fCheckstg, fDoall, stager, createStager, fStageopts,
322 fDbg, changed, opened);
324 if (changed) fChangedDs = kTRUE;
325 if (opened) fOpened++;
329 Info(
"Process",
"updated fileinfo: ");
330 newfileinfo->Print(
"L");
332 fSubDataSet->Add(newfileinfo);
340 void TSelVerifyDataSet::SlaveTerminate()
343 fSubDataSet->Update();
344 if (fSubDataSet->GetNFiles() > 0) {
345 fOutput->Add(fSubDataSet);
346 Info(
"SlaveTerminate",
347 "sub-dataset '%s' added to the output list (%lld files)",
348 fSubDataSet->GetTitle(), fSubDataSet->GetNFiles());
351 fOutput->Add(
new TNamed(TString::Format(
"DATASET_%s", fSubDataSet->GetName()).Data(),
"OT:sortidx:"));
352 fOutput->Add(
new TNamed(
"PROOFSERV_RegisterDataSet",
""));
356 TString hostname(TUrl(gSystem->HostName()).GetHostFQDN());
357 TString thisordinal = gProofServ ? gProofServ->GetOrdinal() :
"n.d";
358 TString sfdisppeared= TString::Format(
"PROOF_NoFilesDisppeared_%s_%s", hostname.Data(), thisordinal.Data());
359 fOutput->Add(
new TParameter<Int_t>(sfdisppeared.Data(), fDisappeared));
360 TString sfOpened= TString::Format(
"PROOF_NoFilesOpened_%s_%s", hostname.Data(), thisordinal.Data());
361 fOutput->Add(
new TParameter<Int_t>(sfOpened.Data(), fOpened));
362 TString sfTouched = TString::Format(
"PROOF_NoFilesTouched_%s_%s", hostname.Data(), thisordinal.Data());
363 fOutput->Add(
new TParameter<Int_t>(sfTouched.Data(), fTouched));
364 TString schanged= TString::Format(
"PROOF_DataSetChanged_%s_%s", hostname.Data(), thisordinal.Data());
365 fOutput->Add(
new TParameter<Bool_t>(schanged.Data(), fChangedDs));