| The Gaudi Framework v30r0 (c919700c)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

MultiStoreSvc.cpp
Go to the documentation of this file.
1 //====================================================================
2 // MultiStoreSvc.cpp
3 //--------------------------------------------------------------------
4 //
5 // Package : System ( The LHCb Offline System)
6 //
7 // Description: implementation of the Transient event data service.
8 //
9 // Author : M.Frank
10 // History :
11 // +---------+----------------------------------------------+---------
12 // | Date | Comment | Who
13 // +---------+----------------------------------------------+---------
14 // | 29/10/98| Initial version | MF
15 // +---------+----------------------------------------------+---------
16 //
17 //====================================================================
18 #define DATASVC_MULTISTORESVC_CPP
19
20 // Include files
21 #include "GaudiKernel/AttribStringParser.h"
22 #include "GaudiKernel/DataObject.h"
23 #include "GaudiKernel/IAddressCreator.h"
24 #include "GaudiKernel/IConversionSvc.h"
25 #include "GaudiKernel/IDataManagerSvc.h"
26 #include "GaudiKernel/IDataProviderSvc.h"
27 #include "GaudiKernel/IOpaqueAddress.h"
28 #include "GaudiKernel/IPartitionControl.h"
29 #include "GaudiKernel/ISvcLocator.h"
30 #include "GaudiKernel/ISvcManager.h"
31 #include "GaudiKernel/MsgStream.h"
32 #include "GaudiKernel/Service.h"
33 #include "GaudiKernel/SmartIF.h"
34 #include "GaudiKernel/TypeNameString.h"
35 #include "GaudiKernel/compose.h"
36 #include "boost/variant.hpp"
37 #include <map>
38
39 // Forward declarations
40 // This class
41 class MultiStoreSvc;
42
43 typedef const std::string CSTR;
44 typedef IDataStoreAgent AGENT;
45 typedef DataObject OBJECT;
46 typedef IOpaqueAddress ADDRESS;
47 typedef StatusCode STATUS;
48
49 namespace
50 {
51 struct Partition final {
52 SmartIF<IDataProviderSvc> dataProvider;
53 SmartIF<IDataManagerSvc> dataManager;
54 std::string name;
55
56 template <typename T>
57 T* get();
58 };
59 template <>
60 IDataProviderSvc* Partition::get<IDataProviderSvc>()
61 {
62 return dataProvider.get();
63 }
64 template <>
65 IDataManagerSvc* Partition::get<IDataManagerSvc>()
66 {
67 return dataManager.get();
68 }
69
70 namespace detail
71 {
72 template <typename lambda>
73 struct arg_helper : public arg_helper<decltype( &lambda::operator() )> {
74 };
75 template <typename T, typename Ret, typename Arg>
76 struct arg_helper<Ret ( T::* )( Arg ) const> {
77 using type = Arg;
78 };
79
80 // given a unary lambda whose argument is of type Arg_t,
81 // argument_t<lambda> will be equal to Arg_t
82 template <typename lambda>
83 using argument_t = typename arg_helper<lambda>::type;
84 }
85 auto dispatch_variant = []( auto&& variant, auto&&... lambdas ) -> decltype( auto ) {
86 return boost::apply_visitor( compose( std::forward<decltype( lambdas )>( lambdas )... ),
87 std::forward<decltype( variant )>( variant ) );
88 };
89 }
90
102 class MultiStoreSvc : public extends<Service, IDataProviderSvc, IDataManagerSvc, IPartitionControl>
103 {
104 protected:
105 typedef std::vector<std::string> PartitionDefs;
106 typedef std::map<std::string, Partition> Partitions;
107
108 Gaudi::Property<CLID> m_rootCLID{this, "RootCLID", 110, "CLID of root entry"};
109 Gaudi::Property<std::string> m_rootName{this, "RootName", "/Event", "name of root entry"};
110 Gaudi::Property<PartitionDefs> m_partitionDefs{this, "Partitions", {}, "datastore partition definitions"};
111 Gaudi::Property<std::string> m_loader{this, "DataLoader", "EventPersistencySvc", "data loader name"};
112 Gaudi::Property<std::string> m_defaultPartition{this, "DefaultPartition", "Default", "default partition name"};
113
115 SmartIF<IConversionSvc> m_dataLoader;
117 SmartIF<IAddressCreator> m_addrCreator;
119 struct tagROOT {
120 std::string path;
121 boost::variant<boost::blank, ADDRESS*, OBJECT*> root;
122 } m_root;
124 Partition m_current;
126 Partitions m_partitions;
127
128 // member templates to help writing the function calls
129 template <typename Fun>
130 STATUS fwd( Fun f )
131 {
132 auto* svc = m_current.get<std::decay_t<detail::argument_t<Fun>>>();
133 return svc ? f( *svc ) : static_cast<StatusCode>( IDataProviderSvc::INVALID_ROOT );
134 }
135
136 public:
138 CLID rootCLID() const override { return m_rootCLID; }
140 const std::string& rootName() const override { return m_rootName; }
141
143 STATUS registerAddress( boost::string_ref path, ADDRESS* pAddr ) override
144 {
145 return fwd( [&]( IDataManagerSvc& svc ) { return svc.registerAddress( path, pAddr ); } );
146 }
148 STATUS registerAddress( OBJECT* parent, boost::string_ref path, ADDRESS* pAddr ) override
149 {
150 return fwd( [&]( IDataManagerSvc& svc ) { return svc.registerAddress( parent, path, pAddr ); } );
151 }
153 STATUS registerAddress( IRegistry* parent, boost::string_ref path, ADDRESS* pAddr ) override
154 {
155 return fwd( [&]( IDataManagerSvc& svc ) { return svc.registerAddress( parent, path, pAddr ); } );
156 }
158 STATUS unregisterAddress( boost::string_ref path ) override
159 {
160 return fwd( [&]( IDataManagerSvc& svc ) { return svc.unregisterAddress( path ); } );
161 }
163 STATUS unregisterAddress( OBJECT* pParent, boost::string_ref path ) override
164 {
165 return fwd( [&]( IDataManagerSvc& svc ) { return svc.unregisterAddress( pParent, path ); } );
166 }
168 STATUS unregisterAddress( IRegistry* pParent, boost::string_ref path ) override
169 {
170 return fwd( [&]( IDataManagerSvc& svc ) { return svc.unregisterAddress( pParent, path ); } );
171 }
173 STATUS objectLeaves( const OBJECT* pObject, std::vector<IRegistry*>& leaves ) override
174 {
175 return fwd( [&]( IDataManagerSvc& svc ) { return svc.objectLeaves( pObject, leaves ); } );
176 }
178 STATUS objectLeaves( const IRegistry* pObject, std::vector<IRegistry*>& leaves ) override
179 {
180 return fwd( [&]( IDataManagerSvc& svc ) { return svc.objectLeaves( pObject, leaves ); } );
181 }
183 STATUS objectParent( const OBJECT* pObject, IRegistry*& refpParent ) override
184 {
185 return fwd( [&]( IDataManagerSvc& svc ) { return svc.objectParent( pObject, refpParent ); } );
186 }
188 STATUS objectParent( const IRegistry* pObject, IRegistry*& refpParent ) override
189 {
190 return fwd( [&]( IDataManagerSvc& svc ) { return svc.objectParent( pObject, refpParent ); } );
191 }
193 STATUS clearSubTree( boost::string_ref path ) override
194 {
195 return fwd( [&]( IDataManagerSvc& svc ) { return svc.clearSubTree( path ); } );
196 }
198 STATUS clearSubTree( OBJECT* pObject ) override
199 {
200 return fwd( [&]( IDataManagerSvc& svc ) { return svc.clearSubTree( pObject ); } );
201 }
203 STATUS clearStore() override
204 {
205 for ( auto& i : m_partitions ) {
206 i.second.dataManager->clearStore().ignore();
207 }
208 dispatch_variant( m_root.root,
209 []( auto* p ) {
210 if ( p ) p->release();
211 },
212 []( boost::blank ) {} );
213 m_root.root = {};
214 m_root.path.clear();
215 return STATUS::SUCCESS;
216 }
218 STATUS traverseSubTree( boost::string_ref path, AGENT* pAgent ) override
219 {
220 return fwd( [&]( IDataManagerSvc& svc ) { return svc.traverseSubTree( path, pAgent ); } );
221 }
223 STATUS traverseSubTree( OBJECT* pObject, AGENT* pAgent ) override
224 {
225 return fwd( [&]( IDataManagerSvc& svc ) { return svc.traverseSubTree( pObject, pAgent ); } );
226 }
228 STATUS traverseTree( AGENT* pAgent ) override
229 {
230 return fwd( [&]( IDataManagerSvc& svc ) { return svc.traverseTree( pAgent ); } );
231 }
234 STATUS setRoot( std::string path, OBJECT* pObj ) override
235 {
236 dispatch_variant( m_root.root,
237 []( auto* p ) {
238 if ( p ) p->release();
239 },
240 []( boost::blank ) {} );
241 m_root.path = std::move( path );
242 m_root.root = pObj;
243 preparePartitions();
244 return activate( m_defaultPartition );
245 }
246
249 STATUS setRoot( std::string path, ADDRESS* pAddr ) override
250 {
251 dispatch_variant( m_root.root,
252 []( auto* p ) {
253 if ( p ) p->release();
254 },
255 []( boost::blank ) {} );
256 m_root.path = std::move( path );
257 m_root.root = pAddr;
258 if ( !pAddr ) return STATUS::FAILURE;
259 pAddr->addRef();
260 preparePartitions();
261 return activate( m_defaultPartition );
262 }
264 STATUS setDataLoader( IConversionSvc* pDataLoader, IDataProviderSvc* dpsvc = nullptr ) override
265 {
266 m_dataLoader = pDataLoader;
267 if ( m_dataLoader ) m_dataLoader->setDataProvider( dpsvc ? dpsvc : this );
268 for ( auto& i : m_partitions ) {
269 i.second.dataManager->setDataLoader( m_dataLoader.get() ).ignore();
270 }
271 return SUCCESS;
272 }
274 STATUS addPreLoadItem( const DataStoreItem& item ) override
275 {
276 return fwd( [&]( IDataProviderSvc& svc ) { return svc.addPreLoadItem( item ); } );
277 }
279 STATUS addPreLoadItem( std::string item ) override
280 {
281 return fwd( [&]( IDataProviderSvc& svc ) { return svc.addPreLoadItem( std::move( item ) ); } );
282 }
284 STATUS removePreLoadItem( const DataStoreItem& item ) override
285 {
286 return fwd( [&]( IDataProviderSvc& svc ) { return svc.removePreLoadItem( item ); } );
287 }
289 STATUS removePreLoadItem( std::string item ) override
290 {
291 return fwd( [&]( IDataProviderSvc& svc ) { return svc.removePreLoadItem( std::move( item ) ); } );
292 }
294 STATUS resetPreLoad() override
295 {
296 return fwd( [&]( IDataProviderSvc& svc ) { return svc.resetPreLoad(); } );
297 }
299 STATUS preLoad() override
300 {
301 return fwd( [&]( IDataProviderSvc& svc ) { return svc.preLoad(); } );
302 }
304 STATUS registerObject( boost::string_ref path, OBJECT* pObj ) override
305 {
306 return registerObject( nullptr, path, pObj );
307 }
309 STATUS registerObject( boost::string_ref parent, boost::string_ref obj, OBJECT* pObj ) override
310 {
311 return fwd( [&]( IDataProviderSvc& svc ) { return svc.registerObject( parent, obj, pObj ); } );
312 }
314 STATUS registerObject( boost::string_ref parent, int item, OBJECT* pObj ) override
315 {
316 return fwd( [&]( IDataProviderSvc& svc ) { return svc.registerObject( parent, item, pObj ); } );
317 }
319 STATUS registerObject( OBJECT* parent, boost::string_ref obj, OBJECT* pObj ) override
320 {
321 return fwd( [&]( IDataProviderSvc& svc ) { return svc.registerObject( parent, obj, pObj ); } );
322 }
324 STATUS registerObject( OBJECT* parent, int obj, OBJECT* pObj ) override
325 {
326 return fwd( [&]( IDataProviderSvc& svc ) { return svc.registerObject( parent, obj, pObj ); } );
327 }
329 STATUS unregisterObject( boost::string_ref path ) override
330 {
331 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unregisterObject( path ); } );
332 }
334 STATUS unregisterObject( boost::string_ref parent, boost::string_ref obj ) override
335 {
336 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unregisterObject( parent, obj ); } );
337 }
339 STATUS unregisterObject( boost::string_ref parent, int obj ) override
340 {
341 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unregisterObject( parent, obj ); } );
342 }
344 STATUS unregisterObject( OBJECT* pObj ) override
345 {
346 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unregisterObject( pObj ); } );
347 }
349 STATUS unregisterObject( OBJECT* pObj, boost::string_ref path ) override
350 {
351 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unregisterObject( pObj, path ); } );
352 }
354 STATUS unregisterObject( OBJECT* pObj, int item ) override
355 {
356 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unregisterObject( pObj, item ); } );
357 }
359 STATUS retrieveObject( IRegistry* parent, boost::string_ref path, OBJECT*& pObj ) override
360 {
361 return fwd( [&]( IDataProviderSvc& svc ) { return svc.retrieveObject( parent, path, pObj ); } );
362 }
364 STATUS retrieveObject( boost::string_ref path, OBJECT*& pObj ) override
365 {
366 return fwd( [&]( IDataProviderSvc& svc ) { return svc.retrieveObject( path, pObj ); } );
367 }
369 STATUS retrieveObject( boost::string_ref parent, boost::string_ref path, OBJECT*& pObj ) override
370 {
371 return fwd( [&]( IDataProviderSvc& svc ) { return svc.retrieveObject( parent, path, pObj ); } );
372 }
374 STATUS retrieveObject( boost::string_ref parent, int item, OBJECT*& pObj ) override
375 {
376 return fwd( [&]( IDataProviderSvc& svc ) { return svc.retrieveObject( parent, item, pObj ); } );
377 }
379 STATUS retrieveObject( OBJECT* parent, boost::string_ref path, OBJECT*& pObj ) override
380 {
381 return fwd( [&]( IDataProviderSvc& svc ) { return svc.retrieveObject( parent, path, pObj ); } );
382 }
384 STATUS retrieveObject( OBJECT* parent, int item, OBJECT*& pObj ) override
385 {
386 return fwd( [&]( IDataProviderSvc& svc ) { return svc.retrieveObject( parent, item, pObj ); } );
387 }
389 STATUS findObject( boost::string_ref path, OBJECT*& pObj ) override
390 {
391 return fwd( [&]( IDataProviderSvc& svc ) { return svc.retrieveObject( path, pObj ); } );
392 }
394 STATUS findObject( IRegistry* parent, boost::string_ref path, OBJECT*& pObj ) override
395 {
396 return fwd( [&]( IDataProviderSvc& svc ) { return svc.findObject( parent, path, pObj ); } );
397 }
399 STATUS findObject( boost::string_ref parent, boost::string_ref path, OBJECT*& pObj ) override
400 {
401 return fwd( [&]( IDataProviderSvc& svc ) { return svc.retrieveObject( parent, path, pObj ); } );
402 }
404 STATUS findObject( boost::string_ref parent, int item, OBJECT*& pObject ) override
405 {
406 return fwd( [&]( IDataProviderSvc& svc ) { return svc.findObject( parent, item, pObject ); } );
407 }
409 STATUS findObject( OBJECT* parent, boost::string_ref path, OBJECT*& pObject ) override
410 {
411 return fwd( [&]( IDataProviderSvc& svc ) { return svc.findObject( parent, path, pObject ); } );
412 }
414 STATUS findObject( OBJECT* parent, int item, OBJECT*& pObject ) override
415 {
416 return fwd( [&]( IDataProviderSvc& svc ) { return svc.findObject( parent, item, pObject ); } );
417 }
419 STATUS linkObject( IRegistry* from, boost::string_ref objPath, OBJECT* to ) override
420 {
421 return fwd( [&]( IDataProviderSvc& svc ) { return svc.linkObject( from, objPath, to ); } );
422 }
424 STATUS linkObject( boost::string_ref from, boost::string_ref objPath, OBJECT* to ) override
425 {
426 return fwd( [&]( IDataProviderSvc& svc ) { return svc.linkObject( from, objPath, to ); } );
427 }
429 STATUS linkObject( OBJECT* from, boost::string_ref objPath, OBJECT* to ) override
430 {
431 return fwd( [&]( IDataProviderSvc& svc ) { return svc.linkObject( from, objPath, to ); } );
432 }
434 STATUS linkObject( boost::string_ref fullPath, OBJECT* to ) override
435 {
436 return fwd( [&]( IDataProviderSvc& svc ) { return svc.linkObject( fullPath, to ); } );
437 }
439 STATUS unlinkObject( IRegistry* from, boost::string_ref objPath ) override
440 {
441 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unlinkObject( from, objPath ); } );
442 }
444 STATUS unlinkObject( boost::string_ref from, boost::string_ref objPath ) override
445 {
446 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unlinkObject( from, objPath ); } );
447 }
449 STATUS unlinkObject( OBJECT* from, boost::string_ref objPath ) override
450 {
451 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unlinkObject( from, objPath ); } );
452 }
454 STATUS unlinkObject( boost::string_ref path ) override
455 {
456 return fwd( [&]( IDataProviderSvc& svc ) { return svc.unlinkObject( path ); } );
457 }
459 STATUS updateObject( IRegistry* pDirectory ) override
460 {
461 return fwd( [&]( IDataProviderSvc& svc ) { return svc.updateObject( pDirectory ); } );
462 }
464 STATUS updateObject( boost::string_ref path ) override
465 {
466 return fwd( [&]( IDataProviderSvc& svc ) { return svc.updateObject( path ); } );
467 }
469 STATUS updateObject( OBJECT* pObj ) override
470 {
471 return fwd( [&]( IDataProviderSvc& svc ) { return svc.updateObject( pObj ); } );
472 }
474 STATUS updateObject( boost::string_ref parent, boost::string_ref updatePath ) override
475 {
476 return fwd( [&]( IDataProviderSvc& svc ) { return svc.updateObject( parent, updatePath ); } );
477 }
479 STATUS updateObject( OBJECT* parent, boost::string_ref updatePath ) override
480 {
481 return fwd( [&]( IDataProviderSvc& svc ) { return svc.updateObject( parent, updatePath ); } );
482 }
483
485 STATUS create( CSTR& nam, CSTR& typ ) override
486 {
487 IInterface* pPartition = nullptr;
488 return create( nam, typ, pPartition );
489 }
491 STATUS create( CSTR& nam, CSTR& typ, IInterface*& pPartition ) override
492 {
493 if ( get( nam, pPartition ).isSuccess() ) return PARTITION_EXISTS;
495 auto isvc = serviceLocator()->service<IService>( typ );
496 if ( !isvc ) return NO_INTERFACE;
497 auto dataMgr = isvc.as<IDataManagerSvc>();
498 auto dataProv = isvc.as<IDataProviderSvc>();
499 if ( !dataMgr || !dataProv ) return NO_INTERFACE;
500 m_partitions.emplace( nam, Partition{dataProv, dataMgr, nam} );
501 return STATUS::SUCCESS;
502 }
503
505 STATUS drop( CSTR& nam ) override
506 {
507 auto i = m_partitions.find( nam );
508 if ( i == m_partitions.end() ) return PARTITION_NOT_PRESENT;
509 if ( i->second.dataManager == m_current.dataManager ) {
510 m_current = Partition();
511 }
512 i->second.dataManager->clearStore().ignore();
513 m_partitions.erase( i );
514 return STATUS::SUCCESS;
515 }
516
518 STATUS drop( IInterface* pPartition ) override
519 {
520 auto provider = SmartIF<IDataProviderSvc>( pPartition );
521 if ( !provider ) return NO_INTERFACE;
522 auto i = std::find_if( std::begin( m_partitions ), std::end( m_partitions ),
523 [&]( Partitions::const_reference p ) { return p.second.dataProvider == provider; } );
524 if ( i == std::end( m_partitions ) ) return PARTITION_NOT_PRESENT;
525 i->second.dataManager->clearStore().ignore();
526 m_partitions.erase( i );
527 return STATUS::SUCCESS;
528 }
529
531 STATUS activate( CSTR& nam ) override
532 {
533 auto i = m_partitions.find( nam );
534 if ( i != m_partitions.end() ) {
535 m_current = i->second;
536 return STATUS::SUCCESS;
537 }
538 m_current = {};
539 return PARTITION_NOT_PRESENT;
540 }
541
543 STATUS activate( IInterface* pPartition ) override
544 {
545 auto provider = SmartIF<IDataProviderSvc>( pPartition );
546 m_current = Partition();
547 if ( !provider ) return NO_INTERFACE;
548 auto i = std::find_if( std::begin( m_partitions ), std::end( m_partitions ),
549 [&]( Partitions::const_reference p ) { return p.second.dataProvider == provider; } );
550 if ( i == std::end( m_partitions ) ) return PARTITION_NOT_PRESENT;
551 m_current = i->second;
552 return STATUS::SUCCESS;
553 }
554
556 STATUS get( CSTR& nam, IInterface*& pPartition ) const override
557 {
558 auto i = m_partitions.find( nam );
559 if ( i != m_partitions.end() ) {
560 pPartition = i->second.dataProvider;
561 return STATUS::SUCCESS;
562 }
563 pPartition = nullptr;
564 return PARTITION_NOT_PRESENT;
565 }
566
568 StatusCode activePartition( std::string& nam, IInterface*& pPartition ) const override
569 {
570 if ( m_current.dataProvider ) {
571 nam = m_current.name;
572 pPartition = m_current.dataProvider;
573 return STATUS::SUCCESS;
574 }
575 nam.clear();
576 pPartition = nullptr;
577 return NO_ACTIVE_PARTITION;
578 }
579
580 STATUS attachServices()
581 {
582 // Attach address creator facility
583 m_addrCreator = service( m_loader, true );
584 if ( !m_addrCreator ) {
585 error() << "Failed to retrieve data loader "
586 << "\"" << m_loader << "\"" << endmsg;
587 return StatusCode::FAILURE;
588 }
589 // Attach data loader facility
590 auto dataLoader = service<IConversionSvc>( m_loader, true );
591 if ( !dataLoader ) {
592 error() << "Failed to retrieve data loader "
593 << "\"" << m_loader << "\"" << endmsg;
594 return StatusCode::FAILURE;
595 }
596 auto sc = setDataLoader( dataLoader.get() );
597 if ( !sc.isSuccess() ) {
598 error() << "Failed to set data loader "
599 << "\"" << m_loader << "\"" << endmsg;
600 }
601 return sc;
602 }
603
604 STATUS detachServices()
605 {
606 m_addrCreator.reset();
607 m_dataLoader.reset();
608 return STATUS::SUCCESS;
609 }
610
612 STATUS initialize() override
613 {
614 // Nothing to do: just call base class initialisation
615 STATUS sc = Service::initialize();
616 if ( !sc.isSuccess() ) return sc;
617 sc = makePartitions();
618 if ( !sc.isSuccess() ) {
619 error() << "Failed to connect to all store partitions." << endmsg;
620 return sc;
621 }
622 return attachServices();
623 }
624
626 STATUS reinitialize() override
627 {
628 STATUS sc = Service::reinitialize();
629 if ( !sc.isSuccess() ) {
630 error() << "Enable to reinitialize base class" << endmsg;
631 return sc;
632 }
633 detachServices();
634 sc = attachServices();
635 if ( !sc.isSuccess() ) {
636 error() << "Failed to attach necessary services." << endmsg;
637 return sc;
638 }
639 sc = makePartitions();
640 if ( !sc.isSuccess() ) {
641 error() << "Failed to connect to store partitions." << endmsg;
642 return sc;
643 }
644 // return
645 return STATUS::SUCCESS;
646 }
647
649 STATUS finalize() override
650 {
651 setDataLoader( nullptr ).ignore();
652 clearStore().ignore();
653 clearPartitions().ignore();
654 m_current = Partition();
655 detachServices();
656 return Service::finalize();
657 }
658
659 // protected:
660
662 using extends::extends;
663
665 ~MultiStoreSvc() override
666 {
667 setDataLoader( nullptr ).ignore();
668 resetPreLoad().ignore();
669 clearStore().ignore();
670 clearPartitions().ignore();
671 }
672
674 STATUS preparePartitions()
675 {
676 STATUS iret = STATUS::SUCCESS;
677 for ( auto& i : m_partitions ) {
678 STATUS sc = dispatch_variant( m_root.root,
679 [&]( ADDRESS* address ) -> STATUS {
680 if ( !address ) return STATUS::FAILURE;
681 ADDRESS* pAdd = nullptr;
682 ADDRESS* p = address;
683 auto sc = m_addrCreator->createAddress( p->svcType(), p->clID(), p->par(),
684 p->ipar(), pAdd );
685 return sc.isSuccess() ? i.second.dataManager->setRoot( m_root.path, pAdd ) : sc;
686 },
687 [&]( OBJECT* object ) -> STATUS {
688 if ( object && object->clID() == CLID_DataObject ) {
689 return i.second.dataManager->setRoot( m_root.path, new DataObject() );
690 }
691 return STATUS::FAILURE;
692 },
693 []( boost::blank ) -> STATUS { return STATUS::FAILURE; } );
694 if ( !sc.isSuccess() ) iret = sc;
695 }
696 return iret;
697 }
698
700 STATUS clearPartitions()
701 {
702 for ( auto& i : m_partitions ) i.second.dataManager->clearStore().ignore();
703 m_partitions.clear();
704 return STATUS::SUCCESS;
705 }
706
708 STATUS makePartitions()
709 {
710 using Parser = Gaudi::Utils::AttribStringParser;
711 std::string typ, nam;
712 clearPartitions().ignore();
713 for ( auto part : m_partitionDefs ) {
714 for ( auto attrib : Parser( std::move( part ) ) ) {
715 switch (::toupper( attrib.tag[0] ) ) {
716 case 'N':
717 nam = std::move( attrib.value );
718 break;
719 case 'T':
720 typ = std::move( attrib.value );
721 break;
722 }
723 }
724 STATUS sc = create( nam, typ );
725 if ( !sc.isSuccess() ) return sc;
726 if ( m_defaultPartition.empty() ) m_defaultPartition = nam;
727 }
728 return STATUS::SUCCESS;
729 }
730 };
731
732 // Instantiation of a static factory class used by clients to create
733 // instances of this service
734 DECLARE_COMPONENT( MultiStoreSvc )
IDataManagerSvc::traverseTree
virtual StatusCode traverseTree(IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects in the data store.
MultiStoreSvc::findObject
STATUS findObject(boost::string_ref parent, boost::string_ref path, OBJECT *&pObj) override
Find object in the data store.
Definition: MultiStoreSvc.cpp:399
MultiStoreSvc::registerObject
STATUS registerObject(boost::string_ref parent, int item, OBJECT *pObj) override
Register object with the data store.
Definition: MultiStoreSvc.cpp:314
Gaudi::Utils::AttribStringParser
Parse attribute strings allowing iteration over the various attributes.
Definition: AttribStringParser.h:32
MultiStoreSvc::objectLeaves
STATUS objectLeaves(const IRegistry *pObject, std::vector< IRegistry * > &leaves) override
Explore the object store: retrieve all leaves attached to the object.
Definition: MultiStoreSvc.cpp:178
StatusCode::SUCCESS
Definition: StatusCode.h:29
Service::initialize
StatusCode initialize() override
Definition: Service.cpp:64
MultiStoreSvc::unlinkObject
STATUS unlinkObject(boost::string_ref path) override
Remove a link to another object.
Definition: MultiStoreSvc.cpp:454
MultiStoreSvc::updateObject
STATUS updateObject(boost::string_ref parent, boost::string_ref updatePath) override
Update object.
Definition: MultiStoreSvc.cpp:474
SmartIF< IDataProviderSvc >
MultiStoreSvc::preLoad
STATUS preLoad() override
load all preload items of the list
Definition: MultiStoreSvc.cpp:299
MultiStoreSvc::unregisterAddress
STATUS unregisterAddress(boost::string_ref path) override
IDataManagerSvc: Unregister object address from the data store.
Definition: MultiStoreSvc.cpp:158
IDataManagerSvc::objectLeaves
virtual StatusCode objectLeaves(const DataObject *pObject, std::vector< IRegistry * > &refLeaves)=0
Explore the object store: retrieve all leaves attached to the object The object is identified by its ...
MultiStoreSvc::registerObject
STATUS registerObject(boost::string_ref parent, boost::string_ref obj, OBJECT *pObj) override
Register object with the data store.
Definition: MultiStoreSvc.cpp:309
compose.h
IDataProviderSvc::unlinkObject
virtual StatusCode unlinkObject(IRegistry *from, boost::string_ref objPath)=0
Remove a link to another object.
MultiStoreSvc::m_partitions
Partitions m_partitions
Datastore partitions.
Definition: MultiStoreSvc.cpp:126
MultiStoreSvc::finalize
STATUS finalize() override
Service initialisation.
Definition: MultiStoreSvc.cpp:649
MultiStoreSvc::unregisterObject
STATUS unregisterObject(OBJECT *pObj, boost::string_ref path) override
Unregister object from the data store.
Definition: MultiStoreSvc.cpp:349
GaudiPython.HistoUtils.path
path
Definition: HistoUtils.py:895
gaudiComponentHelp.name
name
Definition: gaudiComponentHelp.py:32
Service::finalize
StatusCode finalize() override
Definition: Service.cpp:174
IConversionSvc
Definition: IConversionSvc.h:37
Gaudi::Property
Implementation of property with value of concrete type.
Definition: Property.h:319
MsgStream.h
IDataProviderSvc::addPreLoadItem
virtual StatusCode addPreLoadItem(const DataStoreItem &item)=0
Add an item to the preload list.
MultiStoreSvc::rootName
const std::string & rootName() const override
Name for root Event.
Definition: MultiStoreSvc.cpp:140
MultiStoreSvc::rootCLID
CLID rootCLID() const override
IDataManagerSvc: Accessor for root event CLID.
Definition: MultiStoreSvc.cpp:138
MultiStoreSvc::updateObject
STATUS updateObject(OBJECT *pObj) override
Update object.
Definition: MultiStoreSvc.cpp:469
IDataManagerSvc
Definition: IDataManagerSvc.h:46
IDataProviderSvc::INVALID_ROOT
Invalid root path object cannot be retrieved or stored.
Definition: IDataProviderSvc.h:496
MultiStoreSvc::objectParent
STATUS objectParent(const OBJECT *pObject, IRegistry *&refpParent) override
IDataManagerSvc: Explore the object store: retrieve the object&#39;s parent.
Definition: MultiStoreSvc.cpp:183
MultiStoreSvc::findObject
STATUS findObject(OBJECT *parent, int item, OBJECT *&pObject) override
Find object in the data store.
Definition: MultiStoreSvc.cpp:414
MultiStoreSvc::fwd
STATUS fwd(Fun f)
Definition: MultiStoreSvc.cpp:130
detail::dispatch_variant
auto dispatch_variant
Definition: FunAdapters.h:77
IDataProviderSvc::findObject
virtual StatusCode findObject(IRegistry *pDirectory, boost::string_ref path, DataObject *&pObject)=0
Find object identified by its directory entry.
MultiStoreSvc::retrieveObject
STATUS retrieveObject(IRegistry *parent, boost::string_ref path, OBJECT *&pObj) override
Retrieve object from data store.
Definition: MultiStoreSvc.cpp:359
StatusCode::isSuccess
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:50
GaudiPython.Bindings.SUCCESS
SUCCESS
Definition: Bindings.py:56
MultiStoreSvc::removePreLoadItem
STATUS removePreLoadItem(std::string item) override
Add an item to the preload list.
Definition: MultiStoreSvc.cpp:289
MultiStoreSvc::registerObject
STATUS registerObject(boost::string_ref path, OBJECT *pObj) override
Register object with the data store.
Definition: MultiStoreSvc.cpp:304
MultiStoreSvc::tagROOT
Root type (address or object)
Definition: MultiStoreSvc.cpp:119
MultiStoreSvc::detachServices
STATUS detachServices()
Definition: MultiStoreSvc.cpp:604
MultiStoreSvc::findObject
STATUS findObject(boost::string_ref path, OBJECT *&pObj) override
Find object identified by its full path in the data store.
Definition: MultiStoreSvc.cpp:389
MultiStoreSvc::traverseSubTree
STATUS traverseSubTree(boost::string_ref path, AGENT *pAgent) override
Analyze by traversing all data objects below the sub tree.
Definition: MultiStoreSvc.cpp:218
IConverter::setDataProvider
virtual StatusCode setDataProvider(IDataProviderSvc *pService)=0
Set Data provider service.
MultiStoreSvc::tagROOT::root
boost::variant< boost::blank, ADDRESS *, OBJECT * > root
Definition: MultiStoreSvc.cpp:121
MultiStoreSvc::unregisterObject
STATUS unregisterObject(boost::string_ref parent, int obj) override
Unregister object from the data store.
Definition: MultiStoreSvc.cpp:339
IDataProviderSvc::preLoad
virtual StatusCode preLoad()=0
Load all preload items of the list.
MultiStoreSvc::clearSubTree
STATUS clearSubTree(boost::string_ref path) override
Remove all data objects below the sub tree identified.
Definition: MultiStoreSvc.cpp:193
STATUS
StatusCode STATUS
Definition: MultiStoreSvc.cpp:47
IDataProviderSvc::resetPreLoad
virtual StatusCode resetPreLoad()=0
Clear the preload list.
std::map::end
T end(T...args)
MultiStoreSvc::create
STATUS create(CSTR &nam, CSTR &typ, IInterface *&pPartition) override
Create a partition object. The name identifies the partition uniquely.
Definition: MultiStoreSvc.cpp:491
MultiStoreSvc
Data service base class.
Definition: MultiStoreSvc.cpp:102
MultiStoreSvc::unlinkObject
STATUS unlinkObject(IRegistry *from, boost::string_ref objPath) override
Remove a link to another object.
Definition: MultiStoreSvc.cpp:439
MultiStoreSvc::reinitialize
STATUS reinitialize() override
Service initialisation.
Definition: MultiStoreSvc.cpp:626
IDataProviderSvc
Data provider interface definition.
Definition: IDataProviderSvc.h:46
MultiStoreSvc::removePreLoadItem
STATUS removePreLoadItem(const DataStoreItem &item) override
Remove an item from the preload list.
Definition: MultiStoreSvc.cpp:284
DataStoreItem
Description of the DataStoreItem class.
Definition: DataStoreItem.h:17
std::map< std::string, Partition >
MultiStoreSvc::addPreLoadItem
STATUS addPreLoadItem(std::string item) override
Add an item to the preload list.
Definition: MultiStoreSvc.cpp:279
ISvcManager.h
MultiStoreSvc::unlinkObject
STATUS unlinkObject(boost::string_ref from, boost::string_ref objPath) override
Remove a link to another object.
Definition: MultiStoreSvc.cpp:444
IDataManagerSvc::objectParent
virtual StatusCode objectParent(const DataObject *pObject, IRegistry *&refpParent)=0
IDataManagerSvc: Explore the object store: retrieve the object&#39;s parent.
MultiStoreSvc::m_dataLoader
SmartIF< IConversionSvc > m_dataLoader
Pointer to data loader service.
Definition: MultiStoreSvc.cpp:115
DECLARE_COMPONENT
#define DECLARE_COMPONENT(type)
Definition: PluginService.h:33
MultiStoreSvc::linkObject
STATUS linkObject(boost::string_ref from, boost::string_ref objPath, OBJECT *to) override
Add a link to another object.
Definition: MultiStoreSvc.cpp:424
MultiStoreSvc::create
STATUS create(CSTR &nam, CSTR &typ) override
Create a partition object. The name identifies the partition uniquely.
Definition: MultiStoreSvc.cpp:485
MultiStoreSvc::setDataLoader
STATUS setDataLoader(IConversionSvc *pDataLoader, IDataProviderSvc *dpsvc=nullptr) override
IDataManagerSvc: Pass a default data loader to the service.
Definition: MultiStoreSvc.cpp:264
std::string
STL class.
IDataProviderSvc::linkObject
virtual StatusCode linkObject(IRegistry *from, boost::string_ref objPath, DataObject *toObj)=0
Add a link to another object.
MultiStoreSvc::PartitionDefs
std::vector< std::string > PartitionDefs
Definition: MultiStoreSvc.cpp:105
IDataProviderSvc::removePreLoadItem
virtual StatusCode removePreLoadItem(const DataStoreItem &item)=0
Remove an item from the preload list.
Service.h
SmartIF::get
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:82
IDataManagerSvc::traverseSubTree
virtual StatusCode traverseSubTree(boost::string_ref sub_path, IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects below the sub tree identified by its full path name...
MultiStoreSvc::makePartitions
STATUS makePartitions()
Create all partitions according to job options.
Definition: MultiStoreSvc.cpp:708
MultiStoreSvc::linkObject
STATUS linkObject(IRegistry *from, boost::string_ref objPath, OBJECT *to) override
Add a link to another object.
Definition: MultiStoreSvc.cpp:419
IDataManagerSvc.h
IDataProviderSvc.h
detail
TupleObj.h GaudiAlg/TupleObj.h namespace with few technical implementations.
IPartitionControl.h
MultiStoreSvc::registerAddress
STATUS registerAddress(IRegistry *parent, boost::string_ref path, ADDRESS *pAddr) override
IDataManagerSvc: Register object address with the data store.
Definition: MultiStoreSvc.cpp:153
MultiStoreSvc::setRoot
STATUS setRoot(std::string path, OBJECT *pObj) override
Initialize data store for new event by giving new event path and root object.
Definition: MultiStoreSvc.cpp:234
MultiStoreSvc::unregisterAddress
STATUS unregisterAddress(OBJECT *pParent, boost::string_ref path) override
IDataManagerSvc: Unregister object address from the data store.
Definition: MultiStoreSvc.cpp:163
MultiStoreSvc::addPreLoadItem
STATUS addPreLoadItem(const DataStoreItem &item) override
Add an item to the preload list.
Definition: MultiStoreSvc.cpp:274
MultiStoreSvc::unlinkObject
STATUS unlinkObject(OBJECT *from, boost::string_ref objPath) override
Remove a link to another object.
Definition: MultiStoreSvc.cpp:449
MultiStoreSvc::findObject
STATUS findObject(OBJECT *parent, boost::string_ref path, OBJECT *&pObject) override
Find object in the data store.
Definition: MultiStoreSvc.cpp:409
IService
General service interface definition.
Definition: IService.h:18
MultiStoreSvc::clearSubTree
STATUS clearSubTree(OBJECT *pObject) override
Remove all data objects below the sub tree identified.
Definition: MultiStoreSvc.cpp:198
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
IDataProviderSvc::updateObject
virtual StatusCode updateObject(IRegistry *pDirectory)=0
Update object identified by its directory entry.
MultiStoreSvc::unregisterAddress
STATUS unregisterAddress(IRegistry *pParent, boost::string_ref path) override
IDataManagerSvc: Unregister object address from the data store.
Definition: MultiStoreSvc.cpp:168
MultiStoreSvc::activate
STATUS activate(CSTR &nam) override
Activate a partition object. The name identifies the partition uniquely.
Definition: MultiStoreSvc.cpp:531
MultiStoreSvc::linkObject
STATUS linkObject(boost::string_ref fullPath, OBJECT *to) override
Add a link to another object.
Definition: MultiStoreSvc.cpp:434
IInterface
Definition of the basic interface.
Definition: IInterface.h:277
gaudirun.type
type
Definition: gaudirun.py:133
SmartIF.h
MultiStoreSvc::updateObject
STATUS updateObject(OBJECT *parent, boost::string_ref updatePath) override
Update object.
Definition: MultiStoreSvc.cpp:479
std::map::erase
T erase(T...args)
MultiStoreSvc::registerObject
STATUS registerObject(OBJECT *parent, boost::string_ref obj, OBJECT *pObj) override
Register object with the data store.
Definition: MultiStoreSvc.cpp:319
IRegistry
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
CSTR
const std::string CSTR
Definition: MultiStoreSvc.cpp:41
OBJECT
DataObject OBJECT
Definition: MultiStoreSvc.cpp:45
Service::reinitialize
StatusCode reinitialize() override
Definition: Service.cpp:250
MultiStoreSvc::clearPartitions
STATUS clearPartitions()
Clear all partitions.
Definition: MultiStoreSvc.cpp:700
IDataProviderSvc::retrieveObject
virtual StatusCode retrieveObject(IRegistry *pDirectory, boost::string_ref path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.
CLID
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
IDataManagerSvc::clearSubTree
virtual StatusCode clearSubTree(boost::string_ref sub_path)=0
Remove all data objects below the sub tree identified by its full path name.
std::string::clear
T clear(T...args)
MultiStoreSvc::findObject
STATUS findObject(boost::string_ref parent, int item, OBJECT *&pObject) override
Find object in the data store.
Definition: MultiStoreSvc.cpp:404
std::move
T move(T...args)
MultiStoreSvc::m_current
Partition m_current
Current partition.
Definition: MultiStoreSvc.cpp:124
IOpaqueAddress.h
MultiStoreSvc::preparePartitions
STATUS preparePartitions()
Prepare partition for usage.
Definition: MultiStoreSvc.cpp:674
MultiStoreSvc::registerAddress
STATUS registerAddress(OBJECT *parent, boost::string_ref path, ADDRESS *pAddr) override
IDataManagerSvc: Register object address with the data store.
Definition: MultiStoreSvc.cpp:148
MultiStoreSvc::objectLeaves
STATUS objectLeaves(const OBJECT *pObject, std::vector< IRegistry * > &leaves) override
Explore the object store: retrieve all leaves attached to the object.
Definition: MultiStoreSvc.cpp:173
MultiStoreSvc::unregisterObject
STATUS unregisterObject(OBJECT *pObj) override
Unregister object from the data store.
Definition: MultiStoreSvc.cpp:344
MultiStoreSvc::setRoot
STATUS setRoot(std::string path, ADDRESS *pAddr) override
Initialize data store for new event by giving new event path and address of root object.
Definition: MultiStoreSvc.cpp:249
MultiStoreSvc::resetPreLoad
STATUS resetPreLoad() override
Clear the preload list.
Definition: MultiStoreSvc.cpp:294
IDataManagerSvc::unregisterAddress
virtual StatusCode unregisterAddress(boost::string_ref fullPath)=0
Unregister object address from the data store.
std::map::find
T find(T...args)
MultiStoreSvc::unregisterObject
STATUS unregisterObject(OBJECT *pObj, int item) override
Unregister object from the data store.
Definition: MultiStoreSvc.cpp:354
MultiStoreSvc::findObject
STATUS findObject(IRegistry *parent, boost::string_ref path, OBJECT *&pObj) override
Find object identified by its full path in the data store.
Definition: MultiStoreSvc.cpp:394
IDataProviderSvc::unregisterObject
virtual StatusCode unregisterObject(boost::string_ref fullPath)=0
Unregister object from the data store.
MultiStoreSvc::initialize
STATUS initialize() override
Service initialisation.
Definition: MultiStoreSvc.cpp:612
std::vector< std::string >
IDataStoreAgent
Generic data agent interface.
Definition: IDataStoreAgent.h:16
MultiStoreSvc::drop
STATUS drop(CSTR &nam) override
Drop a partition object. The name identifies the partition uniquely.
Definition: MultiStoreSvc.cpp:505
MultiStoreSvc::unregisterObject
STATUS unregisterObject(boost::string_ref path) override
Unregister object from the data store.
Definition: MultiStoreSvc.cpp:329
IAddressCreator.h
IConversionSvc.h
extends
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
std::begin
T begin(T...args)
IDataProviderSvc::registerObject
virtual StatusCode registerObject(boost::string_ref fullPath, DataObject *pObject)=0
Register object with the data store.
MultiStoreSvc::activate
STATUS activate(IInterface *pPartition) override
Activate a partition object.
Definition: MultiStoreSvc.cpp:543
MultiStoreSvc::m_addrCreator
SmartIF< IAddressCreator > m_addrCreator
Reference to address creator.
Definition: MultiStoreSvc.cpp:117
MultiStoreSvc::retrieveObject
STATUS retrieveObject(boost::string_ref path, OBJECT *&pObj) override
Retrieve object identified by its full path from the data store.
Definition: MultiStoreSvc.cpp:364
IDataManagerSvc::registerAddress
virtual StatusCode registerAddress(boost::string_ref fullPath, IOpaqueAddress *pAddress)=0
Register object address with the data store.
MultiStoreSvc::activePartition
StatusCode activePartition(std::string &nam, IInterface *&pPartition) const override
Access the active partition object.
Definition: MultiStoreSvc.cpp:568
std::map::emplace
T emplace(T...args)
MultiStoreSvc::retrieveObject
STATUS retrieveObject(OBJECT *parent, boost::string_ref path, OBJECT *&pObj) override
Retrieve object from data store.
Definition: MultiStoreSvc.cpp:379
TypeNameString.h
AttribStringParser.h
MultiStoreSvc::retrieveObject
STATUS retrieveObject(OBJECT *parent, int item, OBJECT *&pObj) override
Retrieve object from data store.
Definition: MultiStoreSvc.cpp:384
MultiStoreSvc::updateObject
STATUS updateObject(boost::string_ref path) override
Update object.
Definition: MultiStoreSvc.cpp:464
MultiStoreSvc::unregisterObject
STATUS unregisterObject(boost::string_ref parent, boost::string_ref obj) override
Unregister object from the data store.
Definition: MultiStoreSvc.cpp:334
SmartIF::reset
void reset(TYPE *ptr=nullptr)
Set the internal pointer to the passed one disposing of the old one.
Definition: SmartIF.h:92
StatusCode::FAILURE
Definition: StatusCode.h:29
IOpaqueAddress
Opaque address interface definition.
Definition: IOpaqueAddress.h:23
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:84
ADDRESS
IOpaqueAddress ADDRESS
Definition: MultiStoreSvc.cpp:46
MultiStoreSvc::linkObject
STATUS linkObject(OBJECT *from, boost::string_ref objPath, OBJECT *to) override
Add a link to another object.
Definition: MultiStoreSvc.cpp:429
compose
details::composer_t< std::decay_t< lambda_ts >... > compose(lambda_ts &&...lambdas)
Definition: compose.h:54
MultiStoreSvc::traverseSubTree
STATUS traverseSubTree(OBJECT *pObject, AGENT *pAgent) override
IDataManagerSvc: Analyze by traversing all data objects below the sub tree.
Definition: MultiStoreSvc.cpp:223
MultiStoreSvc::Partitions
std::map< std::string, Partition > Partitions
Definition: MultiStoreSvc.cpp:106
DataObject
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
MultiStoreSvc::clearStore
STATUS clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: MultiStoreSvc.cpp:203
MultiStoreSvc::updateObject
STATUS updateObject(IRegistry *pDirectory) override
Update object identified by its directory entry.
Definition: MultiStoreSvc.cpp:459
ISvcLocator.h
std::forward
T forward(T...args)
MultiStoreSvc::retrieveObject
STATUS retrieveObject(boost::string_ref parent, int item, OBJECT *&pObj) override
Retrieve object from data store.
Definition: MultiStoreSvc.cpp:374
toupper
void toupper(std::string &s)
Definition: StatusCodeSvc.cpp:10
MultiStoreSvc::drop
STATUS drop(IInterface *pPartition) override
Drop a partition object. The name identifies the partition uniquely.
Definition: MultiStoreSvc.cpp:518
MultiStoreSvc::registerAddress
STATUS registerAddress(boost::string_ref path, ADDRESS *pAddr) override
IDataManagerSvc: Register object address with the data store.
Definition: MultiStoreSvc.cpp:143
MultiStoreSvc::traverseTree
STATUS traverseTree(AGENT *pAgent) override
IDataManagerSvc: Analyze by traversing all data objects in the data store.
Definition: MultiStoreSvc.cpp:228
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
MultiStoreSvc::retrieveObject
STATUS retrieveObject(boost::string_ref parent, boost::string_ref path, OBJECT *&pObj) override
Retrieve object from data store.
Definition: MultiStoreSvc.cpp:369
AGENT
IDataStoreAgent AGENT
Definition: MultiStoreSvc.cpp:44
MultiStoreSvc::tagROOT::path
std::string path
Definition: MultiStoreSvc.cpp:120
MultiStoreSvc::objectParent
STATUS objectParent(const IRegistry *pObject, IRegistry *&refpParent) override
IDataManagerSvc: Explore the object store: retrieve the object&#39;s parent.
Definition: MultiStoreSvc.cpp:188
DataObject.h
MultiStoreSvc::attachServices
STATUS attachServices()
Definition: MultiStoreSvc.cpp:580
MultiStoreSvc::registerObject
STATUS registerObject(OBJECT *parent, int obj, OBJECT *pObj) override
Register object with the data store.
Definition: MultiStoreSvc.cpp:324
MultiStoreSvc::~MultiStoreSvc
~MultiStoreSvc() override
Standard Destructor.
Definition: MultiStoreSvc.cpp:665
IOpaqueAddress::addRef
virtual unsigned long addRef()=0
Add reference to object.