 |
ATLAS Offline Software
|
Go to the documentation of this file.
7 #ifndef STOREGATE_STOREGATESVC_H
8 #define STOREGATE_STOREGATESVC_H
15 #include "GaudiKernel/Service.h"
16 #include "GaudiKernel/SmartIF.h"
24 #include <GaudiKernel/ClassID.h>
25 #include <GaudiKernel/IMessageSvc.h>
26 #include "Gaudi/Property.h"
27 #include "GaudiKernel/ServiceHandle.h"
28 #include "GaudiKernel/StatusCode.h"
29 #include "GaudiKernel/DataObjID.h"
30 #include "GaudiKernel/IAlgContextSvc.h"
37 #include <sys/types.h>
39 #include <type_traits>
50 #include "GaudiKernel/IClassIDSvc.h"
59 #include "GaudiKernel/IIncidentListener.h"
65 class TransientAddress;
67 class TestHiveStoreSvc;
123 #ifndef BOOST_NO_CXX11_TEMPLATE_ALIASES
124 #ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
147 template <
typename T,
typename TKEY,
typename... ARGS>
158 template <
typename T,
typename TKEY>
162 template <
typename T,
typename TKEY>
168 template <
typename T,
typename TKEY>
170 bool allowMods,
bool resetOnly=
true,
bool noHist=
false);
173 template <
typename T,
typename TKEY>
177 template <
typename T,
typename TKEY>
182 template <
typename T,
typename TKEY>
184 bool allowMods,
bool resetOnly=
true,
bool noHist=
false);
193 template <
typename T>
197 template <
typename T>
202 template <
typename T>
207 template <
typename T>
209 template <
typename T>
213 template <
typename T,
typename TKEY>
218 template <
typename T>
223 template <
typename T,
typename TKEY>
228 template <
typename T>
234 template <
typename T,
class TKEY>
239 template <
typename T,
class TKEY>
241 template <
typename T,
class TKEY>
247 template <
typename T>
254 template <
typename T,
typename TKEY>
271 template <
typename T,
typename TKEY>
281 template <
typename T,
typename TKEY>
285 template <
typename T,
typename TKEY>
287 bool allowMods,
bool noHist=
false);
291 template <
typename T,
typename TKEY>
293 bool allowMods,
bool noHist=
false);
296 template <
typename T,
typename TKEY>
301 IOpaqueAddress* pAddress,
bool clearAddressFlag=
true);
306 template <
typename T,
typename TLINK>
310 template <
typename T,
typename TLINK>
314 template <
typename TKEY>
318 template <
typename T,
typename TKEY,
typename AKEY>
322 template <
typename T,
typename AKEY>
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>
412 template <
typename T>
421 template <
typename TKEY>
428 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;
517 const TKEY&
key,
bool trigger=false);
523 const TKEY&
key,
bool trigger=false);
580 bool returnExisting) override
final;
603 {
return this->
proxy(
id, std::string(
key), checkValid); }
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>
871 bool allowMods,
bool resetOnly=
true,
bool noHist=
false);
874 template <
typename T,
typename TKEY>
876 bool allowMods,
bool noHist=
false);
889 const std::string& gK,
905 bool forceRemove=
false);
916 const std::type_info* tinfo,
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 ) )
1036 #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.
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
Base class for VarHandle types.
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
Gaudi::Property< bool > m_DumpArena
BadItemList m_badRetrieves ATLAS_THREAD_SAFE
Remember calls to retrieve and record for a MT store, so we can warn about them during finalize().
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
Properties.
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.
#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.
friend class SG::TestHiveStoreSvc
Mark that there's no associated AuxStore class.
void emptyTrash()
throw away bad objects
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.
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.
IStringPool::sgkey_t sgkey_t
ServiceHandle< IIncidentSvc > m_incSvc
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
Gaudi::Property< bool > m_DumpStore
StatusCode setAlias(SG::DataProxy *proxy, const std::string &aliasKey)
make an alias to a DataObject (provide valid proxy)
The Athena Transient Store API.
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...
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)
SmartIF< SGImplSvc > m_defaultStore
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
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.
Gaudi::Property< bool > m_ActivateHistory
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)
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.