//_____________________________________________________________________________
AliCDBManager::AliCDBManager():
TObject(),
- fCondParam(0),
- fRefParam(0),
fFactories(),
fActiveStorages(),
fSpecificStorages(),
+ fEntryCache(),
+ fIds(0),
+ fStorageMap(0),
+ fShortLived(0),
fDefaultStorage(NULL),
- fRemoteStorage(NULL),
fDrainStorage(NULL),
- fEntryCache(),
- fCache(kTRUE),
+ fCondParam(0),
+ fRefParam(0),
fRun(-1),
- fShortLived(0)
+ fCache(kTRUE),
+ fLock(kFALSE)
{
// default constuctor
fFactories.SetOwner(1);
fActiveStorages.SetOwner(1);
fSpecificStorages.SetOwner(1);
fEntryCache.SetOwner(1);
+
+ fStorageMap = new TMap();
+ fStorageMap->SetOwner(1);
+ fIds = new TList();
+ fIds->SetOwner(1);
}
//_____________________________________________________________________________
fFactories.Delete();
fDrainStorage = 0x0;
fDefaultStorage = 0x0;
- fRemoteStorage = 0x0;
+ delete fStorageMap; fStorageMap = 0;
+ delete fIds; fIds = 0;
delete fCondParam;
delete fRefParam;
delete fShortLived; fShortLived = 0x0;
//_____________________________________________________________________________
Bool_t AliCDBManager::HasStorage(const char* dbString) const {
-// check if dbString is a URI valid for one of the registered factories
+// check if dbString is a URI valid for one of the registered factories
TIter iter(&fFactories);
//_____________________________________________________________________________
AliCDBStorage* AliCDBManager::GetStorage(const char* dbString) {
// get storage object from URI string
-
+
AliCDBParam* param = CreateParameter(dbString);
if (!param) {
AliError(Form("Failed to activate requested storage! Check URI: %s", dbString));
//_____________________________________________________________________________
AliCDBStorage* AliCDBManager::GetStorage(const AliCDBParam* param) {
// get storage object from AliCDBParam object
-
+
// if the list of active storages already contains
// the requested storage, return it
AliCDBStorage* aStorage = GetActiveStorage(param);
return aStorage;
}
+ // if lock is ON, cannot activate more storages!
+ if(fLock) {
+ if (fDefaultStorage) {
+ AliFatal("Lock is ON, and default storage is already set: "
+ "cannot reset it or activate more storages!");
+ }
+ }
+
TIter iter(&fFactories);
AliCDBStorageFactory* factory=0;
//_____________________________________________________________________________
void AliCDBManager::SetDefaultStorage(const char* dbString) {
// sets default storage from URI string
-
+
AliInfo(Form("Setting Default storage to: %s",dbString));
AliCDBStorage* bckStorage = fDefaultStorage;
fDefaultStorage = GetStorage(dbString);
+
+ if(!fDefaultStorage) return;
if(bckStorage && (fDefaultStorage != bckStorage)){
AliWarning("Existing default storage replaced: clearing cache!");
ClearCache();
}
+
+ if (fStorageMap->Contains("default")) {
+ delete fStorageMap->Remove(fStorageMap->GetValue("default"));
+ }
+ fStorageMap->Add(new TObjString("default"), new TObjString(fDefaultStorage->GetURI()));
}
//_____________________________________________________________________________
void AliCDBManager::SetDefaultStorage(const AliCDBParam* param) {
// set default storage from AliCDBParam object
-
+
AliCDBStorage* bckStorage = fDefaultStorage;
fDefaultStorage = GetStorage(param);
+ if(!fDefaultStorage) return;
+
if(bckStorage && (fDefaultStorage != bckStorage)){
AliWarning("Existing default storage replaced: clearing cache!");
ClearCache();
}
+
+ if (fStorageMap->Contains("default")) {
+ delete fStorageMap->Remove(fStorageMap->GetValue("default"));
+ }
+ fStorageMap->Add(new TObjString("default"), new TObjString(fDefaultStorage->GetURI()));
}
//_____________________________________________________________________________
void AliCDBManager::SetDefaultStorage(AliCDBStorage* storage) {
// set default storage from another active storage
-
+
+ // if lock is ON, cannot activate more storages!
+ if(fLock) {
+ if (fDefaultStorage) {
+ AliFatal("Lock is ON, and default storage is already set: "
+ "cannot reset it or activate more storages!");
+ }
+ }
+
+ if (!storage) {
+ UnsetDefaultStorage();
+ return;
+ }
+
AliCDBStorage* bckStorage = fDefaultStorage;
fDefaultStorage = storage;
AliWarning("Existing default storage replaced: clearing cache!");
ClearCache();
}
-}
-//_____________________________________________________________________________
-void AliCDBManager::SetRemoteStorage(const char* dbString) {
-// sets remote storage from URI string
-// Remote storage is queried if it is activated and if object was not found in default storage
- AliInfo(Form("Setting remote storage to: %s",dbString));
- fRemoteStorage = GetStorage(dbString);
-}
-
-//_____________________________________________________________________________
-void AliCDBManager::SetRemoteStorage(const AliCDBParam* param) {
-// set remote storage from AliCDBParam object
-// Remote storage is queried if it is activated and if object was not found in default storage
-
- fRemoteStorage = GetStorage(param);
+ if (fStorageMap->Contains("default")) {
+ delete fStorageMap->Remove(fStorageMap->GetValue("default"));
+ }
+ fStorageMap->Add(new TObjString("default"), new TObjString(fDefaultStorage->GetURI()));
}
//_____________________________________________________________________________
-void AliCDBManager::SetRemoteStorage(AliCDBStorage* storage) {
-// set remote storage from another active storage
-// Remote storage is queried if it is activated and if object was not found in default storage
-
- fRemoteStorage = storage;
+void AliCDBManager::UnsetDefaultStorage() {
+// Unset default storage
+
+ // if lock is ON, action is forbidden!
+ if(fLock) {
+ if (fDefaultStorage) {
+ AliFatal("Lock is ON: cannot unset default storage!");
+ }
+ }
+
+ if (fDefaultStorage) {
+ AliWarning("Clearing cache!");
+ ClearCache();
+ }
+
+ fDefaultStorage = 0x0;
}
//_____________________________________________________________________________
if(checkPar) delete checkPar;
delete fSpecificStorages.Remove(objCalibType);
}
- GetStorage(param);
+ AliCDBStorage *aStorage = GetStorage(param);
+ if(!aStorage) return;
fSpecificStorages.Add(objCalibType, param->CloneParam());
+
+ if(fStorageMap->Contains(objCalibType)){
+ delete fStorageMap->Remove(objCalibType);
+ }
+ fStorageMap->Add(objCalibType->Clone(), new TObjString(param->GetURI()));
+
}
//_____________________________________________________________________________
return NULL;
}
- if(fCache && query.GetFirstRun() != fRun)
+ if(fLock && query.GetFirstRun() != fRun)
+ AliFatal("Lock is ON: cannot use different run number than the internal one!");
+
+ if(fCache && query.GetFirstRun() != fRun)
AliWarning("Run number explicitly set in query: CDB cache temporarily disabled!");
-
AliCDBEntry *entry=0;
// first look into map of cached objects
// Entry is not in cache -> retrieve it from CDB and cache it!!
AliCDBStorage *aStorage=0;
AliCDBParam *aPar=SelectSpecificStorage(query.GetPath());
- Bool_t usedDefStorage=kTRUE;
+// Bool_t usedDefStorage=kTRUE;
if(aPar) {
aStorage=GetStorage(aPar);
TString str = aPar->GetURI();
AliDebug(2,Form("Looking into storage: %s",str.Data()));
- usedDefStorage=kFALSE;
+// usedDefStorage=kFALSE;
} else {
aStorage=GetDefaultStorage();
entry = aStorage->Get(query);
- if (!entry && usedDefStorage && IsRemoteStorageSet()) {
- AliWarning(Form("Object not found in default storage: Looking into remote storage!"));
- entry = fRemoteStorage->Get(query);
- }
-
if(entry && fCache && (query.GetFirstRun() == fRun)){
CacheEntry(query.GetPath(), entry);
}
+ if(entry && !fIds->Contains(&entry->GetId())){
+ fIds->Add(entry->GetId().Clone());
+ }
+
+
return entry;
}
+//_____________________________________________________________________________
+const char* AliCDBManager::GetURI(const char* path) {
+// return the URI of the storage where to look for path
+
+ if(!IsDefaultStorageSet()) return 0;
+
+ AliCDBParam *aPar=SelectSpecificStorage(path);
+
+ if(aPar) {
+ return aPar->GetURI().Data();
+
+ } else {
+ return GetDefaultStorage()->GetURI().Data();
+ }
+
+ return 0;
+}
+
//_____________________________________________________________________________
AliCDBId* AliCDBManager::GetId(const AliCDBPath& path, Int_t runNumber,
Int_t version, Int_t subVersion) {
return NULL;
}
+ if(fLock && query.GetFirstRun() != fRun)
+ AliFatal("Lock is ON: cannot use different run number than the internal one!");
+
AliCDBParam *aPar=SelectSpecificStorage(query.GetPath());
AliCDBStorage *aStorage;
}
// caching entries
- if(fCache && (query.GetFirstRun() == fRun)){
+ TIter iter(result);
+ AliCDBEntry* entry=0;
+ while((entry = dynamic_cast<AliCDBEntry*> (iter.Next()))){
- TIter iter(result);
- AliCDBEntry* entry=0;
- while((entry = dynamic_cast<AliCDBEntry*> (iter.Next()))){
+ if(!fIds->Contains(&entry->GetId())){
+ fIds->Add(entry->GetId().Clone());
+ }
+ if(fCache && (query.GetFirstRun() == fRun)){
CacheEntry(entry->GetId().GetPath(), entry);
}
}
+
return result;
}
Bool_t AliCDBManager::Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData, DataType type){
// store an AliCDBEntry object into the database
+ if (object==0x0) {
+ AliError("Null Entry! No storage will be done!");
+ return kFALSE;
+ }
+
AliCDBEntry anEntry(object, id, metaData);
return Put(&anEntry, type);
return kFALSE;
}
+ if (entry->GetObject()==0x0){
+ AliError("No valid object in CDB entry!");
+ return kFALSE;
+ }
+
if (!entry){
AliError("No entry!");
return kFALSE;
{
// Sets current run number.
// When the run number changes the caching is cleared.
-
+
if (fRun == run)
return;
+ if(fLock && fRun >= 0) {
+ AliFatal("Lock is ON, cannot reset run number!");
+ }
+
fRun = run;
ClearCache();
QueryCDB();
void AliCDBManager::ClearCache(){
// clear AliCDBEntry cache
- AliDebug(2,Form("Clearing cache!"));
+ AliDebug(2, Form("Cache entries to be deleted: %d",fEntryCache.GetEntries()));
+
+ /*
+ // To clean entries one by one
+ TIter iter(fEntryCache.GetTable());
+ TPair* pair=0;
+ while((pair= dynamic_cast<TPair*> (iter.Next()))){
+
+ TObjString* key = dynamic_cast<TObjString*> (pair->Key());
+ AliCDBEntry* entry = dynamic_cast<AliCDBEntry*> (pair->Value());
+ AliDebug(2, Form("Deleting entry: %s", key->GetName()));
+ if (entry) delete entry;
+ delete fEntryCache.Remove(key);
+ }
+ */
fEntryCache.DeleteAll();
- AliDebug(2,Form("Cache entries: %d",fEntryCache.GetEntries()));
-
+ AliDebug(2, Form("After deleting - Cache entries: %d",fEntryCache.GetEntries()));
}
//_____________________________________________________________________________
}
+//______________________________________________________________________________________________
+void AliCDBManager::SetLock(Bool_t lock){
+
+ if(fLock == kTRUE && lock == kFALSE) {
+ AliFatal("Lock is ON: cannot reset it!");
+ }
+
+ fLock=lock;
+}
+
///////////////////////////////////////////////////////////
// AliCDBManager Parameter class //
// interface to specific AliCDBParameter class //