]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: stick-tables: fix the task's next expiration date
authorWilly Tarreau <w@1wt.eu>
Fri, 12 Apr 2024 07:57:32 +0000 (09:57 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 12 Apr 2024 15:58:54 +0000 (17:58 +0200)
While changing the stick-table indexing that led to commit 1a088da7c
("MAJOR: stktable: split the keys across multiple shards to reduce
contention"), I met a problem with the task's expiration date being
incorrectly updated, I fixed it and apparently I committed the wrong
version :-/

The effect is that the task's date is only correctly reset if the
table is empty, otherwise the task wakes up again and is queued at
the previous date, eating 100% CPU. The tick_isfirst() must not be
used when storing the last result.

No backport is needed as this was only merged in 3.0-dev7.

src/stick_table.c

index debec567cff6aca2bf76588b094a051a8eacb6be..0a0012978132bb306315b192233e9981855620e0 100644 (file)
@@ -903,7 +903,7 @@ struct task *process_table_expire(struct task *task, void *context, unsigned int
         * were to update with TICK_ETERNITY.
         */
        HA_RWLOCK_WRLOCK(STK_TABLE_LOCK, &t->lock);
-       task->expire = tick_first(task->expire, task_exp);
+       task->expire = task_exp;
        HA_RWLOCK_WRUNLOCK(STK_TABLE_LOCK, &t->lock);
 
        return task;