diff options
author | Glenn Strauss <gstrauss@gluelogic.com> | 2017-07-15 00:46:01 -0400 |
---|---|---|
committer | Glenn Strauss <gstrauss@gluelogic.com> | 2017-07-23 19:02:29 -0400 |
commit | b6d08187627021e01173cc129ba7cc790465d5fd (patch) | |
tree | 020d7f66fc6c3d4c65fe8add7719a78c2dd133c9 | |
parent | 45b970e69b144c7eaa5508fbb55728cb7c731caf (diff) | |
download | lighttpd-git-b6d08187627021e01173cc129ba7cc790465d5fd.tar.gz |
[core] spread load on socket backend procs
connection attempts in progress count towards proc load so that bursts
of new connections do not all queue for current least busy proc
(makes a difference only for local backends with more than one proc)
-rw-r--r-- | src/gw_backend.c | 11 | ||||
-rw-r--r-- | src/gw_backend.h | 1 |
2 files changed, 3 insertions, 9 deletions
diff --git a/src/gw_backend.c b/src/gw_backend.c index 0037ed14..c32c70cb 100644 --- a/src/gw_backend.c +++ b/src/gw_backend.c @@ -226,7 +226,6 @@ static int gw_extension_insert(gw_exts *ext, buffer *key, gw_host *fh) { } static void gw_proc_connect_success(server *srv, gw_host *host, gw_proc *proc, int debug) { - gw_proc_load_inc(srv, host, proc); gw_proc_tag_inc(srv, host, proc, CONST_STR_LEN(".connected")); if (debug) { @@ -1105,7 +1104,6 @@ static void handler_ctx_clear(gw_handler_ctx *hctx) { hctx->fd = -1; hctx->fde_ndx = -1; - hctx->got_proc = 0; hctx->reconnects = 0; hctx->request_id = 0; hctx->send_content_body = 1; @@ -1628,11 +1626,7 @@ static void gw_backend_close(server *srv, gw_handler_ctx *hctx) { if (hctx->host) { if (hctx->proc) { - if (hctx->got_proc) { - /* after the connect the process gets a load */ - hctx->got_proc = 0; - gw_proc_release(srv, hctx->host, hctx->proc, hctx->conf.debug); - } + gw_proc_release(srv, hctx->host, hctx->proc, hctx->conf.debug); hctx->proc = NULL; } @@ -1703,6 +1697,8 @@ static handler_t gw_write_request(server *srv, gw_handler_ctx *hctx) { if (proc->load < hctx->proc->load) hctx->proc = proc; } + gw_proc_load_inc(srv, hctx->host, hctx->proc); + hctx->fd = fdevent_socket_nb_cloexec(hctx->host->family,SOCK_STREAM,0); if (-1 == hctx->fd) { if (errno == EMFILE || errno == EINTR) { @@ -1757,7 +1753,6 @@ static handler_t gw_write_request(server *srv, gw_handler_ctx *hctx) { } gw_proc_connect_success(srv, hctx->host, hctx->proc, hctx->conf.debug); - hctx->got_proc = 1; gw_set_state(srv, hctx, GW_STATE_PREPARE_WRITE); /* fall through */ diff --git a/src/gw_backend.h b/src/gw_backend.h index d196939e..2787c97c 100644 --- a/src/gw_backend.h +++ b/src/gw_backend.h @@ -309,7 +309,6 @@ typedef struct gw_handler_ctx { int fde_ndx; /* index into the fd-event buffer */ pid_t pid; - int got_proc; int reconnects; /* number of reconnect attempts */ int request_id; |