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
configStandalone Light OpenGL display display_light Apply smoothing to points Enable Z buffer Highlight links Highlight seeds Highlight sector tracks Highlight final tracks Show individual Show related Highlight grid Show only individual collision Color clusters belonging to track objects Set line Enable drawing TPC data Enable drawing TOF data Enable drawing magnetic field Set field line step count Invert colors configStandalone Heavy OpenGL display display_heavy Show tracks with ITS contribution Show tracks with TOF contribution Enable propagation of loopers Show clusters at nominal x of pad row for early transformed data Split CE tracks when they cross the central Mark clusters Mark adjacent clusters Hide rejected tracks Apply filter on tracks to be displayed Separate increase X h configStandalone Camera window renderer OpenGL display display_camera Orient the camera such that the y axis is always upwards Full Screen MultiSample Anti Downsampling Anti Enable Vertical Sync Target frame or if the backend cannot limit to the refresh Use OpenGL indirect draws to reduce number of draw calls Display h configStandalone Vulkan display display_vulkan Have uniform buffers in host accessible device memory h configStandalone Internal display display_internal Number of updates the Qt GUI may send ahead of the last one the display has before it waits for the display Opacity of the console background Number of console lines the history is shortened to this when it reaches twice the size Time in seconds an info message fades out after setInfoTime h OpenGL display display Font size Do not use Freetype for font Renderer for event Frontend to use for event ROOT macros used as track filter Console script file
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error First event to Number of events to Number of iterations to Number of iterations to Number of initial iterations excluded from const char Directory with events to Events directory is and not inside events d
CURL * handle
Class for time synchronization of RawReader instances.
static std::string generateFileName(const std::string &inp)
Definition CcdbApi.cxx:905
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:1309
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:413
static bool checkAlienToken()
Definition CcdbApi.cxx:203
void runDownloaderLoop(bool noWait)
Definition CcdbApi.cxx:345
void releaseNamedSemaphore(boost::interprocess::named_semaphore *sem, std::string const &path) const
Definition CcdbApi.cxx:1931
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:1710
void scheduleDownload(RequestContext &requestContext, size_t *requestCounter) const
Definition CcdbApi.cxx:1831
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:877
void init(std::string const &hosts)
Definition CcdbApi.cxx:240
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:915
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:1997
bool loadLocalContentToMemory(o2::pmr::vector< char > &dest, std::string &url) const
Definition CcdbApi.cxx:2146
static void removeLeakingSemaphores(std::string const &basedir, bool remove=false)
Definition CcdbApi.cxx:1965
void saveSnapshot(RequestContext &requestContext) const
Definition CcdbApi.cxx:2022
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:987
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:553
void snapshot(std::string const &ccdbrootpath, std::string const &localDir, long timestamp) const
Definition CcdbApi.cxx:977
bool isSnapshotMode() const
Definition CcdbApi.h:99
bool isHostReachable() const
Definition CcdbApi.cxx:1443
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:2048
static std::string determineSemaphoreName(std::string const &basedir, std::string const &objectpath)
Definition CcdbApi.cxx:1912
void deleteObject(std::string const &path, long timestamp=-1) const
Definition CcdbApi.cxx:1363
static void appendFlatHeader(o2::pmr::vector< char > &dest, const std::map< std::string, std::string > &headers)
Definition CcdbApi.cxx:2081
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:1739
void vectoredLoadFileToMemory(std::vector< RequestContext > &requestContext) const
Definition CcdbApi.cxx:2116
static void curlSetSSLOptions(CurlHandle *curl)
Definition CcdbApi.cxx:699
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:1919
static bool removeSemaphore(std::string const &name, bool remove=false)
Definition CcdbApi.cxx:1942
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:1569
CcdbApi()
Default constructor.
Definition CcdbApi.cxx:176
static bool getCCDBEntryHeaders(std::string const &url, std::string const &etag, std::vector< std::string > &headers, const std::string &agentID="")
Definition CcdbApi.cxx:1650
CcdbApi(const CcdbApi &)=delete
static CCDBQuery * retrieveQueryInfo(TFile &)
Definition CcdbApi.cxx:1701
static constexpr const char * CCDBQUERY_ENTRY
Definition CcdbApi.h:341
void truncate(std::string const &path) const
Definition CcdbApi.cxx:1401
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:429
static void parseCCDBHeaders(std::vector< std::string > const &headers, std::vector< std::string > &pfns, std::string &etag)
Definition CcdbApi.cxx:1686
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:922
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:1756
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:2100
std::vector< std::string > parseSubFolders(std::string const &reply) const
Definition CcdbApi.cxx:1477
virtual ~CcdbApi()
Default destructor.
Definition CcdbApi.cxx:192
const GLfloat * m
Definition glcorearb.h:4066
GLenum void ** pointer
Definition glcorearb.h:805
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:725
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