mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-11 23:04:52 +09:00
A subscribe arrives as a request, so the source address the subscription controller handles it with carries the request id used to route the response back to the caller. That address was stored verbatim as the destination for the subscription, so every event broadcast to it, and the replay event sent when the subscription is created, went out addressed to a request that had long since been answered. A request id identifies one request in flight and has no meaning on an event. The receiving link keys response routing off it, so events carrying one are put through paths meant for response traffic. Strip the request id when taking the subscription's destination from the request that created it. Add Address.withoutRequestId for that, as the same address is used in three places here. The subscription map is keyed on addressIndex, which already excludes the request id, so subscriptions were never duplicated by this and only the address events are sent to was wrong. Fixes #847 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>