From f2a8115f8766f653fcf3591fc046fa5e3389d23a Mon Sep 17 00:00:00 2001
From: Peter Onyisi <ponyisi@utexas.edu>
Date: Tue, 24 Dec 2019 08:58:20 +0000
Subject: [PATCH] Configure MetaDataSvc in new-style config

---
 .../python/UnifyProperties.py                 |  1 +
 .../python/TriggerInterface.py                |  9 ++----
 .../python/MetaDataSvcConfig.py               | 29 +++++++++++++++++++
 .../AthenaPoolCnvSvc/python/PoolReadConfig.py |  5 ++--
 Database/IOVDbSvc/python/IOVDbSvcConfig.py    |  4 +++
 .../python/ByteStreamConfig.py                | 23 ++-------------
 .../python/BunchCrossingCondAlgConfig.py      |  2 +-
 .../share/RatesAnalysisFullMenu.py            | 11 ++-----
 8 files changed, 45 insertions(+), 39 deletions(-)
 create mode 100644 Control/AthenaServices/python/MetaDataSvcConfig.py

diff --git a/Control/AthenaConfiguration/python/UnifyProperties.py b/Control/AthenaConfiguration/python/UnifyProperties.py
index 91f07d1ed2b..902f28e3c6c 100644
--- a/Control/AthenaConfiguration/python/UnifyProperties.py
+++ b/Control/AthenaConfiguration/python/UnifyProperties.py
@@ -79,6 +79,7 @@ _propsToUnify={"GeoModelSvc.DetectorTools":unifySet,
                "*.InputMakerOutputDecisions": unifySet,
                "AddressRemappingSvc.TypeKeyRenameMaps": unifySet,
                "AuditorSvc.Auditors": unifySet,
+               "MetaDataSvc.MetaDataTools": unifySet,
                }
 
 def setUnificationFunction(key, function):
diff --git a/Control/AthenaMonitoring/python/TriggerInterface.py b/Control/AthenaMonitoring/python/TriggerInterface.py
index 6c79e4b5c02..eabc9fdab0e 100644
--- a/Control/AthenaMonitoring/python/TriggerInterface.py
+++ b/Control/AthenaMonitoring/python/TriggerInterface.py
@@ -38,13 +38,8 @@ def getTrigDecisionTool(flags):
     tdt.Navigation.Dlls = [e for e in  EDMLibraries if 'TPCnv' not in e]
 
     # Minimal config needed to read metadata: MetaDataSvc & ProxyProviderSvc
-    mdSvc = CompFactory.MetaDataSvc( "MetaDataSvc" )
-    mdSvc.MetaDataContainer = "MetaDataHdr"
-    rv.addService(mdSvc)
-
-    pdps = CompFactory.ProxyProviderSvc( "ProxyProviderSvc" )
-    pdps.ProviderNames += [ "MetaDataSvc" ]
-    rv.addService(pdps)
+    from AthenaServices.MetaDataSvcConfig import MetaDataSvcCfg
+    rv.merge(MetaDataSvcCfg(flags))
 
     getTrigDecisionTool.rv = rv
     return rv
diff --git a/Control/AthenaServices/python/MetaDataSvcConfig.py b/Control/AthenaServices/python/MetaDataSvcConfig.py
new file mode 100644
index 00000000000..f5efeb7482f
--- /dev/null
+++ b/Control/AthenaServices/python/MetaDataSvcConfig.py
@@ -0,0 +1,29 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+def MetaDataSvcCfg(flags, toolNames=[]):
+    # should cover most use cases (POOL, RAW) when called with appropriate toolNames argument
+    from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+    from AthenaConfiguration.ComponentFactory import CompFactory
+    from six import string_types
+
+    result = ComponentAccumulator()
+
+    result.addService( CompFactory.StoreGateSvc("MetaDataStore") )
+    result.addService( CompFactory.StoreGateSvc("InputMetaDataStore") )
+
+    svc = CompFactory.MetaDataSvc("MetaDataSvc")
+    svc.MetaDataContainer = "MetaDataHdr"
+    result.addService(svc)
+    result.addService(CompFactory.ProxyProviderSvc(ProviderNames=["MetaDataSvc"]))
+
+    for name in toolNames:
+        if not isinstance(name, string_types):
+            from AthenaCommon.Logging import logging
+            log = logging.getLogger("MetaDataSvcConfig")
+            log.error('Attempted to pass a non-string argument as a metadata tool name')
+            continue
+        thistool = CompFactory.getComps(name)[0]()
+        result.addPublicTool(thistool)
+        svc.MetaDataTools += [thistool]
+
+    return result
\ No newline at end of file
diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/python/PoolReadConfig.py b/Database/AthenaPOOL/AthenaPoolCnvSvc/python/PoolReadConfig.py
index 24916744758..d1a2191a587 100644
--- a/Database/AthenaPOOL/AthenaPoolCnvSvc/python/PoolReadConfig.py
+++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/python/PoolReadConfig.py
@@ -46,7 +46,8 @@ def PoolReadCfg(configFlags):
             apapsSecondary.getFullJobOptName()
         ])) #No service handle yet???
 
-        evSel=DoubleEventSelectorAthenaPool(PrimaryInputCollections = filenames,
+        evSel=DoubleEventSelectorAthenaPool("DoubleEventSelector",
+                                            PrimaryInputCollections = filenames,
                                             SecondaryaryInputCollections = filenamesSecondary)
     else:
         # We have only primary inputs
@@ -54,7 +55,7 @@ def PoolReadCfg(configFlags):
         result.addService(apaps)
         result.addService(ProxyProviderSvc(ProviderNames=[apaps.getFullJobOptName(),])) #No service handle yet???
 
-        evSel=EventSelectorAthenaPool(InputCollections = filenames)
+        evSel=EventSelectorAthenaPool("EventSelector", InputCollections = filenames)
 
     result.addService(evSel)
     result.setAppProperty("EvtSel",evSel.getFullJobOptName())
diff --git a/Database/IOVDbSvc/python/IOVDbSvcConfig.py b/Database/IOVDbSvc/python/IOVDbSvcConfig.py
index 355a4f532c6..ce36636f8fb 100644
--- a/Database/IOVDbSvc/python/IOVDbSvcConfig.py
+++ b/Database/IOVDbSvc/python/IOVDbSvcConfig.py
@@ -76,6 +76,10 @@ def IOVDbSvcCfg(configFlags):
     from EventInfoMgt.TagInfoMgrConfig import TagInfoMgrCfg 
     result.merge(TagInfoMgrCfg(configFlags)[0])
     
+    # Set up MetaDataSvc                                                                                             
+    from AthenaServices.MetaDataSvcConfig import MetaDataSvcCfg
+    result.merge(MetaDataSvcCfg(configFlags, ["IOVDbMetaDataTool"]))
+
     return result
 
 
diff --git a/Event/ByteStreamCnvSvc/python/ByteStreamConfig.py b/Event/ByteStreamCnvSvc/python/ByteStreamConfig.py
index 62abeeac762..d04232cd22c 100644
--- a/Event/ByteStreamCnvSvc/python/ByteStreamConfig.py
+++ b/Event/ByteStreamCnvSvc/python/ByteStreamConfig.py
@@ -46,31 +46,14 @@ def ByteStreamReadCfg( inputFlags, typeNames=[] ):
     ByteStreamAddressProviderSvc=CompFactory.ByteStreamAddressProviderSvc
     bsAddressProviderSvc = ByteStreamAddressProviderSvc(TypeNames=typeNames)
     acc.addService( bsAddressProviderSvc )
-
-    IOVDbMetaDataTool=CompFactory.IOVDbMetaDataTool
-    iovMetaDataTool = IOVDbMetaDataTool()
-    acc.addPublicTool( iovMetaDataTool )
-    
-    ByteStreamMetadataTool=CompFactory.ByteStreamMetadataTool
-    bsMetaDataTool = ByteStreamMetadataTool()
-    acc.addPublicTool( bsMetaDataTool )
     
-    StoreGateSvc=CompFactory.StoreGateSvc
     ProxyProviderSvc=CompFactory.ProxyProviderSvc
-    metaDataStore = StoreGateSvc("MetaDataStore")   
-    acc.addService( metaDataStore )
-    inputMetaDataStore = StoreGateSvc("InputMetaDataStore")   
-    acc.addService( inputMetaDataStore )
-
-    MetaDataSvc=CompFactory.MetaDataSvc
-    metaDataSvc = MetaDataSvc()
-    acc.addService( metaDataSvc )
 
-    metaDataSvc.MetaDataContainer = "MetaDataHdr"
-    metaDataSvc.MetaDataTools = [ iovMetaDataTool, bsMetaDataTool ]    
+    from AthenaServices.MetaDataSvcConfig import MetaDataSvcCfg
+    acc.merge(MetaDataSvcCfg(inputFlags, ["IOVDbMetaDataTool", "ByteStreamMetadataTool"]))
     
     proxy = ProxyProviderSvc()
-    proxy.ProviderNames += [ bsAddressProviderSvc.name(), metaDataSvc.name() ]
+    proxy.ProviderNames += [ bsAddressProviderSvc.name() ]
     acc.addService( proxy )
 
     ByteStreamAttListMetadataSvc=CompFactory.ByteStreamAttListMetadataSvc
diff --git a/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgConfig.py b/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgConfig.py
index df3289e2b2f..767fe439545 100644
--- a/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgConfig.py
+++ b/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgConfig.py
@@ -15,7 +15,7 @@ def BunchCrossingCondAlgCfg(configFlags):
 
     if (configFlags.Input.isMC):
         folder = "/Digitization/Parameters"
-        result.merge(addFolders(configFlags,folder,"",className="AthenaAttributeList"))
+        result.merge(addFolders(configFlags,folder,None,className="AthenaAttributeList"))
     else: #data case
         folder = '/TDAQ/OLC/LHC/FILLPARAMS'
         result.merge(addFolders(configFlags,folder,'TDAQ',className = 'AthenaAttributeList'))
diff --git a/Trigger/TrigCost/RatesAnalysis/share/RatesAnalysisFullMenu.py b/Trigger/TrigCost/RatesAnalysis/share/RatesAnalysisFullMenu.py
index 58322ee6dab..f10aa230bd3 100755
--- a/Trigger/TrigCost/RatesAnalysis/share/RatesAnalysisFullMenu.py
+++ b/Trigger/TrigCost/RatesAnalysis/share/RatesAnalysisFullMenu.py
@@ -65,15 +65,8 @@ if __name__=='__main__':
   cfg.addService(histSvc)
 
   # Minimal config needed to read metadata: MetaDataSvc & ProxyProviderSvc
-  from AthenaServices.AthenaServicesConf import MetaDataSvc
-  mdSvc = MetaDataSvc( "MetaDataSvc" )
-  mdSvc.MetaDataContainer = "MetaDataHdr"
-  cfg.addService(mdSvc)
-  #
-  from SGComps.SGCompsConf import ProxyProviderSvc
-  pdps = ProxyProviderSvc( "ProxyProviderSvc" )
-  pdps.ProviderNames += [ "MetaDataSvc" ]
-  cfg.addService(pdps)
+  from AthenaServices.MetaDataSvcConfig import MetaDataSvcCfg
+  cfg.merge(MetaDataSvcCfg(ConfigFlags))
 
   from TrigConfxAOD.TrigConfxAODConf import TrigConf__xAODConfigTool
   trigcfgtool = TrigConf__xAODConfigTool('xAODConfigTool')
-- 
GitLab