mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 15:17:01 +02:00
BUG/MAJOR: queue: properly keep count of the queue length
The queue length was moved to its own variable in commit 583303c48
("MINOR: proxies/servers: Calculate queueslength and use it."), however a
few places were missed in pendconn_unlink() and assign_server_and_queue()
resulting in never decreasing counts on aborted streams. This was
reproduced when injecting more connections than the total backend
could stand in TCP mode and letting some of them time out in the
queue. No backport is needed, this is only 3.2.
This commit is contained in:
parent
6be02d1c6e
commit
099c1b2442
@ -1141,6 +1141,12 @@ int assign_server_and_queue(struct stream *s)
|
||||
HA_SPIN_UNLOCK(QUEUE_LOCK, &p->queue->lock);
|
||||
|
||||
_HA_ATOMIC_DEC(&p->queue->length);
|
||||
|
||||
if (p->queue->sv)
|
||||
_HA_ATOMIC_DEC(&p->queue->sv->queueslength);
|
||||
else
|
||||
_HA_ATOMIC_DEC(&p->queue->px->queueslength);
|
||||
|
||||
_HA_ATOMIC_INC(&p->queue->idx);
|
||||
_HA_ATOMIC_DEC(&s->be->totpend);
|
||||
|
||||
|
@ -197,10 +197,14 @@ void pendconn_unlink(struct pendconn *p)
|
||||
|
||||
if (done) {
|
||||
oldidx -= p->queue_idx;
|
||||
if (sv)
|
||||
if (sv) {
|
||||
p->strm->logs.srv_queue_pos += oldidx;
|
||||
else
|
||||
_HA_ATOMIC_DEC(&sv->queueslength);
|
||||
}
|
||||
else {
|
||||
p->strm->logs.prx_queue_pos += oldidx;
|
||||
_HA_ATOMIC_DEC(&px->queueslength);
|
||||
}
|
||||
|
||||
_HA_ATOMIC_DEC(&q->length);
|
||||
_HA_ATOMIC_DEC(&px->totpend);
|
||||
|
Loading…
Reference in New Issue
Block a user