Zenoh put/get race condition in Elixir causes stale reads 3.9% of the time
A developer experimenting with Zenoh's put/get storage feature via Elixir bindings (Zenohex) discovered a read-after-write race condition where a get issued immediately after a put occasionally returns a stale value. In a 2,000-iteration test loop, roughly 78 reads (3.9%) retrieved outdated data, though querying again just ~1ms later consistently returned the correct value. The root cause is an asymmetry in Zenoh's design: put is fire-and-forget at the NIF level, while get is a true request/response operation, creating a brief window before a write becomes visible. The developer built a workaround called ZenohAckPut — an application-level wrapper that confirms a write by re-querying until the expected value is returned — which eliminated stale reads entirely in the same test. The fix is available as an open-source Elixir module on GitHub, and the author notes the underlying gap remains unresolved upstream in Zenoh itself.
This is an AI-generated summary. ShortSingh links to the original source for the complete article.
Discussion (0)
Log in to join the discussion and vote.
Log in