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

#include <DisabledResources.hpp>

Public Member Functions

 DisabledResources ()=default
 
 DisabledResources (const ResourceSet *root, std::vector< const Resource * > initial_list)
 
 ~DisabledResources ()=default
 
void update (const ResourceSet *root, std::vector< const Resource * > initial_list)
 
bool is_enabled (const Resource *component) const
 
bool initialised () const
 

Private Member Functions

void fill (const ResourceSet &rs, std::vector< const ResourceSet * > &all_resource_sets, TestCircularDependency &cd_fuse)
 
void disable (const Resource &component)
 
void disable_children (const ResourceSet &)
 
size_t size () noexcept
 

Private Attributes

std::set< std::string > m_disabled
 
bool m_initialised {false}
 

Friends

class Session
 
class Resource
 

Detailed Description

Definition at line 16 of file DisabledResources.hpp.

Constructor & Destructor Documentation

◆ DisabledResources() [1/2]

dunedaq::confmodel::DisabledResources::DisabledResources ( )
default

◆ DisabledResources() [2/2]

DisabledResources::DisabledResources ( const ResourceSet * root,
std::vector< const Resource * > initial_list )

Definition at line 19 of file DisabledResources.cpp.

21{
22 TLOG_DEBUG(2) << "construct the object from Resource " << root->UID() ;
23 update(root, initial_list);
24}
const std::string & UID() const noexcept
void update(const ResourceSet *root, std::vector< const Resource * > initial_list)
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112

◆ ~DisabledResources()

dunedaq::confmodel::DisabledResources::~DisabledResources ( )
default

Member Function Documentation

◆ disable()

void dunedaq::confmodel::DisabledResources::disable ( const Resource & component)
inlineprivate

Definition at line 31 of file DisabledResources.hpp.

32 {
33 m_disabled.insert(component.UID());
34 }

◆ disable_children()

void DisabledResources::disable_children ( const ResourceSet & rs)
private

Definition at line 101 of file DisabledResources.cpp.

102{
103 TLOG_DEBUG(6) << "Disabling children of " << rs.UID();
104 for (auto & res : rs.contained_resources()) {
105 TLOG_DEBUG(6) << "Disabling child " << res->UID();
106 disable(*res);
107 if (const auto * rs2 = res->cast<ResourceSet>()) {
108 disable_children(*rs2);
109 }
110 }
111}
void disable(const Resource &component)
virtual std::vector< const Resource * > contained_resources() const =0

◆ fill()

void DisabledResources::fill ( const ResourceSet & rs,
std::vector< const ResourceSet * > & all_resource_sets,
TestCircularDependency & cd_fuse )
private

Definition at line 80 of file DisabledResources.cpp.

83{
84 TLOG_DEBUG(6) << "rs.UID=" << rs.UID() << ", class=" << rs.class_name();
85 all_resource_sets.push_back(&rs);
86 auto rptr = &rs;
87 if (rptr->cast<Resource>() == nullptr) {
88 throw (MissingConstructor(ERS_HERE, "Resource", rs.full_name()));
89 }
90 for (auto & res : rs.contained_resources()) {
91 AddTestOnCircularDependency add_fuse_test(cd_fuse, res);
92 if (const ResourceSet * rs2 = res->cast<ResourceSet>()) {
93 fill(*rs2, all_resource_sets, cd_fuse);
94 }
95 }
96}
#define ERS_HERE
std::string full_name() const noexcept
const TARGET * cast() const noexcept
Casts object to different class.
const std::string & class_name() const noexcept
void fill(const ResourceSet &rs, std::vector< const ResourceSet * > &all_resource_sets, TestCircularDependency &cd_fuse)

◆ initialised()

bool dunedaq::confmodel::DisabledResources::initialised ( ) const
inlinenodiscard

◆ is_enabled()

bool dunedaq::confmodel::DisabledResources::is_enabled ( const Resource * component) const
inline

Definition at line 57 of file DisabledResources.hpp.

57 {
58 return !m_disabled.contains(component->UID());
59 }

◆ size()

size_t dunedaq::confmodel::DisabledResources::size ( )
inlineprivatenoexcept

Definition at line 40 of file DisabledResources.hpp.

41 {
42 return m_disabled.size();
43 }

◆ update()

void DisabledResources::update ( const ResourceSet * root,
std::vector< const Resource * > initial_list )

Definition at line 27 of file DisabledResources.cpp.

28 {
29
30 m_disabled.clear();
31
32 m_initialised = true;
33 if (initial_list.empty()) {
34 TLOG_DEBUG( 6) << "We have no disabled components";
35 return;
36 }
37
38 // get list of all root's resource-sets also test any
39 // circular dependencies between segments and resource sets
40 TestCircularDependency cd_fuse("component \'is-disabled\' status", root);
41 std::vector<const ResourceSet*> resource_sets;
42 fill(*root, resource_sets, cd_fuse);
43
44 for (auto & comp : initial_list) {
45 disable(*comp);
46 TLOG_DEBUG(6) << comp->UID() << " is disabled in session";
47 if (const ResourceSet * rs = comp->cast<ResourceSet>()) {
49 }
50 }
51
52 for (unsigned long count = 1; true; ++count) {
53 const unsigned long num(size()); // Remember current size
54
55 TLOG_DEBUG(6) << "before auto-disabling iteration " << count << " the number of disabled components is " << num ;
56 for (const auto& res_set : resource_sets) {
57 if (is_enabled(res_set)) {
58 if (res_set->compute_disabled_state(m_disabled)) {
59 TLOG_DEBUG(6) << "disable custom resource-set- " << res_set->UID() << " because children are disabled" ;
60 disable(*res_set);
61 disable_children(*res_set);
62 }
63 }
64 }
65
66 if (size() == num) {
67 TLOG_DEBUG(6) << "after " << count << " iteration(s) auto-disabling algorithm found no newly disabled sets, exiting loop ..." ;
68 break;
69 }
70
71 unsigned int iLimit(1000);
72 if (count > iLimit) {
73 ers::error(ReadMaxAllowedIterations(ERS_HERE, iLimit));
74 break;
75 }
76 }
77}
bool is_enabled(const Resource *component) const
void error(const Issue &issue)
Definition ers.hpp:81

Friends And Related Symbol Documentation

◆ Resource

friend class Resource
friend

Definition at line 20 of file DisabledResources.hpp.

◆ Session

friend class Session
friend

Definition at line 19 of file DisabledResources.hpp.

Member Data Documentation

◆ m_disabled

std::set<std::string> dunedaq::confmodel::DisabledResources::m_disabled
private

Definition at line 24 of file DisabledResources.hpp.

◆ m_initialised

bool dunedaq::confmodel::DisabledResources::m_initialised {false}
private

Definition at line 25 of file DisabledResources.hpp.

25{false};

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