Make the federation server ratelimiting configurable.

This commit is contained in:
Erik Johnston 2015-03-02 11:33:45 +00:00
parent 0554d07082
commit 9d9b230501
2 changed files with 41 additions and 5 deletions

View File

@ -22,6 +22,12 @@ class RatelimitConfig(Config):
self.rc_messages_per_second = args.rc_messages_per_second self.rc_messages_per_second = args.rc_messages_per_second
self.rc_message_burst_count = args.rc_message_burst_count self.rc_message_burst_count = args.rc_message_burst_count
self.federation_rc_window_size = args.federation_rc_window_size
self.federation_rc_sleep_limit = args.federation_rc_sleep_limit
self.federation_rc_sleep_delay = args.federation_rc_sleep_delay
self.federation_rc_reject_limit = args.federation_rc_reject_limit
self.federation_rc_concurrent = args.federation_rc_concurrent
@classmethod @classmethod
def add_arguments(cls, parser): def add_arguments(cls, parser):
super(RatelimitConfig, cls).add_arguments(parser) super(RatelimitConfig, cls).add_arguments(parser)
@ -34,3 +40,33 @@ class RatelimitConfig(Config):
"--rc-message-burst-count", type=float, default=10, "--rc-message-burst-count", type=float, default=10,
help="number of message a client can send before being throttled" help="number of message a client can send before being throttled"
) )
rc_group.add_argument(
"--federation-rc-window-size", type=int, default=10000,
help="The federation window size in milliseconds",
)
rc_group.add_argument(
"--federation-rc-sleep-limit", type=int, default=10,
help="The number of federation requests from a single server"
" in a window before the server will delay processing the"
" request.",
)
rc_group.add_argument(
"--federation-rc-sleep-delay", type=int, default=500,
help="The duration in milliseconds to delay processing events from"
" remote servers by if they go over the sleep limit.",
)
rc_group.add_argument(
"--federation-rc-reject-limit", type=int, default=50,
help="The maximum number of concurrent federation requests allowed"
" from a single server",
)
rc_group.add_argument(
"--federation-rc-concurrent", type=int, default=3,
help="The number of federation requests to concurrently process"
" from a single server",
)

View File

@ -66,9 +66,9 @@ class TransportLayer(TransportLayerServer, TransportLayerClient):
self.ratelimiter = FederationRateLimiter( self.ratelimiter = FederationRateLimiter(
self.clock, self.clock,
window_size=10000, window_size=homeserver.config.federation_rc_window_size,
sleep_limit=10, sleep_limit=homeserver.config.federation_rc_sleep_limit,
sleep_msec=500, sleep_msec=homeserver.config.federation_rc_sleep_delay,
reject_limit=50, reject_limit=homeserver.config.federation_rc_reject_limit,
concurrent_requests=3, concurrent_requests=homeserver.config.federation_rc_concurrent,
) )