def __init__(self, hs: "synapse.server.HomeServer"): self.hs = hs self.server_name = hs.hostname self.store = hs.get_datastore() self.state = hs.get_state_handler() self.clock = hs.get_clock() self.is_mine_id = hs.is_mine_id self._transaction_manager = TransactionManager(hs) # map from destination to PerDestinationQueue self._per_destination_queues = { } # type: Dict[str, PerDestinationQueue] LaterGauge( "synapse_federation_transaction_queue_pending_destinations", "", [], lambda: sum(1 for d in self._per_destination_queues.values() if d.transmission_loop_running), ) # Map of user_id -> UserPresenceState for all the pending presence # to be sent out by user_id. Entries here get processed and put in # pending_presence_by_dest self.pending_presence = {} # type: Dict[str, UserPresenceState] LaterGauge( "synapse_federation_transaction_queue_pending_pdus", "", [], lambda: sum(d.pending_pdu_count() for d in self._per_destination_queues.values()), ) LaterGauge( "synapse_federation_transaction_queue_pending_edus", "", [], lambda: sum(d.pending_edu_count() for d in self._per_destination_queues.values()), ) self._order = 1 self._is_processing = False self._last_poked_id = -1 self._processing_pending_presence = False # map from room_id to a set of PerDestinationQueues which we believe are # awaiting a call to flush_read_receipts_for_room. The presence of an entry # here for a given room means that we are rate-limiting RR flushes to that room, # and that there is a pending call to _flush_rrs_for_room in the system. self._queues_awaiting_rr_flush_by_room = ( {}) # type: Dict[str, Set[PerDestinationQueue]] self._rr_txn_interval_per_room_ms = ( 1000.0 / hs.config.federation_rr_transactions_per_room_per_second)
def __init__(self, hs: "HomeServer"): self.hs = hs self.server_name = hs.hostname self.store = hs.get_datastore() self.state = hs.get_state_handler() self.clock = hs.get_clock() self.is_mine_id = hs.is_mine_id self._transaction_manager = TransactionManager(hs) self._instance_name = hs.get_instance_name() self._federation_shard_config = hs.config.worker.federation_shard_config # map from destination to PerDestinationQueue self._per_destination_queues = { } # type: Dict[str, PerDestinationQueue] LaterGauge( "synapse_federation_transaction_queue_pending_destinations", "", [], lambda: sum(1 for d in self._per_destination_queues.values() if d.transmission_loop_running), ) # Map of user_id -> UserPresenceState for all the pending presence # to be sent out by user_id. Entries here get processed and put in # pending_presence_by_dest self.pending_presence = {} # type: Dict[str, UserPresenceState] LaterGauge( "synapse_federation_transaction_queue_pending_pdus", "", [], lambda: sum(d.pending_pdu_count() for d in self._per_destination_queues.values()), ) LaterGauge( "synapse_federation_transaction_queue_pending_edus", "", [], lambda: sum(d.pending_edu_count() for d in self._per_destination_queues.values()), ) self._is_processing = False self._last_poked_id = -1 self._processing_pending_presence = False # map from room_id to a set of PerDestinationQueues which we believe are # awaiting a call to flush_read_receipts_for_room. The presence of an entry # here for a given room means that we are rate-limiting RR flushes to that room, # and that there is a pending call to _flush_rrs_for_room in the system. self._queues_awaiting_rr_flush_by_room = ( {}) # type: Dict[str, Set[PerDestinationQueue]] self._rr_txn_interval_per_room_ms = ( 1000.0 / hs.config.federation_rr_transactions_per_room_per_second) # wake up destinations that have outstanding PDUs to be caught up self._catchup_after_startup_timer = self.clock.call_later( CATCH_UP_STARTUP_DELAY_SEC, run_as_background_process, "wake_destinations_needing_catchup", self._wake_destinations_needing_catchup, ) self._external_cache = hs.get_external_cache()