Skip to content

Conversation

@lhoward
Copy link
Contributor

@lhoward lhoward commented Dec 1, 2025

We are seeing a number of state machine issues with stream persistence in the following topology:

XMOS listener <-> OpenSRP <-> Extreme x460 <-> MOTU 16A (2025)

This PR tracks fixes for them.

@lhoward lhoward force-pushed the x460-interop-issue branch 4 times, most recently from 8702180 to 5924f73 Compare December 1, 2025 06:13
@lhoward lhoward force-pushed the x460-interop-issue branch 3 times, most recently from bcb7247 to 33368db Compare December 1, 2025 22:38
@lhoward lhoward self-assigned this Dec 1, 2025
@lhoward lhoward added the bug Something isn't working label Dec 1, 2025
@lhoward lhoward added this to the firsttenbeta milestone Dec 1, 2025
@lhoward lhoward force-pushed the x460-interop-issue branch 17 times, most recently from 06c1b4a to f0241d7 Compare December 2, 2025 06:03
@lhoward lhoward force-pushed the x460-interop-issue branch from f0241d7 to 594e098 Compare December 2, 2025 06:28
…teners

When a TalkerFailed attribute is received from an upstream bridge and local
listeners exist, the merged listener declaration must be listenerAskingFailed
regardless of the current listener states.
* when leaveNow() is called, it should behave as if the leavetimer has
  immediately expired (35.2.6)
* always GC attributes after running the state machine handler
* _findRegisteredAttributes() returns an array of registered attributes
  matching the specified filter
* remove application event handlers, this can be handled inside the
  {join,leave}Indicated notification functions
* ensure rLA state machine run after processing inbound LA PDU
* fix transmission opportunity requests to be state-driven (note:
 point-to-point optimization will need to be re-added at some point)
* isolate registrar and applicant handlers to participant's actor
The _updateExistingListeners function accommodates the race condition where
listeners arrive before talkers, but it did not guard against the opposite race
where a talker arrives and then immediately departs before port parameters can
be updated.
The mutual exclusion logic for ensuring only one talker attribute type
(talkerAdvertise or talkerFailed) exists per stream appeared in two locations
with nearly identical code: once when handling peer events and once when
propagating to other ports. This change extracts the common pattern into a
private _enforceTalkerMutualExclusion helper function that handles both
deregister (for peer events) and leave (for propagation) operations.
The _findTalkerRegistration(for:) method that searches across all participants
was declared as throwing but never actually throws any errors, instead
returning nil when no talker is found.
@lhoward lhoward force-pushed the x460-interop-issue branch from 51af223 to 1a0d43f Compare December 8, 2025 00:21
@lhoward lhoward merged commit b6a30fb into main Dec 8, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants