|
ATLAS Offline Software
|
Go to the documentation of this file.
7 #ifndef STOREGATE_STOREGATESVC_H
8 #define STOREGATE_STOREGATESVC_H
17 #include "GaudiKernel/Service.h"
25 #include <GaudiKernel/ClassID.h>
26 #include <GaudiKernel/IInterface.h>
27 #include <GaudiKernel/IMessageSvc.h>
28 #include "Gaudi/Property.h"
29 #include "GaudiKernel/ServiceHandle.h"
30 #include "GaudiKernel/StatusCode.h"
31 #include "GaudiKernel/DataObjID.h"
32 #include "GaudiKernel/IAlgContextSvc.h"
39 #include <sys/types.h>
41 #include <type_traits>
52 #include "GaudiKernel/IClassIDSvc.h"
61 #include "GaudiKernel/IIncidentListener.h"
67 class TransientAddress;
69 class TestHiveStoreSvc;
124 public IIncidentListener
128 #ifndef BOOST_NO_CXX11_TEMPLATE_ALIASES
129 #ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
152 template <
typename T,
typename TKEY,
typename... ARGS>
163 template <
typename T,
typename TKEY>
167 template <
typename T,
typename TKEY>
173 template <
typename T,
typename TKEY>
175 bool allowMods,
bool resetOnly=
true,
bool noHist=
false);
178 template <
typename T,
typename TKEY>
182 template <
typename T,
typename TKEY>
187 template <
typename T,
typename TKEY>
189 bool allowMods,
bool resetOnly=
true,
bool noHist=
false);
198 template <
typename T>
202 template <
typename T>
207 template <
typename T>
212 template <
typename T>
214 template <
typename T>
218 template <
typename T,
typename TKEY>
223 template <
typename T>
228 template <
typename T,
typename TKEY>
233 template <
typename T>
239 template <
typename T,
class TKEY>
244 template <
typename T,
class TKEY>
246 template <
typename T,
class TKEY>
252 template <
typename T>
259 template <
typename T,
typename TKEY>
276 template <
typename T,
typename TKEY>
286 template <
typename T,
typename TKEY>
290 template <
typename T,
typename TKEY>
292 bool allowMods,
bool noHist=
false);
296 template <
typename T,
typename TKEY>
298 bool allowMods,
bool noHist=
false);
301 template <
typename T,
typename TKEY>
306 IOpaqueAddress* pAddress,
bool clearAddressFlag=
true);
311 template <
typename T,
typename TLINK>
315 template <
typename T,
typename TLINK>
319 template <
typename TKEY>
323 template <
typename T,
typename TKEY,
typename AKEY>
327 template <
typename T,
typename AKEY>
337 template <
typename T>
341 template <
typename T>
350 const std::string& keyA,
const std::string& keyB );
366 template <
typename T,
class TKEY>
368 const TKEY& requestedKey)
const;
380 template <
typename T,
class TKEY>
383 const TKEY& requestedKey)
const;
398 template <
typename T>
404 template<
typename TKEY>
410 template<
typename TKEY>
417 template <
typename T>
426 template <
typename TKEY>
433 template <
typename T,
typename TKEY>
439 template <
typename TKEY>
444 std::string
dump()
const;
458 template <
typename T>
460 keys(std::vector<std::string>& vkeys,
461 bool includeAlias =
false,
bool onlyValid =
true)
const;
471 keys(
const CLID&
id, std::vector<std::string>& vkeys,
472 bool includeAlias =
false,
bool onlyValid =
true)
const;
522 const TKEY&
key,
bool trigger=false);
528 const TKEY&
key,
bool trigger=false);
585 bool returnExisting) override final;
608 {
return this->
proxy(
id, std::string(
key), checkValid); }
611 virtual std::vector<const SG::DataProxy*>
proxies()
const override final;
695 CLID clidid) override final;
754 sgkey_t& sgkey_out,
size_t& index_out) override final;
780 virtual
void handle(
const Incident&) override final;
798 IOpaqueAddress* addr,
799 DataObject*& refpObject) override;
814 friend class
SG::TestHiveStoreSvc;
851 friend class
SG::VarHandleBase;
859 bool allowMods,
bool resetOnly=true,
867 const std::type_info* tinfo=0);
872 bool allowMods,
bool resetOnly=true,
bool noHist=false);
877 bool allowMods,
bool noHist=false);
890 const std::
string& gK,
906 bool forceRemove=false);
917 const std::type_info* tinfo,
918 bool warn_nobib = true);
935 : DataObjID (
clid,
key), m_algo (algo)
939 typedef std::unordered_set<BadListItem, DataObjID_Hasher>
BadItemList;
977 const std::string&
key)
const;
986 const std::string&
what)
const;
994 template <
class DOBJ>
996 const std::string&
key,
997 bool ignoreMissing=
true)
const;
998 template <
class DOBJ>
1000 const std::string&
key,
1001 bool ignoreMissing=
true)
const;
1003 template <
class DOBJ,
class AUXSTORE>
1005 const std::string&
key,
1006 const AUXSTORE*)
const;
1007 template <
class DOBJ>
1009 const std::string& ,
1033 if ( StatusCode::SUCCESS == psg->
retrieve(
obj ) )
1047 #endif // STOREGATE_STOREGATESVC_H
bool transientSwap(const CLID &id, const std::string &keyA, const std::string &keyB)
swap the content of 2 keys payload A indexed by keyA will now be accessed via keyB and vice versa Not...
Athena service for Interval Of Validity database. The IOVDbSvc may be in one of three time states whi...
StatusCode record(T *p2BRegistered, const TKEY &key)
Record an object with a key.
Abstract interface for looking up strings/CLIDs in a pool.
int typeCount() const
Return the number of instances of an object of type T int i = p_store->typeCount<T>(); Note that th...
bool contains(const TKEY &key) const
Look up a keyed object in TDS (compare also tryRetrieve) returns false if object not available in TDS...
std::string createKey(const CLID &dataID)
creates a key internally if none specified by client
StatusCode addSymLink(const CLID &linkid, SG::DataProxy *dp)
T * tryRetrieve(const TKEY &key) const
Variant of the above which doesn't print a warning message.
static void setSlot(SG::HiveEventSlot *pSlot)
set the hive event slot pointer: used by the event loop mgrs
T * retrieve() const
Variant of the above which doesn't return a status code.
void clearProxyPayload(SG::DataProxy *)
use to reset a proxy (clearing the data object it contains) Unlike DataProxy::reset this method corre...
bool associateAux_impl(DOBJ *, const std::string &, const SG::NoAuxStore *) const
T * retrieve(const TKEY &key) const
Variant of the above which doesn't return a status code.
static const InterfaceID & interfaceID()
Should rather be in IStoreGateSvc.h if we had one.
virtual StatusCode stop() override
Service start.
void keys(const CLID &id, std::vector< std::string > &vkeys, bool includeAlias=false, bool onlyValid=true) const
provide list of all StoreGate keys associated with an object.
BadListItem(CLID clid, const std::string &key, const std::string &algo)
void setProxyProviderSvc(IProxyProviderSvc *pPPSvc)
associate ProxyProviderSvc to this store
StatusCode setAlias(const T *p2BAliased, const TKEY &key, const AKEY &aliasKey)
make an alias to a DataObject (provide data type and old key)
virtual void handle(const Incident &) override final
StatusCode retrieve(T *&ptr, const TKEY &key) const
Retrieve an object with "key", into a T*.
void msg_update_handler(Gaudi::Details::PropertyBase &outputLevel)
callback for output level property
StoreID::type m_storeID
Cache store type in the facade class.
associate a data object with its VersionedKey
T * tryRetrieve() const
Variant of the above which doesn't print a warning message.
StatusCode overwrite(T *p2BRegistered, const TKEY &key)
Record an object with a key, overwriting any existing object with same key.
StoreGateSvc(const StoreGateSvc &)
StatusCode overwrite(std::unique_ptr< T > pUnique, const TKEY &key)
Record an object with a key, overwriting any existing object with same key, take ownership of the uni...
void makeCurrent()
The current store is becoming the active store.
SG::DataProxy * setupProxy(const CLID &dataID, const std::string &gK, DataObject *pDObj, bool allowMods, bool resetOnly)
try to locate a proxy or create it if needed
an algorithm that resets the data objects listed in a SG::Folder
BadItemList m_badRetrieves ATLAS_THREAD_SAFE
Remember calls to retrieve and record for a MT store, so we can warn about them during finalize().
bool m_ActivateHistory
property: activate the history service
bool m_DumpStore
property Dump: triggers dump() at EndEvent
void printBadList(const BadItemList &bad, const std::string &what) const
Print out a list of bad calls during finalization.
StatusCode typeless_overwrite(const CLID &id, DataObject *obj, const std::string &key, const void *const raw_ptr, bool allowMods, bool noHist=false, const std::type_info *tinfo=0)
same as typeless_record, allows to overwrite an object in memory or on disk
virtual void commitNewDataObjects() override final
Reset handles added since the last call to commit.
SGImplSvc * currentStore() const
returns pointer to the current SGImplSvc
CLID clid(const TKEY &key) const
Retrieve the main CLID of the object recorded in StoreGate with the given "key" WARNING: slow!
bool associateAux(const DOBJ *, const std::string &key, bool ignoreMissing=true) const
int typeCount(const CLID &id) const
Return the number of instances of type T (input CLID)
static const T * retrieve(StoreGateSvc *psg)
ServiceHandle< IProxyProviderSvc > m_pPPSHandle
property
std::vector< CLID > clids(const TKEY &key) const
Retrieve all the CLID s (including symlinks) of the object recorded in StoreGate with the given "key"...
A standard conforming forward iterator over items in StoreGate.
bool const RAWDATA *ch2 const
void keys(std::vector< std::string > &vkeys, bool includeAlias=false, bool onlyValid=true) const
provide list of all StoreGate keys associated with an object.
SG::sgkey_t sgkey_t
Type of the keys.
#define IOVSVC_CALLBACK_ARGS
short hand for IOVSvc call back argument list, to be used when no access to formal arguments is neede...
void rememberBadRetrieve(CLID clid, const std::string &key) const
Remember that retrieve() was called for a MT store.
A structure created by HiveMgrSvc and used by SGHiveStoreSvc to forward the StoreGateSvc method to a ...
StatusCode removeProxy(SG::DataProxy *proxy, const void *pTrans, bool forceRemove=false)
remove proxy from store, unless it is reset only.
StatusCode record(std::unique_ptr< T > pUnique, const TKEY &key)
Record an object with a key, take ownership of the unique_ptr obj.
StatusCode record(const T *p2BRegistered, const TKEY &key)
Record a const object with a key.
StoreID::type storeID() const
get store ID. request forwarded to DataStore:
void remap_impl(sgkey_t source, sgkey_t target, off_t index_offset)
Declare a remapping.
the preferred mechanism to access information from the different event stores in a pileup job.
bool transientContains(const CLID &id, const TKEY &key) const
Look up a transient data object in TDS only by CLID.
StatusCode retrieve(const T *&ptr) const
Retrieve the default object into a const T*.
StatusCode retrieveAllVersions(std::list< SG::ObjectWithVersion< T > > &allVersions, const TKEY &requestedKey) const
Retrieve all versions of a given T,KEY combination sets allVersions, a ref to a vector of ObjectWithV...
StatusCode proxyRange(const CLID &id, SG::ConstProxyIterator &beg, SG::ConstProxyIterator &end) const
return a range to all proxies of a given CLID
std::mutex mutex_t
Protect access to m_bad* members.
SGImplSvc * m_defaultStore
Mark that there's no associated AuxStore class.
void emptyTrash()
throw away bad objects
bool m_DumpArena
DumpArena Property flag : trigger m_arena->report() at clearStore.
StatusCode setAlias(const T *p2BAliased, const AKEY &aliasKey)
make an alias to a DataObject (provide only valid pointer)
virtual StatusCode finalize() override
StatusCode retrieve(const T *&ptr, const TKEY &key) const
Retrieve an object with "key", into a const T*.
The Athena Transient Store API.
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface) override
void releaseObject(const CLID &id, const std::string &key)
release object held by proxy, if any.
StatusCode record1(DataObject *obj, T *pObject, const TKEY &key, bool allowMods, bool resetOnly=true, bool noHist=false)
StoreGateSvc & operator=(const StoreGateSvc &)
const T * tryConstRetrieve(const TKEY &key) const
virtual StatusCode initialize() override
Service initialization.
std::string dump() const
dump objects in store.
StatusCode regHandle(DataHandle< H > &handle, const TKEY &key)
non-const method - will return an error
std::unordered_set< BadListItem, DataObjID_Hasher > BadItemList
StatusCode overwrite(std::unique_ptr< T > pUnique, const TKEY &key, bool allowMods, bool noHist=false)
Record an object with a key, overwriting any existing object with same key.
ServiceHandle< IIncidentSvc > m_incSvc
property
StatusCode record(std::unique_ptr< T > pUnique, const TKEY &key, bool allowMods, bool resetOnly=true, bool noHist=false)
Record an object with a key, allow possibility of specifying const-access.
void addAutoSymLinks(const std::string &key, CLID clid, SG::DataProxy *dp, const std::type_info *tinfo, bool warn_nobib=true)
Add automatically-made symlinks for DP.
StatusCode overwrite1(DataObject *obj, T *pObject, const TKEY &key, bool allowMods, bool noHist=false)
::StatusCode StatusCode
StatusCode definition for legacy code.
StatusCode retrieve(T *&ptr) const
Retrieve the default object into a T*.
StatusCode retrieve(SG::ConstIterator< T > &begin, SG::ConstIterator< T > &end) const
Retrieve all objects of type T: returns an SG::ConstIterator range.
static StoreGateSvc * currentStoreGate()
get current StoreGate
void setDefaultStore(SGImplSvc *pStore)
set pointer to default event store: used by ActiveStoreSvc
DataProxy provides the registry services for StoreGate.
Maintain a mapping of strings to 64-bit ints.
A service that manages a multi-event collection of StoreGateSvc It implements the IHiveWhiteBoard int...
virtual const std::string * keyToString(sgkey_t key) const override final
Find the string corresponding to a given key.
StatusCode loadEventProxies()
load proxies at begin event
StatusCode setAlias(SG::DataProxy *proxy, const std::string &aliasKey)
make an alias to a DataObject (provide valid proxy)
The Athena Transient Store API.
defines an enum used by address providers to decide what kind of StoreGateSvc they are providing addr...
void rememberBadRecord(CLID clid, const std::string &key) const
Remember that retrieve() was called for a MT store.
virtual StatusCode clearStore(bool forceRemove=false) override final
clear DataStore contents: called by the event loop mgrs
AthROOTErrorHandlerSvc * svc
virtual SG::DataProxy * proxy_exact(SG::sgkey_t sgkey) const override final
Get proxy given a hashed key+clid.
virtual void registerKey(sgkey_t key, const std::string &str, CLID clidid) override final
Remember an additional mapping from key to string/CLID.
uint32_t CLID
The Class ID type.
StatusCode bind ATLAS_NOT_THREAD_SAFE(const DataHandle< T > &handle, const TKEY &key)
A "once-per-job" retrieve that binds a data object to a DataHandle, typically a data member of an Alg...
StatusCode overwrite(T *p2BRegistered, const TKEY &key, bool allowMods, bool noHist=false)
Record an object with a key, overwriting any existing object with same key.
bool transientContains(const TKEY &key) const
Look up a transient data object in TDS only (no Proxy lookup) returns false if object not available i...
StatusCode typeless_record(DataObject *obj, const std::string &key, const void *const raw_ptr, bool allowMods, bool resetOnly=true, bool noHist=false)
type-less recording of an object with a key, allow possibility of specifying const-access and history...
virtual sgkey_t stringToKey(const std::string &str, CLID clid) override final
Find the key for a string/CLID pair.
std::vector< CLID > clids() const
Return all CLIDs in the store.
virtual StatusCode createObj(IConverter *cvt, IOpaqueAddress *addr, DataObject *&refpObject) override
Call converter to create an object, with locking.
void rememberBad(BadItemList &bad, CLID clid, const std::string &key) const
Remember that retrieve or record was called for a MT store.
virtual SG::DataProxy * proxy(const void *const pTransient) const override final
get proxy for a given data object address in memory
std::lock_guard< mutex_t > lock_t
StatusCode symLink(const T *p2BRegistered, TLINK *p2BLinked)
make a soft link to the object T* already registered (non-const)
void t2pRemove(const void *const pTrans)
forwarded to DataStore
StatusCode setConst(const void *pointer)
prevent downstream clients from modifying the pointed-at dobj
StatusCode t2pRegister(const void *const pTrans, SG::DataProxy *const pPers)
forwarded to DataStore
StatusCode symLink(const T *p2BRegistered, const TLINK *p2BLinked)
make a soft link to the object T* already registered (const link)
Algorithm preparing auxiliary store objects for slimming.
StatusCode symLink(const CLID id, const TKEY &key, const CLID linkid)
make a soft link to the object pointed by id/key
an iterator over instances of a given type in StoreGateSvc. It d-casts and caches locally the pointed...
the interface through which HiveWB control StoreGate instances
BadItemList m_badRecords ATLAS_THREAD_SAFE
StatusCode recordAddress(const std::string &skey, IOpaqueAddress *pAddress, bool clearAddressFlag=true)
Create a proxy object using an IOpaqueAddress and a transient key.
void py_sg_clearProxyPayload(StoreGateSvc *self, SG::DataProxy *)
DataObject * accessData(const CLID &id) const
find proxy and access its data. Returns 0 to flag failure
StatusCode retrieve(const T *&ptr, const std::string &key) const
Retrieve an object with "key", into a const T*.
const T * tryConstRetrieve() const
std::unique_ptr< T > retrieveUniquePrivateCopy(const std::string &key)
EXPERTS ONLY: like readPrivateCopy this method returns your own private copy of a data object of type...
virtual SG::DataProxy * recordObject(SG::DataObjectSharedPtr< DataObject > obj, const std::string &key, bool allowMods, bool returnExisting) override final
Record an object in the store.
virtual std::vector< const SG::DataProxy * > proxies() const override final
return the list of all current proxies in store
Collection of memory allocators with a common lifetime, plus subsystem summary.
virtual bool tryELRemap(sgkey_t sgkey_in, size_t index_in, sgkey_t &sgkey_out, size_t &index_out) override final
Test to see if the target of an ElementLink has moved.
void remap(CLID clid, const TKEY &source, const TKEY &target, off_t index_offset)
Declare a remapping.
static const T * retrieve(StoreGateSvc *psg, const std::string &key)
virtual SG::SourceID sourceID(const std::string &key="EventSelector") const override
Return the metadata source ID for the current event slot.
StatusCode removeDataAndProxy(const T *pObject)
Remove pObject and its proxy no matter what.
StatusCode record(std::unique_ptr< const T > pUnique, const TKEY &key)
Record a const object with a key.
void SG_dump(StoreGateSvc *sg)
These are intended to be easy to call from the debugger.
bool associateAux_impl(DOBJ *ptr, const std::string &key, const AUXSTORE *) const
algorithm that marks for write data objects in SG
ServiceHandle< IAlgContextSvc > m_algContextSvc
Algorithm context, for tracking bad calls.
StatusCode recordAddress(IOpaqueAddress *pAddress, bool clearAddressFlag=true)
Create a proxy object using an IOpaqueAddress.
void setStoreID(StoreID::type id)
set store ID. request forwarded to DataStore:
StatusCode retrieveHighestVersion(SG::ObjectWithVersion< T > &dobjWithVersion, const TKEY &requestedKey) const
Retrieve version with highest cycle number for a given T,KEY combination If there is only one availab...
=============================================================================
StatusCode remove(const T *pObject)
Remove pObject, will remove its proxy if not reset only.
bool associateAux(DOBJ *, const std::string &key, bool ignoreMissing=true) const
try to associate a data object to its auxiliary store if ignoreMissing=false
StatusCode retrieve(T *&ptr, const std::string &key) const
Retrieve an object with "key", into a T*.
defines and typedefs for IOVSvc
virtual ::IProxyDict * hiveProxyDict() override final
implements IHiveStore interface
SG::DataProxy * transientProxy(const CLID &id, const std::string &key) const
get proxy with given id and key.
IProxyProviderSvc * proxyProviderSvc()
Return current ProxyProviderSvc.
virtual StatusCode addToStore(CLID id, SG::DataProxy *proxy) override final
Raw addition of a proxy to the store.
associate a data object with its VersionedKey The object is held by a ReadHandle to delay its retriev...
Define macros for attributes used to control the static checker.
StatusCode addAlias(const std::string &aliasKey, SG::DataProxy *dp)
SG::WPtr< T > create(const TKEY &key, ARGS... constructorArgs)
Create an object with one of its constructors and record it with a key.
bool isSymLinked(const CLID &linkID, SG::DataProxy *dp)
the interface that provides access to the current hive store
void recycle(DataObject *pBadDObj)
put a bad (unrecordable) dobj away
macros to associate a CLID to a type
static SG::HiveEventSlot * currentSlot()
PyObject * recordObjectToStore(StoreGateSvc *, PyObject *, PyObject *, bool, bool, bool)
record object to storegate
ProxyMap::const_iterator ConstProxyIterator
StatusCode record(T *p2BRegistered, const TKEY &key, bool allowMods, bool resetOnly=true, bool noHist=false)
Record an object with a key, allow possibility of specifying const-access.
bool contains(const CLID &id, const TKEY &key) const
Look up a keyed object in TDS by CLID.