wklken commented on issue #10093:
URL: https://github.com/apache/apisix/issues/10093#issuecomment-1702146347

   I have reproduce @jiangfucheng 
   
   just mock dns fail in lua
   
   ## apisix config:
   
   1. start apisix with 4 processes
   2. change then nginx error log level to `info`
   
   ## register route:
   
   1. add a route `/get` with one upstream, one node like `httpbin.org`; the 
parsed data in log is 
`"nodes":[{"host":"54.175.87.239","priority":1,"domain":"httpbin.org","port":80,"weight":100,"upstream_host":"httpbin.org"}]`
   2. change `apisix/utils/upstream.lua` to mock dns random error, note the 
`1693542089` is a `now() + 60`
   
   ```lua
   local function parse_domain_for_nodes(nodes) 
       local new_nodes = core.table.new(#nodes, 0)
       for _, node in ipairs(nodes) do
           local host = node.host
           if not ipmatcher.parse_ipv4(host) and
                   not ipmatcher.parse_ipv6(host) then
   
               if host == "httpbin.org" and ngx_now() <= 1693542089 then
                   if random(1,10) % 2 == 0 then
                           core.log.error("101 empty records")
                           return new_nodes
                   end
                   -- return nil, "failed to query the DNS server: timeout11"
               end
               local ip, err = core.resolver.parse_domain(host)
               if ip then
                   local new_node = core.table.clone(node)
                   new_node.host = ip
                   new_node.domain = host
                   core.table.insert(new_nodes, new_node)
               end
   ```
   
   3. `apisix reload`
   
   ## do requests
   
   1. `wrk  -c2 -t2 -d60s http://{}/get`
   2. and after the wrk finished, do `curl http://{}/get` for about 10 times, 
got 200 and 503
   
   ## the log
   
   when 503, there got no `dns` logs before `no valid upstream node`
   
   
   ```
   2023/09/01 04:24:20 [info] 140701#140701: *15533385 [lua] 
radixtree_uri_with_parameter.lua:53: match(): route match mode: 
radixtree_uri_with_parameter
   2023/09/01 04:24:20 [info] 140701#140701: *15533385 [lua] init.lua:572: 
http_access_phase(): matched route: 
{"key":"/bk-gateway-apisix/routes/test.prod.2423","modifiedIndex":532500,"clean_handlers":"table:
 
0x7f7d645c64c8","has_domain":true,"value":{"create_time":1693309224,"methods":["GET"],"service_id":"test.prod.stage-12","update_time":1693539224,"timeout":{"send":150,"read":150,"connect":150},"labels":{"gateway.bk.tencent.com/gateway":"test","gateway.bk.tencent.com/stage":"prod"},"uris":["/api/test/prod/dns","/api/test/prod/dns/"],"status":1,"priority":0,"name":"test-prod-dns","id":"test.prod.2423","plugins":{"bk-proxy-rewrite":{"match_subpath":false,"subpath_param_name":":ext","method":"GET","use_real_request_uri_unsafe":false,"uri":"/get"},"bk-resource-context":{"bk_resource_auth":{"resource_perm_required":false,"skip_user_verification":false,"verified_app_required":false,"verified_user_required":false},"bk_resource_id":2423,"bk_resource_name":"dns","bk_resource_auth_obj":{"r
 
esource_perm_required":false,"skip_user_verification":false,"verified_app_required":false,"verified_user_required":false}}},"upstream":{"nodes":{},"hash_on":"vars","scheme":"http","parent":{"key":"/bk-gateway-apisix/routes/test.prod.2423","modifiedIndex":532500,"clean_handlers":{},"has_domain":true,"value":"table:
 
0x7f7d9706c708","update_count":0,"orig_modifiedIndex":532500,"createdIndex":532332},"type":"roundrobin","pass_host":"node","timeout":{"send":150,"read":150,"connect":150}}},"update_count":0,"orig_modifiedIndex":532500,"createdIndex":532332
   2023/09/01 04:24:20 [info] 140701#140701: *15533385 [lua] plugin.lua:630: 
merge_service_route():   route conf: 
{"key":"/bk-gateway-apisix/routes/test.prod.2423","modifiedIndex":532500,"clean_handlers":"table:
 
0x7f7d645c64c8","has_domain":true,"value":{"create_time":1693309224,"methods":["GET"],"service_id":"test.prod.stage-12","update_time":1693539224,"timeout":{"send":150,"read":150,"connect":150},"labels":{"gateway.bk.tencent.com/gateway":"test","gateway.bk.tencent.com/stage":"prod"},"uris":["/api/test/prod/dns","/api/test/prod/dns/"],"status":1,"priority":0,"name":"test-prod-dns","id":"test.prod.2423","plugins":{"bk-proxy-rewrite":{"match_subpath":false,"subpath_param_name":":ext","method":"GET","use_real_request_uri_unsafe":false,"uri":"/get"},"bk-resource-context":{"bk_resource_auth":{"resource_perm_required":false,"skip_user_verification":false,"verified_app_required":false,"verified_user_required":false},"bk_resource_id":2423,"bk_resource_name":"dns","bk_resource_auth_obj":
 
{"resource_perm_required":false,"skip_user_verification":false,"verified_app_required":false,"verified_user_required":false}}},"upstream":{"nodes":{},"hash_on":"vars","scheme":"http","parent":{"key":"/bk-gateway-apisix/routes/test.prod.2423","modifiedIndex":532500,"clean_handlers":{},"has_domain":true,"value":"table:
 
0x7f7d9706c708","update_count":0,"orig_modifiedIndex":532500,"createdIndex":532332},"type":"roundrobin","pass_host":"node","timeout":{"send":150,"read":150,"connect":150}}},"update_count":0,"orig_modifiedIndex":532500,"createdIndex":532332}
   2023/09/01 04:24:21 [error] 140701#140701: *15534047 [lua] init.lua:486: 
handle_upstream(): failed to set upstream: no valid upstream node
   ```
   
   
   
   
   
   
   
   
   


-- 
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: notifications-unsubscr...@apisix.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to