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();
450 void asynchPerform(
CurlHandle* handle,
size_t* requestCounter)
const;
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$";