From a02002dc9915d4f26d374f0784c7cbf916a653b0 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 11 Aug 2020 17:01:49 -0400 Subject: Lower the minimum value for MaxMemInQueues to 64 MB for relays. For clients, there is no minimum value; in both cases, we warn if the value seems too low. Closes ticket 24308. --- src/app/config/config.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'src/app') diff --git a/src/app/config/config.c b/src/app/config/config.c index 8e21d67f23..94971e3bfd 100644 --- a/src/app/config/config.c +++ b/src/app/config/config.c @@ -4585,6 +4585,9 @@ options_validate(or_options_t *old_options, or_options_t *options, STATIC uint64_t compute_real_max_mem_in_queues(const uint64_t val, bool is_server) { +#define MIN_SERVER_MB 64 +#define MIN_UNWARNED_SERVER_MB 256 +#define MIN_UNWARNED_CLIENT_MB 64 uint64_t result; if (val == 0) { @@ -4650,10 +4653,24 @@ compute_real_max_mem_in_queues(const uint64_t val, bool is_server) notice_sent = 1; } return result; - } else if (val < ONE_GIGABYTE / 4) { - log_warn(LD_CONFIG, "MaxMemInQueues must be at least 256 MB for now. " - "Ideally, have it as large as you can afford."); - return ONE_GIGABYTE / 4; + } else if (is_server && val < ONE_MEGABYTE * MIN_SERVER_MB) { + /* We can't configure less than this much on a server. */ + log_warn(LD_CONFIG, "MaxMemInQueues must be at least %d MB on servers " + "for now. Ideally, have it as large as you can afford.", + MIN_SERVER_MB); + return MIN_SERVER_MB * ONE_MEGABYTE; + } else if (is_server && val < ONE_MEGABYTE * MIN_UNWARNED_SERVER_MB) { + /* On a server, if it's less than this much, we warn that things + * may go badly. */ + log_warn(LD_CONFIG, "MaxMemInQueues is set to a low value; if your " + "relay doesn't work, this may be the reason why."); + return val; + } else if (! is_server && val < ONE_MEGABYTE * MIN_UNWARNED_CLIENT_MB) { + /* On a client, if it's less than this much, we warn that things + * may go badly. */ + log_warn(LD_CONFIG, "MaxMemInQueues is set to a low value; if your " + "client doesn't work, this may be the reason why."); + return val; } else { /* The value was fine all along */ return val; -- cgit v1.2.3-54-g00ecf