//_____________________________________________________________________________
Bool_t AliCDBLocal::FilenameToId(const char* filename, AliCDBRunRange& runRange,
+ Int_t& version, Int_t& subVersion) {
// build AliCDBId from filename numbers
- Int_t& version, Int_t& subVersion) {
Ssiz_t mSize;
// build file name from AliCDBId data (run range, version, subVersion)
if (!runRange.IsValid()) {
- AliWarning(Form("Invalid run range <%d, %d>.",
+ AliDebug(2,Form("Invalid run range <%d, %d>.",
runRange.GetFirstRun(), runRange.GetLastRun()));
return kFALSE;
}
if (version < 0) {
- AliWarning(Form("Invalid version <%d>.", version));
+ AliDebug(2,Form("Invalid version <%d>.", version));
return kFALSE;
}
if (subVersion < 0) {
- AliWarning(Form("Invalid subversion <%s>.", subVersion));
+ AliDebug(2,Form("Invalid subversion <%s>.", subVersion));
return kFALSE;
}
if (!FilenameToId(filename, aRunRange, aVersion,
aSubVersion)) {
- AliWarning(Form(
+ AliDebug(2,Form(
"Bad filename <%s>! I'll skip it.",
filename));
continue;
if (!FilenameToId(filename, aRunRange, aVersion,
aSubVersion)) {
- AliWarning(Form(
+ AliDebug(2,Form(
"Bad filename <%s>!I'll skip it.",
filename));
continue;
if(lastStorage.Contains(TString("new"), TString::kIgnoreCase) &&
id.GetSubVersion() > 0 ){
- AliWarning(Form("*** WARNING! a NEW object is being stored with version v%d_s%d",
+ AliWarning(Form("A NEW object is being stored with version v%d_s%d",
id.GetVersion(),id.GetSubVersion()));
AliWarning(Form("and it will hide previously stored object with v%d_s%d!",
id.GetVersion(),id.GetSubVersion()-1));
}
//_____________________________________________________________________________
-AliCDBId AliCDBLocal::GetId(const AliCDBId& query) {
+Bool_t AliCDBLocal::GetId(const AliCDBId& query, AliCDBId& result) {
// look for filename matching query (called by GetEntry)
- AliCDBId result(query.GetAliCDBPath(), -1, -1, -1, -1);
-
TString dirName;
dirName += fBaseDirectory;
dirName += '/';
void* dirPtr = gSystem->OpenDirectory(dirName);
if (!dirPtr) {
- AliError(Form("Directory <%s> not found", (query.GetPath()).Data()));
- AliError(Form("in DB folder %s", fBaseDirectory.Data()));
- return result;
+ AliDebug(2,Form("Directory <%s> not found", (query.GetPath()).Data()));
+ AliDebug(2,Form("in DB folder %s", fBaseDirectory.Data()));
+ return kFALSE;
}
const char* filename;
aRunRange.GetLastRun());
} else if (result.GetVersion() == aVersion
&& result.GetSubVersion() == aSubVersion){
- AliError(Form("More than one object valid for run %d, version %d_%d!",
+ 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 result;
+ gSystem->FreeDirectory(dirPtr);
+ return kFALSE;
}
}
// aVersion is requested version!
if(result.GetSubVersion() == aSubVersion){
- AliError(Form("More than one object valid for run %d, version %d_%d!",
+ 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 result;
+ gSystem->FreeDirectory(dirPtr);
+ return kFALSE;
}
if( result.GetSubVersion() < aSubVersion) {
// aVersion and aSubVersion are requested version and subVersion!
if(result.GetVersion() == aVersion && result.GetSubVersion() == aSubVersion){
- AliError(Form("More than one object valid for run %d, version %d_%d!",
+ 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 result;
+ gSystem->FreeDirectory(dirPtr);
+ return kFALSE;
}
result.SetVersion(aVersion);
result.SetSubVersion(aSubVersion);
gSystem->FreeDirectory(dirPtr);
- return result;
+ return kTRUE;
}
//_____________________________________________________________________________
AliCDBEntry* AliCDBLocal::GetEntry(const AliCDBId& queryId) {
// get AliCDBEntry from the database
- AliCDBId dataId;
-
+ AliCDBId dataId(queryId.GetAliCDBPath(), -1, -1, -1, -1);
+ Bool_t result;
+
// 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
- dataId = GetId(GetSelection(queryId));
+ AliCDBId selectedId(queryId);
+ GetSelection(&selectedId);
+ result = GetId(selectedId, dataId);
} else {
- dataId = GetId(queryId);
+ result = GetId(queryId, dataId);
}
- if (!dataId.IsSpecified()) return NULL;
+ if (!result || !dataId.IsSpecified()) return NULL;
TString filename;
if (!IdToFilename(dataId.GetAliCDBRunRange(), dataId.GetVersion(),
dataId.GetSubVersion(), filename)) {
- AliError("Bad data ID encountered! Subnormal error!");
+ AliDebug(2,Form("Bad data ID encountered! Subnormal error!"));
return NULL;
}
TFile file(filename, "READ"); // open file
if (!file.IsOpen()) {
- AliError(Form("Can't open file <%s>!", filename.Data()));
+ AliDebug(2,Form("Can't open file <%s>!", filename.Data()));
return NULL;
}
TObject* anObject = file.Get("AliCDBEntry");
if (!anObject) {
- AliError("Bad storage data: NULL entry object!");
+ AliDebug(2,Form("Bad storage data: NULL entry object!"));
return NULL;
}
if (AliCDBEntry::Class() != anObject->IsA()) {
- AliError("Bad storage data: Invalid entry object!");
+ AliDebug(2,Form("Bad storage data: Invalid entry object!"));
return NULL;
}
void* level0DirPtr = gSystem->OpenDirectory(level0Dir);
if (!level0DirPtr) {
- AliError(Form("Can't open level0 directory <%s>!",
+ AliDebug(2,Form("Can't open level0 directory <%s>!",
level0Dir.Data()));
return;
}
void* level1DirPtr = gSystem->OpenDirectory(level1Dir);
if (!level1DirPtr) {
- AliError(Form("Can't open level1 directory <%s>!",
+ AliDebug(2,Form("Can't open level1 directory <%s>!",
level1Dir.Data()));
return;
}
void* storageDirPtr = gSystem->OpenDirectory(fBaseDirectory);
if (!storageDirPtr) {
- AliError(Form("Can't open storage directory <%s>",
+ AliDebug(2,Form("Can't open storage directory <%s>",
fBaseDirectory.Data()));
return NULL;
}
if (!IdToFilename(id.GetAliCDBRunRange(), id.GetVersion(),
id.GetSubVersion(), filename)) {
- AliError("Bad ID encountered! Subnormal error!");
+ AliDebug(2,Form("Bad ID encountered! Subnormal error!"));
return kFALSE;
}
// write object (key name: "AliCDBEntry")
Bool_t result = file.WriteTObject(entry, "AliCDBEntry");
- if (!result) AliError(Form("Can't write entry to file: %s", filename.Data()));
+ if (!result) AliDebug(2,Form("Can't write entry to file: %s", filename.Data()));
file.Close();
- if(result) AliInfo(Form("AliCDBEntry stored into file %s",filename.Data()));
+ if(result) AliInfo(Form("CDB object stored into file %s",filename.Data()));
+
+ return result;
+}
+
+//_____________________________________________________________________________
+TList* AliCDBLocal::GetIdListFromFile(const char* fileName){
+
+ TString fullFileName(fileName);
+ fullFileName.Prepend(fBaseDirectory+'/');
+ TFile *file = TFile::Open(fullFileName);
+ if (!file) {
+ AliError(Form("Can't open selection file <%s>!", fullFileName.Data()));
+ return NULL;
+ }
+ file->cd();
+
+ TList *list = new TList();
+ list->SetOwner();
+ int i=0;
+ TString keycycle;
+
+ AliCDBId *id;
+ while(1){
+ i++;
+ keycycle = "AliCDBId;";
+ keycycle+=i;
+
+ id = (AliCDBId*) file->Get(keycycle);
+ if(!id) break;
+ list->AddFirst(id);
+ }
+ file->Close(); delete file; file=0;
+ return list;
+}
+
+//_____________________________________________________________________________
+Bool_t AliCDBLocal::Contains(const char* path) const{
+// check for path in storage's fBaseDirectory
+
+ TString dirName;
+ dirName += fBaseDirectory;
+ dirName += '/';
+ dirName += path; // dirName = fDBPath/path
+ Bool_t result=kFALSE;
+
+ void* dirPtr = gSystem->OpenDirectory(dirName);
+ if (dirPtr) result=kTRUE;
+ gSystem->FreeDirectory(dirPtr);
return result;
}
pathname.Prepend(TString(gSystem->WorkingDirectory()) + '/');
}
- AliInfo(pathname);
-
return new AliCDBLocalParam(pathname);
}