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)