Compare commits

..

10 Commits

6 changed files with 308 additions and 199 deletions

View File

@ -451,21 +451,6 @@ index ef4a647..49bb30b 100644
return p;
}
diff --git a/src/core/ngx_thread_pool.h b/src/core/ngx_thread_pool.h
index 5e5adf6..5999525 100644
--- a/src/core/ngx_thread_pool.h
+++ b/src/core/ngx_thread_pool.h
@@ -23,7 +23,10 @@ struct ngx_thread_task_s {
};
+#ifndef NGX_DEFINE_THREAD_POOL_T
+#define NGX_DEFINE_THREAD_POOL_T 1
typedef struct ngx_thread_pool_s ngx_thread_pool_t;
+#endif
ngx_thread_pool_t *ngx_thread_pool_add(ngx_conf_t *cf, ngx_str_t *name);
diff --git a/src/dtrace/nginx.stp b/src/dtrace/nginx.stp
new file mode 100644
index 0000000..e824daf
@ -831,10 +816,10 @@ index 0000000..1bca4cf
+
diff --git a/src/event/ngx_event_probe.h b/src/event/ngx_event_probe.h
new file mode 100644
index 0000000..9fa2a82
index 0000000..5aa0397
--- /dev/null
+++ b/src/event/ngx_event_probe.h
@@ -0,0 +1,40 @@
@@ -0,0 +1,33 @@
+#ifndef _NGX_EVENT_PROBE_H_INCLUDED_
+#define _NGX_EVENT_PROBE_H_INCLUDED_
+
@ -846,13 +831,6 @@ index 0000000..9fa2a82
+
+#if (NGX_DTRACE)
+
+#if (NGX_THREADS)
+# ifndef NGX_DEFINE_THREAD_POOL_T
+# define NGX_DEFINE_THREAD_POOL_T 1
+typedef struct ngx_thread_pool_s ngx_thread_pool_t;
+# endif
+#endif
+
+#include <ngx_http.h>
+#include <ngx_dtrace_provider.h>
+
@ -876,10 +854,18 @@ index 0000000..9fa2a82
+
+#endif /* _NGX_EVENT_PROBE_H_INCLUDED_ */
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index 8f547b2..e12a51e 100644
index 8f547b2..6e77465 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -91,6 +91,8 @@ ngx_event_expire_timers(void)
@@ -8,6 +8,7 @@
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+#include <ngx_event_probe.h>
ngx_rbtree_t ngx_event_timer_rbtree;
@@ -91,6 +92,8 @@ ngx_event_expire_timers(void)
ev->timedout = 1;
@ -888,32 +874,61 @@ index 8f547b2..e12a51e 100644
ev->handler(ev);
}
}
@@ -136,3 +139,19 @@ ngx_event_cancel_timers(void)
ev->handler(ev);
}
}
+
+
+#if (NGX_DTRACE)
+void
+ngx_event_probe_timer_add_helper(ngx_event_t *ev, ngx_msec_t timer)
+{
+ ngx_event_probe_timer_add(ev, timer);
+}
+
+
+void
+ngx_event_probe_timer_del_helper(ngx_event_t *ev)
+{
+ ngx_event_probe_timer_del(ev);
+}
+#endif
diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h
index 99f8a48..79c3fa0 100644
index 99f8a48..8bc619a 100644
--- a/src/event/ngx_event_timer.h
+++ b/src/event/ngx_event_timer.h
@@ -12,6 +12,7 @@
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+#include <ngx_event_probe.h>
@@ -25,12 +25,23 @@ void ngx_event_expire_timers(void);
void ngx_event_cancel_timers(void);
+#if (NGX_DTRACE)
+void ngx_event_probe_timer_add_helper(ngx_event_t *ev,
+ ngx_msec_t timer);
+void ngx_event_probe_timer_del_helper(ngx_event_t *ev);
+#endif
+
+
extern ngx_rbtree_t ngx_event_timer_rbtree;
#define NGX_TIMER_INFINITE (ngx_msec_t) -1
@@ -31,6 +32,8 @@ extern ngx_rbtree_t ngx_event_timer_rbtree;
static ngx_inline void
ngx_event_del_timer(ngx_event_t *ev)
{
+ ngx_event_probe_timer_del(ev);
+#if (NGX_DTRACE)
+ ngx_event_probe_timer_del_helper(ev);
+#endif
+
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"event timer del: %d: %M",
ngx_event_ident(ev->data), ev->timer.key);
@@ -77,6 +80,8 @@ ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
@@ -77,6 +88,10 @@ ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
ev->timer.key = key;
+ ngx_event_probe_timer_add(ev, timer);
+#if (NGX_DTRACE)
+ ngx_event_probe_timer_add_helper(ev, timer);
+#endif
+
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"event timer add: %d: %M:%M",

View File

@ -0,0 +1,42 @@
# HG changeset patch
# User Yichun Zhang <agentzh@openresty.org>
# Date 1451762084 28800
# Sat Jan 02 11:14:44 2016 -0800
# Node ID 449f0461859c16e95bdb18e8be6b94401545d3dd
# Parent 78b4e10b4367b31367aad3c83c9c3acdd42397c4
SSL: handled SSL_CTX_set_cert_cb() callback yielding.
OpenSSL 1.0.2+ introduces SSL_CTX_set_cert_cb() to allow custom
callbacks to serve the SSL certificiates and private keys dynamically
and lazily. The callbacks may yield for nonblocking I/O or sleeping.
Here we added support for such usage in NGINX 3rd-party modules
(like ngx_lua) in NGINX's event handlers for downstream SSL
connections.
diff -r 78b4e10b4367 -r 449f0461859c src/event/ngx_event_openssl.c
--- a/src/event/ngx_event_openssl.c Thu Dec 17 16:39:15 2015 +0300
+++ b/src/event/ngx_event_openssl.c Sat Jan 02 11:14:44 2016 -0800
@@ -1210,6 +1210,23 @@
return NGX_AGAIN;
}
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+ if (sslerr == SSL_ERROR_WANT_X509_LOOKUP) {
+ c->read->handler = ngx_ssl_handshake_handler;
+ c->write->handler = ngx_ssl_handshake_handler;
+
+ if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
+ if (ngx_handle_write_event(c->write, 0) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
+ return NGX_AGAIN;
+ }
+#endif
+
err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
c->ssl->no_wait_shutdown = 1;

File diff suppressed because it is too large Load Diff

View File

@ -46,8 +46,10 @@ if ($^O eq 'solaris') {
}
if ($^O eq 'darwin') {
$cfg_opts .= " --with-cc-opt='-I/usr/local/include'"
. " --with-ld-opt='-L/usr/local/lib'";
$cfg_opts .= " --with-cc-opt='-I/usr/local/opt/openssl/include/ "
. "-I/usr/local/opt/pcre/include/'"
. " --with-ld-opt='-L/usr/local/opt/openssl/lib/ "
. "-L/usr/local/opt/pcre/lib/'";
}
my $prefix;
@ -65,6 +67,45 @@ sub write_config_file ($) {
write_config_file "/tmp/nginx.conf";
warn "=== --with-stream ===\n";
$prefix = "/usr/local/openresty-nogzip";
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
unless ($opts{f}) {
sh "./configure $cfg_opts --with-stream --prefix=$prefix -j$jobs > /dev/null";
}
sh "$make -j$jobs > /dev/null";
sh "sudo $make install > /dev/null";
sh "sudo cp /tmp/nginx.conf $prefix/nginx/conf/nginx.conf";
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep $ver";
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep '\\--with-stream'";
system "sudo killall nginx > /dev/null 2>&1";
sh "sudo $prefix/nginx/sbin/nginx";
sh "curl -si localhost/lua|grep $lua";
sh "curl -si localhost/lua|grep $ver";
sh "curl -si localhost/cjson|grep 'json.safe: '";
sh qq{$prefix/bin/resty -e 'ngx.say("Hello World!")'|grep 'Hello World'};
sh "sudo $prefix/nginx/sbin/nginx -sstop";
warn "=== --with-stream + dtrace static probes ===\n";
$prefix = "/usr/local/openresty-nogzip";
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
unless ($opts{f}) {
sh "./configure $cfg_opts --with-dtrace-probes --with-stream --prefix=$prefix -j$jobs > /dev/null";
}
sh "$make -j$jobs > /dev/null";
sh "sudo $make install > /dev/null";
sh "sudo cp /tmp/nginx.conf $prefix/nginx/conf/nginx.conf";
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep $ver";
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep '\\--with-stream'";
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep '\\--with-dtrace-probes'";
system "sudo killall nginx > /dev/null 2>&1";
sh "sudo $prefix/nginx/sbin/nginx";
sh "curl -si localhost/lua|grep $lua";
sh "curl -si localhost/lua|grep $ver";
sh "curl -si localhost/cjson|grep 'json.safe: '";
sh qq{$prefix/bin/resty -e 'ngx.say("Hello World!")'|grep 'Hello World'};
sh "sudo $prefix/nginx/sbin/nginx -sstop";
warn "=== Without Gzip/SSL/PCRE ===\n";
$prefix = "/usr/local/openresty-nogzip";
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
@ -221,6 +262,13 @@ http {
end
';
upstream backend {
server 0.0.0.1;
balancer_by_lua_block {
print("balancer!")
}
}
server {
listen *:80;
server_name localhost;

View File

@ -299,6 +299,10 @@ echo "$info_txt applying the always_enable_cc_feature_tests patch to nginx"
patch -p1 < $root/patches/nginx-$main_ver-always_enable_cc_feature_tests.patch
echo
echo "$info_txt applying the ssl_cert_cb_yield.patch patch to nginx"
patch -p1 < $root/patches/nginx-$main_ver-ssl_cert_cb_yield.patch
echo
cd .. || exit 1
cp $root/patches/nginx-$main_ver-no_pool.patch ./nginx-no_pool.patch || exit 1
@ -366,7 +370,7 @@ mv openresty-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
#################################
ver=0.9.20
ver=0.10.0
$root/util/get-tarball "https://github.com/openresty/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1
tar -xzf lua-nginx-module-$ver.tar.gz || exit 1
mv openresty-lua-nginx-module-* ngx_lua-$ver || exit 1
@ -501,7 +505,7 @@ echo
#################################
ver=2.1-20151219
ver=2.1-20160108
$root/util/get-tarball "https://github.com/openresty/luajit2/archive/v$ver.tar.gz" -O "LuaJIT-$ver.tar.gz" || exit 1
tar -xzf LuaJIT-$ver.tar.gz || exit 1
mv luajit2-* LuaJIT-$ver || exit 1
@ -665,7 +669,7 @@ cd ..
#################################
ver=0.1.3
ver=0.1.4
$root/util/get-tarball "https://github.com/openresty/lua-resty-core/tarball/v$ver" -O "lua-resty-core-$ver.tar.gz" || exit 1
tar -xzf lua-resty-core-$ver.tar.gz || exit 1
mv openresty-lua-resty-core-* lua-resty-core-$ver || exit 1

View File

@ -1,7 +1,7 @@
#!/bin/bash
main_ver=1.9.7
minor_ver=1
minor_ver=2
version=$main_ver.$minor_ver
echo $version