Welcome! Log In Create A New Profile

Advanced

[PATCH] Add the configurable try number for binding

Xingyuan
April 16, 2017 10:58PM
# HG changeset patch
# User Xingyuan <winshining@163.com>
# Date 1492252474 -28800
# Node ID 302e24fbe01d2e20bc8519d9dad71acee6540530
# Parent be5cfa918bfc07f378c8f905e5e9349f1825c268
Add the configurable try number for binding.

The try number of binding now can be specified in nginx.conf, for example:

bind_tries 20;

With it, there can be enough time that when the new nginx process is being
started while the old one is still running, we can do something, kill it
for example, instead of waiting for a so short time that new one exceeds
the try number and exits.

diff -r be5cfa918bfc -r 302e24fbe01d src/core/nginx.c
--- a/src/core/nginx.c Tue Apr 11 03:13:46 2017 +0200
+++ b/src/core/nginx.c Sat Apr 15 18:34:34 2017 +0800
@@ -25,6 +25,8 @@
void *conf);
static char *ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static char *ngx_set_bind_tries(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static char *ngx_load_module(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
#if (NGX_HAVE_DLOPEN)
static void ngx_unload_module(void *data);
@@ -82,6 +84,13 @@
0,
NULL },

+ { ngx_string("bind_tries"),
+ NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
+ ngx_set_bind_tries,
+ 0,
+ 0,
+ NULL },
+
{ ngx_string("debug_points"),
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
ngx_conf_set_enum_slot,
@@ -1029,6 +1038,8 @@
ccf->rlimit_nofile = NGX_CONF_UNSET;
ccf->rlimit_core = NGX_CONF_UNSET;

+ ccf->bind_tries = NGX_CONF_UNSET;
+
ccf->user = (ngx_uid_t) NGX_CONF_UNSET_UINT;
ccf->group = (ngx_gid_t) NGX_CONF_UNSET_UINT;

@@ -1055,6 +1066,8 @@
ngx_conf_init_value(ccf->worker_processes, 1);
ngx_conf_init_value(ccf->debug_points, 0);

+ ngx_conf_init_value(ccf->bind_tries, 5);
+
#if (NGX_HAVE_CPU_AFFINITY)

if (!ccf->cpu_affinity_auto
@@ -1486,6 +1499,37 @@


static char *
+ngx_set_bind_tries(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ ngx_str_t *value;
+ ngx_core_conf_t *ccf;
+
+ ccf = (ngx_core_conf_t *) conf;
+
+ if (ccf->bind_tries != NGX_CONF_UNSET) {
+ return "is duplicate";
+ }
+
+ value = cf->args->elts;
+
+ ccf->bind_tries = ngx_atoi(value[1].data, value[1].len);
+
+ if (ccf->bind_tries == NGX_ERROR) {
+ return "invalid value";
+ }
+
+ if (ccf->bind_tries <= 0) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "\"bind_tries\" directive has an invalid value %d",
+ ccf->bind_tries);
+ return "invalid value";
+ }
+
+ return NGX_CONF_OK;
+}
+
+
+static char *
ngx_load_module(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
#if (NGX_HAVE_DLOPEN)
diff -r be5cfa918bfc -r 302e24fbe01d src/core/ngx_connection.c
--- a/src/core/ngx_connection.c Tue Apr 11 03:13:46 2017 +0200
+++ b/src/core/ngx_connection.c Sat Apr 15 18:34:34 2017 +0800
@@ -386,6 +386,7 @@
ngx_log_t *log;
ngx_socket_t s;
ngx_listening_t *ls;
+ ngx_core_conf_t *ccf;

reuseaddr = 1;
#if (NGX_SUPPRESS_WARN)
@@ -394,9 +395,9 @@

log = cycle->log;

- /* TODO: configurable try number */
+ ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);

- for (tries = 5; tries; tries--) {
+ for (tries = ccf->bind_tries; tries; tries--) {
failed = 0;

/* for each listening socket */
diff -r be5cfa918bfc -r 302e24fbe01d src/core/ngx_cycle.h
--- a/src/core/ngx_cycle.h Tue Apr 11 03:13:46 2017 +0200
+++ b/src/core/ngx_cycle.h Sat Apr 15 18:34:34 2017 +0800
@@ -96,6 +96,8 @@
ngx_int_t rlimit_nofile;
off_t rlimit_core;

+ ngx_int_t bind_tries;
+
int priority;

ngx_uint_t cpu_affinity_auto;
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[PATCH] Add the configurable try number for binding

Xingyuan 312 April 16, 2017 10:58PM

Re: [PATCH] Add the configurable try number for binding

Maxim Dounin 157 April 17, 2017 09:12AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 286
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready