diff --git a/CondCore/ESSources/plugins/BuildFile.xml b/CondCore/ESSources/plugins/BuildFile.xml index ec4c187e451f9..c5be56468ed9c 100644 --- a/CondCore/ESSources/plugins/BuildFile.xml +++ b/CondCore/ESSources/plugins/BuildFile.xml @@ -1,3 +1,4 @@ + diff --git a/CondCore/ESSources/plugins/CondDBESSource.cc b/CondCore/ESSources/plugins/CondDBESSource.cc index 4bde57c59a258..2a5e0695dbc99 100644 --- a/CondCore/ESSources/plugins/CondDBESSource.cc +++ b/CondCore/ESSources/plugins/CondDBESSource.cc @@ -22,8 +22,10 @@ #include "CondCore/ESSources/interface/DataProxy.h" #include "CondCore/CondDB/interface/PayloadProxy.h" +#include "FWCore/Catalog/interface/SiteLocalConfig.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ServiceRegistry/interface/Service.h" #include #include @@ -123,6 +125,17 @@ CondDBESSource::CondDBESSource(const edm::ParameterSet& iConfig) globaltag = iConfig.getParameter("globaltag"); // the global tag _requires_ a connection string m_connectionString = iConfig.getParameter("connect"); + + if (!globaltag.empty()) { + edm::Service siteLocalConfig; + if (siteLocalConfig.isAvailable()) { + std::string const& localConnectPrefix = siteLocalConfig->localConnectPrefix(); + std::string const& localConnectSuffix = siteLocalConfig->localConnectSuffix(); + if (!localConnectPrefix.empty() && !localConnectSuffix.empty()) { + m_connectionString = localConnectPrefix + globaltag + localConnectSuffix; + } + } + } } else if (iConfig.exists("connect")) // default connection string m_connectionString = iConfig.getParameter("connect"); diff --git a/FWCore/Catalog/interface/SiteLocalConfig.h b/FWCore/Catalog/interface/SiteLocalConfig.h index b2916eb40132c..084a583ed2e54 100644 --- a/FWCore/Catalog/interface/SiteLocalConfig.h +++ b/FWCore/Catalog/interface/SiteLocalConfig.h @@ -47,6 +47,8 @@ namespace edm { virtual struct addrinfo const* statisticsDestination() const = 0; virtual std::set const* statisticsInfo() const = 0; virtual std::string const& siteName(void) const = 0; + virtual std::string const& localConnectPrefix() const = 0; + virtual std::string const& localConnectSuffix() const = 0; // implicit copy constructor // implicit assignment operator diff --git a/FWCore/Catalog/test/FileLocator_t.cpp b/FWCore/Catalog/test/FileLocator_t.cpp index 15481c22d7498..1e03ca1447dd4 100644 --- a/FWCore/Catalog/test/FileLocator_t.cpp +++ b/FWCore/Catalog/test/FileLocator_t.cpp @@ -29,13 +29,13 @@ namespace { return nullptr; } std::set const* statisticsInfo() const final { return nullptr; } - std::string const& siteName(void) const final { - static const std::string s_value = "TEST"; - return s_value; - } + std::string const& siteName(void) const final { return m_emptyString; } + std::string const& localConnectPrefix() const final { return m_emptyString; } + std::string const& localConnectSuffix() const final { return m_emptyString; } private: std::vector m_catalogs; + std::string m_emptyString; }; } // namespace diff --git a/FWCore/Services/src/SiteLocalConfigService.cc b/FWCore/Services/src/SiteLocalConfigService.cc index d83af9c2b279b..8c9be69b0b293 100644 --- a/FWCore/Services/src/SiteLocalConfigService.cc +++ b/FWCore/Services/src/SiteLocalConfigService.cc @@ -132,6 +132,12 @@ namespace edm { if (pset.exists("debugLevel")) { m_debugLevel = pset.getUntrackedParameter("debugLevel"); } + if (pset.exists("overrideLocalConnectPrefix")) { + m_localConnectPrefix = pset.getUntrackedParameter("overrideLocalConnectPrefix"); + } + if (pset.exists("overrideLocalConnectSuffix")) { + m_localConnectSuffix = pset.getUntrackedParameter("overrideLocalConnectSuffix"); + } } SiteLocalConfigService::~SiteLocalConfigService() { @@ -259,6 +265,8 @@ namespace edm { } std::string const &SiteLocalConfigService::siteName() const { return m_siteName; } + std::string const &SiteLocalConfigService::localConnectPrefix() const { return m_localConnectPrefix; } + std::string const &SiteLocalConfigService::localConnectSuffix() const { return m_localConnectSuffix; } void SiteLocalConfigService::parse(std::string const &url) { tinyxml2::XMLDocument doc; @@ -279,6 +287,9 @@ namespace edm { // // ... frontier-interpreted server/proxy xml ... // + // + // + // // // // @@ -329,8 +340,17 @@ namespace edm { if (frontierConnect) { m_frontierConnect = _toParenString(*frontierConnect); } + auto localConnect = calibData->FirstChildElement("local-connect"); + if (localConnect) { + auto connectString = localConnect->FirstChildElement("connectString"); + if (connectString) { + m_localConnectPrefix = safe(connectString->Attribute("prefix")); + m_localConnectSuffix = safe(connectString->Attribute("suffix")); + } + } } } + // Parsing of the source config section { auto sourceConfig = site->FirstChildElement("source-config"); @@ -465,7 +485,8 @@ namespace edm { ->setComment( "Provide an alternate listing of statistics to send (comma separated list; current options are 'dn' or " "'nodn'). If left blank, all information is snet (including DNs)."); - + desc.addOptionalUntracked("overrideLocalConnectPrefix"); + desc.addOptionalUntracked("overrideLocalConnectSuffix"); descriptions.add("SiteLocalConfigService", desc); } } // namespace service diff --git a/FWCore/Services/src/SiteLocalConfigService.h b/FWCore/Services/src/SiteLocalConfigService.h index a458ea8c5a86e..2a5b9fd60e2d3 100644 --- a/FWCore/Services/src/SiteLocalConfigService.h +++ b/FWCore/Services/src/SiteLocalConfigService.h @@ -47,6 +47,8 @@ namespace edm { struct addrinfo const* statisticsDestination() const override; std::set const* statisticsInfo() const override; std::string const& siteName() const override; + std::string const& localConnectPrefix() const override; + std::string const& localConnectSuffix() const override; // implicit copy constructor // implicit assignment operator @@ -88,6 +90,8 @@ namespace edm { std::set m_statisticsInfo; bool m_statisticsInfoAvail; std::string m_siteName; + std::string m_localConnectPrefix; + std::string m_localConnectSuffix; }; inline bool isProcessWideService(SiteLocalConfigService const*) { return true; } diff --git a/FWCore/Services/test/SiteLocalConfigServiceTester.cc b/FWCore/Services/test/SiteLocalConfigServiceTester.cc index 4f3c4e5f8c577..2a585a128a996 100644 --- a/FWCore/Services/test/SiteLocalConfigServiceTester.cc +++ b/FWCore/Services/test/SiteLocalConfigServiceTester.cc @@ -10,14 +10,14 @@ // Created: Tue Apr 20 16:51:38 CDT 2010 // -// system include files #include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Catalog/interface/SiteLocalConfig.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Utilities/interface/Exception.h" -// user include files +#include namespace edmtest { class SiteLocalConfigServiceTester : public edm::EDAnalyzer { @@ -33,54 +33,23 @@ namespace edmtest { unsigned int m_ttreeCacheSize; std::vector m_nativeProtocols; bool m_valuesSet; + std::string m_expectedLocalConnectPrefix; + std::string m_expectedLocalConnectSuffix; }; } // namespace edmtest using namespace edmtest; -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// SiteLocalConfigServiceTester::SiteLocalConfigServiceTester(const edm::ParameterSet& iPSet) : m_cacheHint(iPSet.getUntrackedParameter("sourceCacheHint")), m_readHint(iPSet.getUntrackedParameter("sourceReadHint")), m_tempDir(iPSet.getUntrackedParameter("sourceTempDir")), m_ttreeCacheSize(iPSet.getUntrackedParameter("sourceTTreeCacheSize")), m_nativeProtocols(iPSet.getUntrackedParameter >("sourceNativeProtocols")), - m_valuesSet(iPSet.getUntrackedParameter("sourceValuesSet", true)) {} - -// SiteLocalConfigServiceTester::SiteLocalConfigServiceTester(const SiteLocalConfigServiceTester& rhs) -// { -// // do actual copying here; -// } - -//SiteLocalConfigServiceTester::~SiteLocalConfigServiceTester() -//{ -//} - -// -// assignment operators -// -// const SiteLocalConfigServiceTester& SiteLocalConfigServiceTester::operator=(const SiteLocalConfigServiceTester& rhs) -// { -// //An exception safe implementation is -// SiteLocalConfigServiceTester temp(rhs); -// swap(rhs); -// -// return *this; -// } + m_valuesSet(iPSet.getUntrackedParameter("sourceValuesSet", true)), + m_expectedLocalConnectPrefix(iPSet.getUntrackedParameter("expectedLocalConnectPrefix")), + m_expectedLocalConnectSuffix(iPSet.getUntrackedParameter("expectedLocalConnectSuffix")) {} -// -// member functions -// static void throwNotSet(const char* iName) { throw cms::Exception("TestFailure") << "The value " << iName << " should have been set but was not"; } @@ -116,9 +85,7 @@ namespace { } } // namespace -// -// const member functions -// + void SiteLocalConfigServiceTester::analyze(const edm::Event&, const edm::EventSetup&) { edm::Service pConfig; if (m_valuesSet) { @@ -148,10 +115,14 @@ void SiteLocalConfigServiceTester::analyze(const edm::Event&, const edm::EventSe checkNotSet("sourceTTreeCacheSize", pConfig->sourceTTreeCacheSize()); checkNotSet("sourceNativeProtocols", pConfig->sourceNativeProtocols()); } + if (pConfig->localConnectPrefix() != m_expectedLocalConnectPrefix) { + throw cms::Exception("TestFailure") << "The value of localConnectPrefix is \"" << pConfig->localConnectPrefix() + << "\" but we expected the value \"" << m_expectedLocalConnectPrefix << "\""; + } + if (pConfig->localConnectSuffix() != m_expectedLocalConnectSuffix) { + throw cms::Exception("TestFailure") << "The value of localConnectSuffix is \"" << pConfig->localConnectSuffix() + << "\" but we expected the value \"" << m_expectedLocalConnectSuffix << "\""; + } } -// -// static member functions -// - DEFINE_FWK_MODULE(SiteLocalConfigServiceTester); diff --git a/FWCore/Services/test/full-site-local-config.testfile b/FWCore/Services/test/full-site-local-config.testfile index ca428ff9219d4..7bc7161200cd0 100644 --- a/FWCore/Services/test/full-site-local-config.testfile +++ b/FWCore/Services/test/full-site-local-config.testfile @@ -13,6 +13,9 @@ + + + diff --git a/FWCore/Services/test/source-site-local-config.testfile b/FWCore/Services/test/source-site-local-config.testfile index caf4573da9ee8..5e8635fcc9512 100644 --- a/FWCore/Services/test/source-site-local-config.testfile +++ b/FWCore/Services/test/source-site-local-config.testfile @@ -13,6 +13,9 @@ + + + diff --git a/FWCore/Services/test/test_catch2_SiteLocalConfigService.cc b/FWCore/Services/test/test_catch2_SiteLocalConfigService.cc index 8cf87188303f4..5cd1bd6ba9e7d 100644 --- a/FWCore/Services/test/test_catch2_SiteLocalConfigService.cc +++ b/FWCore/Services/test/test_catch2_SiteLocalConfigService.cc @@ -46,6 +46,8 @@ TEST_CASE("Test SiteLocalConfigService", "[sitelocalconfig]") { CHECK(slc.statisticsInfo()->size() == 1); CHECK(slc.statisticsInfo()->find("dn") != slc.statisticsInfo()->end()); CHECK(slc.siteName() == "DUMMY"); + REQUIRE(slc.localConnectPrefix() == "Test:Prefix"); + REQUIRE(slc.localConnectSuffix() == "Test.Suffix"); } SECTION("overrides") { @@ -63,6 +65,8 @@ TEST_CASE("Test SiteLocalConfigService", "[sitelocalconfig]") { pset.addUntrackedParameter("overridePrefetching", false); pset.addUntrackedParameter("overrideStatisticsDestination", ""); pset.addUntrackedParameter >("overrideStatisticsInfo", {{"nodn"}}); + pset.addUntrackedParameter("overrideLocalConnectPrefix", "OverridePrefix"); + pset.addUntrackedParameter("overrideLocalConnectSuffix", "OverrideSuffix"); edm::service::SiteLocalConfigService slc(pset); @@ -90,5 +94,7 @@ TEST_CASE("Test SiteLocalConfigService", "[sitelocalconfig]") { CHECK(slc.statisticsInfo()->size() == 1); CHECK(slc.statisticsInfo()->find("nodn") != slc.statisticsInfo()->end()); CHECK(slc.siteName() == "DUMMY"); + REQUIRE(slc.localConnectPrefix() == "OverridePrefix"); + REQUIRE(slc.localConnectSuffix() == "OverrideSuffix"); } } diff --git a/FWCore/Services/test/test_sitelocalconfig_no_source_cfg.py b/FWCore/Services/test/test_sitelocalconfig_no_source_cfg.py index e285c734c7673..694123a044720 100644 --- a/FWCore/Services/test/test_sitelocalconfig_no_source_cfg.py +++ b/FWCore/Services/test/test_sitelocalconfig_no_source_cfg.py @@ -10,7 +10,9 @@ sourceReadHint=cms.untracked.string(""), sourceTTreeCacheSize=cms.untracked.uint32(0), sourceNativeProtocols=cms.untracked.vstring(), - sourceValuesSet=cms.untracked.bool(False) + sourceValuesSet=cms.untracked.bool(False), + expectedLocalConnectPrefix = cms.untracked.string(""), + expectedLocalConnectSuffix = cms.untracked.string("") ) process.o = cms.EndPath(process.tester) diff --git a/FWCore/Services/test/test_sitelocalconfig_override_cfg.py b/FWCore/Services/test/test_sitelocalconfig_override_cfg.py index 8193effe3f8ab..5273b75ab12fe 100644 --- a/FWCore/Services/test/test_sitelocalconfig_override_cfg.py +++ b/FWCore/Services/test/test_sitelocalconfig_override_cfg.py @@ -10,7 +10,10 @@ sourceReadHint=cms.untracked.string("direct-unbuffered"), sourceTTreeCacheSize=cms.untracked.uint32(0), sourceNativeProtocols=cms.untracked.vstring("rfio"), - sourceValuesSet=cms.untracked.bool(True) + sourceValuesSet=cms.untracked.bool(True), + expectedLocalConnectPrefix = cms.untracked.string("TestOverride:Prefix"), + expectedLocalConnectSuffix = cms.untracked.string("TestOverride.Suffix") + ) process.o = cms.EndPath(process.tester) @@ -20,4 +23,7 @@ overrideSourceCacheHintDir=cms.untracked.string("storage-only"), overrideSourceReadHint=cms.untracked.string("direct-unbuffered"), overrideSourceNativeProtocols=cms.untracked.vstring("rfio"), - overrideSourceTTreeCacheSize=cms.untracked.uint32(0))) + overrideSourceTTreeCacheSize=cms.untracked.uint32(0), + overrideLocalConnectPrefix = cms.untracked.string("TestOverride:Prefix"), + overrideLocalConnectSuffix = cms.untracked.string("TestOverride.Suffix") +)) diff --git a/FWCore/Services/test/test_sitelocalconfig_source_cfg.py b/FWCore/Services/test/test_sitelocalconfig_source_cfg.py index 7854cbc5460c1..10fa5c42ca0fb 100644 --- a/FWCore/Services/test/test_sitelocalconfig_source_cfg.py +++ b/FWCore/Services/test/test_sitelocalconfig_source_cfg.py @@ -10,7 +10,9 @@ sourceReadHint=cms.untracked.string("read-ahead-buffered"), sourceTTreeCacheSize=cms.untracked.uint32(10000), sourceNativeProtocols=cms.untracked.vstring("dcache","file"), - sourceValuesSet=cms.untracked.bool(True) + sourceValuesSet=cms.untracked.bool(True), + expectedLocalConnectPrefix = cms.untracked.string("Test:Prefix"), + expectedLocalConnectSuffix = cms.untracked.string("Test.Suffix") ) process.o = cms.EndPath(process.tester)