]> Kevux Git Server - fll/commit
Progress: redesign processing logic to accommodate different process Rule Actions...
authorKevin Day <thekevinday@gmail.com>
Fri, 23 Apr 2021 01:49:21 +0000 (20:49 -0500)
committerKevin Day <thekevinday@gmail.com>
Fri, 23 Apr 2021 03:25:42 +0000 (22:25 -0500)
commitb3886b81006d75c436b50073ad6481590334c303
tree43e6ff0c5b9f63cdce38a39e5452e9dbedc3801e
parent1c3f44f123802ab9f8e462f7a86c95f230d53d63
Progress: redesign processing logic to accommodate different process Rule Actions and update dependency design accordingly.

When I implemented the "exit" support (opposite of an "entry") I noticed a oversight in the design whereas there was no way to distinguish between a process that successfully started via the "entry" or the "exit".
Change the design to now utilize unique Rule Processes for each Rule Action requested.

This required further changes to the status handling.
A rule status is now an array of all possible Rule Actions.
This is utilized using a static array for simplicity purposes (there is no need for a dynamic array here).

All of the recent changes introduced a lot more complex code.
There are now helper functions to help facility common tasks.
This should also make updating easier as there is only one place to update.
The downside is the introduction of an additional function call (which is a tiny runtime cost).

To facility this new design, the Rule files must also be aware of the different Rule Actions.
The "need", "want", and "wish" have been relocated into a new Rule Action called "on".
Additional parameters for an "on" allow for describing the Rule Action in which the dependency applies to.
This allows, for example, a "stop" Action to operate in a different order than a "start" Action.
An example of this is provided.
Look at the data/settings/example/rules/serial/*.rule files.

An example syntax is:
  on start need serial s_1
  on stop need serial s_3

When validate is passed, do not wait for asynchronous processes because they are not run.
Normally this is not noticeable but is exposed when 'script/fail' failed to execute and return ('script/fail' should execute, fail, and return).
This bug is caused by the wait functions not checking to see if the caller is the same as the current process (it was waiting for itself).
This may have been introduced as a result of the redesign.
26 files changed:
level_3/controller/c/private-common.c
level_3/controller/c/private-common.h
level_3/controller/c/private-controller.c
level_3/controller/c/private-controller.h
level_3/controller/c/private-rule.c
level_3/controller/c/private-rule.h
level_3/controller/data/settings/example/exits/serial.exit
level_3/controller/data/settings/example/rules/asynchronous/sleep_1.rule
level_3/controller/data/settings/example/rules/asynchronous/sleep_2.rule
level_3/controller/data/settings/example/rules/asynchronous/sleep_3.rule
level_3/controller/data/settings/example/rules/command/multiple.rule
level_3/controller/data/settings/example/rules/script/fail.rule
level_3/controller/data/settings/example/rules/serial/s_1.rule
level_3/controller/data/settings/example/rules/serial/s_2.rule
level_3/controller/data/settings/example/rules/serial/s_3.rule
level_3/controller/data/settings/example/rules/serial/s_4.rule
level_3/controller/data/settings/example/rules/serial/s_5.rule
level_3/controller/data/settings/example/rules/serial/s_6.rule
level_3/controller/data/settings/rules/boot/devices.rule
level_3/controller/data/settings/rules/boot/modules.rule
level_3/controller/data/settings/rules/net/loopback.rule
level_3/controller/documents/entry.txt
level_3/controller/documents/exit.txt
level_3/controller/documents/rule.txt
level_3/controller/documents/time.txt
level_3/controller/specifications/rule.txt