From b8ec52f69ada46c4dbbb96cc30c20be43998b5ec Mon Sep 17 00:00:00 2001 From: hristov Date: Tue, 24 Oct 2006 16:28:37 +0000 Subject: [PATCH] I've tried to make some output messages lighter (and moved others to the debug stream) according to Federico's requests. I've also upgraded the access framework following a proposal by Latchezar. I've added a protection in the Put methods that should prevent users to put "anything" into OCDB folders (where only OCDB data should stay). The user should now declare explicitly (through this flag) if he wants to store an object in an OCDB folder, in a "Reference" folder or somewhere else (in a "private" folder). If the data is flagged as "reference" or "private" then it cannot be put in the (currently hard-coded in AliCDBManager) official OCDB folder. This new desing is still under discussion (for instance, currently the OCDB and reference folder are two test folders in aliprod home, then they should point to the real folders when the file catalog will reach its final shape). What is important is that the new implementation is backward compatible and the users won't notice the changes, since the flag in the Put methods is set by default to "Private". Alberto --- STEER/AliCDBGrid.cxx | 6 +-- STEER/AliCDBLocal.cxx | 7 +-- STEER/AliCDBManager.cxx | 91 +++++++++++++++++++++++-------------- STEER/AliCDBManager.h | 22 ++++++--- STEER/AliCDBStorage.cxx | 52 +++++++++++++++------ STEER/AliCDBStorage.h | 10 ++-- STEER/AliReconstruction.cxx | 12 ++--- STEER/AliSimulation.cxx | 12 ++--- 8 files changed, 136 insertions(+), 76 deletions(-) diff --git a/STEER/AliCDBGrid.cxx b/STEER/AliCDBGrid.cxx index 5362f8c718d..0e40ce3ddc3 100644 --- a/STEER/AliCDBGrid.cxx +++ b/STEER/AliCDBGrid.cxx @@ -365,9 +365,9 @@ AliCDBEntry* AliCDBGrid::GetEntryFromFile(TString& filename, const AliCDBId* dat AliCDBId entryId = anEntry->GetId(); if(!((entryId.GetAliCDBRunRange()).IsEqual(&(dataId->GetAliCDBRunRange()))) || entryId.GetVersion() != dataId->GetVersion()){ - AliWarning(Form("Either RunRange or gridVersion in the object's metadata")); - AliWarning(Form("do noth match with fileName numbers:")); - AliWarning(Form("someone renamed file by hand!")); + AliWarning(Form("Mismatch between file name and object's Id!")); + AliWarning(Form("File name: %s", dataId->ToString().Data())); + AliWarning(Form("Object's Id: %s", entryId.ToString().Data())); } } diff --git a/STEER/AliCDBLocal.cxx b/STEER/AliCDBLocal.cxx index a40c51bef35..3c42f64f8fb 100644 --- a/STEER/AliCDBLocal.cxx +++ b/STEER/AliCDBLocal.cxx @@ -413,10 +413,11 @@ AliCDBEntry* AliCDBLocal::GetEntry(const AliCDBId& queryId) { if(!((entryId.GetAliCDBRunRange()).IsEqual(& dataId.GetAliCDBRunRange())) || (entryId.GetVersion() != dataId.GetVersion()) || (entryId.GetSubVersion() != dataId.GetSubVersion())){ - AliWarning(Form("Either object Id's RunRange or version do noth match with file name:")); - AliWarning("someone renamed file by hand!"); + AliWarning(Form("Mismatch between file name and object's Id!")); + AliWarning(Form("File name: %s", dataId.ToString().Data())); + AliWarning(Form("Object's Id: %s", entryId.ToString().Data())); } - + // close file, return retieved entry file.Close(); return anEntry; diff --git a/STEER/AliCDBManager.cxx b/STEER/AliCDBManager.cxx index d2929b6bce7..cac4393c7ae 100644 --- a/STEER/AliCDBManager.cxx +++ b/STEER/AliCDBManager.cxx @@ -34,10 +34,14 @@ ClassImp(AliCDBParam) ClassImp(AliCDBManager) +//TODO OCDB and Reference folder should not be fully hardcoded but built from run number (or year/LHC period) +TString AliCDBManager::fgkCondUri("alien://folder=/alice/cern.ch/user/a/aliprod/testCDB/CDB?user=aliprod"); +TString AliCDBManager::fgkRefUri("alien://folder=/alice/cern.ch/user/a/aliprod/testCDB/Reference?user=aliprod"); AliCDBManager* AliCDBManager::fgInstance = 0x0; //_____________________________________________________________________________ -AliCDBManager* AliCDBManager::Instance() { +AliCDBManager* AliCDBManager::Instance() +{ // returns AliCDBManager instance (singleton) if (!fgInstance) { @@ -58,6 +62,8 @@ void AliCDBManager::Init() { if(!gSystem->Exec("root-config --has-alien |grep yes 2>&1 > /dev/null")){ // returns 0 if yes AliInfo("AliEn classes enabled in Root. AliCDBGrid factory registered."); RegisterFactory(new AliCDBGridFactory()); + fCondParam = CreateParameter(fgkCondUri); + fRefParam = CreateParameter(fgkRefUri); } } //_____________________________________________________________________________ @@ -74,6 +80,8 @@ void AliCDBManager::Destroy() { //_____________________________________________________________________________ AliCDBManager::AliCDBManager(): TObject(), + fCondParam(0), + fRefParam(0), fFactories(), fActiveStorages(), fSpecificStorages(), @@ -98,6 +106,8 @@ AliCDBManager::~AliCDBManager() { fFactories.Delete(); fDrainStorage = 0x0; fDefaultStorage = 0x0; + delete fCondParam; + delete fRefParam; } //_____________________________________________________________________________ @@ -233,7 +243,7 @@ void AliCDBManager::SetDrain(const char* dbString) { //_____________________________________________________________________________ void AliCDBManager::SetDrain(const AliCDBParam* param) { // set drain storage from AliCDBParam - + fDrainStorage = GetStorage(param); } @@ -248,7 +258,7 @@ void AliCDBManager::SetDrain(AliCDBStorage* storage) { Bool_t AliCDBManager::Drain(AliCDBEntry *entry) { // drain retrieved object to drain storage - AliInfo("Draining into drain storage..."); + AliDebug(2, "Draining into drain storage..."); return fDrainStorage->Put(entry); } @@ -264,7 +274,7 @@ void AliCDBManager::SetDefaultStorage(const char* dbString) { void AliCDBManager::SetDefaultStorage(const AliCDBParam* param) { // set default storage from AliCDBParam object - fDrainStorage = GetStorage(param); + fDefaultStorage = GetStorage(param); } //_____________________________________________________________________________ @@ -320,7 +330,7 @@ AliCDBStorage* AliCDBManager::GetSpecificStorage(const char* calibType) { AliCDBParam *checkPar = (AliCDBParam*) fSpecificStorages.GetValue(calibType); if(!checkPar){ - AliError(Form("%s storage not found!",calibType)); + AliError(Form("%s storage not found!", calibType)); return NULL; } else { return GetStorage(checkPar); @@ -411,7 +421,7 @@ AliCDBEntry* AliCDBManager::Get(const AliCDBId& query) { entry = (AliCDBEntry*) fEntryCache.GetValue(query.GetPath()); if(entry) { - AliInfo(Form("Object %s retrieved from cache !!",query.GetPath().Data())); + AliDebug(2, Form("Object %s retrieved from cache !!",query.GetPath().Data())); return entry; } @@ -516,20 +526,20 @@ TList* AliCDBManager::GetAll(const AliCDBId& query) { } //_____________________________________________________________________________ -Bool_t AliCDBManager::Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData){ +Bool_t AliCDBManager::Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData, DataType type){ // store an AliCDBEntry object into the database AliCDBEntry anEntry(object, id, metaData); - return Put(&anEntry); + return Put(&anEntry, type); } //_____________________________________________________________________________ -Bool_t AliCDBManager::Put(AliCDBEntry* entry){ +Bool_t AliCDBManager::Put(AliCDBEntry* entry, DataType type){ // store an AliCDBEntry object into the database - if(!fDefaultStorage) { + if(type == kPrivate && !fDefaultStorage) { AliError("No storage set!"); return kFALSE; } @@ -558,15 +568,23 @@ Bool_t AliCDBManager::Put(AliCDBEntry* entry){ if(aPar) { aStorage=GetStorage(aPar); - TString str = aPar->GetURI(); - AliDebug(2,Form("Storing object into storage: %s",str.Data())); - } else { - aStorage=GetDefaultStorage(); - AliDebug(2,"Storing object into default storage"); + switch(type){ + case kCondition: + aStorage = GetStorage(fCondParam); + break; + case kReference: + aStorage = GetStorage(fRefParam); + break; + case kPrivate: + aStorage = GetDefaultStorage(); + break; + } } - return aStorage->Put(entry); + AliDebug(2,Form("Storing object into storage: %s", aStorage->GetURI().Data())); + + return aStorage->Put(entry, type); } @@ -586,38 +604,30 @@ void AliCDBManager::CacheEntry(const char* path, AliCDBEntry* entry) void AliCDBManager::Print(Option_t* /*option*/) const { // Print list of active storages and their URIs - AliInfo(Form("Run number: %d\n",fRun)); - TString output; - output = "Cache is "; + TString output=Form("Run number = %d; ",fRun); + output += "Cache is "; if(!fCache) output += "NOT "; - output += "ACTIVE\n"; - AliInfo(output.Data()); + output += Form("ACTIVE; Number of active storages: %d\n",fActiveStorages.GetEntries()); if(fDefaultStorage) { - AliInfo("*** Default Storage: ***"); - output = Form("%s\n",fDefaultStorage->GetURI().Data()); - AliInfo(output.Data()); + output += Form("\t*** Default Storage URI: \"%s\"\n",fDefaultStorage->GetURI().Data()); +// AliInfo(output.Data()); } if(fSpecificStorages.GetEntries()>0) { - AliInfo("*** Specific Storages: ***"); TIter iter(fSpecificStorages.GetTable()); TPair *aPair=0; + Int_t i=1; while((aPair = (TPair*) iter.Next())){ - output = Form("Key: %s - Storage: %s", - ((TObjString*) aPair->Key())->GetName(), + output += Form("\t*** Specific storage %d: Path \"%s\" -> URI \"%s\"\n", + i++, ((TObjString*) aPair->Key())->GetName(), ((AliCDBParam*) aPair->Value())->GetURI().Data()); - AliInfo(output.Data()); } - printf("\n"); } if(fDrainStorage) { - AliInfo("*** Drain Storage: ***"); - output = Form("%s\n",fDrainStorage->GetURI().Data()); - AliInfo(output.Data()); + output += Form("*** Drain Storage URI: %s\n",fDrainStorage->GetURI().Data()); } - AliInfo(Form("Total number of active storages: %d",fActiveStorages.GetEntries())); - + AliInfo(output.Data()); } //_____________________________________________________________________________ @@ -704,6 +714,19 @@ void AliCDBManager::QueryCDB() { } } +//______________________________________________________________________________________________ +const char* AliCDBManager::GetDataTypeName(DataType type) +{ + // returns the name (string) of the data type + + switch (type){ + case kCondition: return "Conditions"; + case kReference: return "Reference"; + case kPrivate: return "Private"; + } + return 0; + +} /////////////////////////////////////////////////////////// // AliCDBManager Parameter class // diff --git a/STEER/AliCDBManager.h b/STEER/AliCDBManager.h index c9482685a91..422a70f2452 100644 --- a/STEER/AliCDBManager.h +++ b/STEER/AliCDBManager.h @@ -26,16 +26,20 @@ class AliCDBParam; class AliCDBManager: public TObject { public: + enum DataType {kCondition=0, kReference, kPrivate}; void RegisterFactory(AliCDBStorageFactory* factory); Bool_t HasStorage(const char* dbString) const; AliCDBParam* CreateParameter(const char* dbString) const; + AliCDBParam* GetCondParam() const {return fCondParam;} + AliCDBParam* GetRefParam() const {return fRefParam;} + static const char* GetDataTypeName(DataType type); AliCDBStorage* GetStorage(const char* dbString); AliCDBStorage* GetStorage(const AliCDBParam* param); - + TList* GetActiveStorages(); void SetDefaultStorage(const char* dbString); @@ -45,7 +49,7 @@ class AliCDBManager: public TObject { Bool_t IsDefaultStorageSet() const {return fDefaultStorage != 0;} AliCDBStorage* GetDefaultStorage() const {return fDefaultStorage;} void UnsetDefaultStorage() {fDefaultStorage = 0x0;} - + void SetSpecificStorage(const char* calibType, const char* dbString); void SetSpecificStorage(const char* calibType, AliCDBParam* param); @@ -73,9 +77,10 @@ class AliCDBManager: public TObject { TList* GetAll(const AliCDBPath& path, const AliCDBRunRange& runRange, Int_t version = -1, Int_t subVersion = -1); - Bool_t Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData); - Bool_t Put(AliCDBEntry* entry); - + Bool_t Put(TObject* object, AliCDBId& id, + AliCDBMetaData* metaData, DataType type=kPrivate); + Bool_t Put(AliCDBEntry* entry, DataType type=kPrivate); + void SetCacheFlag(Bool_t cacheFlag) {fCache=cacheFlag;} Bool_t GetCacheFlag() const {return fCache;} @@ -97,7 +102,12 @@ class AliCDBManager: public TObject { static AliCDBManager* Instance(); private: - + + static TString fgkCondUri; // URI of the Conditions data base folder + static TString fgkRefUri; // URI of the Reference data base folder + AliCDBParam* fCondParam; // Conditions data storage parameters + AliCDBParam* fRefParam; // Reference data storage parameters + AliCDBManager(); AliCDBManager(const AliCDBManager & source); AliCDBManager & operator=(const AliCDBManager & source); diff --git a/STEER/AliCDBStorage.cxx b/STEER/AliCDBStorage.cxx index 3e3a8880920..9ddbf14e1a3 100644 --- a/STEER/AliCDBStorage.cxx +++ b/STEER/AliCDBStorage.cxx @@ -15,8 +15,8 @@ #include #include -#include "AliCDBManager.h" #include "AliCDBStorage.h" +#include "AliCDBGrid.h" #include "AliCDBEntry.h" #include "AliLog.h" @@ -227,7 +227,7 @@ AliCDBEntry* AliCDBStorage::Get(const AliCDBId& query) { if (entry) { // this is to make the SHUTTLE output lighter if(!(query.GetPath().Contains("SHUTTLE/STATUS"))) - AliInfo(Form("CDB object retrieved: %s", entry->GetId().ToString().Data())); + AliDebug(2, Form("CDB object retrieved: %s", entry->GetId().ToString().Data())); } else { // this is to make the SHUTTLE output lighter if(!(query.GetPath().Contains("SHUTTLE/STATUS"))) @@ -284,17 +284,15 @@ TList* AliCDBStorage::GetAll(const AliCDBId& query) { TH1::AddDirectory(kTRUE); Int_t nEntries = result->GetEntries(); - if (nEntries) { - AliInfo(Form("%d objects retrieved.",nEntries)); - for(int i=0; iAt(i); - AliInfo(Form("%s",entry->GetId().ToString().Data())); - - } - } else { - AliInfo(Form("No valid CDB object found! request was: %s", query.ToString().Data())); + + AliInfo(Form("%d objects retrieved. Request was: %s", + nEntries, query.ToString().Data())); + for(int i=0; iAt(i); + AliInfo(Form("%s",entry->GetId().ToString().Data())); } + // if drain storage is set, drain entries into drain storage if((AliCDBManager::Instance())->IsDrainSet()){ for(int i = 0; iGetEntries(); i++){ @@ -326,16 +324,16 @@ TList* AliCDBStorage::GetAll(const AliCDBPath& path, //_____________________________________________________________________________ -Bool_t AliCDBStorage::Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData) { +Bool_t AliCDBStorage::Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData, AliCDBManager::DataType type) { // store an AliCDBEntry object into the database AliCDBEntry anEntry(object, id, metaData); - return Put(&anEntry); -} + return Put(&anEntry, type); +} //_____________________________________________________________________________ -Bool_t AliCDBStorage::Put(AliCDBEntry* entry) { +Bool_t AliCDBStorage::Put(AliCDBEntry* entry, AliCDBManager::DataType type) { // store an AliCDBEntry object into the database if (!entry){ @@ -355,6 +353,15 @@ Bool_t AliCDBStorage::Put(AliCDBEntry* entry) { return kFALSE; } + AliCDBManager::DataType expectedType = GetDataType(); + + if(expectedType != AliCDBManager::kPrivate && type != expectedType) { + AliError(Form("It is forbidden to store %s data into a folder of type %s!", + AliCDBManager::GetDataTypeName(type), + AliCDBManager::GetDataTypeName(expectedType))); + return 0; + } + // set object's class name into metaData! entry->GetMetaData()->SetObjectClassName(entry->GetObject()->ClassName()); @@ -418,3 +425,18 @@ void AliCDBStorage::PrintQueryCDB(){ AliInfo(Form("%s", message.Data())); } +//_____________________________________________________________________________ +AliCDBManager::DataType AliCDBStorage::GetDataType() const { +// returns the type of the data that should be stored into this storage: +// kConditions: conditions data; kReference: reference data; kPrivate: private (user-defined) data type + + if(GetType() != "alien") return AliCDBManager::kPrivate; + + TString condFolder = ((AliCDBGridParam*) AliCDBManager::Instance()->GetCondParam())->GetDBFolder(); + TString refFolder = ((AliCDBGridParam*) AliCDBManager::Instance()->GetRefParam())->GetDBFolder(); + + if(GetBaseFolder().Contains(condFolder)) return AliCDBManager::kCondition; + if(GetBaseFolder().Contains(refFolder)) return AliCDBManager::kReference; + + return AliCDBManager::kPrivate; +} diff --git a/STEER/AliCDBStorage.h b/STEER/AliCDBStorage.h index 1fee0bc881a..26beac8452f 100644 --- a/STEER/AliCDBStorage.h +++ b/STEER/AliCDBStorage.h @@ -14,22 +14,26 @@ #include "AliCDBId.h" #include "AliCDBMetaData.h" +#include "AliCDBManager.h" #include #include class AliCDBEntry; class AliCDBPath; +class AliCDBParam; class AliCDBStorage: public TObject { public: + AliCDBStorage(); void SetURI(const TString& uri) {fURI = uri;} const TString& GetURI() const {return fURI;} const TString& GetType() const {return fType;} const TString& GetBaseFolder() const {return fBaseFolder;} + AliCDBManager::DataType GetDataType() const; void ReadSelectionFromFile(const char *fileName); @@ -73,9 +77,9 @@ public: TList* GetAll(const AliCDBPath& path, const AliCDBRunRange& runRange, Int_t version = -1, Int_t subVersion = -1); - Bool_t Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData); - Bool_t Put(AliCDBEntry* entry); - + Bool_t Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData, + AliCDBManager::DataType type=AliCDBManager::kPrivate); + Bool_t Put(AliCDBEntry* entry, AliCDBManager::DataType type=AliCDBManager::kPrivate); virtual Bool_t IsReadOnly() const = 0; virtual Bool_t HasSubVersion() const = 0; diff --git a/STEER/AliReconstruction.cxx b/STEER/AliReconstruction.cxx index efe91bf16b6..356854f7a14 100644 --- a/STEER/AliReconstruction.cxx +++ b/STEER/AliReconstruction.cxx @@ -286,9 +286,9 @@ void AliReconstruction::InitCDBStorage() fCDBUri = ""; } else { - AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - AliWarning(Form("Default CDB storage is set to: %s",fCDBUri.Data())); - AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliDebug(2, Form("Default CDB storage is set to: %s",fCDBUri.Data())); + AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); man->SetDefaultStorage(fCDBUri); } @@ -296,9 +296,9 @@ void AliReconstruction::InitCDBStorage() for (Int_t i = 0; i < fSpecCDBUri.GetEntriesFast(); i++) { TObject* obj = fSpecCDBUri[i]; if (!obj) continue; - AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - AliWarning(Form("Specific CDB storage for %s is set to: %s",obj->GetName(),obj->GetTitle())); - AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliDebug(2, Form("Specific CDB storage for %s is set to: %s",obj->GetName(),obj->GetTitle())); + AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); man->SetSpecificStorage(obj->GetName(), obj->GetTitle()); } man->Print(); diff --git a/STEER/AliSimulation.cxx b/STEER/AliSimulation.cxx index 03cd3369093..1acfcd94b5e 100644 --- a/STEER/AliSimulation.cxx +++ b/STEER/AliSimulation.cxx @@ -272,9 +272,9 @@ void AliSimulation::InitCDBStorage() fCDBUri = ""; } else { - AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - AliWarning(Form("Default CDB storage is set to: %s",fCDBUri.Data())); - AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliDebug(2,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliDebug(2, Form("Default CDB storage is set to: %s",fCDBUri.Data())); + AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); man->SetDefaultStorage(fCDBUri); } @@ -282,9 +282,9 @@ void AliSimulation::InitCDBStorage() for (Int_t i = 0; i < fSpecCDBUri.GetEntriesFast(); i++) { TObject* obj = fSpecCDBUri[i]; if (!obj) continue; - AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - AliWarning(Form("Specific CDB storage for %s is set to: %s",obj->GetName(),obj->GetTitle())); - AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliDebug(2, Form("Specific CDB storage for %s is set to: %s",obj->GetName(),obj->GetTitle())); + AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); man->SetSpecificStorage(obj->GetName(), obj->GetTitle()); } man->Print(); -- 2.43.0