From 55482913956581223dc9b54e480675610e2e177e Mon Sep 17 00:00:00 2001 From: Emeric Brun Date: Mon, 22 Jan 2018 15:10:08 +0100 Subject: [PATCH] BUG/MEDIUM: peers: fix expire date wasn't updated if entry is modified remotely. The stktable_touch_remote considers the expire field stored in the stksess struct. The expire field was updated on the a newly created stksess to store. But if the stksess with a same key is still present the expire was not updated. This patch postpones the update of the expire field of the stksess just before processing the "touch". These bug was introduced in commit: MEDIUM: threads/stick-tables: handle multithreads on stick tables. And the fix should be backported on 1.8. --- src/peers.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/peers.c b/src/peers.c index 988cd71e9..c56ed3afc 100644 --- a/src/peers.c +++ b/src/peers.c @@ -1195,9 +1195,7 @@ switchstate: newts = stksess_new(st->table, NULL); if (!newts) goto ignore_msg; - /* Force expiratiion to remote date - in case of first insert */ - newts->expire = tick_add(now_ms, expire); + if (st->table->type == SMP_T_STR) { unsigned int to_read, to_store; @@ -1351,6 +1349,9 @@ switchstate: } } + /* Force new expiration */ + ts->expire = tick_add(now_ms, expire); + HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock); stktable_touch_remote(st->table, ts, 1);