X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliCDBDump.cxx;h=322f614af6790b94050887cf812ec8c33f001754;hb=de487b6e5af895af6fa9f54121d086b0d38abd0a;hp=d40bb51f981fb0db87d0236f44b085223e77c68a;hpb=c3a7b59ad78b88072feaab8b40e071ae84bad21d;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliCDBDump.cxx b/STEER/AliCDBDump.cxx index d40bb51f981..322f614af67 100644 --- a/STEER/AliCDBDump.cxx +++ b/STEER/AliCDBDump.cxx @@ -20,6 +20,7 @@ // // ///////////////////////////////////////////////////////////////////// +#include #include #include #include @@ -251,9 +252,119 @@ Bool_t AliCDBDump::PrepareId(AliCDBId& id) { } +// //_____________________________________________________________________________ +// Bool_t AliCDBDump::GetId(const AliCDBId& query, AliCDBId& result) { +// // look for filename matching query (called by GetEntry) +// +// +// AliCDBRunRange aRunRange; // the runRange got from filename +// Int_t aVersion, aSubVersion; // the version and subVersion got from filename +// +// TIter iter(gDirectory->GetListOfKeys()); +// TKey* key; +// +// if (!query.HasVersion()) { // neither version and subversion specified -> look for highest version and subVersion +// +// while ((key = (TKey*) iter.Next())) { // loop on the keys +// +// if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue; +// // aRunRange, aVersion, aSubVersion filled from filename +// +// if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue; +// // aRunRange contains requested run! +// +// if (result.GetVersion() < aVersion) { +// result.SetVersion(aVersion); +// result.SetSubVersion(aSubVersion); +// +// result.SetFirstRun( +// aRunRange.GetFirstRun()); +// result.SetLastRun( +// aRunRange.GetLastRun()); +// +// } else if (result.GetVersion() == aVersion +// && result.GetSubVersion() +// < aSubVersion) { +// +// result.SetSubVersion(aSubVersion); +// +// result.SetFirstRun( +// aRunRange.GetFirstRun()); +// result.SetLastRun( +// aRunRange.GetLastRun()); +// } else if (result.GetVersion() == aVersion +// && result.GetSubVersion() == aSubVersion){ +// AliDebug(2,Form("More than one object valid for run %d, version %d_%d!", +// query.GetFirstRun(), aVersion, aSubVersion)); +// result.SetRunRange(-1,-1); result.SetVersion(-1); result.SetSubVersion(-1); +// return kFALSE; +// } +// } +// +// } else if (!query.HasSubVersion()) { // version specified but not subversion -> look for highest subVersion +// +// result.SetVersion(query.GetVersion()); +// +// while ((key = (TKey*) iter.Next())) { // loop on the keys +// +// if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue; +// // aRunRange, aVersion, aSubVersion filled from filename +// +// if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue; +// // aRunRange contains requested run! +// +// if(query.GetVersion() != aVersion) continue; +// // aVersion is requested version! +// +// if(result.GetSubVersion() == aSubVersion){ +// AliDebug(2,Form("More than one object valid for run %d, version %d_%d!", +// query.GetFirstRun(), aVersion, aSubVersion)); +// result.SetRunRange(-1,-1); result.SetVersion(-1); result.SetSubVersion(-1); +// return kFALSE; +// } +// if( result.GetSubVersion() < aSubVersion) { +// +// result.SetSubVersion(aSubVersion); +// +// result.SetFirstRun( +// aRunRange.GetFirstRun()); +// result.SetLastRun( +// aRunRange.GetLastRun()); +// } +// } +// +// } else { // both version and subversion specified +// +// while ((key = (TKey*) iter.Next())) { // loop on the keys +// +// if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue; +// // aRunRange, aVersion, aSubVersion filled from filename +// +// if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue; +// // aRunRange contains requested run! +// +// if(query.GetVersion() != aVersion || query.GetSubVersion() != aSubVersion) continue; +// // aVersion and aSubVersion are requested version and subVersion! +// +// if(result.GetVersion() == aVersion && result.GetSubVersion() == aSubVersion){ +// AliDebug(2,Form("More than one object valid for run %d, version %d_%d!", +// query.GetFirstRun(), aVersion, aSubVersion)); +// result.SetRunRange(-1,-1); result.SetVersion(-1); result.SetSubVersion(-1); +// return kFALSE; +// } +// result.SetVersion(aVersion); +// result.SetSubVersion(aSubVersion); +// result.SetFirstRun(aRunRange.GetFirstRun()); +// result.SetLastRun(aRunRange.GetLastRun()); +// +// } +// } +// +// return kTRUE; +// } //_____________________________________________________________________________ -Bool_t AliCDBDump::GetId(const AliCDBId& query, AliCDBId& result) { +AliCDBId* AliCDBDump::GetId(const AliCDBId& query) { // look for filename matching query (called by GetEntry) @@ -263,8 +374,11 @@ Bool_t AliCDBDump::GetId(const AliCDBId& query, AliCDBId& result) { TIter iter(gDirectory->GetListOfKeys()); TKey* key; + AliCDBId* result = new AliCDBId(); + result->SetPath(query.GetPath()); + if (!query.HasVersion()) { // neither version and subversion specified -> look for highest version and subVersion - + while ((key = (TKey*) iter.Next())) { // loop on the keys if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue; @@ -272,41 +386,41 @@ Bool_t AliCDBDump::GetId(const AliCDBId& query, AliCDBId& result) { if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue; // aRunRange contains requested run! - - if (result.GetVersion() < aVersion) { - result.SetVersion(aVersion); - result.SetSubVersion(aSubVersion); - result.SetFirstRun( + if (result->GetVersion() < aVersion) { + result->SetVersion(aVersion); + result->SetSubVersion(aSubVersion); + + result->SetFirstRun( aRunRange.GetFirstRun()); - result.SetLastRun( + result->SetLastRun( aRunRange.GetLastRun()); - } else if (result.GetVersion() == aVersion - && result.GetSubVersion() + } else if (result->GetVersion() == aVersion + && result->GetSubVersion() < aSubVersion) { - result.SetSubVersion(aSubVersion); + result->SetSubVersion(aSubVersion); - result.SetFirstRun( + result->SetFirstRun( aRunRange.GetFirstRun()); - result.SetLastRun( + result->SetLastRun( aRunRange.GetLastRun()); - } else if (result.GetVersion() == aVersion - && result.GetSubVersion() == aSubVersion){ - AliDebug(2,Form("More than one object valid for run %d, version %d_%d!", + } else if (result->GetVersion() == aVersion + && result->GetSubVersion() == aSubVersion){ + AliError(Form("More than one object valid for run %d, version %d_%d!", query.GetFirstRun(), aVersion, aSubVersion)); - result.SetRunRange(-1,-1); result.SetVersion(-1); result.SetSubVersion(-1); - return kFALSE; + delete result; + return NULL; } } - + } else if (!query.HasSubVersion()) { // version specified but not subversion -> look for highest subVersion - result.SetVersion(query.GetVersion()); + result->SetVersion(query.GetVersion()); while ((key = (TKey*) iter.Next())) { // loop on the keys - + if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue; // aRunRange, aVersion, aSubVersion filled from filename @@ -315,20 +429,20 @@ Bool_t AliCDBDump::GetId(const AliCDBId& query, AliCDBId& result) { if(query.GetVersion() != aVersion) continue; // aVersion is requested version! - - if(result.GetSubVersion() == aSubVersion){ - AliDebug(2,Form("More than one object valid for run %d, version %d_%d!", + + if(result->GetSubVersion() == aSubVersion){ + AliError(Form("More than one object valid for run %d, version %d_%d!", query.GetFirstRun(), aVersion, aSubVersion)); - result.SetRunRange(-1,-1); result.SetVersion(-1); result.SetSubVersion(-1); - return kFALSE; + delete result; + return NULL; } - if( result.GetSubVersion() < aSubVersion) { + if( result->GetSubVersion() < aSubVersion) { - result.SetSubVersion(aSubVersion); + result->SetSubVersion(aSubVersion); - result.SetFirstRun( + result->SetFirstRun( aRunRange.GetFirstRun()); - result.SetLastRun( + result->SetLastRun( aRunRange.GetLastRun()); } } @@ -339,28 +453,28 @@ Bool_t AliCDBDump::GetId(const AliCDBId& query, AliCDBId& result) { if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue; // aRunRange, aVersion, aSubVersion filled from filename - + if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue; // aRunRange contains requested run! - if(query.GetVersion() != aVersion || query.GetSubVersion() != aSubVersion) continue; + if(query.GetVersion() != aVersion || query.GetSubVersion() != aSubVersion) continue; // aVersion and aSubVersion are requested version and subVersion! - if(result.GetVersion() == aVersion && result.GetSubVersion() == aSubVersion){ - AliDebug(2,Form("More than one object valid for run %d, version %d_%d!", + if(result->GetVersion() == aVersion && result->GetSubVersion() == aSubVersion){ + AliError(Form("More than one object valid for run %d, version %d_%d!", query.GetFirstRun(), aVersion, aSubVersion)); - result.SetRunRange(-1,-1); result.SetVersion(-1); result.SetSubVersion(-1); - return kFALSE; + delete result; + return NULL; } - result.SetVersion(aVersion); - result.SetSubVersion(aSubVersion); - result.SetFirstRun(aRunRange.GetFirstRun()); - result.SetLastRun(aRunRange.GetLastRun()); + result->SetVersion(aVersion); + result->SetSubVersion(aSubVersion); + result->SetFirstRun(aRunRange.GetFirstRun()); + result->SetLastRun(aRunRange.GetLastRun()); } } - return kTRUE; + return result; } //_____________________________________________________________________________ @@ -378,50 +492,79 @@ AliCDBEntry* AliCDBDump::GetEntry(const AliCDBId& queryId) { return NULL; } - AliCDBId dataId(queryId.GetAliCDBPath(), -1, -1, -1, -1); - Bool_t result; + AliCDBId *dataId = GetEntryId(queryId); - // look for a filename matching query requests (path, runRange, version, subVersion) - if (!queryId.HasVersion()) { - // if version is not specified, first check the selection criteria list - AliCDBId selectedId(queryId); - GetSelection(&selectedId); - result = GetId(selectedId, dataId); - } else { - result = GetId(queryId, dataId); - } - - if (!result || !dataId.IsSpecified()) { + if (!dataId || !dataId->IsSpecified()) { + if(dataId) delete dataId; return NULL; } - + TString keyname; - if (!IdToKeyName(dataId.GetAliCDBRunRange(), dataId.GetVersion(), - dataId.GetSubVersion(), keyname)) { + if (!IdToKeyName(dataId->GetAliCDBRunRange(), dataId->GetVersion(), + dataId->GetSubVersion(), keyname)) { AliDebug(2,Form("Bad ID encountered! Subnormal error!")); + delete dataId; return NULL; } // get the only AliCDBEntry object from the file - // the object in the file is an AliCDBEntry entry named keyname + // the object in the file is an AliCDBEntry entry named keyname // keyName = Run#firstRun_#lastRun_v#version_s#subVersion TObject* anObject = gDirectory->Get(keyname); if (!anObject) { AliDebug(2,Form("Bad storage data: NULL entry object!")); + delete dataId; return NULL; } if (AliCDBEntry::Class() != anObject->IsA()) { AliDebug(2,Form("Bad storage data: Invalid entry object!")); + delete dataId; return NULL; } ((AliCDBEntry*) anObject)->SetLastStorage("dump"); - + + delete dataId; return (AliCDBEntry*) anObject; } +//_____________________________________________________________________________ +AliCDBId* AliCDBDump::GetEntryId(const AliCDBId& queryId) { +// get AliCDBEntry from the database + + TDirectory::TContext context(gDirectory, fFile); + + if (!(fFile && fFile->IsOpen())) { + AliError("AliCDBDump storage is not initialized properly"); + return NULL; + } + + if (!gDirectory->cd(queryId.GetPath())) { + return NULL; + } + + AliCDBId* dataId = 0; + + // look for a filename matching query requests (path, runRange, version, subVersion) + if (!queryId.HasVersion()) { + // if version is not specified, first check the selection criteria list + AliCDBId selectedId(queryId); + GetSelection(&selectedId); + dataId = GetId(queryId); + } else { + dataId = GetId(queryId); + } + + if (dataId && !dataId->IsSpecified()) { + delete dataId; + return NULL; + } + + return dataId; +} + //_____________________________________________________________________________ void AliCDBDump::GetEntriesForLevel0(const AliCDBId& queryId, TList* result) { // multiple request (AliCDBStorage::GetAll) @@ -432,7 +575,7 @@ void AliCDBDump::GetEntriesForLevel0(const AliCDBId& queryId, TList* result) { TKey* key; while ((key = (TKey*) iter.Next())) { - + TString keyNameStr(key->GetName()); if (queryId.GetAliCDBPath().Level1Comprises(keyNameStr)) { gDirectory->cd(keyNameStr); @@ -631,11 +774,13 @@ Int_t AliCDBDump::GetLatestVersion(const char* path, Int_t run){ } AliCDBId query(path, run, run, -1, -1); - AliCDBId dataId; + AliCDBId *dataId = GetId(query); - GetId(query,dataId); + if(!dataId) return -1; + Int_t version = dataId->GetVersion(); - return dataId.GetVersion(); + delete dataId; + return version; } //_____________________________________________________________________________ @@ -649,11 +794,14 @@ Int_t AliCDBDump::GetLatestSubVersion(const char* path, Int_t run, Int_t version } AliCDBId query(path, run, run, version, -1); - AliCDBId dataId; + AliCDBId *dataId = GetId(query); + + if(!dataId) return -1; - GetId(query,dataId); + Int_t subVersion = dataId->GetSubVersion(); - return dataId.GetSubVersion(); + delete dataId; + return subVersion; } @@ -712,7 +860,7 @@ AliCDBStorage* AliCDBDumpFactory::Create(const AliCDBParam* param) { const AliCDBDumpParam* dumpParam = (const AliCDBDumpParam*) param; - return new AliCDBDump(dumpParam->GetPath(), + return new AliCDBDump(dumpParam->GetPath(), dumpParam->IsReadOnly()); }