Project
Loading...
Searching...
No Matches
CcdbApi.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
16
17#ifndef PROJECT_CCDBAPI_H
18#define PROJECT_CCDBAPI_H
19
20#include <string>
21#include <memory>
22#include <map>
23#include <curl/curl.h>
24#include <TObject.h>
25#include <TMessage.h>
26#include "CCDB/CcdbObjectInfo.h"
28#include <type_traits>
29#include <vector>
30
31#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__ROOTCLING__) && !defined(__CLING__)
33#include <boost/interprocess/sync/named_semaphore.hpp>
34#include <TJAlienCredentials.h>
35#else
36class TJAlienCredentials;
37#endif
38
39#include "CCDB/CCDBDownloader.h"
40
41class TFile;
42class TGrid;
43
44namespace o2
45{
46namespace ccdb
47{
48
49class CCDBQuery;
50
59class CcdbApi //: public DatabaseInterface
60{
61 public:
63 CcdbApi();
65 virtual ~CcdbApi();
66
67 // Delete copy and copy assignment constructor
68 CcdbApi(const CcdbApi&) = delete;
69 void operator=(const CcdbApi&) = delete;
70
71 const std::string getUniqueAgentID() const { return mUniqueAgentID; }
72
73 static bool checkAlienToken();
74
81 void init(std::string const& hosts);
82
87 std::string const& getURL() const { return mUrl; }
88
93 bool isSnapshotMode() const { return mInSnapshotMode; }
94
102 template <typename T>
103 inline static std::unique_ptr<std::vector<char>> createObjectImage(const T* obj, CcdbObjectInfo* info = nullptr)
104 {
105 return createObjectImage(reinterpret_cast<const void*>(obj), typeid(T), info);
106 }
107
115 static std::unique_ptr<std::vector<char>> createObjectImage(const TObject* obj, CcdbObjectInfo* info = nullptr);
116
125 static std::unique_ptr<std::vector<char>> createObjectImage(const void* obj, std::type_info const& tinfo, CcdbObjectInfo* info = nullptr);
126
140 int storeAsTFile(const TObject* rootObject, std::string const& path, std::map<std::string, std::string> const& metadata,
141 long startValidityTimestamp = -1, long endValidityTimestamp = -1, std::vector<char>::size_type maxSize = 0 /*bytes*/) const;
142
156 template <typename T>
157 int storeAsTFileAny(const T* obj, std::string const& path, std::map<std::string, std::string> const& metadata,
158 long startValidityTimestamp = -1, long endValidityTimestamp = -1, std::vector<char>::size_type maxSize = 0 /*bytes*/) const
159 {
160 return storeAsTFile_impl(reinterpret_cast<const void*>(obj), typeid(T), path, metadata, startValidityTimestamp, endValidityTimestamp, maxSize);
161 }
162
163 // interface for storing TObject via storeAsTFileAny
164 int storeAsTFileAny(const TObject* rootobj, std::string const& path, std::map<std::string, std::string> const& metadata,
165 long startValidityTimestamp = -1, long endValidityTimestamp = -1, std::vector<char>::size_type maxSize = 0 /*bytes*/) const
166 {
167 return storeAsTFile(rootobj, path, metadata, startValidityTimestamp, endValidityTimestamp, maxSize);
168 }
169
182 template <typename T>
183 typename std::enable_if<!std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>::type
184 retrieveFromTFileAny(std::string const& path, std::map<std::string, std::string> const& metadata,
185 long timestamp = -1, std::map<std::string, std::string>* headers = nullptr, std::string const& etag = "",
186 const std::string& createdNotAfter = "", const std::string& createdNotBefore = "") const;
187
188 template <typename T>
189 typename std::enable_if<std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>::type
190 retrieveFromTFileAny(std::string const& path, std::map<std::string, std::string> const& metadata,
191 long timestamp = -1, std::map<std::string, std::string>* headers = nullptr, std::string const& etag = "",
192 const std::string& createdNotAfter = "", const std::string& createdNotBefore = "") const;
193
200 void truncate(std::string const& path) const;
201
209 void deleteObject(std::string const& path, long timestamp = -1) const;
210
219 int updateMetadata(std::string const& path, std::map<std::string, std::string> const& metadata, long timestamp, std::string const& id = "", long newEOV = 0);
220
242 std::string list(std::string const& path = "", bool latestOnly = false, std::string const& returnFormat = "text/plain", long createdNotAfter = -1, long createdNotBefore = -1) const;
243
248 void snapshot(std::string const& ccdbrootpath, std::string const& localDir, long timestamp) const;
249
255 bool isHostReachable() const;
256
264 std::vector<std::string> parseSubFolders(std::string const& reply) const;
265
272 std::vector<std::string> getAllFolders(std::string const& top) const;
273
283 bool retrieveBlob(std::string const& path, std::string const& targetdir, std::map<std::string, std::string> const& metadata, long timestamp,
284 bool preservePathStructure = true, std::string const& localFileName = "snapshot.root", std::string const& createdNotAfter = "", std::string const& createdNotBefore = "") const;
285
293 std::map<std::string, std::string> retrieveHeaders(std::string const& path, std::map<std::string, std::string> const& metadata, long timestamp = -1) const;
294
301 static void* extractFromTFile(TFile& file, TClass const* cl, const char* what = CCDBOBJECT_ENTRY);
302
309 static bool getCCDBEntryHeaders(std::string const& url, std::string const& etag, std::vector<std::string>& headers, const std::string& agentID = "");
310
318 static void parseCCDBHeaders(std::vector<std::string> const& headers, std::vector<std::string>& pfns, std::string& etag);
319
323 static CCDBQuery* retrieveQueryInfo(TFile&);
324
328 static std::map<std::string, std::string>* retrieveMetaInfo(TFile&);
329
333 static std::string generateFileName(const std::string& inp);
334
335 constexpr static const char* CCDBQUERY_ENTRY = "ccdb_query";
336 constexpr static const char* CCDBMETA_ENTRY = "ccdb_meta";
337 constexpr static const char* CCDBOBJECT_ENTRY = "ccdb_object";
338
344 static void curlSetSSLOptions(CURL* curl);
345
346 TObject* retrieve(std::string const& path, std::map<std::string, std::string> const& metadata, long timestamp) const;
347
348 TObject* retrieveFromTFile(std::string const& path, std::map<std::string, std::string> const& metadata, long timestamp,
349 std::map<std::string, std::string>* headers, std::string const& etag,
350 const std::string& createdNotAfter, const std::string& createdNotBefore) const;
351 void loadFileToMemory(std::vector<char>& dest, std::string const& path,
352 std::map<std::string, std::string> const& metadata, long timestamp,
353 std::map<std::string, std::string>* headers, std::string const& etag,
354 const std::string& createdNotAfter, const std::string& createdNotBefore, bool considerSnapshot = true) const;
355
356#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__ROOTCLING__) && !defined(__CLING__)
357 typedef struct RequestContext {
359 std::string path;
360 std::map<std::string, std::string> const& metadata;
362 std::map<std::string, std::string>& headers;
363 std::string etag;
364 std::string createdNotAfter;
365 std::string createdNotBefore;
367
369 std::map<std::string, std::string> const& m,
370 std::map<std::string, std::string>& h)
371 : dest(d), metadata(m), headers(h) {}
372 } RequestContext;
373
374 // Stores file associated with requestContext as a snapshot.
375 void saveSnapshot(RequestContext& requestContext) const;
376
377 // Schedules download via CCDBDownloader, but doesn't perform it until mUVLoop is ran.
378 void scheduleDownload(RequestContext& requestContext, size_t* requestCounter) const;
379
380 void getFromSnapshot(bool createSnapshot, std::string const& path,
381 long timestamp, std::map<std::string, std::string>& headers,
382 std::string& snapshotpath, o2::pmr::vector<char>& dest, int& fromSnapshot, std::string const& etag) const;
383 void releaseNamedSemaphore(boost::interprocess::named_semaphore* sem, std::string const& path) const;
384 boost::interprocess::named_semaphore* createNamedSemaphore(std::string const& path) const;
385 static std::string determineSemaphoreName(std::string const& basedir, std::string const& objectpath);
386 // queries and optionally removes a named semaphore from the system
387 // returns true when successful (either found or found + removed)
388 static bool removeSemaphore(std::string const& name, bool remove = false);
389 static void removeLeakingSemaphores(std::string const& basedir, bool remove = false);
390
391 void loadFileToMemory(o2::pmr::vector<char>& dest, const std::string& path, std::map<std::string, std::string>* localHeaders = nullptr) const;
392 void loadFileToMemory(o2::pmr::vector<char>& dest, std::string const& path,
393 std::map<std::string, std::string> const& metadata, long timestamp,
394 std::map<std::string, std::string>* headers, std::string const& etag,
395 const std::string& createdNotAfter, const std::string& createdNotBefore, bool considerSnapshot = true) const;
396
397 // Loads files from alien and cvmfs into given destination.
398 bool loadLocalContentToMemory(o2::pmr::vector<char>& dest, std::string& url) const;
399
400 // add annotated flattened headers in the end of the blob
401 static void appendFlatHeader(o2::pmr::vector<char>& dest, const std::map<std::string, std::string>& headers);
402
403 // the failure to load the file to memory is signaled by 0 size and non-0 capacity
404 static bool isMemoryFileInvalid(const o2::pmr::vector<char>& v) { return v.size() == 0 && v.capacity() > 0; }
405 template <typename T>
407 {
408 auto obj = static_cast<T*>(interpretAsTMemFileAndExtract(blob.data(), blob.size(), typeid(T)));
409 if constexpr (std::is_base_of<o2::conf::ConfigurableParam, T>::value) {
410 auto& param = const_cast<typename std::remove_const<T&>::type>(T::Instance());
411 param.syncCCDBandRegistry(obj);
412 obj = &param;
413 }
414 return obj;
415 }
416
424 void navigateSourcesAndLoadFile(RequestContext& requestContext, int& fromSnapshot, size_t* requestCounter) const;
425
431 void vectoredLoadFileToMemory(std::vector<RequestContext>& requestContext) const;
432#endif
433
434 private:
435 // Sets the unique agent ID
436 void setUniqueAgentID();
437
444 void asynchPerform(CURL* handle, size_t* requestCounter) const;
445
446 // internal helper function to update a CCDB file with meta information
447 static void updateMetaInformationInLocalFile(std::string const& filename, std::map<std::string, std::string> const* headers, CCDBQuery const* querysummary = nullptr);
448
449 // report what file is read and for which purpose
450 void logReading(const std::string& path, long ts, const std::map<std::string, std::string>* headers, const std::string& comment) const;
451
457 void initInSnapshotMode(std::string const& snapshotpath)
458 {
459 mSnapshotTopPath = snapshotpath.empty() ? "." : snapshotpath;
460 mInSnapshotMode = true;
461 }
462
469 std::string getTimestampString(long timestamp) const;
470
480 std::string getFullUrlForStorage(CURL* curl, const std::string& path, const std::string& objtype,
481 const std::map<std::string, std::string>& metadata,
482 long startValidityTimestamp = -1, long endValidityTimestamp = -1, int hostIndex = 0) const;
483
491 std::string getFullUrlForRetrieval(CURL* curl, const std::string& path, const std::map<std::string, std::string>& metadata,
492 long timestamp = -1, int hostIndex = 0) const;
493
494 public:
502 int storeAsBinaryFile(const char* buffer, size_t size, const std::string& fileName, const std::string& objectType,
503 const std::string& path, const std::map<std::string, std::string>& metadata,
504 long startValidityTimestamp, long endValidityTimestamp, std::vector<char>::size_type maxSize = 0 /*in bytes*/) const;
505
513 int storeAsTFile_impl(const void* obj1, std::type_info const& info, std::string const& path, std::map<std::string, std::string> const& metadata,
514 long startValidityTimestamp = -1, long endValidityTimestamp = -1, std::vector<char>::size_type maxSize = 0 /*in bytes*/) const;
515
523 void* retrieveFromTFile(std::type_info const&, std::string const& path, std::map<std::string, std::string> const& metadata,
524 long timestamp = -1, std::map<std::string, std::string>* headers = nullptr, std::string const& etag = "",
525 const std::string& createdNotAfter = "", const std::string& createdNotBefore = "") const;
526
532 void runDownloaderLoop(bool noWait);
538 void setCurlRetriesParameters(int numberRetries, int delay = 100000 /* microseconds */)
539 {
540 mCurlRetries = numberRetries;
541 mCurlDelayRetries = delay;
542 }
543
544 private:
551 void* extractFromLocalFile(std::string const& filename, std::type_info const& tinfo, std::map<std::string, std::string>* headers) const;
552
559 void* downloadFilesystemContent(std::string const& fullUrl, std::type_info const& tinfo, std::map<string, string>* headers) const;
560
561 // initialize the TGrid (Alien connection)
562 bool initTGrid() const;
563
566 void* navigateURLsAndRetrieveContent(CURL*, std::string const& url, std::type_info const& tinfo, std::map<std::string, std::string>* headers) const;
567
568 // helper that interprets a content chunk as TMemFile and extracts the object therefrom
569 static void* interpretAsTMemFileAndExtract(char* contentptr, size_t contentsize, std::type_info const& tinfo);
570
574 void curlInit();
575
576 // convert type_info to TClass, throw on failure
577 static TClass* tinfo2TClass(std::type_info const& tinfo);
578
579 // split string on delimiters and return tokens as vector
580 std::vector<std::string> splitString(const std::string& str, const char* delimiters);
581
582 typedef size_t (*CurlWriteCallback)(void*, size_t, size_t, void*);
583
584 void initCurlOptionsForRetrieve(CURL* curlHandle, void* pointer, CurlWriteCallback writeCallback, bool followRedirect = true) const;
585
587 void initCurlHTTPHeaderOptionsForRetrieve(CURL* curlHandle, curl_slist*& option_list, long timestamp, std::map<std::string, std::string>* headers, std::string const& etag, const std::string& createdNotAfter, const std::string& createdNotBefore) const;
588
589 bool receiveToFile(FILE* fileHandle, std::string const& path, std::map<std::string, std::string> const& metadata,
590 long timestamp, std::map<std::string, std::string>* headers = nullptr, std::string const& etag = "",
591 const std::string& createdNotAfter = "", const std::string& createdNotBefore = "", bool followRedirect = true) const;
592
593 bool receiveToMemory(void* chunk, std::string const& path, std::map<std::string, std::string> const& metadata,
594 long timestamp, std::map<std::string, std::string>* headers = nullptr, std::string const& etag = "",
595 const std::string& createdNotAfter = "", const std::string& createdNotBefore = "", bool followRedirect = true) const;
596
597 bool receiveObject(void* dataHolder, std::string const& path, std::map<std::string, std::string> const& metadata,
598 long timestamp, std::map<std::string, std::string>* headers, std::string const& etag,
599 const std::string& createdNotAfter, const std::string& createdNotBefore, bool followRedirect, CurlWriteCallback writeCallback) const;
600
605 void initHostsPool(std::string hosts);
606
607 std::string getHostUrl(int hostIndex) const;
608
613 void checkMetadataKeys(std::map<std::string, std::string> const& metadata) const;
614
615 std::string getSnapshotDir(const std::string& topdir, const std::string& path) const { return topdir + "/" + path; }
616 std::string getSnapshotFile(const std::string& topdir, const std::string& path, const std::string& sfile = "snapshot.root") const
617 {
618 return getSnapshotDir(topdir, path) + '/' + sfile;
619 }
620
621 template <typename MAP> // can be either std::map or std::multimap
622 static size_t getFlatHeaderSize(const MAP& Headers)
623 {
624 size_t hsize = sizeof(int) + sizeof(FlatHeaderAnnot); // annotation size
625 for (auto& h : Headers) {
626 hsize += h.first.length() + h.second.length() + 2; // 2*(string_buffer + terminating null character)
627 }
628 return hsize;
629 }
630
631 // tmp helper and single point of entry for a CURL perform call
632 // helps to switch between easy handle perform and multi handles in a single place
633 CURLcode CURL_perform(CURL* handle) const;
634
635 mutable CCDBDownloader* mDownloader = nullptr;
636 bool mIsCCDBDownloaderPreferred = false;
638 std::string mUniqueAgentID{}; // Unique User-Agent ID communicated to server for logging
639 std::string mUrl{};
640 std::vector<std::string> hostsPool{};
641 std::string mSnapshotTopPath{}; // root of the snaphot in the snapshot backend mode, i.e. with init("file://<dir>) call
642 std::string mSnapshotCachePath{}; // root of the local snapshot (to fill or impose, even if not in the snapshot backend mode)
643 bool mPreferSnapshotCache = false; // if snapshot is available, don't try to query its validity even in non-snapshot backend mode
644 bool mInSnapshotMode = false;
645 mutable TGrid* mAlienInstance = nullptr; // a cached connection to TGrid (needed for Alien locations)
646 bool mNeedAlienToken = true; // On EPN and FLP we use a local cache and don't need the alien token
647 static std::unique_ptr<TJAlienCredentials> mJAlienCredentials; // access JAliEn credentials
648 int mCurlRetries = 3;
649 int mCurlDelayRetries = 100000; // in microseconds
650 size_t mCurlTimeoutDownload = 15; // download timeout in seconds, can be configured via ALICEO2_CCDB_CURL_TIMEOUT_DOWNLOAD, updated according to the deployment mode
651 size_t mCurlTimeoutUpload = 15; // upload timeout in seconds, can be configured via ALICEO2_CCDB_CURL_TIMEOUT_UPLOAD, updated according to the deployment mode
652
653 static constexpr char FlatHeaderAnnot[] = "$HEADER$"; // annotation for flat header
654
655 ClassDefNV(CcdbApi, 1);
656};
657
658template <typename T>
659typename std::enable_if<!std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>::type
660 CcdbApi::retrieveFromTFileAny(std::string const& path, std::map<std::string, std::string> const& metadata,
661 long timestamp, std::map<std::string, std::string>* headers, std::string const& etag,
662 const std::string& createdNotAfter, const std::string& createdNotBefore) const
663{
664 return static_cast<T*>(retrieveFromTFile(typeid(T), path, metadata, timestamp, headers, etag, createdNotAfter, createdNotBefore));
665}
666
667template <typename T>
668typename std::enable_if<std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>::type
669 CcdbApi::retrieveFromTFileAny(std::string const& path, std::map<std::string, std::string> const& metadata,
670 long timestamp, std::map<std::string, std::string>* headers, std::string const& etag,
671 const std::string& createdNotAfter, const std::string& createdNotBefore) const
672{
673 auto obj = retrieveFromTFile(typeid(T), path, metadata, timestamp, headers, etag, createdNotAfter, createdNotBefore);
674 if (obj) {
675 auto& param = const_cast<typename std::remove_const<T&>::type>(T::Instance());
676 param.syncCCDBandRegistry(obj);
677 return &param;
678 }
679 return static_cast<T*>(obj);
680}
681
682} // namespace ccdb
683} // namespace o2
684
685#endif // PROJECT_CCDBAPI_H
Class for time synchronization of RawReader instances.
static void curlSetSSLOptions(CURL *curl)
Definition CcdbApi.cxx:612
static std::string generateFileName(const std::string &inp)
Definition CcdbApi.cxx:798
static T * extractFromMemoryBlob(o2::pmr::vector< char > &blob)
Definition CcdbApi.h:406
static bool isMemoryFileInvalid(const o2::pmr::vector< char > &v)
Definition CcdbApi.h:404
int storeAsTFile_impl(const void *obj1, std::type_info const &info, std::string const &path, std::map< std::string, std::string > const &metadata, long startValidityTimestamp=-1, long endValidityTimestamp=-1, std::vector< char >::size_type maxSize=0) const
Definition CcdbApi.cxx:335
static bool checkAlienToken()
Definition CcdbApi.cxx:128
void runDownloaderLoop(bool noWait)
Definition CcdbApi.cxx:267
void releaseNamedSemaphore(boost::interprocess::named_semaphore *sem, std::string const &path) const
Definition CcdbApi.cxx:1756
bool retrieveBlob(std::string const &path, std::string const &targetdir, std::map< std::string, std::string > const &metadata, long timestamp, bool preservePathStructure=true, std::string const &localFileName="snapshot.root", std::string const &createdNotAfter="", std::string const &createdNotBefore="") const
Definition CcdbApi.cxx:815
int storeAsTFileAny(const T *obj, std::string const &path, std::map< std::string, std::string > const &metadata, long startValidityTimestamp=-1, long endValidityTimestamp=-1, std::vector< char >::size_type maxSize=0) const
Definition CcdbApi.h:157
static std::map< std::string, std::string > * retrieveMetaInfo(TFile &)
Definition CcdbApi.cxx:1553
void scheduleDownload(RequestContext &requestContext, size_t *requestCounter) const
Definition CcdbApi.cxx:1674
const std::string getUniqueAgentID() const
Definition CcdbApi.h:71
TObject * retrieve(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp) const
Definition CcdbApi.cxx:770
void init(std::string const &hosts)
Definition CcdbApi.cxx:165
void setCurlRetriesParameters(int numberRetries, int delay=100000)
Definition CcdbApi.h:538
TObject * retrieveFromTFile(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp, std::map< std::string, std::string > *headers, std::string const &etag, const std::string &createdNotAfter, const std::string &createdNotBefore) const
Definition CcdbApi.cxx:808
std::string const & getURL() const
Definition CcdbApi.h:87
void getFromSnapshot(bool createSnapshot, std::string const &path, long timestamp, std::map< std::string, std::string > &headers, std::string &snapshotpath, o2::pmr::vector< char > &dest, int &fromSnapshot, std::string const &etag) const
Definition CcdbApi.cxx:1822
bool loadLocalContentToMemory(o2::pmr::vector< char > &dest, std::string &url) const
Definition CcdbApi.cxx:1971
static void removeLeakingSemaphores(std::string const &basedir, bool remove=false)
Definition CcdbApi.cxx:1790
void saveSnapshot(RequestContext &requestContext) const
Definition CcdbApi.cxx:1847
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
Definition CcdbApi.h:103
void operator=(const CcdbApi &)=delete
static void * extractFromTFile(TFile &file, TClass const *cl, const char *what=CCDBOBJECT_ENTRY)
Definition CcdbApi.cxx:877
int storeAsTFile(const TObject *rootObject, std::string const &path, std::map< std::string, std::string > const &metadata, long startValidityTimestamp=-1, long endValidityTimestamp=-1, std::vector< char >::size_type maxSize=0) const
Definition CcdbApi.cxx:466
void snapshot(std::string const &ccdbrootpath, std::string const &localDir, long timestamp) const
Definition CcdbApi.cxx:867
bool isSnapshotMode() const
Definition CcdbApi.h:93
bool isHostReachable() const
Definition CcdbApi.cxx:1301
void loadFileToMemory(std::vector< char > &dest, std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp, std::map< std::string, std::string > *headers, std::string const &etag, const std::string &createdNotAfter, const std::string &createdNotBefore, bool considerSnapshot=true) const
Definition CcdbApi.cxx:1873
static std::string determineSemaphoreName(std::string const &basedir, std::string const &objectpath)
Definition CcdbApi.cxx:1737
void deleteObject(std::string const &path, long timestamp=-1) const
Definition CcdbApi.cxx:1243
static void appendFlatHeader(o2::pmr::vector< char > &dest, const std::map< std::string, std::string > &headers)
Definition CcdbApi.cxx:1906
std::enable_if<!std::is_base_of< o2::conf::ConfigurableParam, T >::value, T * >::type retrieveFromTFileAny(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp=-1, std::map< std::string, std::string > *headers=nullptr, std::string const &etag="", const std::string &createdNotAfter="", const std::string &createdNotBefore="") const
Definition CcdbApi.h:660
std::vector< std::string > getAllFolders(std::string const &top) const
Definition CcdbApi.cxx:1582
void vectoredLoadFileToMemory(std::vector< RequestContext > &requestContext) const
Definition CcdbApi.cxx:1941
int storeAsTFileAny(const TObject *rootobj, std::string const &path, std::map< std::string, std::string > const &metadata, long startValidityTimestamp=-1, long endValidityTimestamp=-1, std::vector< char >::size_type maxSize=0) const
Definition CcdbApi.h:164
boost::interprocess::named_semaphore * createNamedSemaphore(std::string const &path) const
Definition CcdbApi.cxx:1744
static bool removeSemaphore(std::string const &name, bool remove=false)
Definition CcdbApi.cxx:1767
std::map< std::string, std::string > retrieveHeaders(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp=-1) const
Definition CcdbApi.cxx:1416
CcdbApi()
Default constructor.
Definition CcdbApi.cxx:95
static bool getCCDBEntryHeaders(std::string const &url, std::string const &etag, std::vector< std::string > &headers, const std::string &agentID="")
Definition CcdbApi.cxx:1496
CcdbApi(const CcdbApi &)=delete
static CCDBQuery * retrieveQueryInfo(TFile &)
Definition CcdbApi.cxx:1544
static constexpr const char * CCDBQUERY_ENTRY
Definition CcdbApi.h:335
void truncate(std::string const &path) const
Definition CcdbApi.cxx:1270
int storeAsBinaryFile(const char *buffer, size_t size, const std::string &fileName, const std::string &objectType, const std::string &path, const std::map< std::string, std::string > &metadata, long startValidityTimestamp, long endValidityTimestamp, std::vector< char >::size_type maxSize=0) const
Definition CcdbApi.cxx:351
static void parseCCDBHeaders(std::vector< std::string > const &headers, std::vector< std::string > &pfns, std::string &etag)
Definition CcdbApi.cxx:1531
int updateMetadata(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp, std::string const &id="", long newEOV=0)
Definition CcdbApi.cxx:1599
static constexpr const char * CCDBMETA_ENTRY
Definition CcdbApi.h:336
static constexpr const char * CCDBOBJECT_ENTRY
Definition CcdbApi.h:337
void navigateSourcesAndLoadFile(RequestContext &requestContext, int &fromSnapshot, size_t *requestCounter) const
Definition CcdbApi.cxx:1925
std::vector< std::string > parseSubFolders(std::string const &reply) const
Definition CcdbApi.cxx:1324
virtual ~CcdbApi()
Default destructor.
Definition CcdbApi.cxx:111
const GLfloat * m
Definition glcorearb.h:4066
GLenum void ** pointer
Definition glcorearb.h:805
GLuint buffer
Definition glcorearb.h:655
GLsizeiptr size
Definition glcorearb.h:659
const GLdouble * v
Definition glcorearb.h:832
GLdouble GLdouble GLdouble GLdouble top
Definition glcorearb.h:4077
GLuint const GLchar * name
Definition glcorearb.h:781
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLsizei const GLchar *const * path
Definition glcorearb.h:3591
GLenum GLfloat param
Definition glcorearb.h:271
size_t(*)(void *, size_t, size_t, void *) CurlWriteCallback
Definition CcdbApi.cxx:638
std::vector< T, o2::pmr::polymorphic_allocator< T > > vector
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::string filename()
Definition list.h:40
RequestContext(o2::pmr::vector< char > &d, std::map< std::string, std::string > const &m, std::map< std::string, std::string > &h)
Definition CcdbApi.h:368
std::map< std::string, std::string > const & metadata
Definition CcdbApi.h:360
std::map< std::string, std::string > & headers
Definition CcdbApi.h:362
o2::pmr::vector< char > & dest
Definition CcdbApi.h:358
const std::string str