DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
confmodel
src
DisabledResources.cpp
Go to the documentation of this file.
1
#include "
confmodel/Application.hpp
"
2
#include "
confmodel/Resource.hpp
"
3
#include "
confmodel/ResourceSet.hpp
"
4
#include "
confmodel/Segment.hpp
"
5
#include "
confmodel/Session.hpp
"
6
7
#include "
confmodel/confmodelIssues.hpp
"
8
#include "
confmodel/DisabledResources.hpp
"
9
10
#include "
logging/Logging.hpp
"
11
12
#include "
confmodel/test_circular_dependency.hpp
"
13
14
using namespace
dunedaq::confmodel
;
15
17
18
19
DisabledResources::DisabledResources
(
const
ResourceSet
* root,
20
std::vector<const Resource*> initial_list)
21
{
22
TLOG_DEBUG
(2) <<
"construct the object from Resource "
<< root->
UID
() ;
23
update
(root, initial_list);
24
}
25
26
27
void
DisabledResources::update
(
const
ResourceSet
* root,
28
std::vector<const Resource*> initial_list) {
29
30
m_disabled
.clear();
31
32
m_initialised
=
true
;
33
34
// get list of all root's resource-sets also test any
35
// circular dependencies between segments and resource sets
36
TestCircularDependency
cd_fuse(
"component \'is-disabled\' status"
, root);
37
std::vector<const ResourceSet*> resource_sets;
38
std::set<const Resource*> simple_resources;
39
fill
(*root, resource_sets, simple_resources, cd_fuse);
40
41
for
(
auto
& comp : initial_list) {
42
disable
(*comp);
43
TLOG_DEBUG
(6) << comp->UID() <<
" is disabled in session"
;
44
if
(
const
ResourceSet
* rs = comp->
cast
<
ResourceSet
>()) {
45
disable_children
(*rs);
46
}
47
}
48
49
for
(
unsigned
long
count = 1;
true
; ++count) {
50
const
unsigned
long
num(
size
());
// Remember current size
51
52
TLOG_DEBUG
(6) <<
"before auto-disabling iteration "
<< count <<
" the number of disabled components is "
<< num ;
53
for
(
const
auto
& res_set : resource_sets) {
54
if
(
is_enabled
(res_set)) {
55
if
(res_set->compute_disabled_state(
m_disabled
)) {
56
TLOG_DEBUG
(6) <<
"disable custom resource-set- "
<< res_set->UID() <<
" because children are disabled"
;
57
disable
(*res_set);
58
disable_children
(*res_set);
59
}
60
}
61
}
62
63
for
(
auto
& res : simple_resources) {
64
if
(
is_enabled
(res) && res->compute_disabled_state(
m_disabled
)) {
65
TLOG_DEBUG
(6) <<
"Marking "
<< res->UID() <<
" as disabled\n"
;
66
disable
(*res);
67
}
68
}
69
70
if
(
size
() == num) {
71
TLOG_DEBUG
(6) <<
"after "
<< count <<
" iteration(s) auto-disabling algorithm found no newly disabled sets, exiting loop ..."
;
72
break
;
73
}
74
75
unsigned
int
iLimit(1000);
76
if
(count > iLimit) {
77
ers::error
(ReadMaxAllowedIterations(
ERS_HERE
, iLimit));
78
break
;
79
}
80
}
81
}
82
83
// fill data from resource sets
84
void
DisabledResources::fill
(
const
ResourceSet
& rs,
85
std::vector<const ResourceSet*>& all_resource_sets,
86
std::set<const Resource*>& simple_resources,
87
TestCircularDependency
& cd_fuse)
88
{
89
TLOG_DEBUG
(6) <<
"rs.UID="
<< rs.
UID
() <<
", class="
<< rs.
class_name
();
90
all_resource_sets.push_back(&rs);
91
auto
rptr = &rs;
92
if
(rptr->cast<
Resource
>() ==
nullptr
) {
93
throw
(MissingConstructor(
ERS_HERE
,
"Resource"
, rs.
full_name
()));
94
}
95
for
(
auto
& res : rs.
contained_resources
()) {
96
AddTestOnCircularDependency
add_fuse_test(cd_fuse, res);
97
if
(
const
ResourceSet
* rs2 = res->
cast
<
ResourceSet
>()) {
98
fill
(*rs2, all_resource_sets, simple_resources, cd_fuse);
99
}
else
{
100
simple_resources.insert(res);
101
}
102
}
103
}
104
105
106
107
void
108
DisabledResources::disable_children
(
const
ResourceSet
& rs)
109
{
110
TLOG_DEBUG
(6) <<
"Disabling children of "
<< rs.
UID
();
111
for
(
auto
& res : rs.
contained_resources
()) {
112
TLOG_DEBUG
(6) <<
"Disabling child "
<< res->UID();
113
disable
(*res);
114
if
(
const
auto
* rs2 = res->cast<
ResourceSet
>()) {
115
disable_children
(*rs2);
116
}
117
}
118
}
119
DisabledResources.hpp
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
Application.hpp
dunedaq::conffwk::DalObject::full_name
std::string full_name() const noexcept
Definition
DalObject.hpp:192
dunedaq::conffwk::DalObject::cast
const TARGET * cast() const noexcept
Casts object to different class.
Definition
DalObject.hpp:179
dunedaq::conffwk::DalObject::class_name
const std::string & class_name() const noexcept
Definition
DalObject.hpp:144
dunedaq::conffwk::DalObject::UID
const std::string & UID() const noexcept
Definition
DalObject.hpp:135
dunedaq::confmodel::AddTestOnCircularDependency
Definition
test_circular_dependency.hpp:50
dunedaq::confmodel::DisabledResources::Resource
friend class Resource
Definition
DisabledResources.hpp:20
dunedaq::confmodel::DisabledResources::m_initialised
bool m_initialised
Definition
DisabledResources.hpp:25
dunedaq::confmodel::DisabledResources::disable_children
void disable_children(const ResourceSet &)
Definition
DisabledResources.cpp:108
dunedaq::confmodel::DisabledResources::size
size_t size() noexcept
Definition
DisabledResources.hpp:41
dunedaq::confmodel::DisabledResources::fill
void fill(const ResourceSet &rs, std::vector< const ResourceSet * > &all_resource_sets, std::set< const Resource * > &simple_resources, TestCircularDependency &cd_fuse)
Definition
DisabledResources.cpp:84
dunedaq::confmodel::DisabledResources::m_disabled
std::set< std::string > m_disabled
Definition
DisabledResources.hpp:24
dunedaq::confmodel::DisabledResources::is_enabled
bool is_enabled(const Resource *component) const
Definition
DisabledResources.hpp:58
dunedaq::confmodel::DisabledResources::update
void update(const ResourceSet *root, std::vector< const Resource * > initial_list)
Definition
DisabledResources.cpp:27
dunedaq::confmodel::DisabledResources::DisabledResources
DisabledResources()=default
dunedaq::confmodel::DisabledResources::disable
void disable(const Resource &component)
Definition
DisabledResources.hpp:32
dunedaq::confmodel::ResourceSet
Definition
ResourceSet.hpp:27
dunedaq::confmodel::ResourceSet::contained_resources
virtual std::vector< const Resource * > contained_resources() const =0
dunedaq::confmodel::TestCircularDependency
Definition
test_circular_dependency.hpp:15
confmodelIssues.hpp
ResourceSet.hpp
Resource.hpp
Segment.hpp
Session.hpp
Logging.hpp
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
dunedaq::confmodel
Definition
DisabledResources.hpp:10
ers::error
void error(const Issue &issue)
Definition
ers.hpp:92
test_circular_dependency.hpp
Generated on
for DUNE-DAQ by
1.17.0