diff --git a/Control/IOVSvc/src/CondInputLoader.cxx b/Control/IOVSvc/src/CondInputLoader.cxx index dc20a9fdb0f75a525f4f90d416944591912255e5..23b5f5f93ccb15d287326d90935c8895bda632c3 100644 --- a/Control/IOVSvc/src/CondInputLoader.cxx +++ b/Control/IOVSvc/src/CondInputLoader.cxx @@ -27,6 +27,25 @@ #include "TClass.h" + +namespace +{ + struct DataObjIDSorter { + bool operator()( const DataObjID* a, const DataObjID* b ) { return a->fullKey() < b->fullKey(); } + }; + + // Sort a DataObjIDColl in a well-defined, reproducible manner. + // Used for making debugging dumps. + std::vector<const DataObjID*> sortedDataObjIDColl( const DataObjIDColl& coll ) + { + std::vector<const DataObjID*> v; + v.reserve( coll.size() ); + for ( const DataObjID& id : coll ) v.push_back( &id ); + std::sort( v.begin(), v.end(), DataObjIDSorter() ); + return v; + } +} + /////////////////////////////////////////////////////////////////// // Public methods: /////////////////////////////////////////////////////////////////// @@ -184,13 +203,13 @@ CondInputLoader::initialize() StatusCode sc(StatusCode::SUCCESS); std::ostringstream str; str << "Will create WriteCondHandle dependencies for the following DataObjects:"; - for (auto &e : m_load) { - str << "\n + " << e; - if (e.key() == "") { + for (auto &e : sortedDataObjIDColl(m_load)) { + str << "\n + " << *e; + if (e->key() == "") { sc = StatusCode::FAILURE; str << " ERROR: empty key is not allowed!"; } else { - SG::VarHandleKey vhk(e.clid(),e.key(),Gaudi::DataHandle::Writer, + SG::VarHandleKey vhk(e->clid(),e->key(),Gaudi::DataHandle::Writer, StoreID::storeName(StoreID::CONDITION_STORE)); if (m_condSvc->regHandle(this, vhk).isFailure()) { ATH_MSG_ERROR("Unable to register WriteCondHandle " << vhk.fullKey());