Skip to content

Commit 8fc6582

Browse files
committed
add nginx thread pool usage
1 parent eda641e commit 8fc6582

File tree

7 files changed

+396
-188
lines changed

7 files changed

+396
-188
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Add servers directly into `upstream` section is incorrect and you will see fake
4242

4343
## dns_update
4444

45-
|Syntax |dns_update 60s|
45+
|Syntax |dns_update 60s [thread pool]|
4646
|-------|----------------|
4747
|Default|-|
4848
|Context|upstream|

build.sh

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ build_deps=0
1111

1212
DIR="$(pwd)"
1313

14-
VERSION="1.13.6"
15-
PCRE_VERSION="8.39"
16-
LUAJIT_VERSION="2.1.0-beta2"
14+
VERSION="1.15.6"
15+
PCRE_VERSION="8.40"
1716
ZLIB_VERSION="1.2.11"
1817

1918
SUFFIX=""
@@ -48,7 +47,7 @@ fi
4847

4948
function build_luajit() {
5049
echo "Build luajit"
51-
cd LuaJIT-$LUAJIT_VERSION
50+
cd luajit2
5251
make -j1 > /dev/null
5352
r=$?
5453
if [ $r -ne 0 ]; then
@@ -76,6 +75,7 @@ function build_debug() {
7675
$EMBEDDED_OPTS \
7776
--with-stream \
7877
--with-debug \
78+
--with-threads \
7979
--with-cc-opt="-O0" \
8080
--add-module=../ngx_devel_kit \
8181
--add-module=../lua-nginx-module \
@@ -107,6 +107,7 @@ function build_release() {
107107
./configure --prefix="$INSTALL_PREFIX/nginx-$VERSION$SUFFIX" \
108108
$EMBEDDED_OPTS \
109109
--with-stream \
110+
--with-threads \
110111
--add-module=../ngx_devel_kit \
111112
--add-module=../lua-nginx-module \
112113
--add-module=../stream-lua-nginx-module \
@@ -163,15 +164,6 @@ function download_nginx() {
163164
fi
164165
}
165166

166-
function download_luajit() {
167-
if [ $download -eq 1 ] || [ ! -e LuaJIT-$LUAJIT_VERSION.tar.gz ]; then
168-
echo "Download LuaJIT-$LUAJIT_VERSION"
169-
curl -s -L -O http://luajit.org/download/LuaJIT-$LUAJIT_VERSION.tar.gz
170-
else
171-
echo "Get LuaJIT-$LUAJIT_VERSION.tar.gz"
172-
fi
173-
}
174-
175167
function download_pcre() {
176168
if [ $download -eq 1 ] || [ ! -e pcre-$PCRE_VERSION.tar.gz ]; then
177169
echo "Download PCRE-$PCRE_VERSION"
@@ -211,14 +203,14 @@ function download() {
211203

212204
cd download
213205

214-
download_luajit
215206
download_pcre
216207
download_nginx
217208

209+
download_module openresty stream-lua-nginx-module v0.0.6
210+
download_module openresty lua-nginx-module v0.10.14
211+
download_module openresty luajit2 v2.1-agentzh
218212
download_module ZigzagAK ngx_dynamic_upstream master
219-
download_module openresty stream-lua-nginx-module master
220213
download_module simpl ngx_devel_kit master
221-
download_module openresty lua-nginx-module master
222214
download_module openresty lua-cjson master
223215

224216
download_dep http://zlib.net zlib $ZLIB_VERSION tar.gz
@@ -252,8 +244,8 @@ function build() {
252244

253245
build_cJSON
254246

255-
make clean > /dev/null 2>&1
256-
build_debug
247+
# make clean > /dev/null 2>&1
248+
# build_debug
257249

258250
make clean > /dev/null 2>&1
259251
build_release

src/ngx_dynamic_upstream_op.cpp

Lines changed: 32 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,20 @@ extern "C" {
2121

2222
template <class S> static ngx_int_t
2323
ngx_dynamic_upstream_op_add(typename TypeSelect<S>::peers_type *primary,
24-
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool, ngx_log_t *log);
24+
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool,
25+
ngx_pool_t *temp_pool, ngx_log_t *log);
2526

2627

2728
template <class S> static ngx_int_t
2829
ngx_dynamic_upstream_op_sync(typename TypeSelect<S>::peers_type *primary,
29-
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool, ngx_log_t *log);
30+
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool,
31+
ngx_pool_t *temp_pool, ngx_log_t *log);
3032

3133

3234
template <class S> static ngx_int_t
3335
ngx_dynamic_upstream_op_del(typename TypeSelect<S>::peers_type *primary,
34-
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool, ngx_log_t *log);
36+
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool,
37+
ngx_pool_t *temp_pool, ngx_log_t *log);
3538

3639

3740
template <class S> static ngx_int_t
@@ -61,7 +64,7 @@ ngx_shm_calloc(ngx_slab_pool_t *shpool, size_t size = 0)
6164

6265
ngx_int_t
6366
ngx_dynamic_upstream_op_impl(ngx_log_t *log, ngx_dynamic_upstream_op_t *op,
64-
ngx_slab_pool_t *shpool, void *peers)
67+
ngx_slab_pool_t *shpool, ngx_pool_t *temp_pool, void *peers)
6568
{
6669
ngx_int_t rc = NGX_OK;
6770

@@ -71,15 +74,18 @@ ngx_dynamic_upstream_op_impl(ngx_log_t *log, ngx_dynamic_upstream_op_t *op,
7174
switch (op->op) {
7275

7376
case NGX_DYNAMIC_UPSTEAM_OP_ADD:
74-
rc = CALL(ngx_dynamic_upstream_op_add, peers, op, shpool, log);
77+
rc = CALL(ngx_dynamic_upstream_op_add, peers, op, shpool,
78+
temp_pool, log);
7579
break;
7680

7781
case NGX_DYNAMIC_UPSTEAM_OP_REMOVE:
78-
rc = CALL(ngx_dynamic_upstream_op_del, peers, op, shpool, log);
82+
rc = CALL(ngx_dynamic_upstream_op_del, peers, op, shpool,
83+
temp_pool, log);
7984
break;
8085

8186
case NGX_DYNAMIC_UPSTEAM_OP_SYNC:
82-
rc = CALL(ngx_dynamic_upstream_op_sync, peers, op, shpool, log);
87+
rc = CALL(ngx_dynamic_upstream_op_sync, peers, op, shpool,
88+
temp_pool, log);
8389
break;
8490

8591
case NGX_DYNAMIC_UPSTEAM_OP_PARAM:
@@ -365,7 +371,8 @@ ngx_dynamic_upstream_op_add_peer(ngx_log_t *log,
365371
template <class S> static ngx_int_t
366372
ngx_dynamic_upstream_op_add_impl(ngx_log_t *log,
367373
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool,
368-
typename TypeSelect<S>::peers_type *primary, ngx_url_t *u)
374+
ngx_pool_t *temp_pool, typename TypeSelect<S>::peers_type *primary,
375+
ngx_url_t *u)
369376
{
370377
unsigned j;
371378
unsigned count = 0;
@@ -398,7 +405,8 @@ ngx_dynamic_upstream_op_add_impl(ngx_log_t *log,
398405
del_op.server = noaddr;
399406
del_op.name = noaddr;
400407

401-
ngx_dynamic_upstream_op_del<S>(primary, &del_op, shpool, log);
408+
ngx_dynamic_upstream_op_del<S>(primary, &del_op, shpool,
409+
temp_pool, log);
402410
}
403411

404412
op->status = count != 0 ? NGX_HTTP_OK : NGX_HTTP_NOT_MODIFIED;
@@ -407,39 +415,15 @@ ngx_dynamic_upstream_op_add_impl(ngx_log_t *log,
407415
}
408416

409417

410-
struct ngx_pool_auto {
411-
ngx_pool_t *pool;
412-
413-
ngx_pool_auto(ngx_log_t *log)
414-
: pool(ngx_create_pool(ngx_pagesize, log))
415-
{}
416-
417-
~ngx_pool_auto()
418-
{
419-
if (pool != NULL)
420-
ngx_destroy_pool(pool);
421-
}
422-
};
423-
424-
425418
template <class S> static ngx_int_t
426419
ngx_dynamic_upstream_op_add(typename TypeSelect<S>::peers_type *primary,
427-
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool, ngx_log_t *log)
420+
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool,
421+
ngx_pool_t *temp_pool, ngx_log_t *log)
428422
{
429423
ngx_url_t u;
430424
ngx_int_t rc;
431425

432-
ngx_pool_auto guard(log);
433-
434-
if (guard.pool == NULL) {
435-
436-
op->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
437-
op->err = "no memory";
438-
439-
return NGX_ERROR;
440-
}
441-
442-
if ((rc = ngx_dynamic_upstream_parse_url(&u, guard.pool, op)) == NGX_ERROR)
426+
if ((rc = ngx_dynamic_upstream_parse_url(&u, temp_pool, op)) == NGX_ERROR)
443427
return NGX_ERROR;
444428

445429
if (rc == NGX_AGAIN) {
@@ -459,8 +443,8 @@ ngx_dynamic_upstream_op_add(typename TypeSelect<S>::peers_type *primary,
459443
}
460444
}
461445

462-
if (ngx_dynamic_upstream_op_add_impl<S>(log, op, shpool, primary, &u)
463-
== NGX_ERROR)
446+
if (ngx_dynamic_upstream_op_add_impl<S>(log, op, shpool, temp_pool,
447+
primary, &u) == NGX_ERROR)
464448
return NGX_ERROR;
465449

466450
if (op->status == NGX_HTTP_NOT_MODIFIED)
@@ -624,7 +608,8 @@ ngx_dynamic_upstream_op_hash(typename TypeSelect<S>::peers_type *primary,
624608

625609
template <class S> static ngx_int_t
626610
ngx_dynamic_upstream_op_sync(typename TypeSelect<S>::peers_type *primary,
627-
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool, ngx_log_t *log)
611+
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool,
612+
ngx_pool_t *temp_pool, ngx_log_t *log)
628613
{
629614
typename TypeSelect<S>::peers_type *peers;
630615
typename TypeSelect<S>::peer_type *peer;
@@ -644,17 +629,7 @@ ngx_dynamic_upstream_op_sync(typename TypeSelect<S>::peers_type *primary,
644629

645630
op->hash = hash;
646631

647-
ngx_pool_auto guard(log);
648-
649-
if (guard.pool == NULL) {
650-
651-
op->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
652-
op->err = "no memory";
653-
654-
return NGX_ERROR;
655-
}
656-
657-
servers = ngx_array_create(guard.pool, 100, sizeof(ngx_server_t));
632+
servers = ngx_array_create(temp_pool, 100, sizeof(ngx_server_t));
658633
if (servers == NULL) {
659634

660635
op->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
@@ -667,7 +642,7 @@ ngx_dynamic_upstream_op_sync(typename TypeSelect<S>::peers_type *primary,
667642

668643
if (ngx_dynamic_upstream_op_servers<S>(primary,
669644
servers,
670-
guard.pool,
645+
temp_pool,
671646
&hash)
672647
== NGX_ERROR)
673648
{
@@ -682,7 +657,7 @@ ngx_dynamic_upstream_op_sync(typename TypeSelect<S>::peers_type *primary,
682657

683658
op->server = server[j].name;
684659

685-
if (ngx_dynamic_upstream_parse_url(&server[j].u, guard.pool,
660+
if (ngx_dynamic_upstream_parse_url(&server[j].u, temp_pool,
686661
op) != NGX_OK) {
687662

688663
ngx_log_error(NGX_LOG_WARN, log, 0, "%V: server %V: %s",
@@ -750,8 +725,8 @@ ngx_dynamic_upstream_op_sync(typename TypeSelect<S>::peers_type *primary,
750725
op->server = peer->server;
751726
op->name = peer->name;
752727

753-
if (ngx_dynamic_upstream_op_del<S>(primary, op, shpool, log)
754-
== NGX_ERROR)
728+
if (ngx_dynamic_upstream_op_del<S>(primary, op, shpool,
729+
temp_pool, log) == NGX_ERROR)
755730
return NGX_ERROR;
756731

757732
count++;
@@ -909,7 +884,8 @@ ngx_dynamic_upstream_op_free_peer(ngx_slab_pool_t *shpool, PeerT *peer)
909884

910885
template <class S> static ngx_int_t
911886
ngx_dynamic_upstream_op_del(typename TypeSelect<S>::peers_type *primary,
912-
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool, ngx_log_t *log)
887+
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool,
888+
ngx_pool_t *temp_pool, ngx_log_t *log)
913889
{
914890
typename TypeSelect<S>::peers_type *peers, *backup = primary->next;
915891
typename TypeSelect<S>::peer_type *peer, *deleted, *prev;
@@ -960,7 +936,7 @@ ngx_dynamic_upstream_op_del(typename TypeSelect<S>::peers_type *primary,
960936
add_op.down = 1;
961937

962938
if (ngx_dynamic_upstream_op_add<S>(primary, &add_op,
963-
shpool, log) != NGX_OK) {
939+
shpool, temp_pool, log) != NGX_OK) {
964940

965941
op->err = add_op.err;
966942
op->status = add_op.status;

src/ngx_dynamic_upstream_op.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ struct TypeSelect<ngx_stream_upstream_srv_conf_t> {
157157

158158
ngx_int_t ngx_dynamic_upstream_op_impl(ngx_log_t *log,
159159
ngx_dynamic_upstream_op_t *op, ngx_slab_pool_t *shpool,
160-
void *peers);
160+
ngx_pool_t *temp_pool, void *peers);
161161

162162
ngx_inline ngx_flag_t
163163
str_eq(ngx_str_t s1, ngx_str_t s2)

0 commit comments

Comments
 (0)