// //
/////////////////////////////////////////////////////////////////////
+#include <cstdlib>
#include <TSystem.h>
#include <TKey.h>
#include <TFile.h>
}
if (subVersion < 0) {
- AliDebug(2,Form("Invalid subversion <%s>.", subVersion));
+ AliDebug(2,Form("Invalid subversion <%d>.", subVersion));
return kFALSE;
}
}
+// //_____________________________________________________________________________
+// 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)
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;
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
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());
}
}
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;
}
//_____________________________________________________________________________
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)
TKey* key;
while ((key = (TKey*) iter.Next())) {
-
+
TString keyNameStr(key->GetName());
if (queryId.GetAliCDBPath().Level1Comprises(keyNameStr)) {
gDirectory->cd(keyNameStr);
}
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;
}
//_____________________________________________________________________________
}
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;
}
const AliCDBDumpParam* dumpParam =
(const AliCDBDumpParam*) param;
- return new AliCDBDump(dumpParam->GetPath(),
+ return new AliCDBDump(dumpParam->GetPath(),
dumpParam->IsReadOnly());
}