Ab.Transport: CipConnection/DeviceSessionPool test gaps and CIP-level close detection #566

Closed
opened 2026-10-07 19:02:13 -04:00 by dohertj2 · 1 comment
Owner

Context: native .NET Allen-Bradley transport work (plan docs/plans/2026-10-07-native-ab-transport.md, branch feat/native-ab-transport, not yet merged). Parked as a Minor during per-task review — none of these block the plan.

CipConnection / DeviceSessionPool follow-ups:

  • No dedicated tests for: the scheduler-dispose-throws guard, dispose-during-connect, the abandoned-open observer.
  • Releasing a lease can wait up to OpenBudget (~21 s) behind an in-flight shared open.
  • No explicit handling of a target-closed CIP connection while TCP stays up — recovery relies on the next request faulting the client. Consider detecting the CIP-level close (e.g. connection-timeout status) and recycling proactively.
  • The test-only open-attempt budget is process-wide; a per-DeviceKey scope would be cleaner.
Context: native .NET Allen-Bradley transport work (plan `docs/plans/2026-10-07-native-ab-transport.md`, branch `feat/native-ab-transport`, not yet merged). Parked as a Minor during per-task review — none of these block the plan. `CipConnection` / `DeviceSessionPool` follow-ups: - [ ] No dedicated tests for: the scheduler-dispose-throws guard, dispose-during-connect, the abandoned-open observer. - [ ] Releasing a lease can wait up to `OpenBudget` (~21 s) behind an in-flight shared open. - [ ] No explicit handling of a target-closed CIP connection while TCP stays up — recovery relies on the next request faulting the client. Consider detecting the CIP-level close (e.g. connection-timeout status) and recycling proactively. - [ ] The test-only open-attempt budget is process-wide; a per-`DeviceKey` scope would be cleaner.
dohertj2 added the driver/abcipdriver/ablegacy labels 2026-10-07 19:02:13 -04:00
Author
Owner

Fixed: tests for scheduler-dispose-throws, dispose-during-connect, abandoned-open observer; lease-release-behind-open resolved by #579 (ReleaseInBackground) with a test; CIP-level close (0x01/0x0107, 0x0203) on a request or keep-alive now recycles the session proactively; open-attempt budget is per-device and scoped. Residual: which status a real Logix returns (vs dropping TCP) is unobserved — both are handled. (merge e5fe2e55 on master, pushed 2026-10-08)

Fixed: tests for scheduler-dispose-throws, dispose-during-connect, abandoned-open observer; lease-release-behind-open resolved by #579 (ReleaseInBackground) with a test; CIP-level close (0x01/0x0107, 0x0203) on a request or keep-alive now recycles the session proactively; open-attempt budget is per-device and scoped. Residual: which status a real Logix returns (vs dropping TCP) is unobserved — both are handled. (merge `e5fe2e55` on master, pushed 2026-10-08)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#566