Skip to content

Commit 25a918c

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 25a918c

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

src/ngx_http_lua_upstream_module.c

+18-6
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;
@@ -360,9 +366,10 @@ ngx_http_lua_upstream_set_peer_down(lua_State * L)
360366
static ngx_http_upstream_rr_peer_t *
361367
ngx_http_lua_upstream_lookup_peer(lua_State *L)
362368
{
363-
int id, backup;
369+
int id, backup, i;
364370
ngx_str_t host;
365371
ngx_http_upstream_srv_conf_t *us;
372+
ngx_http_upstream_rr_peer_t *peer;
366373
ngx_http_upstream_rr_peers_t *peers;
367374

368375
host.data = (u_char *) luaL_checklstring(L, 1, &host.len);
@@ -400,7 +407,12 @@ ngx_http_lua_upstream_lookup_peer(lua_State *L)
400407
return NULL;
401408
}
402409

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

406418

0 commit comments

Comments
 (0)