mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-12-01 07:41:07 +01:00
WIP/MAJOR: stick-tables: Stop to store remote session in the stick-table updates tree
This commit is contained in:
parent
2a1e55fe47
commit
6485418925
@ -622,9 +622,8 @@ 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.
|
||||||
*/
|
*/
|
||||||
@ -632,20 +631,12 @@ void stktable_touch_with_exp(struct stktable *t, struct stksess *ts, int 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) {
|
if (did_append) {
|
||||||
HA_ATOMIC_INC(&ts->ref_cnt);
|
HA_ATOMIC_INC(&ts->ref_cnt);
|
||||||
tasklet_wakeup(t->updt_task);
|
tasklet_wakeup(t->updt_task);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (decrefcnt)
|
if (decrefcnt)
|
||||||
HA_ATOMIC_DEC(&ts->ref_cnt);
|
HA_ATOMIC_DEC(&ts->ref_cnt);
|
||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user