wklken commented on issue #12436:
URL: https://github.com/apache/apisix/issues/12436#issuecomment-3093188583
apisix/init.lua
```lua
local function parse_domain_in_route(route)
local nodes = route.value.upstream.nodes
core.log.error("parse_domain_in_route: route.value.upstream.nodes=",
core.json.delay_encode(nodes, true)) -- add log here
local new_nodes, err = upstream_util.parse_domain_for_nodes(nodes)
if not new_nodes then
return nil, err
end
local up_conf = route.dns_value and route.dns_value.upstream
local ok = upstream_util.compare_upstream_node(up_conf, new_nodes)
if ok then
return route
end
-- don't modify the modifiedIndex to avoid plugin cache miss because of
DNS resolve result
-- has changed
-- Here we copy the whole route instead of part of it,
-- so that we can avoid going back from route.value to route during
copying.
route.dns_value = core.table.deepcopy(route).value
route.dns_value.upstream.nodes = new_nodes
core.log.info("parse route which contain domain: ",
core.json.delay_encode(route, true))
core.log.error("parse_domain_in_route after parse domain:
route.value.upstream=", core.json.delay_encode(route.value.upstream, true))
-- add log here
core.log.error("parse_domain_in_route after parse domain:
route.value.upstream.nodes=",
core.json.delay_encode(route.value.upstream.nodes, true)) -- add log here
return route
end
```
got the logs
1. here the route.value.upstream.nodes is original nodes(hots is domain)
```
2025/07/20 03:41:08 [error] 519#519: *12037 [lua] init.lua:234:
parse_domain_in_route(): parse_domain_in_route after parse domain:
route.value.upstream.nodes=[{"port":80,"priority":1,"host":"httpbin","weight":100}],
client: 10.1.1.1, server: _, request: "GET /api/apigw/prod/anything HTTP/1.1",
host: "bkapi.example.com"
```
2. here, the new reuqest, the route.value.upstream.nodes is original
nodes(hots is domain); but `after parse domain` it replaced to the parsed nodes
(host is ip)
```
2025/07/20 03:41:45 [error] 519#519: *14537 [lua] init.lua:212:
parse_domain_in_route(): parse_domain_in_route:
route.value.upstream.nodes=[{"port":80,"priority":1,"host":"httpbin","weight":100}],
client: 10.1.1.1, server: _, request: "GET /api/apigw/prod/anything HTTP/1.1",
host: "bkapi.example.com"
2025/07/20 03:41:45 [info] 519#519: *14537 [lua] init.lua:231:
parse_domain_in_route(): parse route which contain domain:
{"has_domain":true,"key":"/bk-gateway-apisix/services/apigw.prod.stage-4","dns_value":{"name":"apigw-prod-anything-get","upstream":{"parent":{"update_count":0,"key":"/bk-gateway-apisix/routes/apigw.prod.2347","createdIndex":5360,"value":{"name":"apigw-prod-anything-get","priority":0,"methods":["GET"],"labels":{"gateway.bk.tencent.com/gateway":"apigw","gateway.bk.tencent.com/stage":"prod"},"id":"apigw.prod.2347","desc":"Returns
anything passed in request
data.","create_time":1752566944,"status":1,"timeout":{"read":30,"connect":30,"send":30},"uris":["/api/apigw/prod/anything","/api/apigw/prod/anything/"],"upstream":"table:
0x7f1c8356f638","update_time":1752566944,"plugins":{"bk-proxy-rewrite":{"subpath_param_name":":ext","use_real_request_uri_unsafe":false,"uri":"/anything","match_subpath":false,"method":"GET"},"bk-resource-context":{"bk_resource_id":2347,"bk_res
ource_name":"anything_get","bk_resource_auth":{"verified_app_required":false,"verified_user_required":false,"resource_perm_required":false,"skip_user_verification":false},"bk_resource_auth_obj":{"verified_app_required":false,"verified_user_required":false,"resource_perm_required":false,"skip_user_verification":false}}},"service_id":"apigw.prod.stage-4"},"modifiedIndex":5360,"orig_modifiedIndex":5360,"has_domain":true,"clean_handlers":{}},"nodes":[{"priority":1,"domain":"httpbin","port":80,"host":"10.100.183.135","weight":100}],"pass_host":"node","type":"roundrobin","scheme":"http","hash_on":"vars","timeout":{"read":30,"connect":30,"send":30}},"desc":"正式环境","id":"apigw.prod.2347","labels":"table:
0x7f1c8356f000","create_time":1752482957,"timeout":"table:
0x7f1c8356f048","update_time":1752566944,"plugins":{"bk-auth-validate":{},"bk-proxy-rewrite":"table:
0x7f1c8356f2d0","bk-delete-cookie":{},"bk-log-context":{},"prometheus":{"prefer_name":false},"bk-real-ip":{},"bk-stage-conte
xt":{"jwt_private_key":"
2025/07/20 03:41:45 [error] 519#519: *14537 [lua] init.lua:233:
parse_domain_in_route(): parse_domain_in_route after parse domain:
route.value.upstream={"parent":{"update_count":0,"key":"/bk-gateway-apisix/routes/apigw.prod.2347","createdIndex":5360,"value":{"name":"apigw-prod-anything-get","priority":0,"methods":["GET"],"labels":{"gateway.bk.tencent.com/gateway":"apigw","gateway.bk.tencent.com/stage":"prod"},"id":"apigw.prod.2347","desc":"Returns
anything passed in request
data.","create_time":1752566944,"status":1,"timeout":{"read":30,"connect":30,"send":30},"uris":["/api/apigw/prod/anything","/api/apigw/prod/anything/"],"upstream":{"parent":"table:
0x7f1c827a2378","nodes":[{"priority":1,"domain":"httpbin","port":80,"host":"10.100.183.135","weight":100}],"pass_host":"node","type":"roundrobin","scheme":"http","hash_on":"vars","timeout":{"read":30,"connect":30,"send":30}},"update_time":1752566944,"plugins":{"bk-proxy-rewrite":{"subpath_param_name":":ext","use_real_request_uri_unsa
fe":false,"uri":"/anything","match_subpath":false,"method":"GET"},"bk-resource-context":{"bk_resource_id":2347,"bk_resource_name":"anything_get","bk_resource_auth":{"verified_app_required":false,"verified_user_required":false,"resource_perm_required":false,"skip_user_verification":false},"bk_resource_auth_obj":{"verified_app_required":false,"verified_user_required":false,"resource_perm_required":false,"skip_user_verification":false}}},"service_id":"apigw.prod.stage-4"},"modifiedIndex":5360,"orig_modifiedIndex":5360,"has_domain":true,"clean_handlers":{}},"nodes":"table:
0x7f1c82da69f0","pass_host":"node","type":"roundrobin","scheme":"http","hash_on":"vars","timeout":"table:
0x7f1c8356f818"}, client: 10.1.1.1, server: _, request: "GET
/api/apigw/prod/anything HTTP/1.1", host: "bkapi.example.com"
```
3. all the following request will use the parsed nodes, and can't detect the
change of the domain ip.
```
2025/07/20 03:41:45 [error] 519#519: *14537 [lua] init.lua:234:
parse_domain_in_route(): parse_domain_in_route after parse domain:
route.value.upstream.nodes=[{"priority":1,"domain":"httpbin","port":80,"host":"10.100.183.135","weight":100}],
client: 10.1.1.1, server: _, request: "GET /api/apigw/prod/anything HTTP/1.1",
host: "bkapi.example.com"
```
--
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]