DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::iomanager::QueueRegistry Class Reference

The QueueRegistry class manages all Queue instances and gives out handles to the Queues upon request. More...

#include <QueueRegistry.hpp>

Classes

struct  QueueEntry
 

Public Member Functions

 ~QueueRegistry ()=default
 QueueRegistry destructor.
 
template<typename T >
std::shared_ptr< Queue< T > > get_queue (const std::string &name)
 Get a handle to a Queue.
 
void configure (const std::vector< const confmodel::Queue * > &configs, opmonlib::OpMonManager &)
 Configure the QueueRegistry.
 
void shutdown ()
 
bool has_queue (std::string const &uid, std::string const &data_type) const
 
std::set< std::string > get_datatypes (std::string const &uid) const
 

Static Public Member Functions

static QueueRegistryget ()
 Get a handle to the QueueRegistry.
 
static void reset ()
 

Private Member Functions

 QueueRegistry ()=default
 
template<typename T >
std::shared_ptr< QueueBasecreate_queue (const confmodel::Queue *config)
 
 QueueRegistry (const QueueRegistry &)=delete
 
QueueRegistryoperator= (const QueueRegistry &)=delete
 
 QueueRegistry (QueueRegistry &&)=delete
 
QueueRegistryoperator= (QueueRegistry &&)=delete
 

Private Attributes

std::map< std::string, QueueEntrym_queue_registry
 
std::vector< const confmodel::Queue * > m_queue_configs
 
std::shared_ptr< opmonlib::OpMonLinkm_opmon_link { std::make_shared<opmonlib::OpMonLink>() }
 
bool m_configured { false }
 

Static Private Attributes

static std::unique_ptr< QueueRegistrys_instance = nullptr
 

Detailed Description

The QueueRegistry class manages all Queue instances and gives out handles to the Queues upon request.

Definition at line 34 of file QueueRegistry.hpp.

Constructor & Destructor Documentation

◆ ~QueueRegistry()

dunedaq::iomanager::QueueRegistry::~QueueRegistry ( )
default

QueueRegistry destructor.

◆ QueueRegistry() [1/3]

dunedaq::iomanager::QueueRegistry::QueueRegistry ( )
privatedefault

◆ QueueRegistry() [2/3]

dunedaq::iomanager::QueueRegistry::QueueRegistry ( const QueueRegistry & )
privatedelete

◆ QueueRegistry() [3/3]

dunedaq::iomanager::QueueRegistry::QueueRegistry ( QueueRegistry && )
privatedelete

Member Function Documentation

◆ configure()

void dunedaq::iomanager::QueueRegistry::configure ( const std::vector< const confmodel::Queue * > & configs,
opmonlib::OpMonManager & mgr )

Configure the QueueRegistry.

Parameters
configsQueue configurations

Definition at line 31 of file QueueRegistry.cpp.

32{
33 if (m_configured) {
34 throw QueueRegistryConfigured(ERS_HERE);
35 }
36
37 m_queue_configs = configs;
38
39 mgr.register_node("queues", m_opmon_link);
40
41 m_configured = true;
42}
#define ERS_HERE
std::vector< const confmodel::Queue * > m_queue_configs
std::shared_ptr< opmonlib::OpMonLink > m_opmon_link

◆ create_queue()

template<typename T >
std::shared_ptr< QueueBase > dunedaq::iomanager::QueueRegistry::create_queue ( const confmodel::Queue * config)
private

Definition at line 53 of file QueueRegistry.hxx.

54{
55 std::shared_ptr<QueueBase> queue;
56 auto type = config->get_queue_type();
58 queue = std::make_shared<StdDeQueue<T>>(config->UID(), config->get_capacity());
60 queue = std::make_shared<FollySPSCQueue<T>>(config->UID(), config->get_capacity());
62 queue = std::make_shared<FollyMPMCQueue<T>>(config->UID(), config->get_capacity());
63 } else {
64 throw QueueTypeUnknown(ERS_HERE, config->get_queue_type());
65 }
66
67 m_opmon_link->register_node(config->UID(), queue);
68
69 return queue;
70}
static const std::string KStdDeQueue
Definition Queue.hpp:126
static const std::string KFollySPSCQueue
Definition Queue.hpp:127
static const std::string KFollyMPMCQueue
Definition Queue.hpp:128

◆ get()

QueueRegistry & dunedaq::iomanager::QueueRegistry::get ( )
static

Get a handle to the QueueRegistry.

Returns
QueueRegistry handle

Definition at line 22 of file QueueRegistry.cpp.

23{
24 if (!s_instance) {
25 s_instance.reset(new QueueRegistry());
26 }
27 return *s_instance;
28}
static std::unique_ptr< QueueRegistry > s_instance

◆ get_datatypes()

std::set< std::string > dunedaq::iomanager::QueueRegistry::get_datatypes ( std::string const & uid) const

Definition at line 58 of file QueueRegistry.cpp.

59{
60 std::set<std::string> output;
61
62 for (auto& config : m_queue_configs) {
63 if (config->UID() == uid) {
64 output.insert(config->get_data_type());
65 }
66 }
67
68 return output;
69}

◆ get_queue()

template<typename T >
std::shared_ptr< Queue< T > > dunedaq::iomanager::QueueRegistry::get_queue ( const std::string & name)

Get a handle to a Queue.

Template Parameters
TType of the data stored in the Queue
Parameters
nameName of the Queue
Returns
std::shared_ptr to generic queue pointer

Definition at line 12 of file QueueRegistry.hxx.

13{
14
15 auto queue_it = m_queue_registry.find(name);
16 if (queue_it != m_queue_registry.end()) {
17 auto queuePtr = std::dynamic_pointer_cast<Queue<T>>(queue_it->second.m_instance);
18
19 if (!queuePtr) {
20 // TODO: John Freeman (jcfree@fnal.gov), Jun-23-2020. Add checks for demangling status. Timescale 2 weeks.
21 int status = -999;
22 std::string realname_target = abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, &status);
23 std::string realname_source = abi::__cxa_demangle(queue_it->second.m_type->name(), nullptr, nullptr, &status);
24
25 throw QueueTypeMismatch(ERS_HERE, name, realname_source, realname_target);
26 }
27
28 return queuePtr;
29 }
30
31 const confmodel::Queue* qptr = nullptr;
32 for(auto& qcfg : m_queue_configs) {
33 if (qcfg->UID() == name) {
34 qptr = qcfg;
35 break;
36 }
37 }
38 if (qptr != nullptr) {
39 QueueEntry entry = { qptr, &typeid(T), create_queue<T>(qptr) };
40 m_queue_registry[name] = entry;
41 return std::dynamic_pointer_cast<Queue<T>>(entry.m_instance);
42
43 } else {
44 // TODO: John Freeman (jcfree@fnal.gov), Jun-23-2020. Add checks for demangling status. Timescale 2 weeks.
45 int status = -999;
46 std::string realname_target = abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, &status);
47 throw QueueNotFound(ERS_HERE, name, realname_target);
48 }
49}
std::map< std::string, QueueEntry > m_queue_registry
std::shared_ptr< QueueBase > create_queue(const confmodel::Queue *config)

◆ has_queue()

bool dunedaq::iomanager::QueueRegistry::has_queue ( std::string const & uid,
std::string const & data_type ) const

Definition at line 46 of file QueueRegistry.cpp.

47{
48 for (auto& config : m_queue_configs) {
49 if (config->UID() == uid && config->get_data_type() == data_type) {
50 return true;
51 }
52 }
53
54 return false;
55}

◆ operator=() [1/2]

QueueRegistry & dunedaq::iomanager::QueueRegistry::operator= ( const QueueRegistry & )
privatedelete

◆ operator=() [2/2]

QueueRegistry & dunedaq::iomanager::QueueRegistry::operator= ( QueueRegistry && )
privatedelete

◆ reset()

static void dunedaq::iomanager::QueueRegistry::reset ( )
inlinestatic

Definition at line 64 of file QueueRegistry.hpp.

64{ s_instance.reset(nullptr); }

◆ shutdown()

void dunedaq::iomanager::QueueRegistry::shutdown ( )
inline

Definition at line 65 of file QueueRegistry.hpp.

65{ m_queue_registry.clear(); }

Member Data Documentation

◆ m_configured

bool dunedaq::iomanager::QueueRegistry::m_configured { false }
private

Definition at line 88 of file QueueRegistry.hpp.

88{ false };

◆ m_opmon_link

std::shared_ptr<opmonlib::OpMonLink> dunedaq::iomanager::QueueRegistry::m_opmon_link { std::make_shared<opmonlib::OpMonLink>() }
private

Definition at line 86 of file QueueRegistry.hpp.

86{ std::make_shared<opmonlib::OpMonLink>() };

◆ m_queue_configs

std::vector<const confmodel::Queue*> dunedaq::iomanager::QueueRegistry::m_queue_configs
private

Definition at line 85 of file QueueRegistry.hpp.

◆ m_queue_registry

std::map<std::string, QueueEntry> dunedaq::iomanager::QueueRegistry::m_queue_registry
private

Definition at line 84 of file QueueRegistry.hpp.

◆ s_instance

std::unique_ptr< QueueRegistry > dunedaq::iomanager::QueueRegistry::s_instance = nullptr
staticprivate

Definition at line 90 of file QueueRegistry.hpp.


The documentation for this class was generated from the following files: