mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-13 15:53:26 +01:00
Have replication clients remove _INT_STREAM_POS (#15309)
* Have replication clients remove _INT_STREAM_POS Suppose worker A makes an internal http request from worker B. B may make changes that A later learns about over replication. We want A's request to block until it has seen those changes—mainly to ensure A's caches are invalidated promptly. This helps provide read-after-write consistency, eliminating entire categories of races and test flakes. To implement this, B includes a top-level field `_INT_STREAM_POS` in its response JSON. Roughly speaking, the field's value tells A what to wait for. But we weren't removing that internal field before A's request completed! Introduced in https://github.com/matrix-org/synapse/pull/14820. Fixes #15308. * Changelog
This commit is contained in:
parent
72f3f23c4d
commit
1bc9985eb7
2 changed files with 2 additions and 1 deletions
1
changelog.d/15309.bugfix
Normal file
1
changelog.d/15309.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix a bug introduced in Synapse 1.76.0 where responses from worker deployments could include an internal `_INT_STREAM_POS` key.
|
|
@ -345,7 +345,7 @@ class ReplicationEndpoint(metaclass=abc.ABCMeta):
|
||||||
_outgoing_request_counter.labels(cls.NAME, 200).inc()
|
_outgoing_request_counter.labels(cls.NAME, 200).inc()
|
||||||
|
|
||||||
# Wait on any streams that the remote may have written to.
|
# Wait on any streams that the remote may have written to.
|
||||||
for stream_name, position in result.get(
|
for stream_name, position in result.pop(
|
||||||
_STREAM_POSITION_KEY, {}
|
_STREAM_POSITION_KEY, {}
|
||||||
).items():
|
).items():
|
||||||
await replication.wait_for_stream_position(
|
await replication.wait_for_stream_position(
|
||||||
|
|
Loading…
Reference in a new issue