]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliCDBManager.cxx
Protection added in case no ESD files have been chained.
[u/mrichter/AliRoot.git] / STEER / AliCDBManager.cxx
CommitLineData
9e1ceb13 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
fdf65bb5 15//-------------------------------------------------------------------------
16// Implementation of AliCDBManager and AliCDBParam classe
17// Author: Alberto Colla
18// e-mail: Alberto.Colla@cern.ch
19//-------------------------------------------------------------------------
9e1ceb13 20
21#include "AliCDBManager.h"
22#include "AliCDBStorage.h"
23#include "AliLog.h"
24#include "AliCDBDump.h"
25#include "AliCDBLocal.h"
26#include "AliCDBGrid.h"
02c4845e 27#include "AliCDBEntry.h"
7de84b33 28#include "AliCDBHandler.h"
9e1ceb13 29
02c4845e 30#include <TObjString.h>
7de84b33 31#include <TSAXParser.h>
32#include <TFile.h>
33#include <TUUID.h>
27cac7e3 34#include <TGrid.h>
9e1ceb13 35
36ClassImp(AliCDBParam)
37
38ClassImp(AliCDBManager)
39
b8ec52f6 40//TODO OCDB and Reference folder should not be fully hardcoded but built from run number (or year/LHC period)
41TString AliCDBManager::fgkCondUri("alien://folder=/alice/cern.ch/user/a/aliprod/testCDB/CDB?user=aliprod");
42TString AliCDBManager::fgkRefUri("alien://folder=/alice/cern.ch/user/a/aliprod/testCDB/Reference?user=aliprod");
7de84b33 43TString AliCDBManager::fgkMCIdealStorage("alien://folder=/alice/simulation/2008/v4-15-Release/Ideal");
44TString AliCDBManager::fgkMCFullStorage("alien://folder=/alice/simulation/2008/v4-15-Release/Full");
45TString AliCDBManager::fgkMCResidualStorage("alien://folder=/alice/simulation/2008/v4-15-Release/Residual");
46TString AliCDBManager::fgkOCDBFolderXMLfile("alien:///alice/data/OCDBFoldervsRunRange.xml");
9e1ceb13 47AliCDBManager* AliCDBManager::fgInstance = 0x0;
48
49//_____________________________________________________________________________
d1982b43 50AliCDBManager* AliCDBManager::Instance(TMap *entryCache, Int_t run)
b8ec52f6 51{
9e1ceb13 52// returns AliCDBManager instance (singleton)
53
54 if (!fgInstance) {
55 fgInstance = new AliCDBManager();
d1982b43 56 if (!entryCache)
57 fgInstance->Init();
58 else
59 fgInstance->InitFromCache(entryCache,run);
9e1ceb13 60 }
61
62 return fgInstance;
63}
64
65//_____________________________________________________________________________
66void AliCDBManager::Init() {
67// factory registering
68
69 RegisterFactory(new AliCDBDumpFactory());
70 RegisterFactory(new AliCDBLocalFactory());
71 // AliCDBGridFactory is registered only if AliEn libraries are enabled in Root
72 if(!gSystem->Exec("root-config --has-alien |grep yes 2>&1 > /dev/null")){ // returns 0 if yes
73 AliInfo("AliEn classes enabled in Root. AliCDBGrid factory registered.");
74 RegisterFactory(new AliCDBGridFactory());
b8ec52f6 75 fCondParam = CreateParameter(fgkCondUri);
76 fRefParam = CreateParameter(fgkRefUri);
9e1ceb13 77 }
4667c116 78
79 InitShortLived();
9e1ceb13 80}
d1982b43 81
82//_____________________________________________________________________________
83void AliCDBManager::InitFromCache(TMap *entryCache, Int_t run) {
84// initialize manager from existing cache
85// used on the slaves in case of parallel reconstruction
86 SetRun(run);
87
88 TIter iter(entryCache->GetTable());
89 TPair* pair = 0;
90
91 while((pair = dynamic_cast<TPair*> (iter.Next()))){
92 fEntryCache.Add(pair->Key(),pair->Value());
93 }
94 // fEntry is the new owner of the cache
95 fEntryCache.SetOwnerKeyValue(kTRUE,kTRUE);
77d2efce 96 entryCache->SetOwnerKeyValue(kFALSE,kFALSE);
d1982b43 97 AliInfo(Form("%d cache entries have been loaded",fEntryCache.GetEntries()));
98}
99
9e1ceb13 100//_____________________________________________________________________________
101void AliCDBManager::Destroy() {
102// delete ALCDBManager instance and active storages
103
104 if (fgInstance) {
4b5e0dce 105 //fgInstance->Delete();
9e1ceb13 106 delete fgInstance;
107 fgInstance = 0x0;
108 }
109}
110
111//_____________________________________________________________________________
112AliCDBManager::AliCDBManager():
fe12e09c 113 TObject(),
114 fFactories(),
115 fActiveStorages(),
116 fSpecificStorages(),
b21e3194 117 fEntryCache(),
118 fIds(0),
119 fStorageMap(0),
120 fShortLived(0),
fe12e09c 121 fDefaultStorage(NULL),
122 fDrainStorage(NULL),
b21e3194 123 fCondParam(0),
124 fRefParam(0),
4667c116 125 fRun(-1),
1f341624 126 fCache(kTRUE),
7de84b33 127 fLock(kFALSE),
128 fRaw(kFALSE),
129 fStartRunLHCPeriod(-1),
130 fEndRunLHCPeriod(-1),
a6f59240 131 fLHCPeriod(""),
132 fKey(0)
9e1ceb13 133{
134// default constuctor
4b5e0dce 135 fFactories.SetOwner(1);
62032124 136 fActiveStorages.SetOwner(1);
137 fSpecificStorages.SetOwner(1);
d1982b43 138 fEntryCache.SetName("CDBEntryCache");
77d2efce 139 fEntryCache.SetOwnerKeyValue(kTRUE,kTRUE);
b21e3194 140
141 fStorageMap = new TMap();
142 fStorageMap->SetOwner(1);
143 fIds = new TList();
144 fIds->SetOwner(1);
9e1ceb13 145}
146
147//_____________________________________________________________________________
148AliCDBManager::~AliCDBManager() {
149// destructor
4b5e0dce 150 ClearCache();
9e1ceb13 151 DestroyActiveStorages();
62032124 152 fFactories.Delete();
b05400be 153 fDrainStorage = 0x0;
154 fDefaultStorage = 0x0;
b21e3194 155 delete fStorageMap; fStorageMap = 0;
156 delete fIds; fIds = 0;
b8ec52f6 157 delete fCondParam;
158 delete fRefParam;
4667c116 159 delete fShortLived; fShortLived = 0x0;
9e1ceb13 160}
161
9e1ceb13 162//_____________________________________________________________________________
163void AliCDBManager::PutActiveStorage(AliCDBParam* param, AliCDBStorage* storage){
164// put a storage object into the list of active storages
165
166 fActiveStorages.Add(param, storage);
167 AliDebug(1, Form("Active storages: %d", fActiveStorages.GetEntries()));
168}
169
170//_____________________________________________________________________________
171void AliCDBManager::RegisterFactory(AliCDBStorageFactory* factory) {
172// add a storage factory to the list of registerd factories
173
174 if (!fFactories.Contains(factory)) {
175 fFactories.Add(factory);
176 }
177}
178
179//_____________________________________________________________________________
fdf65bb5 180Bool_t AliCDBManager::HasStorage(const char* dbString) const {
b21e3194 181// check if dbString is a URI valid for one of the registered factories
9e1ceb13 182
183 TIter iter(&fFactories);
184
62032124 185 AliCDBStorageFactory* factory=0;
9e1ceb13 186 while ((factory = (AliCDBStorageFactory*) iter.Next())) {
187
188 if (factory->Validate(dbString)) {
189 return kTRUE;
4005d0b5 190 }
9e1ceb13 191 }
192
193 return kFALSE;
194}
195
196//_____________________________________________________________________________
fdf65bb5 197AliCDBParam* AliCDBManager::CreateParameter(const char* dbString) const {
9e1ceb13 198// create AliCDBParam object from URI string
199
200 TIter iter(&fFactories);
7de84b33 201
62032124 202 AliCDBStorageFactory* factory=0;
9e1ceb13 203 while ((factory = (AliCDBStorageFactory*) iter.Next())) {
9e1ceb13 204 AliCDBParam* param = factory->CreateParameter(dbString);
62032124 205 if(param) return param;
9e1ceb13 206 }
207
208 return NULL;
209}
210
211//_____________________________________________________________________________
212AliCDBStorage* AliCDBManager::GetStorage(const char* dbString) {
213// get storage object from URI string
1f341624 214
9e1ceb13 215 AliCDBParam* param = CreateParameter(dbString);
216 if (!param) {
c3a7b59a 217 AliError(Form("Failed to activate requested storage! Check URI: %s", dbString));
9e1ceb13 218 return NULL;
82096dfc 219 }
9e1ceb13 220
221 AliCDBStorage* aStorage = GetStorage(param);
222
223 delete param;
9e1ceb13 224 return aStorage;
225}
226
227//_____________________________________________________________________________
228AliCDBStorage* AliCDBManager::GetStorage(const AliCDBParam* param) {
229// get storage object from AliCDBParam object
1f341624 230
82096dfc 231 // if the list of active storages already contains
9e1ceb13 232 // the requested storage, return it
233 AliCDBStorage* aStorage = GetActiveStorage(param);
234 if (aStorage) {
235 return aStorage;
236 }
237
1f341624 238 // if lock is ON, cannot activate more storages!
239 if(fLock) {
240 if (fDefaultStorage) {
241 AliFatal("Lock is ON, and default storage is already set: "
242 "cannot reset it or activate more storages!");
243 }
244 }
245
9e1ceb13 246 TIter iter(&fFactories);
247
62032124 248 AliCDBStorageFactory* factory=0;
917a098b 249
9e1ceb13 250 // loop on the list of registered factories
251 while ((factory = (AliCDBStorageFactory*) iter.Next())) {
252
253 // each factory tries to create its storage from the parameter
254 aStorage = factory->Create(param);
255 if (aStorage) {
256 PutActiveStorage(param->CloneParam(), aStorage);
917a098b 257 aStorage->SetURI(param->GetURI());
6dc56e97 258 if(fRun >= 0) {
96b7636d 259 if(aStorage->GetType() == "alien"){
260 aStorage->QueryCDB(fRun);
261 } else {
262 AliDebug(2,
263 "Skipping query for valid files, it is used only in grid...");
264 }
c3a7b59a 265 }
9e1ceb13 266 return aStorage;
267 }
268 }
269
c3a7b59a 270 AliError(Form("Failed to activate requested storage! Check URI: %s", param->GetURI().Data()));
271
9e1ceb13 272 return NULL;
273}
274
62032124 275//_____________________________________________________________________________
276AliCDBStorage* AliCDBManager::GetActiveStorage(const AliCDBParam* param) {
277// get a storage object from the list of active storages
278
279 return dynamic_cast<AliCDBStorage*> (fActiveStorages.GetValue(param));
280}
281
9e1ceb13 282//_____________________________________________________________________________
283TList* AliCDBManager::GetActiveStorages() {
284// return list of active storages
62032124 285// user has responsibility to delete returned object
9e1ceb13 286
287 TList* result = new TList();
288
917a098b 289 TIter iter(fActiveStorages.GetTable());
62032124 290 TPair* aPair=0;
9e1ceb13 291 while ((aPair = (TPair*) iter.Next())) {
292 result->Add(aPair->Value());
293 }
294
295 return result;
296}
297
298//_____________________________________________________________________________
299void AliCDBManager::SetDrain(const char* dbString) {
300// set drain storage from URI string
301
302 fDrainStorage = GetStorage(dbString);
303}
304
305//_____________________________________________________________________________
306void AliCDBManager::SetDrain(const AliCDBParam* param) {
307// set drain storage from AliCDBParam
b8ec52f6 308
9e1ceb13 309 fDrainStorage = GetStorage(param);
310}
311
312//_____________________________________________________________________________
313void AliCDBManager::SetDrain(AliCDBStorage* storage) {
314// set drain storage from another active storage
315
316 fDrainStorage = storage;
317}
318
319//_____________________________________________________________________________
320Bool_t AliCDBManager::Drain(AliCDBEntry *entry) {
321// drain retrieved object to drain storage
322
b8ec52f6 323 AliDebug(2, "Draining into drain storage...");
9e1ceb13 324 return fDrainStorage->Put(entry);
325}
326
7de84b33 327//____________________________________________________________________________
9e1ceb13 328void AliCDBManager::SetDefaultStorage(const char* dbString) {
329// sets default storage from URI string
1f341624 330
7de84b33 331 // checking whether we are in the raw case
332 TString dbStringTemp(dbString);
27cac7e3 333 if (dbStringTemp == "raw://")
334 {
335 fRaw = kTRUE;
336 AliInfo("Setting the run-number will set the corresponding OCDB for raw data reconstruction.");
cdc36cbf 337 AliInfo("Connecting to the grid...");
338 if(!gGrid) {
339 TGrid::Connect("alien://","");
340 if(!gGrid) {
341 AliError("Connection to alien failed!");
342 return;
343 }
344 }
27cac7e3 345 return;
346 }
7de84b33 347
348 AliCDBStorage* bckStorage = fDefaultStorage;
349
82096dfc 350 fDefaultStorage = GetStorage(dbString);
95c0e132 351
352 if(!fDefaultStorage) return;
7de84b33 353
4954c5cd 354 if(bckStorage && (fDefaultStorage != bckStorage)){
355 AliWarning("Existing default storage replaced: clearing cache!");
356 ClearCache();
357 }
7de84b33 358
b21e3194 359 if (fStorageMap->Contains("default")) {
360 delete fStorageMap->Remove(fStorageMap->GetValue("default"));
361 }
362 fStorageMap->Add(new TObjString("default"), new TObjString(fDefaultStorage->GetURI()));
9e1ceb13 363}
9e1ceb13 364//_____________________________________________________________________________
365void AliCDBManager::SetDefaultStorage(const AliCDBParam* param) {
366// set default storage from AliCDBParam object
1f341624 367
4954c5cd 368 AliCDBStorage* bckStorage = fDefaultStorage;
369
b8ec52f6 370 fDefaultStorage = GetStorage(param);
4954c5cd 371
95c0e132 372 if(!fDefaultStorage) return;
373
4954c5cd 374 if(bckStorage && (fDefaultStorage != bckStorage)){
375 AliWarning("Existing default storage replaced: clearing cache!");
376 ClearCache();
377 }
b21e3194 378
379 if (fStorageMap->Contains("default")) {
380 delete fStorageMap->Remove(fStorageMap->GetValue("default"));
381 }
382 fStorageMap->Add(new TObjString("default"), new TObjString(fDefaultStorage->GetURI()));
9e1ceb13 383}
384
385//_____________________________________________________________________________
386void AliCDBManager::SetDefaultStorage(AliCDBStorage* storage) {
387// set default storage from another active storage
1f341624 388
389 // if lock is ON, cannot activate more storages!
390 if(fLock) {
391 if (fDefaultStorage) {
392 AliFatal("Lock is ON, and default storage is already set: "
393 "cannot reset it or activate more storages!");
394 }
395 }
396
397 if (!storage) {
398 UnsetDefaultStorage();
399 return;
400 }
401
4954c5cd 402 AliCDBStorage* bckStorage = fDefaultStorage;
403
9e1ceb13 404 fDefaultStorage = storage;
4954c5cd 405
406 if(bckStorage && (fDefaultStorage != bckStorage)){
407 AliWarning("Existing default storage replaced: clearing cache!");
408 ClearCache();
409 }
b21e3194 410
411 if (fStorageMap->Contains("default")) {
412 delete fStorageMap->Remove(fStorageMap->GetValue("default"));
413 }
414 fStorageMap->Add(new TObjString("default"), new TObjString(fDefaultStorage->GetURI()));
9e1ceb13 415}
4667c116 416
7de84b33 417//_____________________________________________________________________________
418void AliCDBManager::SetDefaultStorage(const char* mcString, const char* simType) {
419// sets default storage for MC data
420// mcString MUST be "MC",
421// simType can be "Ideal","Residual","Full"
422
423 TString strmcString(mcString);
424 TString strsimType(simType);
425 TString dbString;
426 if (strmcString != "MC"){
427 AliFatal("Method requires first string to be MC!");
428 }
429 else {
430 if (strsimType == "Ideal"){
431 dbString = fgkMCIdealStorage;
432 }
433 else if (strsimType == "Full"){
434 dbString = fgkMCFullStorage;
435 }
436 else if (strsimType == "Residual"){
437 dbString = fgkMCResidualStorage;
438 }
439 else {
440 AliFatal("Error in setting the storage for MC data, second argument MUST be either \"Ideal\" or \"Full\" or \"Residual\".");
441 }
442
443 SetDefaultStorage(dbString.Data());
444 if(!fDefaultStorage) AliFatal(Form("%s storage not there! Please check!",fLHCPeriod.Data()));
445 }
446}
447//_____________________________________________________________________________
448void AliCDBManager::SetDefaultStorageFromRun(Int_t run) {
449// set default storage from the run number - to be used only with raw data
450
451 // if lock is ON, cannot activate more storages!
452 if(fLock) {
453 if (fDefaultStorage) {
454 AliFatal("Lock is ON, and default storage is already set: "
455 "cannot activate default storage from run number");
456 }
457 }
458
459 // retrieve XML file from alien
27cac7e3 460 if(!gGrid) {
461 TGrid::Connect("alien://","");
462 if(!gGrid) {
463 AliError("Connection to alien failed!");
464 return;
465 }
466 }
7de84b33 467 TUUID uuid;
468 TString rndname = "/tmp/";
469 rndname += "OCDBFolderXML.";
470 rndname += uuid.AsString();
471 rndname += ".xml";
472 AliDebug(2, Form("file to be copied = %s", fgkOCDBFolderXMLfile.Data()));
473 if (!TFile::Cp(fgkOCDBFolderXMLfile.Data(), rndname.Data())) {
474 AliFatal(Form("Cannot make a local copy of OCDBFolder xml file in %s",rndname.Data()));
475 }
476 AliCDBHandler* saxcdb = new AliCDBHandler();
477 saxcdb->SetRun(run);
478 TSAXParser *saxParser = new TSAXParser();
479 saxParser->ConnectToHandler("AliCDBHandler", saxcdb);
480 saxParser->ParseFile(rndname.Data());
481 AliInfo(Form(" LHC folder = %s", saxcdb->GetOCDBFolder().Data()));
482 AliInfo(Form(" LHC period start run = %d", saxcdb->GetStartRunRange()));
483 AliInfo(Form(" LHC period end run = %d", saxcdb->GetEndRunRange()));
484 fLHCPeriod = saxcdb->GetOCDBFolder();
485 fStartRunLHCPeriod = saxcdb->GetStartRunRange();
486 fEndRunLHCPeriod = saxcdb->GetEndRunRange();
487
488 SetDefaultStorage(fLHCPeriod.Data());
489 if(!fDefaultStorage) AliFatal(Form("%s storage not there! Please check!",fLHCPeriod.Data()));
490
491}
492
4667c116 493//_____________________________________________________________________________
1f341624 494void AliCDBManager::UnsetDefaultStorage() {
495// Unset default storage
496
497 // if lock is ON, action is forbidden!
498 if(fLock) {
499 if (fDefaultStorage) {
500 AliFatal("Lock is ON: cannot unset default storage!");
501 }
502 }
503
504 if (fDefaultStorage) {
505 AliWarning("Clearing cache!");
506 ClearCache();
507 }
508
509 fDefaultStorage = 0x0;
4667c116 510}
9e1ceb13 511
02c4845e 512//_____________________________________________________________________________
024cf675 513void AliCDBManager::SetSpecificStorage(const char* calibType, const char* dbString) {
514// sets storage specific for detector or calibration type (works with AliCDBManager::Get(...))
02c4845e 515
516 AliCDBParam *aPar = CreateParameter(dbString);
517 if(!aPar) return;
024cf675 518 SetSpecificStorage(calibType, aPar);
02c4845e 519 delete aPar;
520}
521
522//_____________________________________________________________________________
024cf675 523void AliCDBManager::SetSpecificStorage(const char* calibType, AliCDBParam* param) {
524// sets storage specific for detector or calibration type (works with AliCDBManager::Get(...))
525// Default storage should be defined prior to any specific storages, e.g.:
526// AliCDBManager::instance()->SetDefaultStorage("alien://");
c3a7b59a 527// AliCDBManager::instance()->SetSpecificStorage("TPC/*","local://DB_TPC");
528// AliCDBManager::instance()->SetSpecificStorage("*/Align/*","local://DB_TPCAlign");
529// calibType must be a valid CDB path! (3 level folder structure)
02c4845e 530
7de84b33 531
b5e4b0d2 532 if(!fDefaultStorage && !fRaw) {
c3a7b59a 533 AliError("Please activate a default storage first!");
02c4845e 534 return;
535 }
4005d0b5 536
7de84b33 537
62032124 538 AliCDBPath aPath(calibType);
539 if(!aPath.IsValid()){
540 AliError(Form("Not a valid path: %s", calibType));
541 return;
542 }
543
544 TObjString *objCalibType = new TObjString(aPath.GetPath());
024cf675 545 if(fSpecificStorages.Contains(objCalibType)){
62032124 546 AliWarning(Form("Storage \"%s\" already activated! It will be replaced by the new one",
024cf675 547 calibType));
4005d0b5 548 AliCDBParam *checkPar = dynamic_cast<AliCDBParam*> (fSpecificStorages.GetValue(calibType));
549 if(checkPar) delete checkPar;
8e245d15 550 delete fSpecificStorages.Remove(objCalibType);
02c4845e 551 }
95c0e132 552 AliCDBStorage *aStorage = GetStorage(param);
553 if(!aStorage) return;
96b7636d 554
555 fSpecificStorages.Add(objCalibType, param->CloneParam());
b21e3194 556
557 if(fStorageMap->Contains(objCalibType)){
558 delete fStorageMap->Remove(objCalibType);
559 }
560 fStorageMap->Add(objCalibType->Clone(), new TObjString(param->GetURI()));
561
02c4845e 562}
563
564//_____________________________________________________________________________
024cf675 565AliCDBStorage* AliCDBManager::GetSpecificStorage(const char* calibType) {
566// get storage specific for detector or calibration type
4b5e0dce 567
9c7fb557 568 AliCDBPath calibPath(calibType);
569 if(!calibPath.IsValid()) return NULL;
96b7636d 570
9c7fb557 571 AliCDBParam *checkPar = (AliCDBParam*) fSpecificStorages.GetValue(calibPath.GetPath());
02c4845e 572 if(!checkPar){
b8ec52f6 573 AliError(Form("%s storage not found!", calibType));
02c4845e 574 return NULL;
575 } else {
576 return GetStorage(checkPar);
577 }
96b7636d 578
02c4845e 579}
580
024cf675 581//_____________________________________________________________________________
582AliCDBParam* AliCDBManager::SelectSpecificStorage(const TString& path) {
82096dfc 583// select storage valid for path from the list of specific storages
024cf675 584
62032124 585 AliCDBPath aPath(path);
4005d0b5 586 if(!aPath.IsValid()) return NULL;
62032124 587
024cf675 588 TIter iter(&fSpecificStorages);
62032124 589 TObjString *aCalibType=0;
96b7636d 590 AliCDBPath tmpPath("null/null/null");
024cf675 591 AliCDBParam* aPar=0;
592 while((aCalibType = (TObjString*) iter.Next())){
62032124 593 AliCDBPath calibTypePath(aCalibType->GetName());
594 if(calibTypePath.Comprises(aPath)) {
96b7636d 595 if(calibTypePath.Comprises(tmpPath)) continue;
024cf675 596 aPar = (AliCDBParam*) fSpecificStorages.GetValue(aCalibType);
96b7636d 597 tmpPath.SetPath(calibTypePath.GetPath());
024cf675 598 }
599 }
600 return aPar;
601}
602
02c4845e 603//_____________________________________________________________________________
4667c116 604AliCDBEntry* AliCDBManager::Get(const AliCDBPath& path, Int_t runNumber,
02c4845e 605 Int_t version, Int_t subVersion) {
606// get an AliCDBEntry object from the database
607
024cf675 608 if(runNumber < 0){
609 // RunNumber is not specified. Try with fRun
610 if (fRun < 0){
611 AliError("Run number neither specified in query nor set in AliCDBManager! Use AliCDBManager::SetRun.");
612 return NULL;
613 }
614 runNumber = fRun;
615 }
616
02c4845e 617 return Get(AliCDBId(path, runNumber, runNumber, version, subVersion));
618}
619
620//_____________________________________________________________________________
4667c116 621AliCDBEntry* AliCDBManager::Get(const AliCDBPath& path,
02c4845e 622 const AliCDBRunRange& runRange, Int_t version,
623 Int_t subVersion) {
624// get an AliCDBEntry object from the database!
625
626 return Get(AliCDBId(path, runRange, version, subVersion));
627}
628
629//_____________________________________________________________________________
4667c116 630AliCDBEntry* AliCDBManager::Get(const AliCDBId& query) {
02c4845e 631// get an AliCDBEntry object from the database
632
02c4845e 633 // check if query's path and runRange are valid
634 // query is invalid also if version is not specified and subversion is!
635 if (!query.IsValid()) {
636 AliError(Form("Invalid query: %s", query.ToString().Data()));
637 return NULL;
638 }
024cf675 639
640 // query is not specified if path contains wildcard or run range= [-1,-1]
641 if (!query.IsSpecified()) {
4667c116 642 AliError(Form("Unspecified query: %s",
02c4845e 643 query.ToString().Data()));
644 return NULL;
645 }
646
1f341624 647 if(fLock && query.GetFirstRun() != fRun)
648 AliFatal("Lock is ON: cannot use different run number than the internal one!");
649
650 if(fCache && query.GetFirstRun() != fRun)
024cf675 651 AliWarning("Run number explicitly set in query: CDB cache temporarily disabled!");
652
024cf675 653 AliCDBEntry *entry=0;
8e245d15 654
024cf675 655 // first look into map of cached objects
62032124 656 if(fCache && query.GetFirstRun() == fRun)
024cf675 657 entry = (AliCDBEntry*) fEntryCache.GetValue(query.GetPath());
658
659 if(entry) {
b8ec52f6 660 AliDebug(2, Form("Object %s retrieved from cache !!",query.GetPath().Data()));
024cf675 661 return entry;
662 }
96b7636d 663
d1982b43 664 if(!fDefaultStorage) {
665 AliError("No storage set!");
666 return NULL;
667 }
96b7636d 668 // Entry is not in cache -> retrieve it from CDB and cache it!!
024cf675 669 AliCDBStorage *aStorage=0;
670 AliCDBParam *aPar=SelectSpecificStorage(query.GetPath());
1f341624 671// Bool_t usedDefStorage=kTRUE;
62032124 672
02c4845e 673 if(aPar) {
674 aStorage=GetStorage(aPar);
675 TString str = aPar->GetURI();
676 AliDebug(2,Form("Looking into storage: %s",str.Data()));
1f341624 677// usedDefStorage=kFALSE;
4667c116 678
02c4845e 679 } else {
680 aStorage=GetDefaultStorage();
96b7636d 681 AliDebug(2,"Looking into default storage");
02c4845e 682 }
4667c116 683
024cf675 684 entry = aStorage->Get(query);
024cf675 685
4667c116 686 if(entry && fCache && (query.GetFirstRun() == fRun)){
024cf675 687 CacheEntry(query.GetPath(), entry);
688 }
8e245d15 689
b21e3194 690 if(entry && !fIds->Contains(&entry->GetId())){
691 fIds->Add(entry->GetId().Clone());
692 }
693
694
024cf675 695 return entry;
4667c116 696
697}
698
0f40a831 699//_____________________________________________________________________________
700const char* AliCDBManager::GetURI(const char* path) {
701// return the URI of the storage where to look for path
702
703 if(!IsDefaultStorageSet()) return 0;
704
705 AliCDBParam *aPar=SelectSpecificStorage(path);
706
707 if(aPar) {
708 return aPar->GetURI().Data();
709
710 } else {
711 return GetDefaultStorage()->GetURI().Data();
712 }
713
714 return 0;
715}
716
4667c116 717//_____________________________________________________________________________
718AliCDBId* AliCDBManager::GetId(const AliCDBPath& path, Int_t runNumber,
719 Int_t version, Int_t subVersion) {
720// get the AliCDBId of the valid object from the database (does not retrieve the object)
721// User must delete returned object!
722
723 if(runNumber < 0){
724 // RunNumber is not specified. Try with fRun
725 if (fRun < 0){
726 AliError("Run number neither specified in query nor set in AliCDBManager! Use AliCDBManager::SetRun.");
727 return NULL;
728 }
729 runNumber = fRun;
730 }
731
732 return GetId(AliCDBId(path, runNumber, runNumber, version, subVersion));
733}
734
735//_____________________________________________________________________________
736AliCDBId* AliCDBManager::GetId(const AliCDBPath& path,
737 const AliCDBRunRange& runRange, Int_t version,
738 Int_t subVersion) {
739// get the AliCDBId of the valid object from the database (does not retrieve the object)
740// User must delete returned object!
741
742 return GetId(AliCDBId(path, runRange, version, subVersion));
743}
744
745//_____________________________________________________________________________
746AliCDBId* AliCDBManager::GetId(const AliCDBId& query) {
747// get the AliCDBId of the valid object from the database (does not retrieve the object)
748// User must delete returned object!
749
750 if(!fDefaultStorage) {
751 AliError("No storage set!");
752 return NULL;
753 }
754
755 // check if query's path and runRange are valid
756 // query is invalid also if version is not specified and subversion is!
757 if (!query.IsValid()) {
758 AliError(Form("Invalid query: %s", query.ToString().Data()));
759 return NULL;
760 }
761
762 // query is not specified if path contains wildcard or run range= [-1,-1]
763 if (!query.IsSpecified()) {
764 AliError(Form("Unspecified query: %s",
765 query.ToString().Data()));
766 return NULL;
767 }
768
769 if(fCache && query.GetFirstRun() != fRun)
770 AliWarning("Run number explicitly set in query: CDB cache temporarily disabled!");
771
772 AliCDBEntry* entry = 0;
773
774 // first look into map of cached objects
775 if(fCache && query.GetFirstRun() == fRun)
776 entry = (AliCDBEntry*) fEntryCache.GetValue(query.GetPath());
777
778 if(entry) {
779 AliDebug(2, Form("Object %s retrieved from cache !!",query.GetPath().Data()));
780 return dynamic_cast<AliCDBId*> (entry->GetId().Clone());
781 }
782
783 // Entry is not in cache -> retrieve it from CDB and cache it!!
784 AliCDBStorage *aStorage=0;
785 AliCDBParam *aPar=SelectSpecificStorage(query.GetPath());
786
787 if(aPar) {
788 aStorage=GetStorage(aPar);
789 TString str = aPar->GetURI();
790 AliDebug(2,Form("Looking into storage: %s",str.Data()));
024cf675 791
4667c116 792 } else {
793 aStorage=GetDefaultStorage();
794 AliDebug(2,"Looking into default storage");
795 }
796
797 return aStorage->GetId(query);
798
02c4845e 799}
800
801//_____________________________________________________________________________
62032124 802TList* AliCDBManager::GetAll(const AliCDBPath& path, Int_t runNumber,
02c4845e 803 Int_t version, Int_t subVersion) {
804// get multiple AliCDBEntry objects from the database
805
afd8dbf4 806 if(runNumber < 0){
807 // RunNumber is not specified. Try with fRun
808 if (fRun < 0){
809 AliError("Run number neither specified in query nor set in AliCDBManager! Use AliCDBManager::SetRun.");
810 return NULL;
811 }
812 runNumber = fRun;
813 }
814
02c4845e 815 return GetAll(AliCDBId(path, runNumber, runNumber, version,
816 subVersion));
817}
818
819//_____________________________________________________________________________
8e245d15 820TList* AliCDBManager::GetAll(const AliCDBPath& path,
02c4845e 821 const AliCDBRunRange& runRange, Int_t version, Int_t subVersion) {
822// get multiple AliCDBEntry objects from the database
823
824 return GetAll(AliCDBId(path, runRange, version, subVersion));
825}
826
827//_____________________________________________________________________________
828TList* AliCDBManager::GetAll(const AliCDBId& query) {
829// get multiple AliCDBEntry objects from the database
024cf675 830// Warning: this method works correctly only for queries of the type "Detector/*"
831// and not for more specific queries e.g. "Detector/Calib/*" !
8e245d15 832// Warning #2: Entries are cached, but GetAll will keep on retrieving objects from OCDB!
833// To get an object from cache use Get() function
02c4845e 834
835 if(!fDefaultStorage) {
836 AliError("No storage set!");
837 return NULL;
838 }
839
840 if (!query.IsValid()) {
841 AliError(Form("Invalid query: %s", query.ToString().Data()));
842 return NULL;
843 }
844
afd8dbf4 845 if((fSpecificStorages.GetEntries()>0) && query.GetPath().BeginsWith('*')){
846 // if specific storages are active a query with "*" is ambiguous
847 AliError("Query too generic in this context!");
8e245d15 848 return NULL;
02c4845e 849 }
850
851 if (query.IsAnyRange()) {
852 AliError(Form("Unspecified run or runrange: %s",
8e245d15 853 query.ToString().Data()));
02c4845e 854 return NULL;
8e245d15 855 }
856
1f341624 857 if(fLock && query.GetFirstRun() != fRun)
858 AliFatal("Lock is ON: cannot use different run number than the internal one!");
859
6dc56e97 860 AliCDBParam *aPar=SelectSpecificStorage(query.GetPath());
024cf675 861
8e245d15 862 AliCDBStorage *aStorage;
02c4845e 863 if(aPar) {
864 aStorage=GetStorage(aPar);
96b7636d 865 AliDebug(2,Form("Looking into storage: %s", aPar->GetURI().Data()));
8e245d15 866
02c4845e 867 } else {
868 aStorage=GetDefaultStorage();
8e245d15 869 AliDebug(2,"Looking into default storage");
02c4845e 870 }
871
96b7636d 872 TList *result = 0;
873 if(aStorage) result = aStorage->GetAll(query);
8e245d15 874 if(!result) return 0;
875
96b7636d 876 // loop on result to check whether entries should be re-queried with specific storages
877 if(fSpecificStorages.GetEntries()>0 && ! (fSpecificStorages.GetEntries() == 1 && aPar)) {
878 AliInfo("Now look into all other specific storages...");
879
880 TIter iter(result);
881 AliCDBEntry* chkEntry=0;
882
883 while((chkEntry = dynamic_cast<AliCDBEntry*> (iter.Next()))){
884 AliCDBId& chkId = chkEntry->GetId();
885 AliDebug(2, Form("Checking id %s ", chkId.GetPath().Data()));
886 AliCDBParam *chkPar=SelectSpecificStorage(chkId.GetPath());
887 if (!chkPar || aPar == chkPar) continue;
888 AliCDBStorage *chkStorage = GetStorage(chkPar);
889 AliDebug(2, Form("Found specific storage! %s", chkPar->GetURI().Data()));
890
891 AliCDBEntry *newEntry=0;
892 chkId.SetRunRange(query.GetFirstRun(), query.GetLastRun());
893 chkId.SetVersion(query.GetVersion());
894 chkId.SetSubVersion(query.GetSubVersion());
895
896 if(chkStorage) newEntry = chkStorage->Get(chkId);
897 if(!newEntry) continue;
898
899 // object is found in specific storage: replace entry in the result list!
900 chkEntry->SetOwner(1);
901 delete result->Remove(chkEntry);
902 result->AddFirst(newEntry);
903 }
904
905 Int_t nEntries = result->GetEntries();
906 AliInfo("After look into other specific storages, result list is:");
907 for(int i=0; i<nEntries;i++){
908 AliCDBEntry *entry = (AliCDBEntry*) result->At(i);
909 AliInfo(Form("%s",entry->GetId().ToString().Data()));
910 }
911 }
912
8e245d15 913 // caching entries
b21e3194 914 TIter iter(result);
915 AliCDBEntry* entry=0;
916 while((entry = dynamic_cast<AliCDBEntry*> (iter.Next()))){
02c4845e 917
b21e3194 918 if(!fIds->Contains(&entry->GetId())){
919 fIds->Add(entry->GetId().Clone());
920 }
921 if(fCache && (query.GetFirstRun() == fRun)){
96b7636d 922 CacheEntry(entry->GetId().GetPath(), entry);
8e245d15 923 }
924 }
925
b21e3194 926
8e245d15 927 return result;
02c4845e 928}
929
930//_____________________________________________________________________________
27cac7e3 931Bool_t AliCDBManager::Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData, const DataType type){
02c4845e 932// store an AliCDBEntry object into the database
933
968cfa08 934 if (object==0x0) {
935 AliError("Null Entry! No storage will be done!");
936 return kFALSE;
937 }
938
02c4845e 939 AliCDBEntry anEntry(object, id, metaData);
b8ec52f6 940 return Put(&anEntry, type);
02c4845e 941
942}
943
944
945//_____________________________________________________________________________
b8ec52f6 946Bool_t AliCDBManager::Put(AliCDBEntry* entry, DataType type){
02c4845e 947// store an AliCDBEntry object into the database
948
b8ec52f6 949 if(type == kPrivate && !fDefaultStorage) {
02c4845e 950 AliError("No storage set!");
951 return kFALSE;
952 }
953
968cfa08 954 if (entry->GetObject()==0x0){
955 AliError("No valid object in CDB entry!");
956 return kFALSE;
957 }
958
02c4845e 959 if (!entry){
960 AliError("No entry!");
961 return kFALSE;
962 }
963
964 if (!entry->GetId().IsValid()) {
965 AliError(Form("Invalid entry ID: %s",
966 entry->GetId().ToString().Data()));
967 return kFALSE;
968 }
969
970 if (!entry->GetId().IsSpecified()) {
971 AliError(Form("Unspecified entry ID: %s",
972 entry->GetId().ToString().Data()));
973 return kFALSE;
974 }
975
976 AliCDBId id = entry->GetId();
024cf675 977 AliCDBParam *aPar = SelectSpecificStorage(id.GetPath());
978
4005d0b5 979 AliCDBStorage *aStorage=0;
02c4845e 980
981 if(aPar) {
982 aStorage=GetStorage(aPar);
02c4845e 983 } else {
b8ec52f6 984 switch(type){
985 case kCondition:
986 aStorage = GetStorage(fCondParam);
987 break;
988 case kReference:
989 aStorage = GetStorage(fRefParam);
990 break;
991 case kPrivate:
992 aStorage = GetDefaultStorage();
993 break;
994 }
02c4845e 995 }
996
b8ec52f6 997 AliDebug(2,Form("Storing object into storage: %s", aStorage->GetURI().Data()));
998
4005d0b5 999 Bool_t result = aStorage->Put(entry, type);
1000
1001 if(fRun >= 0) QueryCDB();
1002
1003 return result;
02c4845e 1004
1005
1006}
9e1ceb13 1007
4b5e0dce 1008//_____________________________________________________________________________
1009void AliCDBManager::CacheEntry(const char* path, AliCDBEntry* entry)
1010{
1011// cache AliCDBEntry. Cache is valid until run number is changed.
1012
96b7636d 1013 AliCDBEntry *chkEntry = dynamic_cast<AliCDBEntry*> (fEntryCache.GetValue(path));
1014
1015 if(chkEntry) {
1016 AliDebug(2, Form("Object %s already in cache !!", path));
1017 return;
1018 } else {
1019 AliDebug(2,Form("Caching entry %s", path));
1020 }
1021
4b5e0dce 1022 fEntryCache.Add(new TObjString(path), entry);
96b7636d 1023 AliDebug(2,Form("Cache entries: %d", fEntryCache.GetEntries()));
4b5e0dce 1024
1025}
1026
917a098b 1027//_____________________________________________________________________________
1028void AliCDBManager::Print(Option_t* /*option*/) const
1029{
1030// Print list of active storages and their URIs
917a098b 1031
b8ec52f6 1032 TString output=Form("Run number = %d; ",fRun);
1033 output += "Cache is ";
917a098b 1034 if(!fCache) output += "NOT ";
b8ec52f6 1035 output += Form("ACTIVE; Number of active storages: %d\n",fActiveStorages.GetEntries());
917a098b 1036
1037 if(fDefaultStorage) {
b8ec52f6 1038 output += Form("\t*** Default Storage URI: \"%s\"\n",fDefaultStorage->GetURI().Data());
1039// AliInfo(output.Data());
917a098b 1040 }
1041 if(fSpecificStorages.GetEntries()>0) {
917a098b 1042 TIter iter(fSpecificStorages.GetTable());
62032124 1043 TPair *aPair=0;
b8ec52f6 1044 Int_t i=1;
917a098b 1045 while((aPair = (TPair*) iter.Next())){
b8ec52f6 1046 output += Form("\t*** Specific storage %d: Path \"%s\" -> URI \"%s\"\n",
1047 i++, ((TObjString*) aPair->Key())->GetName(),
917a098b 1048 ((AliCDBParam*) aPair->Value())->GetURI().Data());
917a098b 1049 }
917a098b 1050 }
1051 if(fDrainStorage) {
b8ec52f6 1052 output += Form("*** Drain Storage URI: %s\n",fDrainStorage->GetURI().Data());
917a098b 1053 }
b8ec52f6 1054 AliInfo(output.Data());
917a098b 1055}
1056
4b5e0dce 1057//_____________________________________________________________________________
c3a7b59a 1058void AliCDBManager::SetRun(Int_t run)
4b5e0dce 1059{
917a098b 1060// Sets current run number.
4b5e0dce 1061// When the run number changes the caching is cleared.
1f341624 1062
27cac7e3 1063 if(fRun == run)
4b5e0dce 1064 return;
1065
1f341624 1066 if(fLock && fRun >= 0) {
1067 AliFatal("Lock is ON, cannot reset run number!");
1068 }
1069
4b5e0dce 1070 fRun = run;
27cac7e3 1071 if(fRaw){
7de84b33 1072 // here the LHCPeriod xml file is parsed; the string containing the correct period is returned; the default storage is set
1073 if (fStartRunLHCPeriod <= run && fEndRunLHCPeriod >= run){
1074 AliInfo("LHCPeriod alien folder for current run already in memory");
27cac7e3 1075 }else{
7de84b33 1076 SetDefaultStorageFromRun(run);
27cac7e3 1077 if(fEntryCache.GetEntries()!=0) ClearCache();
1078 return;
7de84b33 1079 }
1080 }
4b5e0dce 1081 ClearCache();
62032124 1082 QueryCDB();
4b5e0dce 1083}
1084
1085//_____________________________________________________________________________
1086void AliCDBManager::ClearCache(){
1087// clear AliCDBEntry cache
1088
1f341624 1089 AliDebug(2, Form("Cache entries to be deleted: %d",fEntryCache.GetEntries()));
1090
1091 /*
1092 // To clean entries one by one
1093 TIter iter(fEntryCache.GetTable());
1094 TPair* pair=0;
1095 while((pair= dynamic_cast<TPair*> (iter.Next()))){
1096
1097 TObjString* key = dynamic_cast<TObjString*> (pair->Key());
1098 AliCDBEntry* entry = dynamic_cast<AliCDBEntry*> (pair->Value());
1099 AliDebug(2, Form("Deleting entry: %s", key->GetName()));
1100 if (entry) delete entry;
1101 delete fEntryCache.Remove(key);
1102 }
1103 */
4b5e0dce 1104 fEntryCache.DeleteAll();
1f341624 1105 AliDebug(2, Form("After deleting - Cache entries: %d",fEntryCache.GetEntries()));
4b5e0dce 1106}
1107
4005d0b5 1108//_____________________________________________________________________________
1109void AliCDBManager::UnloadFromCache(const char* path){
1110// unload cached object
1111
b086955d 1112 if(!fActiveStorages.GetEntries()) {
1113 AliDebug(2, Form("No active storages. Object \"%s\" is not unloaded from cache", path));
1114 return;
1115 }
1116
4005d0b5 1117 AliCDBPath queryPath(path);
1118 if(!queryPath.IsValid()) return;
1119
1120 if(!queryPath.IsWildcard()) { // path is not wildcard, get it directly from the cache and unload it!
1121 if(fEntryCache.Contains(path)){
5379c4a3 1122 AliDebug(2, Form("Unloading object \"%s\" from cache", path));
4005d0b5 1123 TObjString pathStr(path);
4005d0b5 1124 delete fEntryCache.Remove(&pathStr);
1125 } else {
1126 AliError(Form("Cache does not contain object \"%s\"!", path))
1127 }
5379c4a3 1128 AliDebug(2, Form("Cache entries: %d",fEntryCache.GetEntries()));
4005d0b5 1129 return;
1130 }
1131
1132 // path is wildcard: loop on the cache and unload all comprised objects!
1133 TIter iter(fEntryCache.GetTable());
1134 TPair* pair = 0;
1135
1136 while((pair = dynamic_cast<TPair*> (iter.Next()))){
1137 AliCDBPath entryPath = pair->Key()->GetName();
1138 if(queryPath.Comprises(entryPath)) {
5379c4a3 1139 AliDebug(2, Form("Unloading object \"%s\" from cache", entryPath.GetPath().Data()));
4005d0b5 1140 TObjString pathStr(entryPath.GetPath().Data());
4005d0b5 1141 delete fEntryCache.Remove(&pathStr);
1142 }
1143 }
1144 AliDebug(2,Form("Cache entries: %d",fEntryCache.GetEntries()));
1145}
1146
9e1ceb13 1147//_____________________________________________________________________________
1148void AliCDBManager::DestroyActiveStorages() {
1149// delete list of active storages
1150
1151 fActiveStorages.DeleteAll();
02c4845e 1152 fSpecificStorages.DeleteAll();
9e1ceb13 1153}
1154
1155//_____________________________________________________________________________
1156void AliCDBManager::DestroyActiveStorage(AliCDBStorage* /*storage*/) {
b05400be 1157// destroys active storage
1158
1159/*
917a098b 1160 TIter iter(fActiveStorages.GetTable());
b05400be 1161 TPair* aPair;
1162 while ((aPair = (TPair*) iter.Next())) {
1163 if(storage == (AliCDBStorage*) aPair->Value())
1164 delete fActiveStorages.Remove(aPair->Key());
1165 storage->Delete(); storage=0x0;
1166 }
6dc56e97 1167*/
9e1ceb13 1168
1169}
1170
62032124 1171//_____________________________________________________________________________
1172void AliCDBManager::QueryCDB() {
1173// query default and specific storages for files valid for fRun. Every storage loads the Ids into its list.
1174
1175 if (fRun < 0){
1176 AliError("Run number not yet set! Use AliCDBManager::SetRun.");
1177 return;
1178 }
6dc56e97 1179 if (!fDefaultStorage){
1180 AliError("Default storage is not set! Use AliCDBManager::SetDefaultStorage");
1181 return;
1182 }
1183 if(fDefaultStorage->GetType() == "alien"){
1184 fDefaultStorage->QueryCDB(fRun);
1185 } else {
1186 AliDebug(2,"Skipping query for valid files, it used only in grid...");
1187 }
62032124 1188
1189 TIter iter(&fSpecificStorages);
1190 TObjString *aCalibType=0;
1191 AliCDBParam* aPar=0;
1192 while((aCalibType = dynamic_cast<TObjString*> (iter.Next()))){
1193 aPar = (AliCDBParam*) fSpecificStorages.GetValue(aCalibType);
1194 if(aPar) {
c3a7b59a 1195 AliDebug(2,Form("Querying specific storage %s",aCalibType->GetName()));
6dc56e97 1196 AliCDBStorage *aStorage = GetStorage(aPar);
1197 if(aStorage->GetType() == "alien"){
1198 aStorage->QueryCDB(fRun,aCalibType->GetName());
1199 } else {
1200 AliDebug(2,
1201 "Skipping query for valid files, it is used only in grid...");
1202 }
62032124 1203 }
1204 }
62032124 1205}
1206
b8ec52f6 1207//______________________________________________________________________________________________
1208const char* AliCDBManager::GetDataTypeName(DataType type)
1209{
1210 // returns the name (string) of the data type
1211
1212 switch (type){
1213 case kCondition: return "Conditions";
1214 case kReference: return "Reference";
1215 case kPrivate: return "Private";
1216 }
1217 return 0;
1218
1219}
62032124 1220
4667c116 1221//______________________________________________________________________________________________
1222void AliCDBManager::InitShortLived()
1223{
1224 // Init the list of short-lived objects
1225 // currently disabled
1226
1227 fShortLived=0x0;
1228
1229// fShortLived = new TList();
1230// fShortLived->SetOwner(1);
1231//
1232// fShortLived->Add(new TObjString("EMCAL/Calib/Data"));
1233//
1234// fShortLived->Add(new TObjString("HMPID/Calib/Nmean"));
1235// fShortLived->Add(new TObjString("HMPID/Calib/Qthre"));
1236//
1237// fShortLived->Add(new TObjString("ITS/Calib/CalibSPD"));
1238//
1239// fShortLived->Add(new TObjString("MUON/Calib/Gains"));
1240// fShortLived->Add(new TObjString("MUON/Calib/HV"));
1241// fShortLived->Add(new TObjString("MUON/Calib/Pedestals"));
1242//
1243// fShortLived->Add(new TObjString("PHOS/Calib/CpvGainPedestals"));
1244// fShortLived->Add(new TObjString("PHOS/Calib/EmcGainPedestals"));
1245//
1246// fShortLived->Add(new TObjString("PMD/Calib/Data"));
1247//
1248// fShortLived->Add(new TObjString("TRD/Calib/ChamberGainFactor"));
1249// fShortLived->Add(new TObjString("TRD/Calib/LocalGainFactor"));
1250// fShortLived->Add(new TObjString("TRD/Calib/ChamberT0"));
1251// fShortLived->Add(new TObjString("TRD/Calib/LocalT0"));
1252// fShortLived->Add(new TObjString("TRD/Calib/ChamberVdrift"));
1253// fShortLived->Add(new TObjString("TRD/Calib/LocalVdrift"));
1254//
1255// fShortLived->Add(new TObjString("ZDC/Calib/Data"));
1256
1257}
1258
1259//______________________________________________________________________________________________
1260Bool_t AliCDBManager::IsShortLived(const char* path)
1261{
1262 // returns the name (string) of the data type
1263
1264 if(!fShortLived) return kFALSE;
1265
1266 AliCDBPath aPath(path);
1267 if(!aPath.IsValid()){
1268 AliError(Form("Not a valid path: %s", path));
1269 return kFALSE;
1270 }
1271
1272 return fShortLived->Contains(path);
1273
1274}
1275
1f341624 1276//______________________________________________________________________________________________
a6f59240 1277ULong_t AliCDBManager::SetLock(Bool_t lock, ULong_t key){
1278 // To lock/unlock user must provide the key. A new key is provided after
1279 // each successful lock. User should always backup the returned key and
1280 // use it on next access.
1281 if (fLock == lock) return 0; // nothing to be done
1282 if (lock) {
1283 // User wants to lock - check his identity
1284 if (fKey) {
1285 // Lock has a user - check his key
1286 if (fKey != key) {
1287 AliFatal("Wrong key provided to lock CDB. Please remove CDB lock access from your code !");
1288 return 0;
1289 }
1290 }
1291 // Provide new key
1292 fKey = gSystem->Now();
1293 fLock = kTRUE;
1294 return fKey;
1295 }
1296 // User wants to unlock - check the provided key
1297 if (key != fKey) {
1298 AliFatal("Lock is ON: wrong key provided");
1299 return 0;
1300 }
1301 fLock = kFALSE;
1302 return key;
1f341624 1303}
1304
9e1ceb13 1305///////////////////////////////////////////////////////////
1306// AliCDBManager Parameter class //
1307// interface to specific AliCDBParameter class //
1308// (AliCDBGridParam, AliCDBLocalParam, AliCDBDumpParam) //
1309///////////////////////////////////////////////////////////
1310
62032124 1311AliCDBParam::AliCDBParam():
fe12e09c 1312 fType(),
1313 fURI()
62032124 1314{
9e1ceb13 1315// constructor
1316
1317}
1318
1319//_____________________________________________________________________________
1320AliCDBParam::~AliCDBParam() {
1321// destructor
1322
1323}
1324