mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-28 08:43:36 +00:00
BUG/MEDIUM: peers: fix some track counter rules dont register entries for sync.
This BUG was introduced with: 'MEDIUM: threads/stick-tables: handle multithreads on stick tables' The API was reviewed to handle stick table entry updates asynchronously and the caller must now call a 'stkable_touch_*' function each time the content of an entry is modified to register the entry to be synced. There was missing call to stktable_touch_* resulting in not propagated entries to remote peers (or local one during reload)
This commit is contained in:
parent
872855998b
commit
0fed0b0a38
@ -62,6 +62,9 @@ static inline void session_store_counters(struct session *sess)
|
||||
stktable_data_cast(ptr, conn_cur)--;
|
||||
|
||||
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
|
||||
|
||||
/* If data was modified, we need to touch to re-schedule sync */
|
||||
stktable_touch_local(stkctr->table, ts, 0);
|
||||
}
|
||||
|
||||
stkctr_set_entry(stkctr, NULL);
|
||||
|
@ -107,6 +107,9 @@ static inline void stream_store_counters(struct stream *s)
|
||||
stktable_data_cast(ptr, conn_cur)--;
|
||||
|
||||
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
|
||||
|
||||
/* If data was modified, we need to touch to re-schedule sync */
|
||||
stktable_touch_local(s->stkctr[i].table, ts, 0);
|
||||
}
|
||||
stkctr_set_entry(&s->stkctr[i], NULL);
|
||||
stksess_kill_if_expired(s->stkctr[i].table, ts, 1);
|
||||
@ -142,6 +145,9 @@ static inline void stream_stop_content_counters(struct stream *s)
|
||||
stktable_data_cast(ptr, conn_cur)--;
|
||||
|
||||
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
|
||||
|
||||
/* If data was modified, we need to touch to re-schedule sync */
|
||||
stktable_touch_local(s->stkctr[i].table, ts, 0);
|
||||
}
|
||||
stkctr_set_entry(&s->stkctr[i], NULL);
|
||||
stksess_kill_if_expired(s->stkctr[i].table, ts, 1);
|
||||
@ -174,6 +180,9 @@ static inline void stream_start_counters(struct stktable *t, struct stksess *ts)
|
||||
ts->expire = tick_add(now_ms, MS_TO_TICKS(t->expire));
|
||||
|
||||
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
|
||||
|
||||
/* If data was modified, we need to touch to re-schedule sync */
|
||||
stktable_touch_local(t, ts, 0);
|
||||
}
|
||||
|
||||
/* Enable tracking of stream counters as <stkctr> on stksess <ts>. The caller is
|
||||
@ -221,6 +230,9 @@ static void inline stream_inc_http_req_ctr(struct stream *s)
|
||||
stkctr->table->data_arg[STKTABLE_DT_HTTP_REQ_RATE].u, 1);
|
||||
|
||||
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
|
||||
|
||||
/* If data was modified, we need to touch to re-schedule sync */
|
||||
stktable_touch_local(stkctr->table, ts, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -255,6 +267,9 @@ static void inline stream_inc_be_http_req_ctr(struct stream *s)
|
||||
stkctr->table->data_arg[STKTABLE_DT_HTTP_REQ_RATE].u, 1);
|
||||
|
||||
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
|
||||
|
||||
/* If data was modified, we need to touch to re-schedule sync */
|
||||
stktable_touch_local(stkctr->table, ts, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -293,6 +308,9 @@ static void inline stream_inc_http_err_ctr(struct stream *s)
|
||||
stkctr->table->data_arg[STKTABLE_DT_HTTP_ERR_RATE].u, 1);
|
||||
|
||||
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
|
||||
|
||||
/* If data was modified, we need to touch to re-schedule sync */
|
||||
stktable_touch_local(stkctr->table, ts, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2754,6 +2754,9 @@ resume_execution:
|
||||
t->data_arg[STKTABLE_DT_HTTP_REQ_RATE].u, 1);
|
||||
|
||||
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
|
||||
|
||||
/* If data was modified, we need to touch to re-schedule sync */
|
||||
stktable_touch_local(t, ts, 0);
|
||||
}
|
||||
|
||||
stkctr_set_flags(&s->stkctr[trk_idx(rule->action)], STKCTR_TRACK_CONTENT);
|
||||
@ -3054,6 +3057,9 @@ resume_execution:
|
||||
|
||||
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
|
||||
|
||||
/* If data was modified, we need to touch to re-schedule sync */
|
||||
stktable_touch_local(t, ts, 0);
|
||||
|
||||
stkctr_set_flags(&s->stkctr[trk_idx(rule->action)], STKCTR_TRACK_CONTENT);
|
||||
if (sess->fe != s->be)
|
||||
stkctr_set_flags(&s->stkctr[trk_idx(rule->action)], STKCTR_TRACK_BACKEND);
|
||||
|
Loading…
Reference in New Issue
Block a user