Skip to content
Snippets Groups Projects
Unverified Commit a7e506dd authored by Erik Johnston's avatar Erik Johnston Committed by GitHub
Browse files

Reduce amount of state we pull out when attempting to send catchup PDUs. (#12963)

* Don't pull out state for catchup

* Newsfile

* Merge newsfile
parent d2fd7f7b
No related branches found
No related tags found
No related merge requests found
Reduce the amount of state we pull from the DB.
...@@ -37,6 +37,7 @@ from synapse.metrics import sent_transactions_counter ...@@ -37,6 +37,7 @@ from synapse.metrics import sent_transactions_counter
from synapse.metrics.background_process_metrics import run_as_background_process from synapse.metrics.background_process_metrics import run_as_background_process
from synapse.types import ReadReceipt from synapse.types import ReadReceipt
from synapse.util.retryutils import NotRetryingDestination, get_retry_limiter from synapse.util.retryutils import NotRetryingDestination, get_retry_limiter
from synapse.visibility import filter_events_for_server
if TYPE_CHECKING: if TYPE_CHECKING:
import synapse.server import synapse.server
...@@ -77,6 +78,7 @@ class PerDestinationQueue: ...@@ -77,6 +78,7 @@ class PerDestinationQueue:
): ):
self._server_name = hs.hostname self._server_name = hs.hostname
self._clock = hs.get_clock() self._clock = hs.get_clock()
self._storage_controllers = hs.get_storage_controllers()
self._store = hs.get_datastores().main self._store = hs.get_datastores().main
self._transaction_manager = transaction_manager self._transaction_manager = transaction_manager
self._instance_name = hs.get_instance_name() self._instance_name = hs.get_instance_name()
...@@ -442,6 +444,12 @@ class PerDestinationQueue: ...@@ -442,6 +444,12 @@ class PerDestinationQueue:
"This should not happen." % event_ids "This should not happen." % event_ids
) )
logger.info(
"Catching up destination %s with %d PDUs",
self._destination,
len(catchup_pdus),
)
# We send transactions with events from one room only, as its likely # We send transactions with events from one room only, as its likely
# that the remote will have to do additional processing, which may # that the remote will have to do additional processing, which may
# take some time. It's better to give it small amounts of work # take some time. It's better to give it small amounts of work
...@@ -487,19 +495,20 @@ class PerDestinationQueue: ...@@ -487,19 +495,20 @@ class PerDestinationQueue:
): ):
continue continue
# Filter out events where the server is not in the room,
# e.g. it may have left/been kicked. *Ideally* we'd pull
# out the kick and send that, but it's a rare edge case
# so we don't bother for now (the server that sent the
# kick should send it out if its online).
hosts = await self._state.get_hosts_in_room_at_events(
p.room_id, [p.event_id]
)
if self._destination not in hosts:
continue
new_pdus.append(p) new_pdus.append(p)
# Filter out events where the server is not in the room,
# e.g. it may have left/been kicked. *Ideally* we'd pull
# out the kick and send that, but it's a rare edge case
# so we don't bother for now (the server that sent the
# kick should send it out if its online).
new_pdus = await filter_events_for_server(
self._storage_controllers,
self._destination,
new_pdus,
redact=False,
)
# If we've filtered out all the extremities, fall back to # If we've filtered out all the extremities, fall back to
# sending the original event. This should ensure that the # sending the original event. This should ensure that the
# server gets at least some of missed events (especially if # server gets at least some of missed events (especially if
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment