Skip to content

Commit

Permalink
Iterate peers as linked list instead of array
Browse files Browse the repository at this point in the history
Accessing peers as an array has been deprecated since nginx 1.9.0
(changeset 6100 - http://hg.nginx.org/nginx/rev/c44459611d91) and
does not work when using the "zone" directive in upstream. This commit
changes iteration to use peer->next and iterate as a linked list.
  • Loading branch information
quezacoatl committed Sep 20, 2018
1 parent 6ebcda3 commit 6a9cffe
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions src/ngx_http_lua_upstream_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ ngx_http_lua_upstream_get_primary_peers(lua_State * L)
ngx_str_t host;
ngx_uint_t i;
ngx_http_upstream_rr_peers_t *peers;
ngx_http_upstream_rr_peer_t *peer;
ngx_http_upstream_srv_conf_t *us;

if (lua_gettop(L) != 1) {
Expand All @@ -277,9 +278,11 @@ ngx_http_lua_upstream_get_primary_peers(lua_State * L)

lua_createtable(L, peers->number, 0);

for (i = 0; i < peers->number; i++) {
ngx_http_lua_get_peer(L, &peers->peer[i], i);
i = 0;
for (peer = peers->peer; peer != NULL; peer = peer->next) {
ngx_http_lua_get_peer(L, peer, i);
lua_rawseti(L, -2, i + 1);
i++;
}

return 1;
Expand All @@ -292,6 +295,7 @@ ngx_http_lua_upstream_get_backup_peers(lua_State * L)
ngx_str_t host;
ngx_uint_t i;
ngx_http_upstream_rr_peers_t *peers;
ngx_http_upstream_rr_peer_t *peer;
ngx_http_upstream_srv_conf_t *us;

if (lua_gettop(L) != 1) {
Expand Down Expand Up @@ -323,9 +327,11 @@ ngx_http_lua_upstream_get_backup_peers(lua_State * L)

lua_createtable(L, peers->number, 0);

for (i = 0; i < peers->number; i++) {
ngx_http_lua_get_peer(L, &peers->peer[i], i);
i = 0;
for (peer = peers->peer; peer != NULL; peer = peer->next) {
ngx_http_lua_get_peer(L, peer, i);
lua_rawseti(L, -2, i + 1);
i++;
}

return 1;
Expand Down Expand Up @@ -361,8 +367,10 @@ static ngx_http_upstream_rr_peer_t *
ngx_http_lua_upstream_lookup_peer(lua_State *L)
{
int id, backup;
ngx_uint_t i;
ngx_str_t host;
ngx_http_upstream_srv_conf_t *us;
ngx_http_upstream_rr_peers_t *peer;
ngx_http_upstream_rr_peers_t *peers;

host.data = (u_char *) luaL_checklstring(L, 1, &host.len);
Expand Down Expand Up @@ -400,7 +408,12 @@ ngx_http_lua_upstream_lookup_peer(lua_State *L)
return NULL;
}

return &peers->peer[id];
peer = peers->peer;
for (i = 0; i < id; i++) {
peer = peers->next;
}

return peer;
}


Expand Down

0 comments on commit 6a9cffe

Please sign in to comment.