Skip to content

Wire broker readiness notifications#992

Open
wdcui wants to merge 15 commits into
uliteboxfrom
wdcui/ulitebox/broker-notification-runtime
Open

Wire broker readiness notifications#992
wdcui wants to merge 15 commits into
uliteboxfrom
wdcui/ulitebox/broker-notification-runtime

Conversation

@wdcui

@wdcui wdcui commented Jul 1, 2026

Copy link
Copy Markdown
Member

Summary

  • add paired broker host serving over control and notification channels, with no control-only serving path
  • add BrokerNotifications for local notification receipt
  • wire broker-userland and the Linux userland runner through paired --broker-control-socket / --broker-notification-socket Unix endpoints
  • keep event mutation readiness in the control response and avoid duplicate notifications for those control-originated changes

Notes

  • keeps BrokerCore/BrokerSession transport-neutral
  • keeps blocking broker-backed eventfd dispatch for a later PR; the runner opens and receives the notification stream so broker-originated wakeups have a real local endpoint
  • current event readiness changes all originate from control requests, so there is no runtime readiness notification emission yet

Validation

  • cargo test -p litebox_broker_host
  • cargo test -p litebox_broker_userland -p litebox_runner_linux_userland --test run test_runner_broker_integration_with_rewriter
  • cargo test -p litebox_broker_userland
  • cargo clippy -p litebox_broker_userland -p litebox_runner_linux_userland --all-targets --all-features -- -D warnings
wdcui and others added 15 commits June 30, 2026 22:01
Add a paired host-side notification serving path that preserves control request/response sequencing while sending event readiness notifications over the notification channel. Add a broker-local notification receiver and a Unix-socket runtime test covering host emission through local consumption.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rename generic control-channel parameters from Channel to ControlChannel so the host adapter remains consistent now that paired notification channels are part of the API.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove the control-only host serving path and route broker userland and runner integration through paired control and notification sockets. Keep the runner-side notification channel open with a receiver loop so host readiness notifications have a real local endpoint before eventfd blocking dispatch is added.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rename the mandatory paired control/notification host serving entry point to serve_connection now that notification channels are no longer optional.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use an explicit shared ChannelError generic for paired control and notification channels so their host serving bounds stay symmetric.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Route readiness notifications through per-association host connection state instead of passing the notification channel directly through the request loop. This makes the notification channel the connection-owned broker notification path and keeps room for future notifications that are not direct request-loop side effects.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Move readiness notification emission into the broker host event request handler so successful event state mutations trigger notifications at the event handling boundary rather than as request-loop postprocessing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Do not emit readiness notifications for event mutations whose control responses already carry the resulting readiness state. Keep the paired notification channel mandatory so broker-originated readiness updates without a paired control response have a channel when those sources are added.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update the broker host readiness-response test to drive the public paired serve_connection API. The fake channel now queues Add and Consume requests after observing the broker-assigned create handle.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fold the private serve_request_loop helper into serve_connection now that tests exercise the public paired serving entry point directly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rename the hidden runner control-channel argument from --broker-socket to --broker-control-socket so it matches the paired --broker-notification-socket argument.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rename the retained notification receiver thread handle to notification_receiver_thread and document that it is intentionally kept alive with the broker connection.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the tuple match in runner broker connection setup with straightforward early returns while preserving errors for mismatched control and notification socket arguments.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Make runner broker::connect take concrete control and notification socket paths. The CLI layer now handles optional broker enablement and validates that hidden broker socket arguments are provided as a pair.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace separate control and notification socket retry loops with one connect_with_retry helper parameterized by the channel-specific connect operation and timeout message.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown

🤖 SemverChecks 🤖 ⚠️ Potential breaking API changes detected ⚠️

Click for details
--- failure function_parameter_count_changed: pub fn parameter count changed ---

Description:
A publicly-visible function now takes a different number of parameters.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/function_parameter_count_changed.ron

Failed in:
  litebox_broker_host::serve_connection now takes 3 parameters instead of 2, in /home/runner/work/litebox/litebox/litebox_broker_host/src/lib.rs:38

--- failure function_requires_different_generic_type_params: function now requires a different number of generic type parameters ---

Description:
A function now requires a different number of generic type parameters than it used to. Uses of this function that supplied the previous number of generic types (e.g. via turbofish syntax) will be broken.
        ref: https://doc.rust-lang.org/reference/items/generics.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/function_requires_different_generic_type_params.ron

Failed in:
  function serve_connection (1 -> 3 generic types) in /home/runner/work/litebox/litebox/litebox_broker_host/src/lib.rs:38

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field CliArgs.broker_control_socket in /home/runner/work/litebox/litebox/litebox_runner_linux_userland/src/lib.rs:91
  field CliArgs.broker_notification_socket in /home/runner/work/litebox/litebox/litebox_runner_linux_userland/src/lib.rs:101

--- failure struct_pub_field_missing: pub struct's pub field removed or renamed ---

Description:
A publicly-visible struct has at least one public field that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/struct_pub_field_missing.ron

Failed in:
  field broker_socket of struct CliArgs, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-ulitebox/b951fc08b4c905beb3bb5d2f5a5e0248363ac9ff/litebox_runner_linux_userland/src/lib.rs:91
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant