On Mon, Jul 24, 2023 at 05:24:04AM +0100, J Carter wrote: [..]
> # HG changeset patch > # User J Carter <jordanc.car...@outlook.com> > # Date 1690171706 -3600 > # Mon Jul 24 05:08:26 2023 +0100 > # Node ID ea91b9aa69d8ce9dc9878209a83b7d538e6bc7e1 > # Parent 77c1418916f7817a0d020f28d8a08f278a12fe43 > Added debug_random directive This line needs a prefix, for example: Events: debug_random directive. See "hg log" for common prefixes used in nginx commits. > More bug fixes and style changes. > > diff -r 77c1418916f7 -r ea91b9aa69d8 src/event/ngx_event.c > --- a/src/event/ngx_event.c Thu Jun 08 14:58:01 2023 +0400 > +++ b/src/event/ngx_event.c Mon Jul 24 05:08:26 2023 +0100 > @@ -30,6 +30,8 @@ > static char *ngx_event_use(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); > static char *ngx_event_debug_connection(ngx_conf_t *cf, ngx_command_t *cmd, > void *conf); > +static char *ngx_event_debug_random(ngx_conf_t *cf, ngx_command_t *cmd, > + void *conf); > > static void *ngx_event_core_create_conf(ngx_cycle_t *cycle); > static char *ngx_event_core_init_conf(ngx_cycle_t *cycle, void *conf); > @@ -162,6 +164,13 @@ > 0, > NULL }, > > + { ngx_string("debug_random"), > + NGX_EVENT_CONF|NGX_CONF_TAKE1, > + ngx_event_debug_random, > + 0, > + 0, > + NULL }, > + > ngx_null_command > }; > > @@ -496,6 +505,7 @@ > size_t size, cl; > ngx_shm_t shm; > ngx_time_t *tp; > + ngx_cidr_t *cidr; > ngx_core_conf_t *ccf; > ngx_event_conf_t *ecf; > > @@ -507,6 +517,33 @@ > "using the \"%s\" event method", ecf->name); > } > > + if (ecf->debug_connection.nelts == 0 > + && ecf->debug_scaled_pct > 0) > + { > + cidr = ngx_array_push(&ecf->debug_connection); > + if (cidr == NULL) { > + return NGX_ERROR; > + } > + /*0.0.0.0/0*/ > + ngx_memzero(cidr, sizeof(ngx_cidr_t)); > + cidr->family = AF_INET; > + > +#ifdef NGX_HAVE_INET6 > + cidr = ngx_array_push(&ecf->debug_connection); > + if (cidr == NULL) { > + return NGX_ERROR; > + } > + /*::/0*/ > + ngx_memzero(cidr, sizeof(ngx_cidr_t)); > + cidr->family = AF_INET6; > +#endif > + > + } else if (ecf->debug_connection.nelts > 0 > + && ecf->debug_scaled_pct == 0) > + { > + ecf->debug_scaled_pct = NGX_MAX_INT32_VALUE; > + } > + Why do we need this code? It looks to me like everything can be done in ngx_debug_accepted_connection(). > ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); > > ngx_timer_resolution = ccf->timer_resolution; > @@ -1254,6 +1291,55 @@ > } > > > +static char * > +ngx_event_debug_random(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) > +{ > +#if (NGX_DEBUG) > + ngx_event_conf_t *ecf = conf; > + > + u_char *c; > + ngx_int_t pct; > + ngx_uint_t len; > + ngx_str_t *value; > + > + if (ecf->debug_scaled_pct != NGX_CONF_UNSET_UINT) { > + return "is duplicate"; > + } > + > + value = cf->args->elts; > + c = value[1].data; > + len = value[1].len; > + > + if (c[len-1] != '%') { > + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, > + "%V missing '%%'", > + &value[1]); > + return NGX_CONF_ERROR; > + } > + > + pct = ngx_atofp(c, len-1, 2); > + > + if (pct == NGX_ERROR || pct == 0 || pct > 9999) { > + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, > + "%V is an invalid value", > + &value[1]); > + return NGX_CONF_ERROR; > + } > + > + ecf->debug_scaled_pct = NGX_MAX_INT32_VALUE / 10000 * pct; We already have a similar handler that parses percent argument, see ngx_stream_split_clients(). Style-wise it's a good idea to follow the style/naming of existing code. Also, why not store 0-10000 value range in configuration and use ngx_random() % 10000 in runtime? > +#else > + > + ngx_conf_log_error(NGX_LOG_WARN, cf, 0, > + "\"debug_random\" is ignored, you need to rebuild " > + "nginx using --with-debug option to enable it"); > + > +#endif > + > + return NGX_CONF_OK; > +} > + > + > static void * > ngx_event_core_create_conf(ngx_cycle_t *cycle) > { > @@ -1279,6 +1365,8 @@ > return NULL; > } > > + ecf->debug_scaled_pct = NGX_CONF_UNSET_UINT; > + > #endif > > return ecf; > @@ -1369,5 +1457,7 @@ > ngx_conf_init_value(ecf->accept_mutex, 0); > ngx_conf_init_msec_value(ecf->accept_mutex_delay, 500); > > + ngx_conf_init_uint_value(ecf->debug_scaled_pct, 0); > + > return NGX_CONF_OK; > } > diff -r 77c1418916f7 -r ea91b9aa69d8 src/event/ngx_event.h > --- a/src/event/ngx_event.h Thu Jun 08 14:58:01 2023 +0400 > +++ b/src/event/ngx_event.h Mon Jul 24 05:08:26 2023 +0100 > @@ -438,6 +438,7 @@ > u_char *name; > > #if (NGX_DEBUG) > + ngx_uint_t debug_scaled_pct; > ngx_array_t debug_connection; > #endif > } ngx_event_conf_t; > diff -r 77c1418916f7 -r ea91b9aa69d8 src/event/ngx_event_accept.c > --- a/src/event/ngx_event_accept.c Thu Jun 08 14:58:01 2023 +0400 > +++ b/src/event/ngx_event_accept.c Mon Jul 24 05:08:26 2023 +0100 > @@ -523,6 +523,7 @@ > struct sockaddr_in6 *sin6; > ngx_uint_t n; > #endif > + ngx_uint_t r = ngx_random(); Style: we do not initialize non-static local variables like that. Instead, a variable is initialized explicitly in the code after declaration. > > cidr = ecf->debug_connection.elts; > for (i = 0; i < ecf->debug_connection.nelts; i++) { > @@ -548,6 +549,7 @@ > > #if (NGX_HAVE_UNIX_DOMAIN) > case AF_UNIX: > + r = 0; > break; > #endif > > @@ -561,7 +563,10 @@ > break; > } > > - c->log->log_level = NGX_LOG_DEBUG_CONNECTION|NGX_LOG_DEBUG_ALL; > + if (r <= ecf->debug_scaled_pct) { > + c->log->log_level = NGX_LOG_DEBUG_CONNECTION|NGX_LOG_DEBUG_ALL; > + } > + > break; > > next: > > _______________________________________________ > nginx-devel mailing list > nginx-devel@nginx.org > https://mailman.nginx.org/mailman/listinfo/nginx-devel -- Roman Arutyunyan _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel