Flags used as context to know current status of each table pushing a
full resync to a peer were correctly reset receiving a new resync
request or confirmation message but in case of local peer sync during
reload the resync request is implicit and those flags were not
correctly reset in this case.
This could result to a partial initial resync of some tables after reload
if the connection with the old process was broken and retried.
This patch reset those flags at the end of the handshake for all new
connections to be sure to push a entire full resync if needed.
This patch should be backported on all supported branches ( v >= 1.6 )
(cherry picked from commit
1a6b43e13eeb4872dff9944064ddadc1ceb5178f)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit
5c88077c8a7f5b2819d5d196e4a822028cbabeac)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit
382967794171147b1c1e5ca90dd37722146cdc29)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
if ((int)(st->table->localupdate - st->update) < 0)
st->update = st->table->localupdate + (2147483648U);
st->teaching_origin = st->last_pushed = st->update;
+ st->flags = 0;
if ((int)(st->last_pushed - st->table->commitupdate) > 0)
st->table->commitupdate = st->last_pushed;
HA_SPIN_UNLOCK(STK_TABLE_LOCK, &st->table->lock);
if ((int)(st->table->localupdate - st->update) < 0)
st->update = st->table->localupdate + (2147483648U);
st->teaching_origin = st->last_pushed = st->update;
+ st->flags = 0;
if ((int)(st->last_pushed - st->table->commitupdate) > 0)
st->table->commitupdate = st->last_pushed;
HA_SPIN_UNLOCK(STK_TABLE_LOCK, &st->table->lock);