WIP/MAJOR: stick-tables: Stop to store remote session in the stick-table updates tree

This commit is contained in:
Christopher Faulet 2025-11-18 11:57:19 +01:00
parent 2a1e55fe47
commit 6485418925

View File

@ -622,29 +622,20 @@ void stktable_touch_with_exp(struct stktable *t, struct stksess *ts, int local,
stktable_requeue_exp(t, ts); stktable_requeue_exp(t, ts);
} }
/* If sync is enabled */ /* If sync is enabled and the session is local */
if (t->sync_task) { if (t->sync_task && local) {
if (local) { /* Check if this entry is not in the tree or not
/* Check if this entry is not in the tree or not * scheduled for at least one peer.
* scheduled for at least one peer. */
*/ if (!ts->upd.node.leaf_p || _HA_ATOMIC_LOAD(&ts->seen) || !ts->updt_is_local) {
if (!ts->upd.node.leaf_p || _HA_ATOMIC_LOAD(&ts->seen) || !ts->updt_is_local) { _HA_ATOMIC_STORE(&ts->updt_is_local, 1);
_HA_ATOMIC_STORE(&ts->updt_is_local, 1); did_append = MT_LIST_TRY_APPEND(&t->pend_updts[tgid - 1], &ts->pend_updts);
did_append = MT_LIST_TRY_APPEND(&t->pend_updts[tgid - 1], &ts->pend_updts);
}
}
else {
if (!ts->upd.node.leaf_p) {
_HA_ATOMIC_STORE(&ts->updt_is_local, 0);
did_append = MT_LIST_TRY_APPEND(&t->pend_updts[tgid - 1], &ts->pend_updts);
}
} }
} if (did_append) {
HA_ATOMIC_INC(&ts->ref_cnt);
if (did_append) { tasklet_wakeup(t->updt_task);
HA_ATOMIC_INC(&ts->ref_cnt); }
tasklet_wakeup(t->updt_task);
} }
if (decrefcnt) if (decrefcnt)
@ -828,7 +819,7 @@ struct task *stktable_add_pend_updates(struct task *t, void *ctx, unsigned int s
{ {
struct stktable *table = ctx; struct stktable *table = ctx;
struct eb32_node *eb; struct eb32_node *eb;
int i = 0, is_local, cur_tgid = tgid - 1, empty_tgid = 0; int i = 0, cur_tgid = tgid - 1, empty_tgid = 0;
/* we really don't want to wait on this one */ /* we really don't want to wait on this one */
if (HA_RWLOCK_TRYWRLOCK(STK_TABLE_LOCK, &table->updt_lock) != 0) if (HA_RWLOCK_TRYWRLOCK(STK_TABLE_LOCK, &table->updt_lock) != 0)
@ -847,19 +838,15 @@ struct task *stktable_add_pend_updates(struct task *t, void *ctx, unsigned int s
break; break;
continue; continue;
} }
BUG_ON(!stksess->updt_is_local);
cur_tgid++; cur_tgid++;
empty_tgid = 0; empty_tgid = 0;
if (cur_tgid == global.nbtgroups) if (cur_tgid == global.nbtgroups)
cur_tgid = 0; cur_tgid = 0;
is_local = stksess->updt_is_local;
stksess->seen = 0; stksess->seen = 0;
if (is_local) { stksess->upd.key = ++table->update;
stksess->upd.key = ++table->update; table->localupdate = table->update;
table->localupdate = table->update; eb32_delete(&stksess->upd);
eb32_delete(&stksess->upd);
} else {
stksess->upd.key = (++table->update) + (2147483648U);
}
/* even though very unlikely, it seldom happens that the entry /* even though very unlikely, it seldom happens that the entry
* is already in the tree (both for local and remote ones). We * is already in the tree (both for local and remote ones). We