Skip to content

Commit 6a9cffe

Browse files
committed
Iterate peers as linked list instead of array
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.
1 parent 6ebcda3 commit 6a9cffe

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

src/ngx_http_lua_upstream_module.c

+18-5
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ ngx_http_lua_upstream_get_primary_peers(lua_State * L)
252252
ngx_str_t host;
253253
ngx_uint_t i;
254254
ngx_http_upstream_rr_peers_t *peers;
255+
ngx_http_upstream_rr_peer_t *peer;
255256
ngx_http_upstream_srv_conf_t *us;
256257

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

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

280-
for (i = 0; i < peers->number; i++) {
281-
ngx_http_lua_get_peer(L, &peers->peer[i], i);
281+
i = 0;
282+
for (peer = peers->peer; peer != NULL; peer = peer->next) {
283+
ngx_http_lua_get_peer(L, peer, i);
282284
lua_rawseti(L, -2, i + 1);
285+
i++;
283286
}
284287

285288
return 1;
@@ -292,6 +295,7 @@ ngx_http_lua_upstream_get_backup_peers(lua_State * L)
292295
ngx_str_t host;
293296
ngx_uint_t i;
294297
ngx_http_upstream_rr_peers_t *peers;
298+
ngx_http_upstream_rr_peer_t *peer;
295299
ngx_http_upstream_srv_conf_t *us;
296300

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

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

326-
for (i = 0; i < peers->number; i++) {
327-
ngx_http_lua_get_peer(L, &peers->peer[i], i);
330+
i = 0;
331+
for (peer = peers->peer; peer != NULL; peer = peer->next) {
332+
ngx_http_lua_get_peer(L, peer, i);
328333
lua_rawseti(L, -2, i + 1);
334+
i++;
329335
}
330336

331337
return 1;
@@ -361,8 +367,10 @@ static ngx_http_upstream_rr_peer_t *
361367
ngx_http_lua_upstream_lookup_peer(lua_State *L)
362368
{
363369
int id, backup;
370+
ngx_uint_t i;
364371
ngx_str_t host;
365372
ngx_http_upstream_srv_conf_t *us;
373+
ngx_http_upstream_rr_peers_t *peer;
366374
ngx_http_upstream_rr_peers_t *peers;
367375

368376
host.data = (u_char *) luaL_checklstring(L, 1, &host.len);
@@ -400,7 +408,12 @@ ngx_http_lua_upstream_lookup_peer(lua_State *L)
400408
return NULL;
401409
}
402410

403-
return &peers->peer[id];
411+
peer = peers->peer;
412+
for (i = 0; i < id; i++) {
413+
peer = peers->next;
414+
}
415+
416+
return peer;
404417
}
405418

406419

0 commit comments

Comments
 (0)