17#ifndef PROJECT_CCDBAPI_H
18#define PROJECT_CCDBAPI_H
31#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__ROOTCLING__) && !defined(__CLING__)
33#include <boost/interprocess/sync/named_semaphore.hpp>
34#include <TJAlienCredentials.h>
36class TJAlienCredentials;
87 void init(std::string
const& hosts);
93 std::string
const&
getURL()
const {
return mUrl; }
108 template <
typename T>
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 )
const;
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 )
const
166 return storeAsTFile_impl(
reinterpret_cast<const void*
>(obj),
typeid(T),
path, metadata, startValidityTimestamp, endValidityTimestamp,
maxSize);
171 long startValidityTimestamp = -1,
long endValidityTimestamp = -1, std::vector<char>::size_type
maxSize = 0 )
const
188 template <
typename T>
189 typename std::enable_if<!std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>
::type
191 long timestamp = -1, std::map<std::string, std::string>* headers =
nullptr, std::string
const&
etag =
"",
194 template <
typename T>
195 typename std::enable_if<std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>
::type
197 long timestamp = -1, std::map<std::string, std::string>* headers =
nullptr, std::string
const&
etag =
"",
225 int updateMetadata(std::string
const&
path, std::map<std::string, std::string>
const& metadata,
long timestamp, std::string
const&
id =
"",
long newEOV = 0);
254 void snapshot(std::string
const& ccdbrootpath, std::string
const& localDir,
long timestamp)
const;
270 std::vector<std::string>
parseSubFolders(std::string
const& reply)
const;
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;
299 std::map<std::string, std::string>
retrieveHeaders(std::string
const&
path, std::map<std::string, std::string>
const& metadata,
long timestamp = -1)
const;
315 static bool getCCDBEntryHeaders(std::string
const&
url, std::string
const&
etag, std::vector<std::string>& headers,
const std::string& agentID =
"");
324 static void parseCCDBHeaders(std::vector<std::string>
const& headers, std::vector<std::string>& pfns, std::string&
etag);
352 TObject*
retrieve(std::string
const&
path, std::map<std::string, std::string>
const& metadata,
long timestamp)
const;
355 std::map<std::string, std::string>* headers, std::string
const&
etag,
358 std::map<std::string, std::string>
const& metadata,
long timestamp,
359 std::map<std::string, std::string>* headers, std::string
const&
etag,
362#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__ROOTCLING__) && !defined(__CLING__)
366 std::map<std::string, std::string>
const&
metadata;
375 std::map<std::string, std::string>
const&
m,
376 std::map<std::string, std::string>&
h)
381 void saveSnapshot(RequestContext& requestContext)
const;
384 void scheduleDownload(RequestContext& requestContext,
size_t* requestCounter)
const;
387 long timestamp, std::map<std::string, std::string>& headers,
399 std::map<std::string, std::string>
const& metadata,
long timestamp,
400 std::map<std::string, std::string>* headers, std::string
const&
etag,
411 template <
typename T>
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);
442 void setUniqueAgentID();
453 static void updateMetaInformationInLocalFile(std::string
const&
filename, std::map<std::string, std::string>
const* headers,
CCDBQuery const* querysummary =
nullptr);
456 void logReading(
const std::string&
path,
long ts,
const std::map<std::string, std::string>* headers,
const std::string& comment)
const;
463 void initInSnapshotMode(std::string
const& snapshotpath)
465 mSnapshotTopPath = snapshotpath.empty() ?
"." : snapshotpath;
466 mInSnapshotMode =
true;
475 std::string getTimestampString(
long timestamp)
const;
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;
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;
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 )
const;
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 )
const;
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 =
"",
546 mCurlRetries = numberRetries;
547 mCurlDelayRetries = delay;
557 void* extractFromLocalFile(std::string
const&
filename, std::type_info
const& tinfo, std::map<std::string, std::string>* headers)
const;
565 void* downloadFilesystemContent(std::string
const& fullUrl, std::type_info
const& tinfo, std::map<std::string, std::string>* headers)
const;
568 bool initTGrid()
const;
572 void* navigateURLsAndRetrieveContent(
CurlHandle*, std::string
const&
url, std::type_info
const& tinfo, std::map<std::string, std::string>* headers)
const;
575 static void* interpretAsTMemFileAndExtract(
char* contentptr,
size_t contentsize, std::type_info
const& tinfo);
582 static TClass* tinfo2TClass(std::type_info
const& tinfo);
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;
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 =
"",
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 =
"",
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,
607 void initHostsPool(std::string hosts);
609 std::string getHostUrl(
int hostIndex)
const;
615 void checkMetadataKeys(std::map<std::string, std::string>
const& metadata)
const;
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
620 return getSnapshotDir(topdir,
path) +
'/' + sfile;
623 template <
typename MAP>
624 static size_t getFlatHeaderSize(
const MAP& Headers)
626 size_t hsize =
sizeof(int) +
sizeof(FlatHeaderAnnot);
627 for (
auto&
h : Headers) {
628 hsize +=
h.first.length() +
h.second.length() + 2;
637 mutable CCDBDownloader* mDownloader =
nullptr;
638 bool mIsCCDBDownloaderPreferred =
false;
640 std::string mUniqueAgentID{};
642 std::vector<std::string> hostsPool{};
643 std::string mSnapshotTopPath{};
644 std::string mSnapshotCachePath{};
645 bool mPreferSnapshotCache =
false;
646 bool mInSnapshotMode =
false;
647 mutable TGrid* mAlienInstance =
nullptr;
648 bool mNeedAlienToken =
true;
649 static std::unique_ptr<TJAlienCredentials> mJAlienCredentials;
650 int mCurlRetries = 3;
651 int mCurlDelayRetries = 100000;
652 size_t mCurlTimeoutDownload = 15;
653 size_t mCurlTimeoutUpload = 15;
655 static constexpr char FlatHeaderAnnot[] =
"$HEADER$";
661typename std::enable_if<!std::is_base_of<o2::conf::ConfigurableParam, T>::value,
T*>
::type
663 long timestamp, std::map<std::string, std::string>* headers, std::string
const&
etag,
670typename std::enable_if<std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>
::type
672 long timestamp, std::map<std::string, std::string>* headers, std::string
const&
etag,
677 auto&
param =
const_cast<typename std::remove_const<T&>::type
>(T::Instance());
678 param.syncCCDBandRegistry(obj);
681 return static_cast<T*
>(obj);
std::string createdNotBefore
std::string createdNotAfter
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
Class for time synchronization of RawReader instances.
static std::string generateFileName(const std::string &inp)
std::string list(std::string const &path="", bool latestOnly=false, std::string const &returnFormat="text/plain", long createdNotAfter=-1, long createdNotBefore=-1) const
static T * extractFromMemoryBlob(o2::pmr::vector< char > &blob)
static bool isMemoryFileInvalid(const o2::pmr::vector< char > &v)
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
static bool checkAlienToken()
void runDownloaderLoop(bool noWait)
void releaseNamedSemaphore(boost::interprocess::named_semaphore *sem, std::string const &path) const
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
static std::map< std::string, std::string > * retrieveMetaInfo(TFile &)
void scheduleDownload(RequestContext &requestContext, size_t *requestCounter) const
const std::string getUniqueAgentID() const
TObject * retrieve(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp) const
void init(std::string const &hosts)
void setCurlRetriesParameters(int numberRetries, int delay=100000)
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
std::string const & getURL() const
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
bool loadLocalContentToMemory(o2::pmr::vector< char > &dest, std::string &url) const
static void removeLeakingSemaphores(std::string const &basedir, bool remove=false)
void saveSnapshot(RequestContext &requestContext) const
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
void operator=(const CcdbApi &)=delete
static void * extractFromTFile(TFile &file, TClass const *cl, const char *what=CCDBOBJECT_ENTRY)
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
void snapshot(std::string const &ccdbrootpath, std::string const &localDir, long timestamp) const
bool isSnapshotMode() const
bool isHostReachable() const
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
static std::string determineSemaphoreName(std::string const &basedir, std::string const &objectpath)
void deleteObject(std::string const &path, long timestamp=-1) const
static void appendFlatHeader(o2::pmr::vector< char > &dest, const std::map< std::string, std::string > &headers)
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
std::vector< std::string > getAllFolders(std::string const &top) const
void vectoredLoadFileToMemory(std::vector< RequestContext > &requestContext) const
static void curlSetSSLOptions(CurlHandle *curl)
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
boost::interprocess::named_semaphore * createNamedSemaphore(std::string const &path) const
static bool removeSemaphore(std::string const &name, bool remove=false)
std::map< std::string, std::string > retrieveHeaders(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp=-1) const
CcdbApi()
Default constructor.
static bool getCCDBEntryHeaders(std::string const &url, std::string const &etag, std::vector< std::string > &headers, const std::string &agentID="")
CcdbApi(const CcdbApi &)=delete
static CCDBQuery * retrieveQueryInfo(TFile &)
static constexpr const char * CCDBQUERY_ENTRY
void truncate(std::string const &path) const
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
static void parseCCDBHeaders(std::vector< std::string > const &headers, std::vector< std::string > &pfns, std::string &etag)
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
int updateMetadata(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp, std::string const &id="", long newEOV=0)
static constexpr const char * CCDBMETA_ENTRY
static constexpr const char * CCDBOBJECT_ENTRY
void navigateSourcesAndLoadFile(RequestContext &requestContext, int &fromSnapshot, size_t *requestCounter) const
std::vector< std::string > parseSubFolders(std::string const &reply) const
virtual ~CcdbApi()
Default destructor.
GLdouble GLdouble GLdouble GLdouble top
GLuint const GLchar * name
GLint GLint GLsizei GLint GLenum GLenum type
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLsizei const GLchar *const * path
size_t(*)(void *, size_t, size_t, void *) CurlWriteCallback
void CurlHandle
stands in for libcurl's typedef void CURL without including <curl/curl.h>
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 ...
RequestContext(o2::pmr::vector< char > &d, std::map< std::string, std::string > const &m, std::map< std::string, std::string > &h)
std::map< std::string, std::string > const & metadata
std::string createdNotAfter
std::map< std::string, std::string > & headers
o2::pmr::vector< char > & dest
std::string createdNotBefore