You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by we...@apache.org on 2020/10/19 02:49:07 UTC

[apisix] branch master updated: feature(core): implement `core.sleep` (#2397)

This is an automated email from the ASF dual-hosted git repository.

wenming pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new 943be09  feature(core): implement `core.sleep` (#2397)
943be09 is described below

commit 943be095004a28cedb6a3717ebb97497801cd638
Author: dabue <53...@users.noreply.github.com>
AuthorDate: Mon Oct 19 10:49:01 2020 +0800

    feature(core): implement `core.sleep` (#2397)
---
 apisix/core.lua                    |  5 ++++-
 apisix/core/config_etcd.lua        |  2 +-
 apisix/core/config_yaml.lua        |  2 +-
 apisix/core/timer.lua              |  2 +-
 apisix/core/utils.lua              | 20 +++++++++++++++++++-
 apisix/plugins/fault-injection.lua |  2 +-
 apisix/plugins/limit-conn.lua      |  2 +-
 apisix/plugins/limit-req.lua       |  2 +-
 apisix/plugins/wolf-rbac.lua       |  3 ++-
 9 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/apisix/core.lua b/apisix/core.lua
index fbed577..f9432e0 100644
--- a/apisix/core.lua
+++ b/apisix/core.lua
@@ -15,6 +15,7 @@
 -- limitations under the License.
 --
 local log = require("apisix.core.log")
+local utils = require("apisix.core.utils")
 local local_conf, err = require("apisix.core.config_local").local_conf()
 if not local_conf then
     error("failed to parse yaml config: " .. err)
@@ -26,10 +27,12 @@ log.info("use config_center: ", config_center)
 local config = require("apisix.core.config_" .. config_center)
 config.type = config_center
 
+
 return {
     version  = require("apisix.core.version"),
     log      = log,
     config   = config,
+    sleep    = utils.sleep,
     json     = require("apisix.core.json"),
     table    = require("apisix.core.table"),
     request  = require("apisix.core.request"),
@@ -40,7 +43,7 @@ return {
     ctx      = require("apisix.core.ctx"),
     timer    = require("apisix.core.timer"),
     id       = require("apisix.core.id"),
-    utils    = require("apisix.core.utils"),
+    utils    = utils,
     etcd     = require("apisix.core.etcd"),
     http     = require("apisix.core.http"),
     tablepool= require("tablepool"),
diff --git a/apisix/core/config_etcd.lua b/apisix/core/config_etcd.lua
index 4f3fd55..7fb1241 100644
--- a/apisix/core/config_etcd.lua
+++ b/apisix/core/config_etcd.lua
@@ -29,7 +29,7 @@ local insert_tab   = table.insert
 local type         = type
 local ipairs       = ipairs
 local setmetatable = setmetatable
-local ngx_sleep    = ngx.sleep
+local ngx_sleep    = require("apisix.core.utils").sleep
 local ngx_timer_at = ngx.timer.at
 local ngx_time     = ngx.time
 local sub_str      = string.sub
diff --git a/apisix/core/config_yaml.lua b/apisix/core/config_yaml.lua
index 61d40d6..f5d3b0e 100644
--- a/apisix/core/config_yaml.lua
+++ b/apisix/core/config_yaml.lua
@@ -28,7 +28,7 @@ local insert_tab   = table.insert
 local type         = type
 local ipairs       = ipairs
 local setmetatable = setmetatable
-local ngx_sleep    = ngx.sleep
+local ngx_sleep    = require("apisix.core.utils").sleep
 local ngx_timer_at = ngx.timer.at
 local ngx_time     = ngx.time
 local sub_str      = string.sub
diff --git a/apisix/core/timer.lua b/apisix/core/timer.lua
index 7982d69..2100675 100644
--- a/apisix/core/timer.lua
+++ b/apisix/core/timer.lua
@@ -15,7 +15,7 @@
 -- limitations under the License.
 --
 local log = require("apisix.core.log")
-local sleep = ngx.sleep
+local sleep = require("apisix.core.utils").sleep
 local timer_every = ngx.timer.every
 local timer_at = ngx.timer.at
 local update_time = ngx.update_time
diff --git a/apisix/core/utils.lua b/apisix/core/utils.lua
index e29784f..61963a9 100644
--- a/apisix/core/utils.lua
+++ b/apisix/core/utils.lua
@@ -29,7 +29,9 @@ local type     = type
 local C        = ffi.C
 local ffi_string = ffi.string
 local get_string_buf = base.get_string_buf
-
+local exiting = ngx.worker.exiting
+local ngx_sleep    = ngx.sleep
+local max_sleep_interval = 1
 
 ffi.cdef[[
     int ngx_escape_uri(char *dst, const char *src,
@@ -200,4 +202,20 @@ function _M.validate_header_value(value)
 end
 
 
+local function sleep(sec)
+    if sec <= max_sleep_interval then
+        return ngx_sleep(sec)
+    end
+    ngx_sleep(max_sleep_interval)
+    if exiting() then
+        return
+    end
+    sec = sec - max_sleep_interval
+    return sleep(sec)
+end
+
+
+_M.sleep = sleep
+
+
 return _M
diff --git a/apisix/plugins/fault-injection.lua b/apisix/plugins/fault-injection.lua
index 8484352..8cf8b8d 100644
--- a/apisix/plugins/fault-injection.lua
+++ b/apisix/plugins/fault-injection.lua
@@ -15,7 +15,7 @@
 -- limitations under the License.
 --
 local core          = require("apisix.core")
-local sleep         = ngx.sleep
+local sleep         = core.sleep
 
 local plugin_name   = "fault-injection"
 
diff --git a/apisix/plugins/limit-conn.lua b/apisix/plugins/limit-conn.lua
index cf0f31f..7979b5f 100644
--- a/apisix/plugins/limit-conn.lua
+++ b/apisix/plugins/limit-conn.lua
@@ -16,7 +16,7 @@
 --
 local limit_conn_new = require("resty.limit.conn").new
 local core = require("apisix.core")
-local sleep = ngx.sleep
+local sleep = core.sleep
 local plugin_name = "limit-conn"
 
 
diff --git a/apisix/plugins/limit-req.lua b/apisix/plugins/limit-req.lua
index 7602e9b..3274f7a 100644
--- a/apisix/plugins/limit-req.lua
+++ b/apisix/plugins/limit-req.lua
@@ -17,7 +17,7 @@
 local limit_req_new = require("resty.limit.req").new
 local core = require("apisix.core")
 local plugin_name = "limit-req"
-local sleep = ngx.sleep
+local sleep = core.sleep
 
 
 local schema = {
diff --git a/apisix/plugins/wolf-rbac.lua b/apisix/plugins/wolf-rbac.lua
index 9d0d151..4a4535e 100644
--- a/apisix/plugins/wolf-rbac.lua
+++ b/apisix/plugins/wolf-rbac.lua
@@ -18,6 +18,7 @@
 local core     = require("apisix.core")
 local consumer = require("apisix.consumer")
 local json     = require("apisix.core.json")
+local sleep    = core.sleep
 local ngx_re = require("ngx.re")
 local http     = require("resty.http")
 local ipairs   = ipairs
@@ -206,7 +207,7 @@ local function check_url_permission(server, appid, action, resName, client_ip, w
             else
                 core.log.info("request [curl -v ", url, "] failed! status:", res.status)
                 if i < retry_max then
-                    ngx.sleep(0.1)
+                    sleep(0.1)
                 end
             end
         end