1 #ifndef ALI_CDB_MANAGER_H
2 #define ALI_CDB_MANAGER_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
7 /////////////////////////////////////////////////////////////////////
9 // class AliCDBManager //
11 /////////////////////////////////////////////////////////////////////
25 class AliCDBStorageFactory;
28 class AliCDBManager: public TObject {
31 enum DataType {kCondition=0, kReference, kPrivate};
33 void RegisterFactory(AliCDBStorageFactory* factory);
35 Bool_t HasStorage(const char* dbString) const;
37 AliCDBParam* CreateParameter(const char* dbString) const;
38 AliCDBParam* GetCondParam() const {return fCondParam;}
39 AliCDBParam* GetRefParam() const {return fRefParam;}
40 static const char* GetDataTypeName(DataType type);
42 AliCDBStorage* GetStorage(const char* dbString);
44 TList* GetActiveStorages();
46 const TMap* GetStorageMap() const {return fStorageMap;}
47 const TList* GetRetrievedIds() const {return fIds;}
49 void SetDefaultStorage(const char* dbString);
50 void SetDefaultStorage(const AliCDBParam* param);
51 void SetDefaultStorage(AliCDBStorage *storage);
52 void SetDefaultStorage(const char* runType, const char* simType);
53 void SetDefaultStorageFromRun(Int_t run);
55 Bool_t IsDefaultStorageSet() const {return fDefaultStorage != 0;}
56 AliCDBStorage* GetDefaultStorage() const {return fDefaultStorage;}
57 void UnsetDefaultStorage();
59 void SetSpecificStorage(const char* calibType, const char* dbString, Int_t version = -1, Int_t subVersion = -1);
61 AliCDBStorage* GetSpecificStorage(const char* calibType);
63 void SetDrain(const char* dbString);
64 void SetDrain(const AliCDBParam* param);
65 void SetDrain(AliCDBStorage *storage);
66 void UnsetDrain(){fDrainStorage = 0x0;}
67 Bool_t IsDrainSet() const {return fDrainStorage != 0;}
68 Bool_t Drain(AliCDBEntry* entry);
70 Bool_t SetOCDBUploadMode();
71 void UnsetOCDBUploadMode() { fOCDBUploadMode=kFALSE; }
72 Bool_t IsOCDBUploadMode() const { return fOCDBUploadMode; }
74 AliCDBEntry* Get(const AliCDBId& query, Bool_t forceCaching=kFALSE);
75 AliCDBEntry* Get(const AliCDBPath& path, Int_t runNumber=-1,
76 Int_t version = -1, Int_t subVersion = -1);
77 AliCDBEntry* Get(const AliCDBPath& path, const AliCDBRunRange& runRange,
78 Int_t version = -1, Int_t subVersion = -1);
79 AliCDBEntry* GetEntryFromSnapshot(const char* path);
81 const char* GetURI(const char* path);
83 TList* GetAll(const AliCDBId& query);
84 TList* GetAll(const AliCDBPath& path, Int_t runNumber=-1,
85 Int_t version = -1, Int_t subVersion = -1);
86 TList* GetAll(const AliCDBPath& path, const AliCDBRunRange& runRange,
87 Int_t version = -1, Int_t subVersion = -1);
89 Bool_t Put(TObject* object, const AliCDBId& id, AliCDBMetaData* metaData,
90 const char* mirrors="", DataType type=kPrivate);
91 Bool_t Put(AliCDBEntry* entry, const char* mirrors="", DataType type=kPrivate);
93 void SetCacheFlag(Bool_t cacheFlag) {fCache=cacheFlag;}
94 Bool_t GetCacheFlag() const {return fCache;}
96 ULong64_t SetLock(Bool_t lockFlag=kTRUE, ULong64_t key=0);
97 Bool_t GetLock() const {return fLock;}
99 void SetRaw(Bool_t rawFlag){fRaw=rawFlag;}
100 Bool_t GetRaw() const {return fRaw;}
102 void SetRun(Int_t run);
103 Int_t GetRun() const {return fRun;}
105 void SetMirrorSEs(const char* mirrors);
106 const char* GetMirrorSEs() const;
108 void DestroyActiveStorages();
109 void DestroyActiveStorage(AliCDBStorage* storage);
113 void Print(Option_t* option="") const;
115 static void Destroy();
119 void UnloadFromCache(const char* path);
120 const TMap* GetEntryCache() const {return &fEntryCache;}
122 Bool_t IsShortLived(const char* path);
124 static AliCDBManager* Instance(TMap *entryCache = NULL, Int_t run = -1);
127 void InitFromCache(TMap *entryCache, Int_t run);
128 Bool_t InitFromSnapshot(const char* snapshotFileName, Bool_t overwrite=kTRUE);
129 Bool_t SetSnapshotMode(const char* snapshotFileName="OCDB.root");
130 void UnsetSnapshotMode() {fSnapshotMode=kFALSE;}
131 void DumpToSnapshotFile(const char* snapshotFileName, Bool_t singleKeys) const;
132 void DumpToLightSnapshotFile(const char* lightSnapshotFileName) const;
134 Int_t GetStartRunLHCPeriod();
135 Int_t GetEndRunLHCPeriod();
136 TString GetLHCPeriod();
137 TString GetCvmfsOcdbTag() const {return fCvmfsOcdb;}
139 Bool_t DiffObjects(const char *cdbFile1, const char *cdbFile2) const;
140 void ExtractBaseFolder(TString& url); // remove everything but the url from OCDB path
145 static TString fgkCondUri; // URI of the Conditions data base folder
146 static TString fgkRefUri; // URI of the Reference data base folder
147 static TString fgkMCIdealStorage; // URI of the MC-Ideal Conditions data base folder form MC data
148 static TString fgkMCFullStorage; // URI of the MC-Full Conditions data base folder form MC data
149 static TString fgkMCResidualStorage; // URI of the MC-Residual Conditions data base folder form MC data
150 static TString fgkOCDBFolderXMLfile; // alien path of the XML file for OCDB folder <--> Run range correspondance
153 AliCDBManager(const AliCDBManager & source);
154 AliCDBManager & operator=(const AliCDBManager & source);
156 static AliCDBManager* fgInstance; // AliCDBManager instance
158 AliCDBStorage* GetStorage(const AliCDBParam* param);
159 AliCDBStorage* GetActiveStorage(const AliCDBParam* param);
160 void PutActiveStorage(AliCDBParam* param, AliCDBStorage* storage);
161 void SetSpecificStorage(const char* calibType, const AliCDBParam* param, Int_t version = -1, Int_t subVersion = -1);
162 void AlienToCvmfsUri(TString& uriString) const;
163 void ValidateCvmfsCase() const;
164 void GetLHCPeriodAgainstAlienFile(Int_t run, TString& lhcPeriod, Int_t& startRun, Int_t& endRun);
165 void GetLHCPeriodAgainstCvmfsFile(Int_t run, TString& lhcPeriod, Int_t& startRun, Int_t& endRun);
167 void CacheEntry(const char* path, AliCDBEntry* entry);
169 AliCDBParam* SelectSpecificStorage(const TString& path);
171 AliCDBId* GetId(const AliCDBId& query);
172 AliCDBId* GetId(const AliCDBPath& path, Int_t runNumber=-1,
173 Int_t version = -1, Int_t subVersion = -1);
174 AliCDBId* GetId(const AliCDBPath& path, const AliCDBRunRange& runRange,
175 Int_t version = -1, Int_t subVersion = -1);
179 void InitShortLived();
180 // void InitFromCache(TMap *entryCache, Int_t run);
183 TList fFactories; //! list of registered storage factories
184 TMap fActiveStorages; //! list of active storages
185 TMap fSpecificStorages; //! list of detector-specific storages
186 TMap fEntryCache; //! cache of the retrieved objects
188 TList* fIds; //! List of the retrieved object Id's (to be streamed to file)
189 TMap* fStorageMap; //! list of storages (to be streamed to file)
190 TList* fShortLived; //! List of short lived objects
192 AliCDBStorage *fDefaultStorage; //! pointer to default storage
193 AliCDBStorage *fDrainStorage; //! pointer to drain storage
195 AliCDBParam* fCondParam; // Conditions data storage parameters
196 AliCDBParam* fRefParam; // Reference data storage parameters
198 Int_t fRun; //! The run number
199 Bool_t fCache; //! The cache flag
200 Bool_t fLock; //! Lock flag, if ON default storage and run number cannot be reset
202 Bool_t fSnapshotMode; //! flag saying if we are in snapshot mode
203 TFile *fSnapshotFile;
204 Bool_t fOCDBUploadMode; //! flag for uploads to Official CDBs (upload to cvmfs must follow upload to AliEn)
206 Bool_t fRaw; // flag to say whether we are in the raw case
207 TString fCvmfsOcdb; // set from $OCDB_PATH, points to a cvmfs AliRoot package
208 Int_t fStartRunLHCPeriod; // 1st run of the LHC period set
209 Int_t fEndRunLHCPeriod; // last run of the LHC period set
210 TString fLHCPeriod; // LHC period alien folder
213 ULong64_t fKey; //! Key for locking/unlocking
216 ClassDef(AliCDBManager, 0);
220 /////////////////////////////////////////////////////////////////////
222 // class AliCDBStorageFactory //
224 /////////////////////////////////////////////////////////////////////
227 class AliCDBStorageFactory: public TObject {
228 friend class AliCDBManager;
231 virtual ~AliCDBStorageFactory(){}
232 virtual Bool_t Validate(const char* dbString) = 0;
233 virtual AliCDBParam* CreateParameter(const char* dbString) = 0;
236 virtual AliCDBStorage* Create(const AliCDBParam* param) = 0;
238 ClassDef(AliCDBStorageFactory, 0);
241 /////////////////////////////////////////////////////////////////////
243 // class AliCDBParam //
245 /////////////////////////////////////////////////////////////////////
247 class AliCDBParam: public TObject {
252 virtual ~AliCDBParam();
254 const TString& GetType() const {return fType;};
255 const TString& GetURI() const {return fURI;};
257 virtual AliCDBParam* CloneParam() const = 0;
261 void SetType(const char* type) {fType = type;};
262 void SetURI(const char* uri) {fURI = uri;};
266 TString fType; //! CDB type
267 TString fURI; //! CDB URI
269 ClassDef(AliCDBParam, 0);