Commit Graph
3 Commits
Author SHA1 Message Date
Marc Schier 9cbed0ef03 Fix PrioritizedChannel polyfill missing Count/CanCount overrides (#3748)
The SubscriptionManager publish worker calls m_acks.Reader.Count outside
its inner try block. On runtimes that fall back to the PrioritizedChannel
polyfill (net48), the base ChannelReader<T>.Count throws
NotSupportedException because PrioritizedReader did not override
CanCount/Count.

Result: every publish worker iteration crashed immediately at
GetAcksReadyToSend, the worker task completed, the controller
recreated the worker, and the cycle repeated as a tight loop.
This prevented any actual publish from happening and caused
integration tests that wait for subscription data to time out:
  - SubscriptionRecoversAfterAutomaticReconnect
  - SubscriptionRecoversAfterFailover
  - TransferSubscriptionsKeepsV2SubscriptionWorkingAfterReconnect
  - BuilderTransferSubscriptionsOnRecreateOptInAppliesToV2Manager

The framework's UnboundedPrioritizedChannel<T> reader (used on
.NET 9+) overrides Count to expose the underlying queue count;
the polyfill must do the same.

Added a regression test ReaderSupportsCount.
2026-05-11 14:52:59 +02:00
Marc Schier 13612c03b9 Fix CreateInstanceOf<X> access restrictions emission and PrioritizedChannel polyfill TryRead bug (#3747) 2026-05-09 20:35:00 +02:00
Marc Schier bd4543e961 ManagedSession, Pluggable Subscription engine, and fluent builder + DI (#3730)
- Add new managed session, wrapping session and providing connection management and failover handling
- Add new Subscription engine that can act as alternative to current engine, but is based on channels with worker tasks
- Add a fluent builder for managed session clients
- Replace NodeCache with LruNodeCache, rename ILruNodeCache and LruNodeCache to INodeCache and NodeCache
- Update migration guide and document new functionality.
2026-05-05 19:09:07 +02:00