This is an automated email from the ASF dual-hosted git repository.
monkeydluffy 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 88107db2c fix: restart failed (#10696)
88107db2c is described below
commit 88107db2c0dac0a8fca8dc2d0bbfd8bbd75d308e
Author: cooper.wu <[email protected]>
AuthorDate: Wed Jan 3 20:58:27 2024 +0800
fix: restart failed (#10696)
---
apisix/cli/ops.lua | 34 +++++++++++++++++++++++++++++-----
t/cli/test_cmd.sh | 4 ++--
t/cli/test_validate_config.sh | 2 +-
3 files changed, 32 insertions(+), 8 deletions(-)
diff --git a/apisix/cli/ops.lua b/apisix/cli/ops.lua
index 0eaebae56..836c87bce 100644
--- a/apisix/cli/ops.lua
+++ b/apisix/cli/ops.lua
@@ -767,6 +767,22 @@ local function cleanup(env)
end
+local function sleep(n)
+ execute("sleep " .. tonumber(n))
+end
+
+
+local function check_running(env)
+ local pid_path = env.apisix_home .. "/logs/nginx.pid"
+ local pid = util.read_file(pid_path)
+ pid = tonumber(pid)
+ if not pid then
+ return false, nil
+ end
+ return true, pid
+end
+
+
local function start(env, ...)
cleanup(env)
@@ -791,10 +807,18 @@ local function start(env, ...)
util.die(logs_path, " is not directory nor symbol link")
end
- -- check running
- local pid_path = env.apisix_home .. "/logs/nginx.pid"
- local pid = util.read_file(pid_path)
- pid = tonumber(pid)
+ -- check running and wait old apisix stop
+ local pid = nil
+ for i = 1, 30 do
+ local running
+ running, pid = check_running(env)
+ if not running then
+ break
+ else
+ sleep(0.1)
+ end
+ end
+
if pid then
if pid <= 0 then
print("invalid pid")
@@ -805,7 +829,7 @@ local function start(env, ...)
local ok, err, err_no = signal.kill(pid, signone)
if ok then
- print("APISIX is running...")
+ print("the old APISIX is still running, the new one will not
start")
return
-- no such process
elseif err_no ~= errno.ESRCH then
diff --git a/t/cli/test_cmd.sh b/t/cli/test_cmd.sh
index 2f3a46cd2..fa93465a6 100755
--- a/t/cli/test_cmd.sh
+++ b/t/cli/test_cmd.sh
@@ -24,7 +24,7 @@ git checkout conf/config.yaml
# check restart with old nginx.pid exist
echo "-1" > logs/nginx.pid
out=$(./bin/apisix start 2>&1 || true)
-if echo "$out" | grep "APISIX is running"; then
+if echo "$out" | grep "the old APISIX is still running"; then
rm logs/nginx.pid
echo "failed: should reject bad nginx.pid"
exit 1
@@ -50,7 +50,7 @@ echo "pass: no corresponding process"
# check running when run repeatedly
out=$(make run; make run || true)
-if ! echo "$out" | grep "APISIX is running"; then
+if ! echo "$out" | grep "the old APISIX is still running"; then
echo "failed: should find APISIX running"
exit 1
fi
diff --git a/t/cli/test_validate_config.sh b/t/cli/test_validate_config.sh
index 8db581684..0379b986c 100755
--- a/t/cli/test_validate_config.sh
+++ b/t/cli/test_validate_config.sh
@@ -142,7 +142,7 @@ nginx_config:
# apisix restart
out=$(./bin/apisix restart 2>&1 || true)
-if ! (echo "$out" | grep "\[emerg\] unknown directive \"notexist\"") && !
(echo "$out" | grep "APISIX is running"); then
+if ! (echo "$out" | grep "\[emerg\] unknown directive \"notexist\"") && !
(echo "$out" | grep "the old APISIX is still running"); then
echo "failed: should restart failed when configuration invalid"
exit 1
fi