81 void init(std::string
const& hosts);
87 std::string
const&
getURL()
const {
return mUrl; }
102 template <
typename T>
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 )
const;
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 )
const
160 return storeAsTFile_impl(
reinterpret_cast<const void*
>(obj),
typeid(T),
path, metadata, startValidityTimestamp, endValidityTimestamp, maxSize);
165 long startValidityTimestamp = -1,
long endValidityTimestamp = -1, std::vector<char>::size_type maxSize = 0 )
const
167 return storeAsTFile(rootobj,
path, metadata, startValidityTimestamp, endValidityTimestamp, maxSize);
182 template <
typename T>
183 typename std::enable_if<!std::is_base_of<o2::conf::ConfigurableParam, T>::value, T*>
::type
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;
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 =
"",
192 const std::string& createdNotAfter =
"",
const std::string& createdNotBefore =
"")
const;
219 int updateMetadata(std::string
const&
path, std::map<std::string, std::string>
const& metadata,
long timestamp, std::string
const&
id =
"",
long newEOV = 0);
242 std::string
list(std::string
const&
path =
"",
bool latestOnly =
false, std::string
const& returnFormat =
"text/plain",
long createdNotAfter = -1,
long createdNotBefore = -1)
const;
248 void snapshot(std::string
const& ccdbrootpath, std::string
const& localDir,
long timestamp)
const;
264 std::vector<std::string>
parseSubFolders(std::string
const& reply)
const;
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;
293 std::map<std::string, std::string>
retrieveHeaders(std::string
const&
path, std::map<std::string, std::string>
const& metadata,
long timestamp = -1)
const;
309 static bool getCCDBEntryHeaders(std::string
const& url, std::string
const& etag, std::vector<std::string>& headers,
const std::string& agentID =
"");
318 static void parseCCDBHeaders(std::vector<std::string>
const& headers, std::vector<std::string>& pfns, std::string& etag);
346 TObject*
retrieve(std::string
const&
path, std::map<std::string, std::string>
const& metadata,
long timestamp)
const;
349 std::map<std::string, std::string>* headers, std::string
const& etag,
350 const std::string& createdNotAfter,
const std::string& createdNotBefore)
const;
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;
356#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__ROOTCLING__) && !defined(__CLING__)
360 std::map<std::string, std::string>
const&
metadata;
369 std::map<std::string, std::string>
const&
m,
370 std::map<std::string, std::string>&
h)
375 void saveSnapshot(RequestContext& requestContext)
const;
378 void scheduleDownload(RequestContext& requestContext,
size_t* requestCounter)
const;
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;
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;
405 template <
typename T>
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);
436 void setUniqueAgentID();
444 void asynchPerform(CURL* handle,
size_t* requestCounter)
const;
447 static void updateMetaInformationInLocalFile(std::string
const&
filename, std::map<std::string, std::string>
const* headers,
CCDBQuery const* querysummary =
nullptr);
450 void logReading(
const std::string&
path,
long ts,
const std::map<std::string, std::string>* headers,
const std::string& comment)
const;
457 void initInSnapshotMode(std::string
const& snapshotpath)
459 mSnapshotTopPath = snapshotpath.empty() ?
"." : snapshotpath;
460 mInSnapshotMode =
true;
469 std::string getTimestampString(
long timestamp)
const;
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;
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;
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 )
const;
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 )
const;
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;
540 mCurlRetries = numberRetries;
541 mCurlDelayRetries = delay;
551 void* extractFromLocalFile(std::string
const&
filename, std::type_info
const& tinfo, std::map<std::string, std::string>* headers)
const;
559 void* downloadFilesystemContent(std::string
const& fullUrl, std::type_info
const& tinfo, std::map<string, string>* headers)
const;
562 bool initTGrid()
const;
566 void* navigateURLsAndRetrieveContent(CURL*, std::string
const& url, std::type_info
const& tinfo, std::map<std::string, std::string>* headers)
const;
569 static void* interpretAsTMemFileAndExtract(
char* contentptr,
size_t contentsize, std::type_info
const& tinfo);
577 static TClass* tinfo2TClass(std::type_info
const& tinfo);
580 std::vector<std::string> splitString(
const std::string&
str,
const char* delimiters);
584 void initCurlOptionsForRetrieve(CURL* curlHandle,
void*
pointer,
CurlWriteCallback writeCallback,
bool followRedirect =
true)
const;
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;
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;
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;
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;
605 void initHostsPool(std::string hosts);
607 std::string getHostUrl(
int hostIndex)
const;
613 void checkMetadataKeys(std::map<std::string, std::string>
const& metadata)
const;
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
618 return getSnapshotDir(topdir,
path) +
'/' + sfile;
621 template <
typename MAP>
622 static size_t getFlatHeaderSize(
const MAP& Headers)
624 size_t hsize =
sizeof(
int) +
sizeof(FlatHeaderAnnot);
625 for (
auto&
h : Headers) {
626 hsize +=
h.first.length() +
h.second.length() + 2;
633 CURLcode CURL_perform(CURL* handle)
const;
635 mutable CCDBDownloader* mDownloader =
nullptr;
636 bool mIsCCDBDownloaderPreferred =
false;
638 std::string mUniqueAgentID{};
640 std::vector<std::string> hostsPool{};
641 std::string mSnapshotTopPath{};
642 std::string mSnapshotCachePath{};
643 bool mPreferSnapshotCache =
false;
644 bool mInSnapshotMode =
false;
645 mutable TGrid* mAlienInstance =
nullptr;
646 bool mNeedAlienToken =
true;
647 static std::unique_ptr<TJAlienCredentials> mJAlienCredentials;
648 int mCurlRetries = 3;
649 int mCurlDelayRetries = 100000;
650 size_t mCurlTimeoutDownload = 15;
651 size_t mCurlTimeoutUpload = 15;
653 static constexpr char FlatHeaderAnnot[] =
"$HEADER$";