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