TODO handle unknown components to interrupt the network start and give back appropriate error
DONE for counter: close the IIP port once the IIP has been delivered -> enable signaling using closure of the input -> component decides if it should keep running or if closure of input means "nothing more to do, let's finish up" -> cascades -> auto-finish of the network.
DONE enable benchmark network from Go flowd version with 1M lines fileread -> splitlines -> count -> display.
DONE benchmark the benchmark network from Go flowd.
DONE detect that all components have exited (watchdog)
[WARN ] process FileReader_esf9s failed to respond within 1000ms!
thread 'watchdog' panicked at 'cloud not send ping: SendError { .. }', flowd-rs/src/main.rs:1883:51
DONE detect that all processes have exited
TODO generally for components: Handling of shutting down a sub-thread in components.
Currently, this is clumsy because the sub-thread often blocks but then wont respond to signals via a signal channel. Currently thinking about using Linux tgkill() syscall to kill component sub-threads.
but how does mdns-sd crate responder.shutdown() handle this? it works well.
TODO change watchdog thread to handle closed signal channels and exited components, which were used one-off to provide configuration input, for example:
TODO change stop() to handle that some processes have already exited:
check mqttpublisher remaining eventloop iter() thread after its main thread has shut down
TODO handle shutdown already recognized by watchdog, but then status is still running - which should not be. And when trying to stop it, it says SendError (situation handling above when some or all processes have exited already - handling closed signal channel).
TODO adjust stop() accordingly to handle that processes have exited (will still try to signal and join the exited threads)
probably need to adjust runtime data struct and serde annotations