88 lines
3.2 KiB
Diff
88 lines
3.2 KiB
Diff
|
|
From 4fb445fe5769172354d08f4a726f99e9815494c1 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Olivier Houchard <ohouchard@haproxy.com>
|
||
|
|
Date: Mon, 23 Dec 2024 14:17:25 +0000
|
||
|
|
Subject: [PATCH] BUG/MEDIUM: queue: Make process_srv_queue return the number
|
||
|
|
of streams
|
||
|
|
|
||
|
|
Make process_srv_queue() return the number of streams unqueued, as
|
||
|
|
pendconn_grab_from_px() did, as that number is used by
|
||
|
|
srv_update_status() to generate logs.
|
||
|
|
|
||
|
|
This should be backported up to 2.6 with
|
||
|
|
111ea83ed4e13ac3ab028ed5e95201a1b4aa82b8
|
||
|
|
|
||
|
|
(cherry picked from commit 5b8899b6ccc7dab3a54a51dcb8ba1512bd0c886c)
|
||
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
||
|
|
(cherry picked from commit 70588a16903002709cf3c84255ad8ded73f8e584)
|
||
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
||
|
|
(cherry picked from commit 365378bfdf283650ce1ac152348ca59b6d4c32c1)
|
||
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
||
|
|
|
||
|
|
Conflict:NA
|
||
|
|
Reference:https://git.haproxy.org/?p=haproxy-2.9.git;a=patch;h=4fb445fe5769172354d08f4a726f99e9815494c1
|
||
|
|
---
|
||
|
|
include/haproxy/queue.h | 2 +-
|
||
|
|
src/queue.c | 3 ++-
|
||
|
|
src/server.c | 4 ++--
|
||
|
|
3 files changed, 5 insertions(+), 4 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/include/haproxy/queue.h b/include/haproxy/queue.h
|
||
|
|
index e4201fb..4896f71 100644
|
||
|
|
--- a/include/haproxy/queue.h
|
||
|
|
+++ b/include/haproxy/queue.h
|
||
|
|
@@ -34,7 +34,7 @@ extern struct pool_head *pool_head_pendconn;
|
||
|
|
|
||
|
|
struct pendconn *pendconn_add(struct stream *strm);
|
||
|
|
int pendconn_dequeue(struct stream *strm);
|
||
|
|
-void process_srv_queue(struct server *s);
|
||
|
|
+int process_srv_queue(struct server *s);
|
||
|
|
unsigned int srv_dynamic_maxconn(const struct server *s);
|
||
|
|
int pendconn_redistribute(struct server *s);
|
||
|
|
int pendconn_grab_from_px(struct server *s);
|
||
|
|
diff --git a/src/queue.c b/src/queue.c
|
||
|
|
index 7555e2d..b93edf2 100644
|
||
|
|
--- a/src/queue.c
|
||
|
|
+++ b/src/queue.c
|
||
|
|
@@ -354,7 +354,7 @@ static int pendconn_process_next_strm(struct server *srv, struct proxy *px, int
|
||
|
|
/* Manages a server's connection queue. This function will try to dequeue as
|
||
|
|
* many pending streams as possible, and wake them up.
|
||
|
|
*/
|
||
|
|
-void process_srv_queue(struct server *s)
|
||
|
|
+int process_srv_queue(struct server *s)
|
||
|
|
{
|
||
|
|
struct server *ref = s->track ? s->track : s;
|
||
|
|
struct proxy *p = s->proxy;
|
||
|
|
@@ -413,6 +413,7 @@ void process_srv_queue(struct server *s)
|
||
|
|
if (p->lbprm.server_take_conn)
|
||
|
|
p->lbprm.server_take_conn(s);
|
||
|
|
}
|
||
|
|
+ return done;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* Adds the stream <strm> to the pending connection queue of server <strm>->srv
|
||
|
|
diff --git a/src/server.c b/src/server.c
|
||
|
|
index 512fecd..cc2311a 100644
|
||
|
|
--- a/src/server.c
|
||
|
|
+++ b/src/server.c
|
||
|
|
@@ -6012,7 +6012,7 @@ static int _srv_update_status_op(struct server *s, enum srv_op_st_chg_cause caus
|
||
|
|
/* check if we can handle some connections queued.
|
||
|
|
* We will take as many as we can handle.
|
||
|
|
*/
|
||
|
|
- process_srv_queue(s);
|
||
|
|
+ xferred = process_srv_queue(s);
|
||
|
|
|
||
|
|
tmptrash = alloc_trash_chunk();
|
||
|
|
if (tmptrash) {
|
||
|
|
@@ -6198,7 +6198,7 @@ static int _srv_update_status_adm(struct server *s, enum srv_adm_st_chg_cause ca
|
||
|
|
/* check if we can handle some connections queued.
|
||
|
|
* We will take as many as we can handle.
|
||
|
|
*/
|
||
|
|
- process_srv_queue(s);
|
||
|
|
+ xferred = process_srv_queue(s);
|
||
|
|
}
|
||
|
|
else if (s->next_admin & SRV_ADMF_MAINT) {
|
||
|
|
/* remaining in maintenance mode, let's inform precisely about the
|
||
|
|
--
|
||
|
|
1.7.10.4
|
||
|
|
|