mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
add prepare state
This commit is contained in:
parent
842be5a9cc
commit
9836bc0296
6 changed files with 66 additions and 24 deletions
2
common
2
common
|
@ -1 +1 @@
|
|||
Subproject commit 0c35a58b79b00726d13675b7a6231dd35bf62a20
|
||||
Subproject commit 3a4beccee89f42a85b175b5557205d9ab756bfb5
|
|
@ -88,10 +88,14 @@ public:
|
|||
int check();
|
||||
|
||||
/** Initialize after parsing the configuration file. */
|
||||
void prepare();
|
||||
void start();
|
||||
void stop();
|
||||
void run();
|
||||
|
||||
void preparePaths();
|
||||
void prepareNodes();
|
||||
|
||||
void startPaths();
|
||||
void startNodes();
|
||||
void startNodeTypes();
|
||||
|
|
|
@ -98,6 +98,8 @@ int node_prepare(struct node *n)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
n->state = STATE_PREPARED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -220,7 +222,7 @@ int node_start(struct node *n)
|
|||
{
|
||||
int ret;
|
||||
|
||||
assert(n->state == STATE_CHECKED);
|
||||
assert(n->state == STATE_PREPARED);
|
||||
assert(node_type(n)->state == STATE_STARTED);
|
||||
|
||||
info("Starting node %s", node_name_long(n));
|
||||
|
|
|
@ -287,6 +287,8 @@ int path_prepare(struct path *p)
|
|||
return ret;
|
||||
}
|
||||
|
||||
p->state = STATE_PREPARED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -528,7 +530,7 @@ int path_start(struct path *p)
|
|||
int ret;
|
||||
char *mode, *mask;
|
||||
|
||||
assert(p->state == STATE_CHECKED);
|
||||
assert(p->state == STATE_PREPARED);
|
||||
|
||||
switch (p->mode) {
|
||||
case PATH_MODE_ANY: mode = "any"; break;
|
||||
|
|
|
@ -356,18 +356,12 @@ void SuperNode::startNodes()
|
|||
for (size_t i = 0; i < vlist_length(&nodes); i++) {
|
||||
auto *n = (struct node *) vlist_at(&nodes, i);
|
||||
|
||||
ret = node_prepare(n);
|
||||
if (ret)
|
||||
throw RuntimeError("Failed to prepare node: {}", node_name(n));
|
||||
if (!node_is_enabled(n))
|
||||
continue;
|
||||
|
||||
int refs = vlist_count(&paths, (cmp_cb_t) path_uses_node, n);
|
||||
if (refs > 0) {
|
||||
ret = node_start(n);
|
||||
if (ret)
|
||||
throw RuntimeError("Failed to start node: {}", node_name(n));
|
||||
}
|
||||
else
|
||||
logger->warn("No path is using the node {}. Skipping...", node_name(n));
|
||||
ret = node_start(n);
|
||||
if (ret)
|
||||
throw RuntimeError("Failed to start node: {}", node_name(n));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -378,20 +372,59 @@ void SuperNode::startPaths()
|
|||
for (size_t i = 0; i < vlist_length(&paths); i++) {
|
||||
auto *p = (struct path *) vlist_at(&paths, i);
|
||||
|
||||
if (p->enabled) {
|
||||
ret = path_prepare(p);
|
||||
if (ret)
|
||||
throw RuntimeError("Failed to prepare path: {}", path_name(p));
|
||||
if (!path_is_enabled(p))
|
||||
continue;
|
||||
|
||||
ret = path_start(p);
|
||||
if (ret)
|
||||
throw RuntimeError("Failed to start path: {}", path_name(p));
|
||||
}
|
||||
else
|
||||
logger->warn("Path {} is disabled. Skipping...", path_name(p));
|
||||
ret = path_start(p);
|
||||
if (ret)
|
||||
throw RuntimeError("Failed to start path: {}", path_name(p));
|
||||
}
|
||||
}
|
||||
|
||||
void SuperNode::prepareNodes()
|
||||
{
|
||||
int ret, refs;
|
||||
|
||||
for (size_t i = 0; i < vlist_length(&nodes); i++) {
|
||||
auto *n = (struct node *) vlist_at(&nodes, i);
|
||||
|
||||
refs = vlist_count(&paths, (cmp_cb_t) path_uses_node, n);
|
||||
if (refs <= 0) {
|
||||
logger->warn("No path is using the node {}. Skipping...", node_name(n));
|
||||
n->enabled = false;
|
||||
}
|
||||
|
||||
if (!node_is_enabled(n))
|
||||
continue;
|
||||
|
||||
ret = node_prepare(n);
|
||||
if (ret)
|
||||
throw RuntimeError("Failed to prepare node: {}", node_name(n));
|
||||
}
|
||||
}
|
||||
|
||||
void SuperNode::preparePaths()
|
||||
{
|
||||
int ret;
|
||||
|
||||
for (size_t i = 0; i < vlist_length(&paths); i++) {
|
||||
auto *p = (struct path *) vlist_at(&paths, i);
|
||||
|
||||
if (!path_is_enabled(p))
|
||||
continue;
|
||||
|
||||
ret = path_prepare(p);
|
||||
if (ret)
|
||||
throw RuntimeError("Failed to prepare path: {}", path_name(p));
|
||||
}
|
||||
}
|
||||
|
||||
void SuperNode::prepare()
|
||||
{
|
||||
prepareNodes();
|
||||
preparePaths();
|
||||
}
|
||||
|
||||
void SuperNode::start()
|
||||
{
|
||||
int ret;
|
||||
|
|
|
@ -184,6 +184,7 @@ int main(int argc, char *argv[])
|
|||
if (ret)
|
||||
throw RuntimeError("Failed to verify configuration");
|
||||
|
||||
sn.prepare();
|
||||
sn.start();
|
||||
sn.run();
|
||||
sn.stop();
|
||||
|
|
Loading…
Add table
Reference in a new issue