ATLAS Offline Software
Loading...
Searching...
No Matches
StoreGateSvc.h
Go to the documentation of this file.
1/* -*- C++ -*- */
2
3/*
4 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
5*/
6
7#ifndef STOREGATE_STOREGATESVC_H
8#define STOREGATE_STOREGATESVC_H
9
10//FIXME the CLASS_DEF header is not needed here but was added to work around
11//bad include statements in client code: when using CLASS_DEF put the
12//include below in your header file!
14
15#include "GaudiKernel/Service.h"
16#include "GaudiKernel/SmartIF.h"
18
24
25#include <GaudiKernel/ClassID.h> // for CLID
26#include <GaudiKernel/IMessageSvc.h> // for Level
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"
32
33#include <cstddef> // for size_t
34#include <list>
35#include <memory>
36#include <mutex>
37#include <string>
38#include <sys/types.h> // for off_t
39#include <vector>
40#include <type_traits>
41
45#include "AthAllocators/Arena.h"
46
47#include <SGTools/StringPool.h>
48#include "SGTools/ProxyMap.h" /* for SG::ConstProxyIterator */
49
50// includes used in StoreGateSvc.icc
51#include "GaudiKernel/IClassIDSvc.h"
56#include "StoreGate/SGWPtr.h"
59
60#include "GaudiKernel/IIncidentListener.h"
61
63
64//forward declarations
65namespace SG {
66 class DataProxy;
67 class TransientAddress;
68 struct RemapImpl;
69 class TestHiveStoreSvc;
70 class HiveMgrSvc;
71}
72namespace xAODMaker {
73 class AuxStoreWrapper;
74}
75
76class DataObject;
77class IConversionSvc;
78class IIncidentSvc;
80class IHistorySvc;
81
82// python forward
83struct _object; typedef _object PyObject;
84class StoreGateSvc;
85namespace AthenaInternal {
88}
89namespace SG {
90 class NoAuxStore;
91}
92
93//friends...
95class IOVDbSvc;
96class IOVSvcTool;
97class PileUpMergeSvc;
98namespace SG {
99 class VarHandleBase;
100}
101
117class StoreGateSvc : public extends<Service,
118 IProxyDict,
119 IHiveStore,
120 IHiveStoreMgr,
121 IIncidentListener>
122{
123
124public:
127
128
146
147 template <typename T, typename TKEY, typename... ARGS>
148 SG::WPtr<T> create(const TKEY& key, ARGS... constructorArgs);
150
153
154
156 template <typename T, typename TKEY>
157 StatusCode record(T* p2BRegistered, const TKEY& key);
158
160 template <typename T, typename TKEY>
161 StatusCode record(const T* p2BRegistered, const TKEY& key);
162
163
166 template <typename T, typename TKEY>
167 StatusCode record(T* p2BRegistered, const TKEY& key,
168 bool allowMods, bool resetOnly=true, bool noHist=false);
169
171 template <typename T, typename TKEY>
172 StatusCode record(std::unique_ptr<T> pUnique, const TKEY& key);
173
175 template <typename T, typename TKEY>
176 StatusCode record(std::unique_ptr<const T> pUnique, const TKEY& key);
177
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);
183
185
188
189
191 template <typename T>
192 StatusCode retrieve(const T*& ptr) const;
193
195 template <typename T>
196 StatusCode retrieve(T*& ptr) const;
197
200 template <typename T>
201 T* retrieve () const;
202
205 template <typename T>
206 T* tryRetrieve () const;
207 template <typename T>
208 const T* tryConstRetrieve() const;
209
211 template <typename T, typename TKEY>
212 StatusCode retrieve(const T*& ptr, const TKEY& key) const requires KeyConcept<TKEY>;
213
216 template <typename T>
217 StatusCode retrieve(const T*& ptr, const std::string& key) const;
218
219
221 template <typename T, typename TKEY>
222 StatusCode retrieve(T*& ptr, const TKEY& key) const requires KeyConcept<TKEY>;
223
226 template <typename T>
227 StatusCode retrieve(T*& ptr, const std::string& key) const;
228
229
232 template <typename T, class TKEY>
233 T* retrieve (const TKEY& key) const;
234
237 template <typename T, class TKEY>
238 T* tryRetrieve (const TKEY& key) const requires KeyConcept<TKEY>;
239 template <typename T, class TKEY>
240 const T* tryConstRetrieve(const TKEY& key) const requires KeyConcept<TKEY>;
241
242
243
245 template <typename T>
246 StatusCode retrieve(SG::ConstIterator<T>& begin,
247 SG::ConstIterator<T>& end) const;
248
253 template <typename T, typename TKEY>
254 bool contains(const TKEY& key) const;
255
269 template <typename T, typename TKEY>
270 StatusCode bind ATLAS_NOT_THREAD_SAFE (const DataHandle<T>& handle, const TKEY& key);
271
273
276
277
279 template <typename T, typename TKEY>
280 StatusCode overwrite(T* p2BRegistered, const TKEY& key);
281
283 template <typename T, typename TKEY>
284 StatusCode overwrite(T* p2BRegistered, const TKEY& key,
285 bool allowMods, bool noHist=false);
286
287
289 template <typename T, typename TKEY>
290 StatusCode overwrite(std::unique_ptr<T> pUnique, const TKEY& key,
291 bool allowMods, bool noHist=false);
292
294 template <typename T, typename TKEY>
295 StatusCode overwrite(std::unique_ptr<T> pUnique, const TKEY& key);
296
298 StatusCode recordAddress(const std::string& skey,
300 bool clearAddressFlag=true);
303 bool clearAddressFlag=true);
304
306 template <typename T, typename TLINK>
307 StatusCode symLink (const T* p2BRegistered, TLINK* p2BLinked );
308
310 template <typename T, typename TLINK>
311 StatusCode symLink (const T* p2BRegistered, const TLINK* p2BLinked );
312
314 template <KeyConcept TKEY>
315 StatusCode symLink (const CLID id, const TKEY& key, const CLID linkid);
316
318 template <typename T, typename TKEY, typename AKEY>
319 StatusCode setAlias(const T* p2BAliased, const TKEY& key, const AKEY& aliasKey) requires KeyConcept<TKEY> && KeyConcept<AKEY>;
320
322 template <typename T, typename AKEY>
323 StatusCode setAlias(const T* p2BAliased, const AKEY& aliasKey) requires KeyConcept<AKEY>;
324
326 StatusCode setAlias(SG::DataProxy* proxy, const std::string& aliasKey);
327
329 StatusCode setConst(const void* pointer);
330
332 template <typename T>
333 StatusCode remove(const T* pObject);
334
336 template <typename T>
337 StatusCode removeDataAndProxy(const T* pObject);
338
344 bool transientSwap( const CLID& id,
345 const std::string& keyA, const std::string& keyB );
346
348
351
352
361 template <typename T, class TKEY>
363 const TKEY& requestedKey) const;
364
370 //FIXME using a vector exposes ObjectWithVersion definition and hence
371 //FIXME VersionedKey.h. Should try an iface like
372 //FIXME retrieveAllVersions(const TKEY& requestedKey,
373 //FIXME ObjectWithVersion<T>& begin,
374 //FIXME ObjectWithVersion<T>& end)
375 template <typename T, class TKEY>
376 StatusCode
378 const TKEY& requestedKey) const;
379
380
381
393 template <typename T>
394 std::unique_ptr<T> retrieveUniquePrivateCopy (const std::string& key);
395
399 template<typename TKEY>
400 CLID clid( const TKEY& key ) const;
401
405 template<typename TKEY>
406 std::vector<CLID> clids( const TKEY& key ) const;
407
412 template <typename T>
413 int typeCount() const;
414
416 int typeCount(const CLID& id) const;
417
421 template <typename TKEY>
422 bool contains(const CLID& id, const TKEY& key) const;
423
424
429 template <typename T, typename TKEY>
430 bool transientContains(const TKEY& key) const;
431
434 template <typename TKEY>
435 bool transientContains(const CLID& id, const TKEY& key) const;
436
439 std::string dump() const;
440
442 void setStoreID(StoreID::type id);
445
446
453 template <typename T>
454 void
455 keys(std::vector<std::string>& vkeys,
456 bool includeAlias = false, bool onlyValid = true) const;
457
465 void
466 keys(const CLID& id, std::vector<std::string>& vkeys,
467 bool includeAlias = false, bool onlyValid = true) const;
468
470
471
473 // FIXME pointer to unsafe impl exposed
474 virtual ::IProxyDict* hiveProxyDict() override final {
476 }
477
480
481
484
485
487 virtual StatusCode clearStore(bool forceRemove=false) override final;
488
491 virtual void commitNewDataObjects() override final;
493
495 static void setSlot(SG::HiveEventSlot* pSlot);
496
497
499 void setDefaultStore(SGImplSvc* pStore);
500
501
504
505
506 template <typename H, typename TKEY>
508
510 template <typename H, typename TKEY>
511 StatusCode regHandle( DataHandle<H>& handle, const TKEY& key);
512
514 template <typename T, typename H, typename TKEY>
515 StatusCode regFcn ATLAS_NOT_THREAD_SAFE (StatusCode (T::*updFcn)(IOVSVC_CALLBACK_ARGS),
516 const T* obj, const DataHandle<H>& handle,
517 const TKEY& key, bool trigger=false);
518
520 template <typename T, typename H, typename TKEY>
521 StatusCode regFcn ATLAS_NOT_THREAD_SAFE (StatusCode (T::*updFcn)(IOVSVC_CALLBACK_ARGS),
522 const T* obj, DataHandle<H>& handle,
523 const TKEY& key, bool trigger=false);
524
526 template <typename T1, typename T2>
527 StatusCode regFcn ATLAS_NOT_THREAD_SAFE (StatusCode (T1::*fcn1)(IOVSVC_CALLBACK_ARGS),
528 const T1* obj1,
529 StatusCode (T2::*fcn2)(IOVSVC_CALLBACK_ARGS),
530 const T2* obj2, bool trigger=false);
531
533 template <typename T2>
534 StatusCode regFcn ATLAS_NOT_THREAD_SAFE (const std::string& toolName,
535 StatusCode (T2::*fcn2)(IOVSVC_CALLBACK_ARGS),
536 const T2* obj2, bool trigger=false);
537
539
540
542 virtual SG::DataProxy* proxy(const void* const pTransient) const override final;
543
545 virtual SG::DataProxy* proxy(const CLID& id) const final;
546
548 virtual SG::DataProxy* proxy(const CLID& id, const std::string& key) const override final;
551 SG::DataProxy* proxy(const CLID& id, const char* key) const;
552
554 virtual StatusCode addToStore (CLID id, SG::DataProxy* proxy) override final;
555
576 virtual
577 SG::DataProxy* recordObject (SG::DataObjectSharedPtr<DataObject> obj,
578 const std::string& key,
579 bool allowMods,
580 bool returnExisting) override final;
581
582
586 virtual SG::DataProxy* proxy_exact (SG::sgkey_t sgkey) const override final;
587
588
590
592
593
595 virtual SG::DataProxy* proxy(const CLID& id, bool checkValid) const final;
598 virtual SG::DataProxy* proxy(const CLID& id, const std::string& key, bool checkValid) const final;
602 virtual SG::DataProxy* proxy(const CLID& id, const char* key, bool checkValid) const final
603 { return this->proxy(id, std::string(key), checkValid); }
604
606 virtual std::vector<const SG::DataProxy*> proxies() const override final;
607
610
613 SG::DataProxy* transientProxy(const CLID& id, const std::string& key) const;
614
616 DataObject* accessData(const CLID& id) const;
618 DataObject* accessData(const CLID& id, const std::string& key) const;
619
625
626
634 virtual SG::SourceID sourceID (const std::string& key = "EventSelector") const override;
635
636
639
640
642
651 virtual
652 sgkey_t stringToKey (const std::string& str, CLID clid) override final;
653
661 virtual
662 const std::string* keyToString (sgkey_t key) const override final;
663
672 virtual
673 const std::string* keyToString (sgkey_t key, CLID& clid) const override final;
674
687 virtual
688 void registerKey (sgkey_t key,
689 const std::string& str,
690 CLID clidid) override final;
691
693
696
697
698
721 template <class TKEY>
723 const TKEY& source,
724 const TKEY& target,
725 off_t index_offset);
726
727
735 void remap_impl (sgkey_t source,
736 sgkey_t target,
737 off_t index_offset);
738
739
748 virtual bool tryELRemap (sgkey_t sgkey_in, size_t index_in,
749 sgkey_t& sgkey_out, size_t& index_out) override final;
750
752
755
756 StoreGateSvc(const std::string& name, ISvcLocator* svc);
757 virtual ~StoreGateSvc() override;
759
762
763 virtual StatusCode initialize() override;
764 virtual StatusCode stop() override;
765 virtual StatusCode finalize() override;
767
770
771 virtual void handle(const Incident&) override final;
773 StatusCode loadEventProxies();
775
776
787 virtual
788 StatusCode createObj (IConverter* cvt,
789 IOpaqueAddress* addr,
790 DataObject*& refpObject) override;
791
795 void makeCurrent();
796
797
798private:
800
801 ServiceHandle<IProxyProviderSvc> m_pPPSHandle{this, "ProxyProviderSvc", "ProxyProviderSvc"};
802 ServiceHandle<IIncidentSvc> m_incSvc{this, "IncidentSvc", "IncidentSvc"};
803 ServiceHandle<IAlgContextSvc> m_algContextSvc{this, "AlgContextSvc", "AlgContextSvc"};
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"};
808
811
812 SmartIF<SGImplSvc> m_defaultStore;
813
816
817 friend class SG::HiveMgrSvc;
820
821
823 friend class AthenaOutputStream;
825 StatusCode proxyRange(const CLID& id,
827 SG::ConstProxyIterator& end) const;
828
833 void releaseObject(const CLID& id, const std::string& key);
834
835
837 friend class PileUpMergeSvc;
839 friend class IOVDbSvc;
840 friend class IOVSvcTool;
841 friend
842 void
844
848
850 friend class SG::VarHandleBase;
851 friend
852 PyObject*
856 StatusCode typeless_record( DataObject* obj, const std::string& key,
857 const void* const raw_ptr,
858 bool allowMods, bool resetOnly=true,
859 bool noHist=false );
861 StatusCode typeless_overwrite( const CLID& id,
862 DataObject* obj, const std::string& key,
863 const void* const raw_ptr,
864 bool allowMods,
865 bool noHist=false,
866 const std::type_info* tinfo=0);
867
868 // Helper for record.
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>;
872
873 // Helper for overwrite.
874 template <typename T, typename TKEY>
875 StatusCode overwrite1(DataObject* obj, T* pObject, const TKEY& key,
876 bool allowMods, bool noHist=false) requires KeyConcept<TKEY>;
877
878 bool isSymLinked(const CLID& linkID, SG::DataProxy* dp);
879
880 StatusCode addSymLink(const CLID& linkid, SG::DataProxy* dp);
881
882 StatusCode addAlias(const std::string& aliasKey, SG::DataProxy* dp);
883
885 std::string createKey(const CLID& dataID);
886
889 const std::string& gK,
890 DataObject* pDObj,
891 bool allowMods,
892 bool resetOnly);
893
895 void recycle(DataObject* pBadDObj);
897 void emptyTrash();
898
904 StatusCode removeProxy(SG::DataProxy* proxy, const void* pTrans,
905 bool forceRemove=false);
907 StatusCode t2pRegister(const void* const pTrans, SG::DataProxy* const pPers);
909 void t2pRemove(const void* const pTrans);
910
912 void msg_update_handler(Gaudi::Details::PropertyBase& outputLevel);
913
915 void addAutoSymLinks (const std::string& key, CLID clid, SG::DataProxy* dp,
916 const std::type_info* tinfo,
917 bool warn_nobib = true);
918
920 : public DataObjID
921 {
922 public:
923 BadListItem (CLID clid, const std::string& key, const std::string& algo)
924 : DataObjID (clid, key), m_algo (algo)
925 {}
926 std::string m_algo;
927 };
928 typedef std::unordered_set<BadListItem, DataObjID_Hasher> BadItemList;
929
932 // Thread-safe, since they're protected by m_badMutex.
933 mutable BadItemList m_badRetrieves ATLAS_THREAD_SAFE;
934 mutable BadItemList m_badRecords ATLAS_THREAD_SAFE;
935
937 typedef std::mutex mutex_t;
938 typedef std::lock_guard<mutex_t> lock_t;
940
941
947 void rememberBadRetrieve (CLID clid, const std::string& key) const;
948
949
955 void rememberBadRecord (CLID clid, const std::string& key) const;
956
957
965 CLID clid,
966 const std::string& key) const;
967
968
974 void printBadList (const BadItemList& bad,
975 const std::string& what) const;
976
977
983 template <class DOBJ>
984 bool associateAux (DOBJ*,
985 const std::string& key,
986 bool ignoreMissing=true) const;
987 template <class DOBJ>
988 bool associateAux (const DOBJ*,
989 const std::string& key,
990 bool ignoreMissing=true) const;
991
992 template <class DOBJ, class AUXSTORE>
993 bool associateAux_impl(DOBJ* ptr,
994 const std::string& key,
995 const AUXSTORE*) const;
996 template <class DOBJ>
997 bool associateAux_impl(DOBJ* /*ptr*/,
998 const std::string& /*key*/,
999 const SG::NoAuxStore*) const;
1000
1001
1002private:
1005};
1006
1007
1009void SG_dump (StoreGateSvc* sg);
1010void SG_dump (StoreGateSvc* sg, const char* fname);
1011
1012
1014
1015
1016//- PyGate: StoreGate access from python -------------------------------------
1017template< class T >
1018struct PyGate {
1019 // default object retrieval
1020 static const T* retrieve( StoreGateSvc* psg ) {
1021 const T* obj = 0;
1022 if ( StatusCode::SUCCESS == psg->retrieve( obj ) )
1023 return obj;
1024 return 0;
1025 }
1026
1027 // object retrieval with string key
1028 static const T* retrieve( StoreGateSvc* psg, const std::string& key ) {
1029 const T* obj = 0;
1030 if ( StatusCode::SUCCESS == psg->retrieve( obj, key ) )
1031 return obj;
1032 return 0;
1033 }
1034};
1035
1036#endif // STOREGATE_STOREGATESVC_H
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...
Definition IOVSvcDefs.h:24
_object PyObject
#define H(x, y, z)
Definition MD5.cxx:114
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.
Definition DataHandle.h:43
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.
Definition IOVDbSvc.h:82
Abstract interface for looking up strings/CLIDs in a pool.
Definition IStringPool.h:28
the preferred mechanism to access information from the different event stores in a pileup job.
The Athena Transient Store API.
Definition SGImplSvc.h:110
a const_iterator facade to DataHandle.
Definition SGIterator.h:164
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:
friend class IOVSvcTool
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
mutex_t m_badMutex
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 *)
=============================================================================
Forward declaration.
ProxyMap::const_iterator ConstProxyIterator
Definition ProxyMap.h:24
T * WPtr
Definition SGWPtr.h:15
STL namespace.
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)
#define private