commit dbc9ff6: [Fix] Fix round-robin rotation
Vsevolod Stakhov
vsevolod at highsecure.ru
Thu Feb 18 21:07:07 UTC 2021
Author: Vsevolod Stakhov
Date: 2021-02-18 21:00:56 +0000
URL: https://github.com/rspamd/rspamd/commit/dbc9ff655dfb459eb8af328a82a5b8c848cda480 (HEAD -> master)
[Fix] Fix round-robin rotation
---
src/libutil/upstream.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/libutil/upstream.c b/src/libutil/upstream.c
index 6acf420ea..612354043 100644
--- a/src/libutil/upstream.c
+++ b/src/libutil/upstream.c
@@ -1378,13 +1378,20 @@ rspamd_upstream_get_round_robin (struct upstream_list *ups,
}
}
- if (up->checked * (up->errors + 1) < min_checked) {
+ /*
+ * This code is used when all upstreams have zero weight
+ * The logic is to select least currently used upstream and penalise
+ * upstream with errors. The error penalty should no be too high
+ * to avoid sudden traffic drop in this case.
+ */
+ if (up->checked + up->errors * 2 < min_checked) {
min_checked_sel = up;
min_checked = up->checked;
}
}
if (max_weight == 0) {
+ /* All upstreams have zero weight */
if (min_checked > G_MAXUINT / 2) {
/* Reset all checked counters to avoid overflow */
for (i = 0; i < ups->alive->len; i ++) {
More information about the Commits
mailing list