Baoyuantop commented on code in PR #12852:
URL: https://github.com/apache/apisix/pull/12852#discussion_r2659438790
##########
apisix/discovery/kubernetes/init.lua:
##########
@@ -211,6 +211,7 @@ end
local function post_list(handle)
+ handle.endpoint_dict:safe_set("discovery_ready",true)
Review Comment:
safe_set lacks error handling
##########
apisix/discovery/kubernetes/init.lua:
##########
@@ -715,4 +723,55 @@ function _M.dump_data()
end
+local function check_ready(id)
+ local endpoint_dict = get_endpoint_dict(id)
+ if not endpoint_dict then
+ core.log.error("failed to get lua_shared_dict:",
get_endpoint_dict_name(id),
+ ", please check your APISIX version")
+ return false, "failed to get lua_shared_dict: ",
get_endpoint_dict_name(id),
Review Comment:
Please use `..` for string concatenation.
##########
t/kubernetes/discovery/kubernetes3.t:
##########
@@ -242,10 +242,22 @@ _EOC_
}
}
- location /t {
+ location /ready_check {
content_by_lua_block {
- ngx.sleep(2)
- ngx.exit(200)
+ local http = require("resty.http")
+ local healthcheck_uri = "http://127.0.0.1:7085" ..
"/status/ready"
+ for i = 1, 4 do
Review Comment:
Add a comment explaining the rationale for selecting the number of retries.
##########
apisix/init.lua:
##########
@@ -975,54 +975,74 @@ function _M.status()
core.response.exit(200, core.json.encode({ status = "ok" }))
end
-function _M.status_ready()
- local local_conf = core.config.local_conf()
- local role = core.table.try_read_attr(local_conf, "deployment", "role")
- local provider = core.table.try_read_attr(local_conf, "deployment",
"role_" ..
- role, "config_provider")
- if provider == "yaml" or provider == "etcd" then
- local status_shdict = ngx.shared["status-report"]
- local ids = status_shdict:get_keys()
- local error
- local worker_count = ngx.worker.count()
- if #ids ~= worker_count then
- core.log.warn("worker count: ", worker_count, " but status report
count: ", #ids)
- error = "worker count: " .. ngx.worker.count() ..
- " but status report count: " .. #ids
- end
- if error then
- core.response.exit(503, core.json.encode({
- status = "error",
- error = error
- }))
- return
- end
- for _, id in ipairs(ids) do
- local ready = status_shdict:get(id)
+
+local function discovery_ready_check()
+ local discovery_type = local_conf.discovery
+ if not discovery_type then
+ return true
+ end
+ for discovery_name, _ in pairs(discovery_type) do
+ local dis_module = discovery[discovery_name]
+ if dis_module.check_discovery_ready then
+ local ready, message = dis_module.check_discovery_ready()
if not ready then
- core.log.warn("worker id: ", id, " has not received
configuration")
- error = "worker id: " .. id ..
- " has not received configuration"
- break
+ return false, message
end
end
+ end
+ return true;
Review Comment:
Please do not use semicolons.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]