Skip to content

Commit bf4a710

Browse files
authored
Merge pull request #47630 from mmusich/mm_provide_fillDesc_CondDBESSource
provide a `fillDescriptions` method for `CondDBESSource`
2 parents 28caa7c + cbe91c6 commit bf4a710

10 files changed

+168
-83
lines changed

CondCore/ESSources/plugins/CondDBESSource.cc

+80-43
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include <exception>
3030

3131
#include <iomanip>
32+
#include <limits>
3233

3334
#include <nlohmann/json.hpp>
3435

@@ -123,8 +124,9 @@ namespace {
123124
CondDBESSource::CondDBESSource(const edm::ParameterSet& iConfig)
124125
: m_jsonDumpFilename(iConfig.getUntrackedParameter<std::string>("JsonDumpFileName", "")),
125126
m_connection(),
126-
m_connectionString(""),
127-
m_frontierKey(""),
127+
m_connectionString(iConfig.getParameter<std::string>("connect")),
128+
m_globalTag(iConfig.getParameter<std::string>("globaltag")),
129+
m_frontierKey(iConfig.getUntrackedParameter<std::string>("frontierKey", "")),
128130
m_lastRun(0), // for the stat
129131
m_lastLumi(0), // for the stat
130132
m_policy(NOREFRESH),
@@ -147,69 +149,65 @@ CondDBESSource::CondDBESSource(const edm::ParameterSet& iConfig)
147149

148150
/*parameter set parsing
149151
*/
150-
std::string globaltag("");
151-
if (iConfig.exists("globaltag")) {
152-
globaltag = iConfig.getParameter<std::string>("globaltag");
153-
// the global tag _requires_ a connection string
154-
m_connectionString = iConfig.getParameter<std::string>("connect");
155-
156-
if (!globaltag.empty()) {
157-
edm::Service<edm::SiteLocalConfig> siteLocalConfig;
158-
if (siteLocalConfig.isAvailable()) {
159-
if (siteLocalConfig->useLocalConnectString()) {
160-
std::string const& localConnectPrefix = siteLocalConfig->localConnectPrefix();
161-
std::string const& localConnectSuffix = siteLocalConfig->localConnectSuffix();
162-
m_connectionString = localConnectPrefix + globaltag + localConnectSuffix;
163-
}
152+
if (!m_globalTag.empty()) {
153+
edm::Service<edm::SiteLocalConfig> siteLocalConfig;
154+
if (siteLocalConfig.isAvailable()) {
155+
if (siteLocalConfig->useLocalConnectString()) {
156+
std::string const& localConnectPrefix = siteLocalConfig->localConnectPrefix();
157+
std::string const& localConnectSuffix = siteLocalConfig->localConnectSuffix();
158+
m_connectionString = localConnectPrefix + m_globalTag + localConnectSuffix;
164159
}
165160
}
166-
} else if (iConfig.exists("connect")) // default connection string
167-
m_connectionString = iConfig.getParameter<std::string>("connect");
168-
169-
// frontier key
170-
m_frontierKey = iConfig.getUntrackedParameter<std::string>("frontierKey", "");
161+
}
171162

172163
// snapshot
173164
boost::posix_time::ptime snapshotTime;
174-
if (iConfig.exists("snapshotTime")) {
175-
std::string snapshotTimeString = iConfig.getParameter<std::string>("snapshotTime");
176-
if (!snapshotTimeString.empty())
177-
snapshotTime = boost::posix_time::time_from_string(snapshotTimeString);
165+
std::string snapshotTimeString = iConfig.getParameter<std::string>("snapshotTime");
166+
if (!snapshotTimeString.empty()) {
167+
snapshotTime = boost::posix_time::time_from_string(snapshotTimeString);
178168
}
179169

180170
// connection configuration
181-
if (iConfig.exists("DBParameters")) {
182-
edm::ParameterSet connectionPset = iConfig.getParameter<edm::ParameterSet>("DBParameters");
183-
m_connection.setParameters(connectionPset);
184-
}
171+
edm::ParameterSet connectionPset = iConfig.getParameter<edm::ParameterSet>("DBParameters");
172+
m_connection.setParameters(connectionPset);
185173
m_connection.configure();
186174

187175
// load specific record/tag info - it will overwrite the global tag ( if any )
188176
std::map<std::string, cond::GTEntry_t> replacements;
189177
std::map<std::string, boost::posix_time::ptime> specialSnapshots;
190-
if (iConfig.exists("toGet")) {
191-
typedef std::vector<edm::ParameterSet> Parameters;
192-
Parameters toGet = iConfig.getParameter<Parameters>("toGet");
178+
179+
typedef std::vector<edm::ParameterSet> Parameters;
180+
Parameters toGet = iConfig.getParameter<Parameters>("toGet");
181+
if (!toGet.empty()) {
193182
for (Parameters::iterator itToGet = toGet.begin(); itToGet != toGet.end(); ++itToGet) {
194183
std::string recordname = itToGet->getParameter<std::string>("record");
195184
if (recordname.empty())
196185
throw cond::Exception("ESSource: The record name has not been provided in a \"toGet\" entry.");
186+
197187
std::string labelname = itToGet->getUntrackedParameter<std::string>("label", "");
198188
std::string pfn("");
199-
if (m_connectionString.empty() || itToGet->exists("connect"))
200-
pfn = itToGet->getParameter<std::string>("connect");
201-
std::string tag("");
189+
const auto& recordConnection = itToGet->getParameter<std::string>("connect");
190+
if (m_connectionString.empty() || !recordConnection.empty()) {
191+
pfn = recordConnection;
192+
}
193+
std::string tag = itToGet->getParameter<std::string>("tag");
202194
std::string fqTag("");
203-
if (itToGet->exists("tag")) {
204-
tag = itToGet->getParameter<std::string>("tag");
195+
196+
if (!tag.empty()) {
205197
fqTag = cond::persistency::fullyQualifiedTag(tag, pfn);
206198
}
199+
207200
boost::posix_time::ptime tagSnapshotTime =
208201
boost::posix_time::time_from_string(std::string(cond::time::MAX_TIMESTAMP));
209-
if (itToGet->exists("snapshotTime"))
210-
tagSnapshotTime = boost::posix_time::time_from_string(itToGet->getParameter<std::string>("snapshotTime"));
211-
if (itToGet->exists("refreshTime")) {
212-
cond::Time_t refreshTime = itToGet->getParameter<unsigned long long>("refreshTime");
202+
203+
const auto& snapshotTimeTagString = itToGet->getParameter<std::string>("snapshotTime");
204+
if (!snapshotTimeTagString.empty()) {
205+
tagSnapshotTime = boost::posix_time::time_from_string(snapshotTimeTagString);
206+
}
207+
208+
const auto& refreshTimeTag = itToGet->getParameter<unsigned long long>("refreshTime");
209+
if (refreshTimeTag != std::numeric_limits<unsigned long long>::max()) {
210+
cond::Time_t refreshTime = refreshTimeTag;
213211
m_refreshTimeForRecord.insert(std::make_pair(recordname, std::make_pair(refreshTime, true)));
214212
}
215213

@@ -225,10 +223,10 @@ CondDBESSource::CondDBESSource(const edm::ParameterSet& iConfig)
225223
std::vector<std::string> connectList;
226224
std::vector<std::string> pfnPrefixList;
227225
std::vector<std::string> pfnPostfixList;
228-
if (!globaltag.empty()) {
226+
if (!m_globalTag.empty()) {
229227
std::string pfnPrefix(iConfig.getUntrackedParameter<std::string>("pfnPrefix", ""));
230228
std::string pfnPostfix(iConfig.getUntrackedParameter<std::string>("pfnPostfix", ""));
231-
boost::split(globaltagList, globaltag, boost::is_any_of("|"), boost::token_compress_off);
229+
boost::split(globaltagList, m_globalTag, boost::is_any_of("|"), boost::token_compress_off);
232230
fillList(m_connectionString, connectList, globaltagList.size(), "connection");
233231
fillList(pfnPrefix, pfnPrefixList, globaltagList.size(), "pfnPrefix");
234232
fillList(pfnPostfix, pfnPostfixList, globaltagList.size(), "pfnPostfix");
@@ -741,6 +739,45 @@ void CondDBESSource::fillTagCollectionFromDB(const std::vector<std::string>& con
741739
}
742740
}
743741

742+
void CondDBESSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
743+
edm::ParameterSetDescription desc;
744+
745+
edm::ParameterSetDescription dbParams;
746+
dbParams.addUntracked<std::string>("authenticationPath", "");
747+
dbParams.addUntracked<int>("authenticationSystem", 0);
748+
dbParams.addUntracked<std::string>("security", "");
749+
dbParams.addUntracked<int>("messageLevel", 0);
750+
dbParams.addUntracked<int>("connectionTimeout", 0);
751+
desc.add("DBParameters", dbParams);
752+
753+
desc.add<std::string>("connect", std::string("frontier://FrontierProd/CMS_CONDITIONS"));
754+
desc.add<std::string>("globaltag", "");
755+
desc.add<std::string>("snapshotTime", "");
756+
desc.addUntracked<std::string>("frontierKey", "");
757+
758+
edm::ParameterSetDescription toGetDesc;
759+
toGetDesc.add<std::string>("record", "");
760+
toGetDesc.add<std::string>("tag", "");
761+
toGetDesc.add<std::string>("snapshotTime", "");
762+
toGetDesc.add<std::string>("connect", "");
763+
toGetDesc.add<unsigned long long>("refreshTime", std::numeric_limits<unsigned long long>::max());
764+
toGetDesc.addUntracked<std::string>("label", "");
765+
766+
std::vector<edm::ParameterSet> default_toGet(1);
767+
desc.addVPSet("toGet", toGetDesc, default_toGet);
768+
769+
desc.addUntracked<std::string>("JsonDumpFileName", "");
770+
desc.addUntracked<bool>("DumpStat", false);
771+
desc.addUntracked<bool>("ReconnectEachRun", false);
772+
desc.addUntracked<bool>("RefreshAlways", false);
773+
desc.addUntracked<bool>("RefreshEachRun", false);
774+
desc.addUntracked<bool>("RefreshOpenIOVs", false);
775+
desc.addUntracked<std::string>("pfnPostfix", "");
776+
desc.addUntracked<std::string>("pfnPrefix", "");
777+
778+
descriptions.add("default_CondDBESource", desc);
779+
}
780+
744781
// backward compatibility for configuration files
745782
class PoolDBESSource : public CondDBESSource {
746783
public:

CondCore/ESSources/plugins/CondDBESSource.h

+4
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
#include "FWCore/Framework/interface/ESProductResolverProvider.h"
7676
#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h"
7777
#include "FWCore/Concurrency/interface/SerialTaskQueue.h"
78+
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
7879

7980
namespace edm {
8081
class ParameterSet;
@@ -98,6 +99,8 @@ class CondDBESSource : public edm::eventsetup::ESProductResolverProvider, public
9899
explicit CondDBESSource(const edm::ParameterSet&);
99100
~CondDBESSource() override;
100101

102+
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
103+
101104
protected:
102105
void setIntervalFor(const EventSetupRecordKey&, const edm::IOVSyncValue&, edm::ValidityInterval&) override;
103106

@@ -112,6 +115,7 @@ class CondDBESSource : public edm::eventsetup::ESProductResolverProvider, public
112115

113116
cond::persistency::ConnectionPool m_connection;
114117
std::string m_connectionString;
118+
std::string m_globalTag;
115119
std::string m_frontierKey;
116120

117121
// Container of ProductResolver, implemented as multi-map keyed by records

CondCore/ESSources/python/CondDBESSource_cfi.py

+17-13
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@
55
from CondCore.CondDB.CondDB_cfi import *
66

77
CondDBConnection = CondDB.clone( connect = cms.string( 'frontier://FrontierProd/CMS_CONDITIONS' ) )
8-
GlobalTag = cms.ESSource( "PoolDBESSource",
9-
CondDBConnection,
10-
globaltag = cms.string( '' ),
11-
snapshotTime = cms.string( '' ),
12-
toGet = cms.VPSet(), # hook to override or add single payloads
13-
DumpStat = cms.untracked.bool( False ),
14-
ReconnectEachRun = cms.untracked.bool( False ),
15-
RefreshAlways = cms.untracked.bool( False ),
16-
RefreshEachRun = cms.untracked.bool( False ),
17-
RefreshOpenIOVs = cms.untracked.bool( False ),
18-
pfnPostfix = cms.untracked.string( '' ),
19-
pfnPrefix = cms.untracked.string( '' ),
20-
)
8+
from CondCore.ESSources.default_CondDBESource_cfi import PoolDBESSource as _PoolDBESSource
9+
10+
GlobalTag = _PoolDBESSource(
11+
CondDBConnection,
12+
globaltag = '',
13+
snapshotTime = '',
14+
frontierKey = '',
15+
toGet = [], # hook to override or add single payloads
16+
JsonDumpFileName = '',
17+
DumpStat = False,
18+
ReconnectEachRun = False,
19+
RefreshAlways = False,
20+
RefreshEachRun = False,
21+
RefreshOpenIOVs = False,
22+
pfnPostfix = '',
23+
pfnPrefix = '' ,
24+
)

CondCore/ESSources/test/BuildFile.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@
3838
<flags EDM_PLUGIN="1"/>
3939
</library>
4040

41-
41+
<test name="UnitTestLoadConditions" command="runConditionsLoadTests.sh"/>

CondCore/ESSources/test/python/load_from_globaltag_cfg.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) )
88

99
process.source = cms.Source("EmptyIOVSource",
10-
lastValue = cms.uint64(3),
11-
timetype = cms.string('runnumber'),
12-
firstValue = cms.uint64(1),
13-
interval = cms.uint64(1)
10+
lastValue = cms.uint64(3),
11+
timetype = cms.string('runnumber'),
12+
firstValue = cms.uint64(1),
13+
interval = cms.uint64(1)
1414
)
1515

1616
from CondCore.ESSources.GlobalTag import GlobalTag

CondCore/ESSources/test/python/load_record_empty_source_cfg.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@
133133

134134
process.source = cms.Source( "EmptySource",
135135
firstRun = cms.untracked.uint32( options.runNumber ),
136-
firstTime = cms.untracked.uint64( ( long( time.time() ) - 24 * 3600 ) << 32 ), #24 hours ago in nanoseconds
136+
firstTime = cms.untracked.uint64((int(time.time()) - 24 * 3600) << 32), # 24 hours ago in nanoseconds
137137
numberEventsInRun = cms.untracked.uint32( options.eventsPerLumi * options.numberOfLumis ), # options.numberOfLumis lumi sections per run
138138
numberEventsInLuminosityBlock = cms.untracked.uint32( options.eventsPerLumi )
139139
)

CondCore/ESSources/test/python/load_records_cfg.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
tag = cms.string('mytest')
1212
), cms.PSet(
1313
record = cms.string('anotherPedestalsRcd'),
14-
tag = cms.string('anothermytest')
14+
tag = cms.string('mytest_1')
1515
)),
16-
connect = cms.string('sqlite_file:test.db')
16+
connect = cms.string('frontier://FrontierPrep/CMS_CONDITIONS')
1717
)
1818

1919
process.source = cms.Source("EmptyIOVSource",
2020
lastValue = cms.uint64(3),
2121
timetype = cms.string('runnumber'),
22-
firstValue = cms.uint64(1),
22+
firstValue = cms.uint64(200000),
2323
interval = cms.uint64(1)
2424
)
2525

CondCore/ESSources/test/python/load_tagcollection_cfg.py

+12-16
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
11
import FWCore.ParameterSet.Config as cms
22

33
process = cms.Process("TEST")
4-
process.load("CondCore.DBCommon.CondDBCommon_cfi")
5-
process.CondDBCommon.connect = cms.string("")
6-
process.CondDBCommon.DBParameters.messageLevel = 0
4+
5+
CondDBSetup = cms.PSet(DBParameters = cms.PSet(messageLevel = cms.untracked.int32(1)))
76

87
process.PoolDBESSource = cms.ESSource("PoolDBESSource",
9-
connect = cms.string(''),
10-
DBParameters = cms.PSet(
11-
messageLevel = cms.untracked.int32(0),
12-
authenticationPath = cms.untracked.string('/afs/cern.ch/cms/DB/conddb')
13-
),
8+
CondDBSetup,
9+
connect = cms.string(''),
1410
toGet = cms.VPSet(
1511
cms.PSet(
16-
connect = cms.untracked.string('oracle://cms_orcoff_prod/CMS_COND_20X_DT'),
17-
record = cms.string('DTTtrigRcd'),
18-
tag = cms.string('tTrig_GRUMM_080313_hlt'),
19-
label = cms.untracked.string('t2')
12+
connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'),
13+
record = cms.string('DTTtrigRcd'),
14+
tag = cms.string('DTTtrig_STARTUP_V01_mc'),
15+
label = cms.untracked.string('t2')
2016
),
2117
cms.PSet(
22-
connect = cms.untracked.string('sqlite_file:orconGRUMM_200p9.db'),
23-
record = cms.string('DTTtrigRcd'),
24-
tag = cms.string('tTrig_GRUMM_080313'),
25-
label = cms.untracked.string('t1')
18+
connect = cms.string('frontier://FrontierPrep/CMS_CONDITIONS'),
19+
record = cms.string('DTTtrigRcd'),
20+
tag = cms.string('DTTtrig_IDEAL_V02_mc'),
21+
label = cms.untracked.string('t1')
2622
)
2723
)
2824
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/sh
2+
3+
function die { echo $1: status $2 ; exit $2; }
4+
5+
echo " testing CondCore/ESSources/test/python/load* "
6+
7+
# List of successful configuration files
8+
configs=(
9+
"load_records_cfg.py"
10+
"load_modifiedglobaltag_cfg.py"
11+
"loadall_from_prodglobaltag_cfg.py"
12+
"load_record_empty_source_cfg.py"
13+
"loadall_from_one_record_empty_source_cfg.py"
14+
"load_from_multiplesources_cfg.py"
15+
"loadall_from_gt_empty_source_cfg.py"
16+
"load_tagcollection_cfg.py"
17+
"loadall_from_gt_cfg.py"
18+
"load_from_globaltag_cfg.py"
19+
)
20+
21+
# Loop through each successful configuration file and run cmsRun
22+
for config in "${configs[@]}";
23+
do
24+
echo "===== Test \"cmsRun $config \" ===="
25+
(cmsRun "${SCRAM_TEST_PATH}/python/"$config) || die "Failure using cmsRun $config" $?
26+
done

0 commit comments

Comments
 (0)