ATO-69: AliCDBManager.{h,.cxx} - ExtractBaseFolder(TString& url) remove everything...
[u/mrichter/AliRoot.git] / STEER / CDB / AliCDBManager.h
1 #ifndef ALI_CDB_MANAGER_H
2 #define ALI_CDB_MANAGER_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /////////////////////////////////////////////////////////////////////
8 //                                                                 //
9 //  class AliCDBManager                                            //
10 //                                                                 //
11 /////////////////////////////////////////////////////////////////////
12
13 #include <TObject.h>
14 #include <TList.h>
15 #include <TMap.h>
16 #include <TSystem.h>
17 #include <TFile.h>
18
19 class AliCDBEntry;
20 class AliCDBId;
21 class AliCDBPath;
22 class AliCDBRunRange;
23 class AliCDBMetaData;
24 class AliCDBStorage;
25 class AliCDBStorageFactory;
26 class AliCDBParam;
27
28 class AliCDBManager: public TObject {
29
30   public:
31     enum DataType {kCondition=0, kReference, kPrivate};
32
33     void RegisterFactory(AliCDBStorageFactory* factory);
34
35     Bool_t HasStorage(const char* dbString) const;
36
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);
41
42     AliCDBStorage* GetStorage(const char* dbString);
43
44     TList* GetActiveStorages();
45
46     const TMap* GetStorageMap() const {return fStorageMap;}
47     const TList* GetRetrievedIds() const {return fIds;}
48
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);
54
55     Bool_t IsDefaultStorageSet() const {return fDefaultStorage != 0;}
56     AliCDBStorage* GetDefaultStorage() const {return fDefaultStorage;}
57     void UnsetDefaultStorage();
58
59     void SetSpecificStorage(const char* calibType, const char* dbString);
60
61     AliCDBStorage* GetSpecificStorage(const char* calibType);
62
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);
69
70     Bool_t SetOCDBUploadMode();
71     void UnsetOCDBUploadMode() { fOCDBUploadMode=kFALSE; }
72     Bool_t IsOCDBUploadMode() const { return fOCDBUploadMode; }
73
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);
80
81     const char* GetURI(const char* path);                                
82
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); 
88
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);
92
93     void SetCacheFlag(Bool_t cacheFlag) {fCache=cacheFlag;}
94     Bool_t GetCacheFlag() const {return fCache;}
95
96     ULong64_t SetLock(Bool_t lockFlag=kTRUE, ULong64_t key=0);
97     Bool_t GetLock() const {return fLock;}
98
99     void SetRaw(Bool_t rawFlag){fRaw=rawFlag;}
100     Bool_t GetRaw() const {return fRaw;}
101
102     void SetRun(Int_t run);
103     Int_t GetRun() const {return fRun;}
104
105     void SetMirrorSEs(const char* mirrors);
106     const char* GetMirrorSEs() const;
107
108     void DestroyActiveStorages();
109     void DestroyActiveStorage(AliCDBStorage* storage);
110
111     void QueryCDB();
112
113     void Print(Option_t* option="") const;
114
115     static void Destroy();
116     ~AliCDBManager();
117
118     void ClearCache();
119     void UnloadFromCache(const char* path);
120     const TMap* GetEntryCache() const {return &fEntryCache;}
121
122     Bool_t IsShortLived(const char* path);
123
124     static AliCDBManager* Instance(TMap *entryCache = NULL, Int_t run = -1);
125
126     void Init();
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;
133
134     Int_t GetStartRunLHCPeriod();
135     Int_t GetEndRunLHCPeriod();
136     TString GetLHCPeriod();
137     TString GetCvmfsOcdbTag() const {return fCvmfsOcdb;}
138
139     Bool_t DiffObjects(const char *cdbFile1, const char *cdbFile2) const;
140     void ExtractBaseFolder(TString& url); // remove everything but the url from OCDB path
141
142
143   protected:
144
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
151
152     AliCDBManager() ; 
153     AliCDBManager(const AliCDBManager & source);
154     AliCDBManager & operator=(const AliCDBManager & source);
155
156     static AliCDBManager* fgInstance; // AliCDBManager instance
157
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);
162     void AlienToCvmfsUri(TString& uriString) const;
163     void ValidateCvmfsCase() const;
164
165     void CacheEntry(const char* path, AliCDBEntry* entry);
166
167     AliCDBParam* SelectSpecificStorage(const TString& path);
168
169     AliCDBId* GetId(const AliCDBId& query);
170     AliCDBId* GetId(const AliCDBPath& path, Int_t runNumber=-1,
171         Int_t version = -1, Int_t subVersion = -1);
172     AliCDBId* GetId(const AliCDBPath& path, const AliCDBRunRange& runRange,
173         Int_t version = -1, Int_t subVersion = -1);
174
175
176     //  void Init();
177     void InitShortLived();
178     //  void InitFromCache(TMap *entryCache, Int_t run);
179
180
181     TList fFactories;           //! list of registered storage factories
182     TMap fActiveStorages;               //! list of active storages
183     TMap fSpecificStorages;         //! list of detector-specific storages
184     TMap fEntryCache;                   //! cache of the retrieved objects
185
186     TList* fIds;                //! List of the retrieved object Id's (to be streamed to file)
187     TMap* fStorageMap;      //! list of storages (to be streamed to file)
188     TList* fShortLived;         //! List of short lived objects
189
190     AliCDBStorage *fDefaultStorage;     //! pointer to default storage
191     AliCDBStorage *fDrainStorage;       //! pointer to drain storage
192
193     AliCDBParam* fCondParam;    // Conditions data storage parameters
194     AliCDBParam* fRefParam;             // Reference data storage parameters
195
196     Int_t fRun;                 //! The run number
197     Bool_t fCache;                      //! The cache flag
198     Bool_t fLock;       //! Lock flag, if ON default storage and run number cannot be reset
199
200     Bool_t fSnapshotMode;           //! flag saying if we are in snapshot mode
201     TFile *fSnapshotFile;
202     Bool_t fOCDBUploadMode;         //! flag for uploads to Official CDBs (upload to cvmfs must follow upload to AliEn)
203
204     Bool_t fRaw;   // flag to say whether we are in the raw case
205     TString fCvmfsOcdb;       // set from $OCDB_PATH, points to a cvmfs AliRoot package
206     Int_t fStartRunLHCPeriod; // 1st run of the LHC period set
207     Int_t fEndRunLHCPeriod;   // last run of the LHC period set
208     TString fLHCPeriod;       // LHC period alien folder
209
210   private:
211     ULong64_t fKey;  //! Key for locking/unlocking
212
213
214     ClassDef(AliCDBManager, 0);
215 };
216
217
218 /////////////////////////////////////////////////////////////////////
219 //                                                                 //
220 //  class AliCDBStorageFactory                                     //
221 //                                                                 //
222 /////////////////////////////////////////////////////////////////////
223
224 class AliCDBParam;
225 class AliCDBStorageFactory: public TObject {
226   friend class AliCDBManager;
227
228   public:
229   virtual ~AliCDBStorageFactory(){}
230   virtual Bool_t Validate(const char* dbString) = 0;
231   virtual AliCDBParam* CreateParameter(const char* dbString) = 0;       
232
233   protected:
234   virtual AliCDBStorage* Create(const AliCDBParam* param) = 0;
235
236   ClassDef(AliCDBStorageFactory, 0);
237 };
238
239 /////////////////////////////////////////////////////////////////////
240 //                                                                 //
241 //  class AliCDBParam                                              //
242 //                                                                 //
243 /////////////////////////////////////////////////////////////////////
244
245 class AliCDBParam: public TObject {
246
247   public:
248
249     AliCDBParam();
250     virtual ~AliCDBParam();
251
252     const TString& GetType() const {return fType;};
253     const TString& GetURI() const {return fURI;};
254
255     virtual AliCDBParam* CloneParam() const = 0;
256
257   protected:
258
259     void SetType(const char* type) {fType = type;};
260     void SetURI(const char* uri) {fURI = uri;};
261
262   private:
263
264     TString fType; //! CDB type
265     TString fURI;  //! CDB URI
266
267     ClassDef(AliCDBParam, 0);
268 };
269
270 #endif