We don't wait for dynamic nodes when the dataflow is done otherwise, so they might stop after the dataflow is done. This commit fixes a daemon error that happened in this case.
Instead of running all the build commands directly, run them on their intended target machines through the coordinator.
This commit is a breaking change because a coordinator connection is now required for `dora build`.
Spawn nodes one-by-one instead of doing it concurrently. Subsequent nodes might want to reuse git repos or build artifacts of previous nodes. Spawning them in parallel might lead to conflicts and errors (e.g. because a git repo reuse is handled before a git clone or because some build command is not concurrency-safe).
Send an exit message from the daemon to the coordinator on exit. This enables the coordinator to disconnect the daemon properly instead of waiting for a missed heartbeat signal.
We need to loop over the nodes twice because the subscription setup requires full mapping info. Otherwise some subscriptions might be missing when we process the target node before the source node.
The previous machine ID is still used, but optional. Users don't need to ensure that the chosen machine IDs are unique anymore because they are augmented with a UUID.
The daemon tries to connect to the coordinator before it starts up. During that time, it didn't listen for ctrl-c signals yet. This commit fixes this limitation by checking for ctrl-c events during the event stream setup too.
Runs a dataflow locally, without requiring any any daemon or coordinator
processes. Multi-machine dataflows are not supported. The default log
level is set to `INFO`, overwriting it is possible by setting the
`RUST_LOG` environment variable.
This exposes the internal `dora daemon --run-dataflow` command that we
use for testing.
This addition was proposed in
https://github.com/orgs/dora-rs/discussions/698#discussioncomment-11125465
.
The second commit adds a ctrl-c handler. On first ctrl-c, we send a stop
command to all nodes. On second ctrl-c, we exit immediately and kill all
spawned nodes. On third ctrl-c, we abort the process directly without
waiting (child processes keep running).
Make `dora-message` a dependency of `dora-core`, instead of the other way around. This way, we can continue to freely bump the version of `dora-core` with the other workspace crates, without introducing errors such as #708.
On first ctrl-c, send a stop command to all nodes. On second ctrl-c, exit immediately and kill all spawned nodes. On third ctrl-c, abort the process directly without waiting (child processes keep running).
This change affects both `dora run` and `dora daemon` commands.