7#ifndef STOREGATE_STOREGATESVC_H
8#define STOREGATE_STOREGATESVC_H
15#include "GaudiKernel/Service.h"
16#include "GaudiKernel/SmartIF.h"
25#include <GaudiKernel/ClassID.h>
26#include <GaudiKernel/IMessageSvc.h>
27#include "Gaudi/Property.h"
28#include "GaudiKernel/ServiceHandle.h"
29#include "GaudiKernel/StatusCode.h"
30#include "GaudiKernel/DataObjID.h"
31#include "GaudiKernel/IAlgContextSvc.h"
51#include "GaudiKernel/IClassIDSvc.h"
60#include "GaudiKernel/IIncidentListener.h"
69 class TestHiveStoreSvc;
83struct _object;
typedef _object
PyObject;
147 template <
typename T,
typename TKEY,
typename... ARGS>
156 template <
typename T,
typename TKEY>
157 StatusCode
record(T* p2BRegistered,
const TKEY& key);
160 template <
typename T,
typename TKEY>
161 StatusCode
record(
const T* p2BRegistered,
const TKEY& key);
166 template <
typename T,
typename TKEY>
167 StatusCode
record(T* p2BRegistered,
const TKEY& key,
168 bool allowMods,
bool resetOnly=
true,
bool noHist=
false);
171 template <
typename T,
typename TKEY>
172 StatusCode
record(std::unique_ptr<T> pUnique,
const TKEY& key);
175 template <
typename T,
typename TKEY>
176 StatusCode
record(std::unique_ptr<const T> pUnique,
const TKEY& key);
180 template <
typename T,
typename TKEY>
181 StatusCode
record(std::unique_ptr<T> pUnique,
const TKEY& key,
182 bool allowMods,
bool resetOnly=
true,
bool noHist=
false);
191 template <
typename T>
195 template <
typename T>
200 template <
typename T>
205 template <
typename T>
207 template <
typename T>
211 template <
typename T,
typename TKEY>
216 template <
typename T>
217 StatusCode
retrieve(
const T*& ptr,
const std::string& key)
const;
221 template <
typename T,
typename TKEY>
226 template <
typename T>
227 StatusCode
retrieve(T*& ptr,
const std::string& key)
const;
232 template <
typename T,
class TKEY>
237 template <
typename T,
class TKEY>
239 template <
typename T,
class TKEY>
245 template <
typename T>
253 template <
typename T,
typename TKEY>
269 template <
typename T,
typename TKEY>
279 template <
typename T,
typename TKEY>
280 StatusCode
overwrite(T* p2BRegistered,
const TKEY& key);
283 template <
typename T,
typename TKEY>
285 bool allowMods,
bool noHist=
false);
289 template <
typename T,
typename TKEY>
290 StatusCode
overwrite(std::unique_ptr<T> pUnique,
const TKEY& key,
291 bool allowMods,
bool noHist=
false);
294 template <
typename T,
typename TKEY>
295 StatusCode
overwrite(std::unique_ptr<T> pUnique,
const TKEY& key);
300 bool clearAddressFlag=
true);
303 bool clearAddressFlag=
true);
306 template <
typename T,
typename TLINK>
307 StatusCode
symLink (
const T* p2BRegistered, TLINK* p2BLinked );
310 template <
typename T,
typename TLINK>
311 StatusCode
symLink (
const T* p2BRegistered,
const TLINK* p2BLinked );
314 template <KeyConcept TKEY>
318 template <
typename T,
typename TKEY,
typename AKEY>
322 template <
typename T,
typename AKEY>
329 StatusCode
setConst(
const void* pointer);
332 template <
typename T>
336 template <
typename T>
345 const std::string& keyA,
const std::string& keyB );
361 template <
typename T,
class TKEY>
363 const TKEY& requestedKey)
const;
375 template <
typename T,
class TKEY>
378 const TKEY& requestedKey)
const;
393 template <
typename T>
399 template<
typename TKEY>
405 template<
typename TKEY>
406 std::vector<CLID>
clids(
const TKEY& key )
const;
412 template <
typename T>
421 template <
typename TKEY>
429 template <
typename T,
typename TKEY>
434 template <
typename TKEY>
439 std::string
dump()
const;
453 template <
typename T>
455 keys(std::vector<std::string>& vkeys,
456 bool includeAlias =
false,
bool onlyValid =
true)
const;
466 keys(
const CLID&
id, std::vector<std::string>& vkeys,
467 bool includeAlias =
false,
bool onlyValid =
true)
const;
487 virtual StatusCode
clearStore(
bool forceRemove=
false) override final;
506 template <typename
H, typename TKEY>
510 template <typename
H, typename TKEY>
514 template <typename T, typename
H, typename TKEY>
517 const TKEY& key,
bool trigger=false);
520 template <typename T, typename
H, typename TKEY>
523 const TKEY& key,
bool trigger=false);
526 template <typename T1, typename T2>
530 const T2* obj2,
bool trigger=false);
533 template <typename T2>
536 const T2* obj2,
bool trigger=false);
580 bool returnExisting) override final;
603 {
return this->
proxy(
id, std::string(key), checkValid); }
606 virtual std::vector<const SG::DataProxy*>
proxies()
const override final;
690 CLID clidid) override final;
721 template <class TKEY>
749 sgkey_t& sgkey_out,
size_t& index_out) override final;
764 virtual StatusCode
stop() override;
765 virtual StatusCode
finalize() override;
771 virtual
void handle(
const Incident&) override final;
789 IOpaqueAddress* addr,
790 DataObject*& refpObject) override;
804 Gaudi::Property<bool>
m_DumpStore{
this,
"Dump",
false,
"Dump contents at EndEvent"};
805 Gaudi::Property<bool>
m_ActivateHistory{
this,
"ActivateHistory",
false,
"record DataObjects history"};
806 Gaudi::Property<bool>
m_DumpArena{
this,
"DumpArena",
false,
"Dump Arena usage stats"};
857 const void*
const raw_ptr,
858 bool allowMods,
bool resetOnly=
true,
862 DataObject* obj,
const std::string& key,
863 const void*
const raw_ptr,
866 const std::type_info* tinfo=0);
869 template <
typename T,
typename TKEY>
870 StatusCode
record1(DataObject* obj, T* pObject,
const TKEY& key,
871 bool allowMods,
bool resetOnly=
true,
bool noHist=
false)
requires KeyConcept<TKEY>;
874 template <typename T, typename TKEY>
876 bool allowMods,
bool noHist=false) requires
KeyConcept<TKEY>;
905 bool forceRemove=false);
917 bool warn_nobib = true);
928 typedef std::unordered_set<BadListItem, DataObjID_Hasher>
BadItemList;
966 const std::string& key)
const;
975 const std::string& what)
const;
983 template <
class DOBJ>
985 const std::string& key,
986 bool ignoreMissing=
true)
const;
987 template <
class DOBJ>
989 const std::string& key,
990 bool ignoreMissing=
true)
const;
992 template <
class DOBJ,
class AUXSTORE>
994 const std::string& key,
995 const AUXSTORE*)
const;
996 template <
class DOBJ>
1022 if ( StatusCode::SUCCESS == psg->
retrieve( obj ) )
1030 if ( StatusCode::SUCCESS == psg->
retrieve( obj, key ) )
Collection of memory allocators with a common lifetime, plus subsystem summary.
macros to associate a CLID to a type
defines an "iterator" over instances of a given type in StoreGateSvc
uint32_t CLID
The Class ID type.
defines and typedefs for IOVSvc
#define IOVSVC_CALLBACK_ARGS
short hand for IOVSvc call back argument list, to be used when no access to formal arguments is neede...
Simple smart pointer for Gaudi-style refcounted objects.
A standard conforming forward iterator over items in StoreGate.
associate a data object with its VersionedKey
return type of StoreGateSvc::create.
void SG_dump(StoreGateSvc *sg)
These are intended to be easy to call from the debugger.
Maintain a mapping of strings to 64-bit ints.
Define macros for attributes used to control the static checker.
algorithm that marks for write data objects in SG
Simple smart pointer for Gaudi-style refcounted objects.
an iterator over instances of a given type in StoreGateSvc.
DataProxy provides the registry services for StoreGate.
A structure created by HiveMgrSvc and used by SGHiveStoreSvc to forward the StoreGateSvc method to a ...
Athena service for Interval Of Validity database.
Abstract interface for looking up strings/CLIDs in a pool.
the preferred mechanism to access information from the different event stores in a pileup job.
The Athena Transient Store API.
a const_iterator facade to DataHandle.
Mark that there's no associated AuxStore class.
associate a data object with its VersionedKey The object is held by a ReadHandle to delay its retriev...
Base class for VarHandle types.
The Athena Transient Store API.
StatusCode retrieve(T *&ptr) const
Retrieve the default object into a T*.
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.
SG::WPtr< T > create(const TKEY &key, ARGS... constructorArgs)
Create an object with one of its constructors and record it with a key.
virtual SG::DataProxy * recordObject(SG::DataObjectSharedPtr< DataObject > obj, const std::string &key, bool allowMods, bool returnExisting) override final
Record an object in the store.
friend class SG::TestHiveStoreSvc
StatusCode recordAddress(const std::string &skey, CxxUtils::RefCountedPtr< IOpaqueAddress > pAddress, bool clearAddressFlag=true)
Create a proxy object using an IOpaqueAddress and a transient key.
const T * tryConstRetrieve(const TKEY &key) const
virtual StatusCode finalize() override
StatusCode regHandle(DataHandle< H > &handle, const TKEY &key)
non-const method - will return an error
static SG::HiveEventSlot * currentSlot()
std::string dump() const
dump objects in store.
bool isSymLinked(const CLID &linkID, SG::DataProxy *dp)
virtual StatusCode createObj(IConverter *cvt, IOpaqueAddress *addr, DataObject *&refpObject) override
Call converter to create an object, with locking.
IProxyProviderSvc * proxyProviderSvc()
Return current ProxyProviderSvc.
StatusCode symLink(const T *p2BRegistered, const TLINK *p2BLinked)
make a soft link to the object T* already registered (const link)
virtual void handle(const Incident &) override final
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.
virtual void registerKey(sgkey_t key, const std::string &str, CLID clidid) override final
Remember an additional mapping from key to string/CLID.
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...
DataObject * accessData(const CLID &id) const
find proxy and access its data. Returns 0 to flag failure
StoreGateSvc(const std::string &name, ISvcLocator *svc)
Standard Constructor.
SmartIF< SGImplSvc > m_defaultStore
T * tryRetrieve(const TKEY &key) const
Variant of the above which doesn't print a warning message.
void msg_update_handler(Gaudi::Details::PropertyBase &outputLevel)
callback for output level property
StatusCode record(T *p2BRegistered, const TKEY &key)
Record an object with a key.
StatusCode loadEventProxies()
load proxies at begin event
friend class AthenaOutputStream
access proxyRange()
BadItemList m_badRetrieves ATLAS_THREAD_SAFE
Remember calls to retrieve and record for a MT store, so we can warn about them during finalize().
Gaudi::Property< bool > m_DumpArena
bool associateAux_impl(DOBJ *ptr, const std::string &key, const AUXSTORE *) const
StatusCode retrieve(SG::ConstIterator< T > &begin, SG::ConstIterator< T > &end) const
Retrieve all objects of type T: returns an SG::ConstIterator range.
StatusCode retrieve(T *&ptr, const std::string &key) const
Retrieve an object with "key", into a T*.
T * retrieve() const
Variant of the above which doesn't return a status code.
StoreID::type storeID() const
get store ID. request forwarded to DataStore:
StatusCode proxyRange(const CLID &id, SG::ConstProxyIterator &beg, SG::ConstProxyIterator &end) const
return a range to all proxies of a given CLID
void remap_impl(sgkey_t source, sgkey_t target, off_t index_offset)
Declare a remapping.
bool transientContains(const CLID &id, const TKEY &key) const
Look up a transient data object in TDS only by CLID.
StatusCode overwrite1(DataObject *obj, T *pObject, const TKEY &key, bool allowMods, bool noHist=false)
StatusCode symLink(const CLID id, const TKEY &key, const CLID linkid)
make a soft link to the object pointed by id/key
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.
void rememberBad(BadItemList &bad, CLID clid, const std::string &key) const
Remember that retrieve or record was called for a MT store.
StatusCode retrieve(T *&ptr, const TKEY &key) const
Retrieve an object with "key", into a T*.
void t2pRemove(const void *const pTrans)
forwarded to DataStore
static StoreGateSvc * currentStoreGate()
get current StoreGate
StatusCode retrieve(const T *&ptr, const std::string &key) const
Retrieve an object with "key", into a const T*.
StatusCode symLink(const T *p2BRegistered, TLINK *p2BLinked)
make a soft link to the object T* already registered (non-const)
StatusCode record(const T *p2BRegistered, const TKEY &key)
Record a const object with a key.
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
std::lock_guard< mutex_t > lock_t
T * tryRetrieve() const
Variant of the above which doesn't print a warning message.
SG::DataProxy * transientProxy(const CLID &id, const std::string &key) const
get proxy with given id and key.
const T * tryConstRetrieve() const
void clearProxyPayload(SG::DataProxy *)
use to reset a proxy (clearing the data object it contains) Unlike DataProxy::reset this method corre...
StatusCode remove(const T *pObject)
Remove pObject, will remove its proxy if not reset only.
StatusCode overwrite(T *p2BRegistered, const TKEY &key)
Record an object with a key, overwriting any existing object with same key.
StatusCode retrieve(const T *&ptr) const
Retrieve the default object into a const T*.
StatusCode record1(DataObject *obj, T *pObject, const TKEY &key, bool allowMods, bool resetOnly=true, bool noHist=false)
Gaudi::Property< bool > m_DumpStore
bool contains(const CLID &id, const TKEY &key) const
Look up a keyed object in TDS by CLID.
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...
std::unordered_set< BadListItem, DataObjID_Hasher > BadItemList
IStringPool::sgkey_t sgkey_t
void rememberBadRetrieve(CLID clid, const std::string &key) const
Remember that retrieve() was called for a MT store.
int typeCount() const
Return the number of instances of an object of type T int i = p_store->typeCount<T>(); Note that th...
virtual StatusCode addToStore(CLID id, SG::DataProxy *proxy) override final
Raw addition of a proxy to the store.
CLID clid(const TKEY &key) const
Retrieve the main CLID of the object recorded in StoreGate with the given "key" WARNING: slow!
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.
StatusCode removeDataAndProxy(const T *pObject)
Remove pObject and its proxy no matter what.
friend class PileUpMergeSvc
access emptyTrash
StoreID::type m_storeID
Cache store type in the facade class.
bool associateAux_impl(DOBJ *, const std::string &, const SG::NoAuxStore *) const
virtual void commitNewDataObjects() override final
Reset handles added since the last call to commit.
StoreGateSvc & operator=(const StoreGateSvc &)
void makeCurrent()
The current store is becoming the active store.
bool associateAux(DOBJ *, const std::string &key, bool ignoreMissing=true) const
try to associate a data object to its auxiliary store if ignoreMissing=false
virtual SG::SourceID sourceID(const std::string &key="EventSelector") const override
Return the metadata source ID for the current event slot.
SGImplSvc * currentStore() const
returns pointer to the current SGImplSvc
StatusCode addSymLink(const CLID &linkid, SG::DataProxy *dp)
std::mutex mutex_t
Protect access to m_bad* members.
void emptyTrash()
throw away bad objects
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...
virtual StatusCode initialize() override
Service initialization.
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"...
virtual StatusCode clearStore(bool forceRemove=false) override final
clear DataStore contents: called by the event loop mgrs
T * retrieve(const TKEY &key) const
Variant of the above which doesn't return a status code.
void printBadList(const BadItemList &bad, const std::string &what) const
Print out a list of bad calls during finalization.
ServiceHandle< IProxyProviderSvc > m_pPPSHandle
Properties.
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...
ServiceHandle< IAlgContextSvc > m_algContextSvc
StatusCode setAlias(SG::DataProxy *proxy, const std::string &aliasKey)
make an alias to a DataObject (provide valid proxy)
virtual const std::string * keyToString(sgkey_t key) const override final
Find the string corresponding to a given key.
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...
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 retrieve(const T *&ptr, const TKEY &key) const
Retrieve an object with "key", into a const T*.
StatusCode addAlias(const std::string &aliasKey, SG::DataProxy *dp)
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.
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...
virtual sgkey_t stringToKey(const std::string &str, CLID clid) override final
Find the key for a string/CLID pair.
virtual StatusCode stop() override
Service start.
std::vector< CLID > clids() const
Return all CLIDs in the store.
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 rememberBadRecord(CLID clid, const std::string &key) const
Remember that retrieve() was called for a MT store.
std::string createKey(const CLID &dataID)
creates a key internally if none specified by client
Gaudi::Property< bool > m_ActivateHistory
virtual std::vector< const SG::DataProxy * > proxies() const override final
return the list of all current proxies in store
StatusCode setAlias(const T *p2BAliased, const AKEY &aliasKey)
make an alias to a DataObject (provide only valid pointer)
void recycle(DataObject *pBadDObj)
put a bad (unrecordable) dobj away
virtual SG::DataProxy * proxy(const void *const pTransient) const override final
get proxy for a given data object address in memory
void remap(CLID clid, const TKEY &source, const TKEY &target, off_t index_offset)
Declare a remapping.
friend class IOVDbSvc
access clearProxyPayload
StatusCode setConst(const void *pointer)
prevent downstream clients from modifying the pointed-at dobj
virtual SG::DataProxy * proxy_exact(SG::sgkey_t sgkey) const override final
Get proxy given a hashed key+clid.
void keys(std::vector< std::string > &vkeys, bool includeAlias=false, bool onlyValid=true) const
provide list of all StoreGate keys associated with an object.
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
void releaseObject(const CLID &id, const std::string &key)
release object held by proxy, if any.
bool contains(const TKEY &key) const
Look up a keyed object in TDS (compare also tryRetrieve) returns false if object not available in TDS...
void setProxyProviderSvc(IProxyProviderSvc *pPPSvc)
associate ProxyProviderSvc to this store
ServiceHandle< IIncidentSvc > m_incSvc
StatusCode removeProxy(SG::DataProxy *proxy, const void *pTrans, bool forceRemove=false)
remove proxy from store, unless it is reset only.
bool associateAux(const DOBJ *, const std::string &key, bool ignoreMissing=true) const
StatusCode record(std::unique_ptr< const T > pUnique, const TKEY &key)
Record a const object with a key.
StoreGateSvc(const StoreGateSvc &)
StatusCode t2pRegister(const void *const pTrans, SG::DataProxy *const pPers)
forwarded to DataStore
virtual::IProxyDict * hiveProxyDict() override final
implements IHiveStore interface
static void setSlot(SG::HiveEventSlot *pSlot)
set the hive event slot pointer: used by the event loop mgrs
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.
StatusCode record(std::unique_ptr< T > pUnique, const TKEY &key)
Record an object with a key, take ownership of the unique_ptr obj.
StatusCode setAlias(const T *p2BAliased, const TKEY &key, const AKEY &aliasKey)
make an alias to a DataObject (provide data type and old key)
void setDefaultStore(SGImplSvc *pStore)
set pointer to default event store: used by ActiveStoreSvc
Algorithm preparing auxiliary store objects for slimming.
PyObject * recordObjectToStore(StoreGateSvc *, PyObject *, PyObject *, bool, bool, bool)
record object to storegate
void py_sg_clearProxyPayload(StoreGateSvc *self, SG::DataProxy *)
=============================================================================
ProxyMap::const_iterator ConstProxyIterator
static const T * retrieve(StoreGateSvc *psg)
static const T * retrieve(StoreGateSvc *psg, const std::string &key)
BadListItem(CLID clid, const std::string &key, const std::string &algo)