pls. help for adding another parameter to ngx_upstream_server

moto kawasaki moto at kawasaki3.org
Fri Nov 15 08:35:39 UTC 2013


Dear Sirs,

Firstly, I'd like to thank you very much for supplying such powerful
and smart software. nginx is so great.


Now, I am struggling to add "setfib=N" parameter to "server" token in
"upstream" clause, and so far failed.

It is really appreciated if you'd advice/suggest/comment on it.
Thank you very very much in advance.

[my environment]
  - FreeBSD 9.2-RELEASE-p0
  - www/nginx (ports), which is nginx-1.4.3.

[my intention]
  - nginx can listen with setfib.
    http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

  - but nginx cannot setfib against upstream/server.
    http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

  - I'd like to add "setfib" parameter, something like below;

      upstream backend {
          server 192.168.1.1:8080 max_fails=3 setfib=5;     # (a)
      } #                                     ^^^^^^^^

[what I did]
  - I made a patch (see attached) but it fails with the following
    emerge message in nginx-error.log.

      [emerg] 3848#0: invalid parameter "setfib=5" in /usr/local/etc/nginx/nginx.conf:18
  
    The line 18 of nginx.conf contains setfib=5 (see (a) above.)

  - printf debugging tells me;

    (1) This emerg log comes from "invalid" clause in function
        ngx_http_upstream_server() at line 4689 of
	ngx_http_upstream.c. (line numbers are AFTER applying attached
	patch.)

          4689 invalid:
          4691     ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
          4692                        "invalid parameter \"%V\"", &value[i]);

        And it is because "uscf->flags" check failed at l.4649.

          4649             if (!(uscf->flags & NGX_HTTP_UPSTREAM_SETFIB)) {
          4650                 goto invalid;
          4651             }

    (2) This "uscf->flags" has been set in the function
        ngx_http_upstream() at line 4434;

          4434     uscf = ngx_http_upstream_add(cf, &u, NGX_HTTP_UPSTREAM_CREATE
          4435                                          |NGX_HTTP_UPSTREAM_WEIGHT
          4436                                          |NGX_HTTP_UPSTREAM_MAX_FAILS
	  4437                                          |NGX_HTTP_UPSTREAM_FAIL_TIMEOUT
	  4438                                          |NGX_HTTP_UPSTREAM_DOWN
	  4439 #if (NGX_HAVE_SETFIB)
	  4440                                          |NGX_HTTP_UPSTREAM_BACKUP
	  4441                                          |NGX_HTTP_UPSTREAM_SETFIB);
	  4442 #else
	  4443                                          |NGX_HTTP_UPSTREAM_BACKUP);
	  4444 #endif /* NGX_HAVE_SETFIB */

        And keep the bit of NGX_HTTP_UPSTREAM_SETFIB as ON, so that the
	uscf->flags=127, until just before the function
	ngx_conf_parse() called.

          4511     rv = ngx_conf_parse(cf, NULL);

        Returning from this function, uscf->flags=31, which means the
	SETFIB bit is OFF, thus check at l.4649 falls into invalid.

[my questions]

Well, I tried but couldn't find out where that bit being set OFF.
So, please tell me the place or how to preserve it.

Also, please advice me whether my logic above is wrong or not, where I
made a mistake, how to achieve setfib option in upstream/server, etc.



Thank you very much.



Best Regards,


-- 
moto kawasaki <moto at kawasaki3.org>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: nginx-upstreamsetfib.patch
Type: text/x-patch
Size: 4186 bytes
Desc: not available
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20131115/57efb65d/attachment.bin>


More information about the nginx-devel mailing list