3.2 KiB
ADDED Requirements
Requirement: Host registration and heartbeat sync
The system SHALL provide a DevicePool that tracks a HostRegistration (host id, address, last-seen timestamp) for each host process that registers itself, and SHALL update a host's last-seen timestamp whenever that host pushes a device snapshot via sync_host_devices(host_id, snapshot).
Scenario: New host registers and syncs devices
- WHEN a previously-unknown
host_idcallssync_host_deviceswith a list of devices - THEN the pool creates a new
HostRegistrationfor that host, records the current time as its last-seen timestamp, and stores each synced device as aPooledDeviceowned by that host
Scenario: Known host re-syncs
- WHEN an already-registered
host_idcallssync_host_devicesagain with an updated device snapshot - THEN the pool updates that host's last-seen timestamp and replaces its previously-stored
PooledDevicerecords with the new snapshot, without duplicating or losing devices from other hosts
Requirement: Aggregated device listing across hosts
The system SHALL provide a way to list all PooledDevice records across every registered host, including each device's owning host_id, driver_type, status, and capability tags.
Scenario: Listing devices across multiple hosts
- WHEN two hosts have each synced a non-empty device snapshot
- THEN a caller listing pool devices sees devices from both hosts in one combined result, each tagged with its correct
host_id
Scenario: No hosts registered
- WHEN a caller lists pool devices before any host has ever synced
- THEN the pool returns an empty list rather than raising an error
Requirement: Stale host devices degrade to unreachable
The system SHALL mark all PooledDevices belonging to a host unreachable once that host's last-seen timestamp exceeds a configured staleness threshold, computed at read time, without requiring any background process and without raising an error for the stale host's absence.
Scenario: Host misses its sync interval
- WHEN a host's last-seen timestamp is older than
config.stale_after_secondsat the time of alist_devices()/get_device()call - THEN every
PooledDeviceowned by that host is reported with statusunreachable, regardless of the status value in its last-synced snapshot
Scenario: Host resumes syncing after being stale
- WHEN a host previously marked stale calls
sync_host_devicesagain - THEN its devices immediately stop being reported
unreachableand reflect the statuses in the new snapshot
Requirement: Device lookup by id across the pool
The system SHALL allow looking up a single PooledDevice by device_id regardless of which host owns it, returning a clear not-found result when no host has ever reported that device id.
Scenario: Lookup finds device on any host
- WHEN a caller requests a device by id that exists in some host's synced snapshot
- THEN the pool returns that
PooledDeviceincluding its owninghost_id
Scenario: Lookup for unknown device id
- WHEN a caller requests a device by id that no host has ever synced
- THEN the pool returns a not-found result (e.g.
None) rather than raising an unhandled exception