]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/CDB/AliCDBManager.h
Implement copy to cvmfs for OCDB uploads.
[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
141   protected:
142
143     static TString fgkCondUri;  // URI of the Conditions data base folder
144     static TString fgkRefUri;   // URI of the Reference data base folder
145     static TString fgkMCIdealStorage;   // URI of the MC-Ideal Conditions data base folder form MC data
146     static TString fgkMCFullStorage;    // URI of the MC-Full Conditions data base folder form MC data
147     static TString fgkMCResidualStorage;        // URI of the MC-Residual Conditions data base folder form MC data
148     static TString fgkOCDBFolderXMLfile;        // alien path of the XML file for OCDB folder <--> Run range correspondance
149
150     AliCDBManager() ; 
151     AliCDBManager(const AliCDBManager & source);
152     AliCDBManager & operator=(const AliCDBManager & source);
153
154     static AliCDBManager* fgInstance; // AliCDBManager instance
155
156     AliCDBStorage* GetStorage(const AliCDBParam* param);
157     AliCDBStorage* GetActiveStorage(const AliCDBParam* param);
158     void PutActiveStorage(AliCDBParam* param, AliCDBStorage* storage);
159     void SetSpecificStorage(const char* calibType, const AliCDBParam* param);
160     void AlienToCvmfsUri(TString& uriString) const;
161     void ValidateCvmfsCase() const;
162
163     void CacheEntry(const char* path, AliCDBEntry* entry);
164
165     AliCDBParam* SelectSpecificStorage(const TString& path);
166
167     AliCDBId* GetId(const AliCDBId& query);
168     AliCDBId* GetId(const AliCDBPath& path, Int_t runNumber=-1,
169         Int_t version = -1, Int_t subVersion = -1);
170     AliCDBId* GetId(const AliCDBPath& path, const AliCDBRunRange& runRange,
171         Int_t version = -1, Int_t subVersion = -1);
172
173
174     //  void Init();
175     void InitShortLived();
176     //  void InitFromCache(TMap *entryCache, Int_t run);
177
178
179     TList fFactories;           //! list of registered storage factories
180     TMap fActiveStorages;               //! list of active storages
181     TMap fSpecificStorages;         //! list of detector-specific storages
182     TMap fEntryCache;                   //! cache of the retrieved objects
183
184     TList* fIds;                //! List of the retrieved object Id's (to be streamed to file)
185     TMap* fStorageMap;      //! list of storages (to be streamed to file)
186     TList* fShortLived;         //! List of short lived objects
187
188     AliCDBStorage *fDefaultStorage;     //! pointer to default storage
189     AliCDBStorage *fDrainStorage;       //! pointer to drain storage
190
191     AliCDBParam* fCondParam;    // Conditions data storage parameters
192     AliCDBParam* fRefParam;             // Reference data storage parameters
193
194     Int_t fRun;                 //! The run number
195     Bool_t fCache;                      //! The cache flag
196     Bool_t fLock;       //! Lock flag, if ON default storage and run number cannot be reset
197
198     Bool_t fSnapshotMode;           //! flag saying if we are in snapshot mode
199     TFile *fSnapshotFile;
200     Bool_t fOCDBUploadMode;         //! flag for uploads to Official CDBs (upload to cvmfs must follow upload to AliEn)
201
202     Bool_t fRaw;   // flag to say whether we are in the raw case
203     TString fCvmfsOcdb;       // set from $OCDB_PATH, points to a cvmfs AliRoot package
204     Int_t fStartRunLHCPeriod; // 1st run of the LHC period set
205     Int_t fEndRunLHCPeriod;   // last run of the LHC period set
206     TString fLHCPeriod;       // LHC period alien folder
207
208   private:
209     ULong64_t fKey;  //! Key for locking/unlocking
210
211
212     ClassDef(AliCDBManager, 0);
213 };
214
215
216 /////////////////////////////////////////////////////////////////////
217 //                                                                 //
218 //  class AliCDBStorageFactory                                     //
219 //                                                                 //
220 /////////////////////////////////////////////////////////////////////
221
222 class AliCDBParam;
223 class AliCDBStorageFactory: public TObject {
224   friend class AliCDBManager;
225
226   public:
227   virtual ~AliCDBStorageFactory(){}
228   virtual Bool_t Validate(const char* dbString) = 0;
229   virtual AliCDBParam* CreateParameter(const char* dbString) = 0;       
230
231   protected:
232   virtual AliCDBStorage* Create(const AliCDBParam* param) = 0;
233
234   ClassDef(AliCDBStorageFactory, 0);
235 };
236
237 /////////////////////////////////////////////////////////////////////
238 //                                                                 //
239 //  class AliCDBParam                                              //
240 //                                                                 //
241 /////////////////////////////////////////////////////////////////////
242
243 class AliCDBParam: public TObject {
244
245   public:
246
247     AliCDBParam();
248     virtual ~AliCDBParam();
249
250     const TString& GetType() const {return fType;};
251     const TString& GetURI() const {return fURI;};
252
253     virtual AliCDBParam* CloneParam() const = 0;
254
255   protected:
256
257     void SetType(const char* type) {fType = type;};
258     void SetURI(const char* uri) {fURI = uri;};
259
260   private:
261
262     TString fType; //! CDB type
263     TString fURI;  //! CDB URI
264
265     ClassDef(AliCDBParam, 0);
266 };
267
268 #endif