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 <string_view>
22#include <memory>
23#include <map>
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// libcurl and the downloader are implementation details of CcdbApi.cxx;
40// only opaque handles appear below, so neither header is needed here.
41struct curl_slist;
42
43class TFile;
44#include <TGrid.h>
45
46namespace o2
47{
48namespace ccdb
49{
50
51class CCDBQuery;
52class CCDBDownloader;
53
64
65class CcdbApi //: public DatabaseInterface
66{
67 public:
69 CcdbApi();
71 virtual ~CcdbApi();
72
73 // Delete copy and copy assignment constructor
74 CcdbApi(const CcdbApi&) = delete;
75 void operator=(const CcdbApi&) = delete;
76
77 const std::string getUniqueAgentID() const { return mUniqueAgentID; }
78
79 static bool checkAlienToken();
80
87 void init(std::string const& hosts);
88
93 std::string const& getURL() const { return mUrl; }
94
99 bool isSnapshotMode() const { return mInSnapshotMode; }
100
108 template <typename T>
109 inline static std::unique_ptr<std::vector<char>> createObjectImage(const T* obj, CcdbObjectInfo* info = nullptr)
110 {
111 return createObjectImage(reinterpret_cast<const void*>(obj), typeid(T), info);
112 }
113
121 static std::unique_ptr<std::vector<char>> createObjectImage(const TObject* obj, CcdbObjectInfo* info = nullptr);
122
131 static std::unique_ptr<std::vector<char>> createObjectImage(const void* obj, std::type_info const& tinfo, CcdbObjectInfo* info = nullptr);
132
146 int storeAsTFile(const TObject* rootObject, std::string const& path, std::map<std::string, std::string> const& metadata,
147 long startValidityTimestamp = -1, long endValidityTimestamp = -1, std::vector<char>::size_type maxSize = 0 /*bytes*/) const;
148
162 template <typename T>
163 int storeAsTFileAny(const T* obj, std::string const& path, std::map<std::string, std::string> const& metadata,
164 long startValidityTimestamp = -1, long endValidityTimestamp = -1, std::vector<char>::size_type maxSize = 0 /*bytes*/) const
165 {
166 return storeAsTFile_impl(reinterpret_cast<const void*>(obj), typeid(T), path, metadata, startValidityTimestamp, endValidityTimestamp, maxSize);
167 }
168
169 // interface for storing TObject via storeAsTFileAny
170 int storeAsTFileAny(const TObject* rootobj, std::string const& path, std::map<std::string, std::string> const& metadata,
171 long startValidityTimestamp = -1, long endValidityTimestamp = -1, std::vector<char>::size_type maxSize = 0 /*bytes*/) const
172 {
173 return storeAsTFile(rootobj, path, metadata, startValidityTimestamp, endValidityTimestamp, maxSize);
174 }
175
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
194 template <typename T>
195 typename std::enable_if<std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>::type
196 retrieveFromTFileAny(std::string const& path, std::map<std::string, std::string> const& metadata,
197 long timestamp = -1, std::map<std::string, std::string>* headers = nullptr, std::string const& etag = "",
198 const std::string& createdNotAfter = "", const std::string& createdNotBefore = "") const;
199
206 void truncate(std::string const& path) const;
207
215 void deleteObject(std::string const& path, long timestamp = -1) const;
216
225 int updateMetadata(std::string const& path, std::map<std::string, std::string> const& metadata, long timestamp, std::string const& id = "", long newEOV = 0);
226
248 std::string list(std::string const& path = "", bool latestOnly = false, std::string const& returnFormat = "text/plain", long createdNotAfter = -1, long createdNotBefore = -1) const;
249
254 void snapshot(std::string const& ccdbrootpath, std::string const& localDir, long timestamp) const;
255
261 bool isHostReachable() const;
262
270 std::vector<std::string> parseSubFolders(std::string const& reply) const;
271
278 std::vector<std::string> getAllFolders(std::string const& top) const;
279
289 bool retrieveBlob(std::string const& path, std::string const& targetdir, std::map<std::string, std::string> const& metadata, long timestamp,
290 bool preservePathStructure = true, std::string const& localFileName = "snapshot.root", std::string const& createdNotAfter = "", std::string const& createdNotBefore = "", std::map<std::string, std::string>* headers = nullptr) const;
291
299 std::map<std::string, std::string> retrieveHeaders(std::string const& path, std::map<std::string, std::string> const& metadata, long timestamp = -1) const;
300
307 static void* extractFromTFile(TFile& file, TClass const* cl, const char* what = CCDBOBJECT_ENTRY);
308
315 static bool getCCDBEntryHeaders(std::string const& url, std::string const& etag, std::vector<std::string>& headers, const std::string& agentID = "");
316
324 static void parseCCDBHeaders(std::vector<std::string> const& headers, std::vector<std::string>& pfns, std::string& etag);
325
329 static CCDBQuery* retrieveQueryInfo(TFile&);
330
334 static std::map<std::string, std::string>* retrieveMetaInfo(TFile&);
335
339 static std::string generateFileName(const std::string& inp);
340
341 constexpr static const char* CCDBQUERY_ENTRY = "ccdb_query";
342 constexpr static const char* CCDBMETA_ENTRY = "ccdb_meta";
343 constexpr static const char* CCDBOBJECT_ENTRY = "ccdb_object";
344
350 static void curlSetSSLOptions(CurlHandle* curl);
351
352 TObject* retrieve(std::string const& path, std::map<std::string, std::string> const& metadata, long timestamp) const;
353
354 TObject* retrieveFromTFile(std::string const& path, std::map<std::string, std::string> const& metadata, long timestamp,
355 std::map<std::string, std::string>* headers, std::string const& etag,
356 const std::string& createdNotAfter, const std::string& createdNotBefore) const;
357 void loadFileToMemory(std::vector<char>& dest, std::string const& path,
358 std::map<std::string, std::string> const& metadata, long timestamp,
359 std::map<std::string, std::string>* headers, std::string const& etag,
360 const std::string& createdNotAfter, const std::string& createdNotBefore, bool considerSnapshot = true) const;
361
362#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__ROOTCLING__) && !defined(__CLING__)
363 typedef struct RequestContext {
365 std::string path;
366 std::map<std::string, std::string> const& metadata;
368 std::map<std::string, std::string>& headers;
369 std::string etag;
370 std::string createdNotAfter;
371 std::string createdNotBefore;
373
375 std::map<std::string, std::string> const& m,
376 std::map<std::string, std::string>& h)
377 : dest(d), metadata(m), headers(h) {}
378 } RequestContext;
379
380 // Stores file associated with requestContext as a snapshot.
381 void saveSnapshot(RequestContext& requestContext) const;
382
383 // Schedules download via CCDBDownloader, but doesn't perform it until mUVLoop is ran.
384 void scheduleDownload(RequestContext& requestContext, size_t* requestCounter) const;
385
386 void getFromSnapshot(bool createSnapshot, std::string const& path,
387 long timestamp, std::map<std::string, std::string>& headers,
388 std::string& snapshotpath, o2::pmr::vector<char>& dest, int& fromSnapshot, std::string const& etag) const;
389 void releaseNamedSemaphore(boost::interprocess::named_semaphore* sem, std::string const& path) const;
390 boost::interprocess::named_semaphore* createNamedSemaphore(std::string const& path) const;
391 static std::string determineSemaphoreName(std::string const& basedir, std::string const& objectpath);
392 // queries and optionally removes a named semaphore from the system
393 // returns true when successful (either found or found + removed)
394 static bool removeSemaphore(std::string const& name, bool remove = false);
395 static void removeLeakingSemaphores(std::string const& basedir, bool remove = false);
396
397 void loadFileToMemory(o2::pmr::vector<char>& dest, const std::string& path, std::map<std::string, std::string>* localHeaders = nullptr, bool fetchLocalMetaData = true) const;
398 void loadFileToMemory(o2::pmr::vector<char>& dest, std::string const& path,
399 std::map<std::string, std::string> const& metadata, long timestamp,
400 std::map<std::string, std::string>* headers, std::string const& etag,
401 const std::string& createdNotAfter, const std::string& createdNotBefore, bool considerSnapshot = true) const;
402
403 // Loads files from alien and cvmfs into given destination.
404 bool loadLocalContentToMemory(o2::pmr::vector<char>& dest, std::string& url) const;
405
406 // add annotated flattened headers in the end of the blob
407 static void appendFlatHeader(o2::pmr::vector<char>& dest, const std::map<std::string, std::string>& headers);
408
409 // the failure to load the file to memory is signaled by 0 size and non-0 capacity
410 static bool isMemoryFileInvalid(const o2::pmr::vector<char>& v) { return v.size() == 0 && v.capacity() > 0; }
411 template <typename T>
413 {
414 auto obj = static_cast<T*>(interpretAsTMemFileAndExtract(blob.data(), blob.size(), typeid(T)));
415 if constexpr (std::is_base_of<o2::conf::ConfigurableParam, T>::value) {
416 auto& param = const_cast<typename std::remove_const<T&>::type>(T::Instance());
417 param.syncCCDBandRegistry(obj);
418 obj = &param;
419 }
420 return obj;
421 }
422
430 void navigateSourcesAndLoadFile(RequestContext& requestContext, int& fromSnapshot, size_t* requestCounter) const;
431
437 void vectoredLoadFileToMemory(std::vector<RequestContext>& requestContext) const;
438#endif
439
440 private:
441 // Sets the unique agent ID
442 void setUniqueAgentID();
443
450 void asynchPerform(CurlHandle* handle, size_t* requestCounter) const;
451
452 // internal helper function to update a CCDB file with meta information
453 static void updateMetaInformationInLocalFile(std::string const& filename, std::map<std::string, std::string> const* headers, CCDBQuery const* querysummary = nullptr);
454
455 // report what file is read and for which purpose
456 void logReading(const std::string& path, long ts, const std::map<std::string, std::string>* headers, const std::string& comment) const;
457
463 void initInSnapshotMode(std::string const& snapshotpath)
464 {
465 mSnapshotTopPath = snapshotpath.empty() ? "." : snapshotpath;
466 mInSnapshotMode = true;
467 }
468
475 std::string getTimestampString(long timestamp) const;
476
486 std::string getFullUrlForStorage(CurlHandle* curl, const std::string& path, const std::string& objtype,
487 const std::map<std::string, std::string>& metadata,
488 long startValidityTimestamp = -1, long endValidityTimestamp = -1, int hostIndex = 0) const;
489
497 std::string getFullUrlForRetrieval(CurlHandle* curl, const std::string& path, const std::map<std::string, std::string>& metadata,
498 long timestamp = -1, int hostIndex = 0) const;
499
500 public:
508 int storeAsBinaryFile(const char* buffer, size_t size, const std::string& fileName, const std::string& objectType,
509 const std::string& path, const std::map<std::string, std::string>& metadata,
510 long startValidityTimestamp, long endValidityTimestamp, std::vector<char>::size_type maxSize = 0 /*in bytes*/) const;
511
519 int storeAsTFile_impl(const void* obj1, std::type_info const& info, std::string const& path, std::map<std::string, std::string> const& metadata,
520 long startValidityTimestamp = -1, long endValidityTimestamp = -1, std::vector<char>::size_type maxSize = 0 /*in bytes*/) const;
521
529 void* retrieveFromTFile(std::type_info const&, std::string const& path, std::map<std::string, std::string> const& metadata,
530 long timestamp = -1, std::map<std::string, std::string>* headers = nullptr, std::string const& etag = "",
531 const std::string& createdNotAfter = "", const std::string& createdNotBefore = "") const;
532
538 void runDownloaderLoop(bool noWait);
544 void setCurlRetriesParameters(int numberRetries, int delay = 100000 /* microseconds */)
545 {
546 mCurlRetries = numberRetries;
547 mCurlDelayRetries = delay;
548 }
549
550 private:
557 void* extractFromLocalFile(std::string const& filename, std::type_info const& tinfo, std::map<std::string, std::string>* headers) const;
558
565 void* downloadFilesystemContent(std::string const& fullUrl, std::type_info const& tinfo, std::map<std::string, std::string>* headers) const;
566
567 // initialize the TGrid (Alien connection)
568 bool initTGrid() const;
569
572 void* navigateURLsAndRetrieveContent(CurlHandle*, std::string const& url, std::type_info const& tinfo, std::map<std::string, std::string>* headers) const;
573
574 // helper that interprets a content chunk as TMemFile and extracts the object therefrom
575 static void* interpretAsTMemFileAndExtract(char* contentptr, size_t contentsize, std::type_info const& tinfo);
576
579 void curlInit();
580
581 // convert type_info to TClass, throw on failure
582 static TClass* tinfo2TClass(std::type_info const& tinfo);
583
584 typedef size_t (*CurlWriteCallback)(void*, size_t, size_t, void*);
585
586 void initCurlOptionsForRetrieve(CurlHandle* curlHandle, void* pointer, CurlWriteCallback writeCallback, bool followRedirect = true) const;
587
589 void initCurlHTTPHeaderOptionsForRetrieve(CurlHandle* 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, std::string_view url) const;
590
591 bool receiveToFile(FILE* fileHandle, std::string const& path, std::map<std::string, std::string> const& metadata,
592 long timestamp, std::map<std::string, std::string>* headers = nullptr, std::string const& etag = "",
593 const std::string& createdNotAfter = "", const std::string& createdNotBefore = "", bool followRedirect = true) const;
594
595 bool receiveToMemory(void* chunk, std::string const& path, std::map<std::string, std::string> const& metadata,
596 long timestamp, std::map<std::string, std::string>* headers = nullptr, std::string const& etag = "",
597 const std::string& createdNotAfter = "", const std::string& createdNotBefore = "", bool followRedirect = true) const;
598
599 bool receiveObject(void* dataHolder, std::string const& path, std::map<std::string, std::string> const& metadata,
600 long timestamp, std::map<std::string, std::string>* headers, std::string const& etag,
601 const std::string& createdNotAfter, const std::string& createdNotBefore, bool followRedirect, CurlWriteCallback writeCallback) const;
602
607 void initHostsPool(std::string hosts);
608
609 std::string getHostUrl(int hostIndex) const;
610
615 void checkMetadataKeys(std::map<std::string, std::string> const& metadata) const;
616
617 std::string getSnapshotDir(const std::string& topdir, const std::string& path) const { return topdir + "/" + path; }
618 std::string getSnapshotFile(const std::string& topdir, const std::string& path, const std::string& sfile = "snapshot.root") const
619 {
620 return getSnapshotDir(topdir, path) + '/' + sfile;
621 }
622
623 template <typename MAP> // can be either std::map or std::multimap
624 static size_t getFlatHeaderSize(const MAP& Headers)
625 {
626 size_t hsize = sizeof(int) + sizeof(FlatHeaderAnnot); // annotation size
627 for (auto& h : Headers) {
628 hsize += h.first.length() + h.second.length() + 2; // 2*(string_buffer + terminating null character)
629 }
630 return hsize;
631 }
632
633 // tmp helper and single point of entry for a CURL perform call
634 // helps to switch between easy handle perform and multi handles in a single place
635 int CURL_perform(CurlHandle* handle) const; // returns a CURLcode
636
637 mutable CCDBDownloader* mDownloader = nullptr;
638 bool mIsCCDBDownloaderPreferred = false;
640 std::string mUniqueAgentID{}; // Unique User-Agent ID communicated to server for logging
641 std::string mUrl{};
642 std::vector<std::string> hostsPool{};
643 std::string mSnapshotTopPath{}; // root of the snaphot in the snapshot backend mode, i.e. with init("file://<dir>) call
644 std::string mSnapshotCachePath{}; // root of the local snapshot (to fill or impose, even if not in the snapshot backend mode)
645 bool mPreferSnapshotCache = false; // if snapshot is available, don't try to query its validity even in non-snapshot backend mode
646 bool mInSnapshotMode = false;
647 mutable TGrid* mAlienInstance = nullptr; // a cached connection to TGrid (needed for Alien locations)
648 bool mNeedAlienToken = true; // On EPN and FLP we use a local cache and don't need the alien token
649 static std::unique_ptr<TJAlienCredentials> mJAlienCredentials; // access JAliEn credentials
650 int mCurlRetries = 3;
651 int mCurlDelayRetries = 100000; // in microseconds
652 size_t mCurlTimeoutDownload = 15; // download timeout in seconds, can be configured via ALICEO2_CCDB_CURL_TIMEOUT_DOWNLOAD, updated according to the deployment mode
653 size_t mCurlTimeoutUpload = 15; // upload timeout in seconds, can be configured via ALICEO2_CCDB_CURL_TIMEOUT_UPLOAD, updated according to the deployment mode
654
655 static constexpr char FlatHeaderAnnot[] = "$HEADER$"; // annotation for flat header
656
657 ClassDefNV(CcdbApi, 1);
658};
659
660template <typename T>
661typename std::enable_if<!std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>::type
662 CcdbApi::retrieveFromTFileAny(std::string const& path, std::map<std::string, std::string> const& metadata,
663 long timestamp, std::map<std::string, std::string>* headers, std::string const& etag,
664 const std::string& createdNotAfter, const std::string& createdNotBefore) const
665{
666 return static_cast<T*>(retrieveFromTFile(typeid(T), path, metadata, timestamp, headers, etag, createdNotAfter, createdNotBefore));
667}
668
669template <typename T>
670typename std::enable_if<std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>::type
671 CcdbApi::retrieveFromTFileAny(std::string const& path, std::map<std::string, std::string> const& metadata,
672 long timestamp, std::map<std::string, std::string>* headers, std::string const& etag,
673 const std::string& createdNotAfter, const std::string& createdNotBefore) const
674{
675 auto obj = retrieveFromTFile(typeid(T), path, metadata, timestamp, headers, etag, createdNotAfter, createdNotBefore);
676 if (obj) {
677 auto& param = const_cast<typename std::remove_const<T&>::type>(T::Instance());
678 param.syncCCDBandRegistry(obj);
679 return &param;
680 }
681 return static_cast<T*>(obj);
682}
683
684} // namespace ccdb
685} // namespace o2
686
687#endif // PROJECT_CCDBAPI_H
std::string createdNotBefore
std::string createdNotAfter
size_t maxSize
std::string etag
std::string url
Class for time synchronization of RawReader instances.
static std::string generateFileName(const std::string &inp)
Definition CcdbApi.cxx:902
std::string list(std::string const &path="", bool latestOnly=false, std::string const &returnFormat="text/plain", long createdNotAfter=-1, long createdNotBefore=-1) const
Definition CcdbApi.cxx:1302
static T * extractFromMemoryBlob(o2::pmr::vector< char > &blob)
Definition CcdbApi.h:412
static bool isMemoryFileInvalid(const o2::pmr::vector< char > &v)
Definition CcdbApi.h:410
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:410
static bool checkAlienToken()
Definition CcdbApi.cxx:200
void runDownloaderLoop(bool noWait)
Definition CcdbApi.cxx:342
void releaseNamedSemaphore(boost::interprocess::named_semaphore *sem, std::string const &path) const
Definition CcdbApi.cxx:1924
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:163
static std::map< std::string, std::string > * retrieveMetaInfo(TFile &)
Definition CcdbApi.cxx:1703
void scheduleDownload(RequestContext &requestContext, size_t *requestCounter) const
Definition CcdbApi.cxx:1824
const std::string getUniqueAgentID() const
Definition CcdbApi.h:77
TObject * retrieve(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp) const
Definition CcdbApi.cxx:874
void init(std::string const &hosts)
Definition CcdbApi.cxx:237
void setCurlRetriesParameters(int numberRetries, int delay=100000)
Definition CcdbApi.h:544
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:912
std::string const & getURL() const
Definition CcdbApi.h:93
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:1990
bool loadLocalContentToMemory(o2::pmr::vector< char > &dest, std::string &url) const
Definition CcdbApi.cxx:2139
static void removeLeakingSemaphores(std::string const &basedir, bool remove=false)
Definition CcdbApi.cxx:1958
void saveSnapshot(RequestContext &requestContext) const
Definition CcdbApi.cxx:2015
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
Definition CcdbApi.h:109
void operator=(const CcdbApi &)=delete
static void * extractFromTFile(TFile &file, TClass const *cl, const char *what=CCDBOBJECT_ENTRY)
Definition CcdbApi.cxx:984
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:550
void snapshot(std::string const &ccdbrootpath, std::string const &localDir, long timestamp) const
Definition CcdbApi.cxx:974
bool isSnapshotMode() const
Definition CcdbApi.h:99
bool isHostReachable() const
Definition CcdbApi.cxx:1436
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:2041
static std::string determineSemaphoreName(std::string const &basedir, std::string const &objectpath)
Definition CcdbApi.cxx:1905
void deleteObject(std::string const &path, long timestamp=-1) const
Definition CcdbApi.cxx:1356
static void appendFlatHeader(o2::pmr::vector< char > &dest, const std::map< std::string, std::string > &headers)
Definition CcdbApi.cxx:2074
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:662
std::vector< std::string > getAllFolders(std::string const &top) const
Definition CcdbApi.cxx:1732
void vectoredLoadFileToMemory(std::vector< RequestContext > &requestContext) const
Definition CcdbApi.cxx:2109
static void curlSetSSLOptions(CurlHandle *curl)
Definition CcdbApi.cxx:696
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:170
boost::interprocess::named_semaphore * createNamedSemaphore(std::string const &path) const
Definition CcdbApi.cxx:1912
static bool removeSemaphore(std::string const &name, bool remove=false)
Definition CcdbApi.cxx:1935
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:1562
CcdbApi()
Default constructor.
Definition CcdbApi.cxx:173
static bool getCCDBEntryHeaders(std::string const &url, std::string const &etag, std::vector< std::string > &headers, const std::string &agentID="")
Definition CcdbApi.cxx:1643
CcdbApi(const CcdbApi &)=delete
static CCDBQuery * retrieveQueryInfo(TFile &)
Definition CcdbApi.cxx:1694
static constexpr const char * CCDBQUERY_ENTRY
Definition CcdbApi.h:341
void truncate(std::string const &path) const
Definition CcdbApi.cxx:1394
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:426
static void parseCCDBHeaders(std::vector< std::string > const &headers, std::vector< std::string > &pfns, std::string &etag)
Definition CcdbApi.cxx:1679
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="", std::map< std::string, std::string > *headers=nullptr) const
Definition CcdbApi.cxx:919
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:1749
static constexpr const char * CCDBMETA_ENTRY
Definition CcdbApi.h:342
static constexpr const char * CCDBOBJECT_ENTRY
Definition CcdbApi.h:343
void navigateSourcesAndLoadFile(RequestContext &requestContext, int &fromSnapshot, size_t *requestCounter) const
Definition CcdbApi.cxx:2093
std::vector< std::string > parseSubFolders(std::string const &reply) const
Definition CcdbApi.cxx:1470
virtual ~CcdbApi()
Default destructor.
Definition CcdbApi.cxx:189
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
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
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:722
void CurlHandle
stands in for libcurl's typedef void CURL without including <curl/curl.h>
Definition CcdbApi.h:63
std::vector< T, fair::mq::pmr::polymorphic_allocator< T > > vector
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::string filename()
RequestContext(o2::pmr::vector< char > &d, std::map< std::string, std::string > const &m, std::map< std::string, std::string > &h)
Definition CcdbApi.h:374
std::map< std::string, std::string > const & metadata
Definition CcdbApi.h:366
std::map< std::string, std::string > & headers
Definition CcdbApi.h:368
o2::pmr::vector< char > & dest
Definition CcdbApi.h:364