openresty / lua-upstream-nginx-module

Nginx C module to expose Lua API to ngx_lua for Nginx upstreams
500 stars 151 forks source link

get_primary_peers doesn't return name #31

Open r--w opened 8 years ago

r--w commented 8 years ago

Hello, it seems that when "zone" is defined the name filed is returned only for the first peer.

nginx version: ./nginx -v nginx version: openresty/1.9.15.1

upstreams.conf:

upstream http_local { zone local_zone 64k; server 127.0.0.1:80 ; server 127.0.0.2:80 ; keepalive 16; }

access.lua:

log(ERR, cjson.encode(upstream.get_primary_peers(upstream_name))) log(ERR, cjson.encode(upstream.get_servers(upstream_name)))

log.txt:

016/07/19 13:50:00 [error] 80976#0: *92 [lua] access.lua:91: [{"weight":1,"id":0,"conns":0,"fails":0,"current_weight":0,"fail_timeout":10,"effective_weight":1,"name":"127.0.0.1:80","max_fails":1},{"weight":0,"id":1,"conns":0,"fails":0,"current_weight":0,"down":true,"effective_weight":0,"fail_timeout":12,"checked":1.4057793776513e+14,"name":"","maxfails":16}], client: 127.0.0.1, server: , request: "GET /index.php HTTP/1.1", host: "xxxxx"

2016/07/19 13:50:00 [error] 80976#0: *92 [lua] access.lua:92: [{"addr":"127.0.0.1:80","weight":1,"fail_timeout":10,"name":"127.0.0.1:80","max_fails":1},{"addr":"127.0.0.2:80","weight":1,"fail_timeout":10,"name":"127.0.0.2:80","maxfails":1}], client: 127.0.0.1, server: , request: "GET /index.php HTTP/1.1", host: "xxxxx"

As you can see in the first log, the second "name " field is empty. If "zone" definition is removed than the result is ok. In contrast the upstream.get_servers method returns always good results.

This issue affects https://github.com/openresty/lua-resty-upstream-healthcheck

agentzh commented 8 years ago

@r--w Right, the zone directive of the nginx core is relatively new and has not yet supported in this module. Are you willing to contribute a patch for it to speed up the support? Thanks!

r--w commented 8 years ago

I understand, seems that enabling "zone" parameter also couses segmentation faults in workers. Unfortunatelly I don't have requirered C/nginx skills to fix that. I simply stopped using this parameter.

quezacoatl commented 6 years ago

@agentzh Possible to get any pointers on how to fix this issue? I have looked in the code, but have a hard time finding the parsing of upstreams.

thefab commented 5 years ago

+1 => I got some segmentation faults when using "zone" parameter in an upstream with this module

'seems to be fixed with #67 (in my use case)