Skip to content

<fix>[vrouter]: ZSTAC-85527 select callback IP for VR#4119

Closed
ZStack-Robot wants to merge 1 commit into
feature-5.5.28-IPv6-management-networkfrom
sync/shixin.ruan/shixin-ZSTAC-85527@@2
Closed

<fix>[vrouter]: ZSTAC-85527 select callback IP for VR#4119
ZStack-Robot wants to merge 1 commit into
feature-5.5.28-IPv6-management-networkfrom
sync/shixin.ruan/shixin-ZSTAC-85527@@2

Conversation

@ZStack-Robot
Copy link
Copy Markdown
Collaborator

Summary

Fix vrouter agent callbacks on dual-stack management networks when the vrouter
management NIC is IPv4 but MN default management IP is IPv6.

Root Cause

Cloud used the default REST callback URL for vrouter agent calls. In a dual-stack
MN environment this could send an IPv6 callback URL to an IPv4-only vrouter
management path, so the agent could not route callback traffic correctly.

Changes

  • Add RESTFacade.buildCallbackUrl(hostName) to build callback URLs for a
    selected management IP.
  • Add VirtualRouterManager.buildAgentCallbackUrlHeaders(mgmtNicIp) to select
    the callback IP family from the vrouter management NIC IP.
  • Apply the selected callback URL to vrouter init, connect, ping, and async
    command paths.

Verification

  • mvn -pl utils,header,core,plugin/virtualRouterProvider -DskipTests compile
  • GOWORK=off GOCACHE=/tmp/go-build GOMODCACHE=/tmp/go-mod GOFLAGS=-mod=mod PATH=/usr/local/go/bin:$PATH /usr/local/go/bin/go test . -run 'Test.*Route|Test.*Mgmt|Test.*Callback' -count=1 in zstack-vyos/utils
  • Hot-fixed and verified on 172.24.246.247:
    • Euler2203 VPC router reached Running/Connected
    • VPC HA single-node path reached Running/Connected
    • vrouter callbacks used IPv4 callback URL while MN stayed dual-stack

Resolves: ZSTAC-85527

sync from gitlab !10018

Use a callback URL in the same IP family as the virtual router
management NIC. This keeps IPv4-only vrouter agents reachable when MN
is dual-stack and its default management IP is IPv6.

Resolves: ZSTAC-85527

Change-Id: Iaa630fc59d30c2675db7bbe47cb1b7c8d58bb023
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 27, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: http://open.zstack.ai:20001/code-reviews/zstack-cloud.yaml (via .coderabbit.yaml)

Review profile: CHILL

Plan: Pro

Run ID: 92ebb42f-b4e7-4199-af74-4825f1aa4075

📥 Commits

Reviewing files that changed from the base of the PR and between 3df089c and e0be65a.

📒 Files selected for processing (7)
  • core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java
  • header/src/main/java/org/zstack/header/rest/RESTFacade.java
  • plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouter.java
  • plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouterManager.java
  • plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouterManagerImpl.java
  • plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/lifecycle/VirtualRouterDeployAgentFlow.java
  • plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/vyos/VyosConnectFlow.java

总体介绍

本 PR 为虚拟路由器代理的异步 REST 调用引入了显式的回调 URL 请求头构建机制,新增了两个关键方法:RESTFacade 的 buildCallbackUrl(String hostName) 和 VirtualRouterManager 的 buildAgentCallbackUrlHeaders(String mgmtNicIp),并在多个代理初始化和通信调用点中应用这些新方法。

变更

Virtual Router Agent Callback URL Headers

Layer / File(s) 概述
REST 回调 URL 构建基础设施
core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java, header/src/main/java/org/zstack/header/rest/RESTFacade.java
在 RESTFacade 接口新增 buildCallbackUrl(String hostName) 方法声明,在 RESTFacadeImpl 中实现该重载方法,复用现有的 portpath 实例字段生成回调地址。
虚拟路由器 Agent 回调 Headers 构建器
plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouterManager.java, plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouterManagerImpl.java
在 VirtualRouterManager 接口新增 buildAgentCallbackUrlHeaders(String mgmtNicIp) 方法,VirtualRouterManagerImpl 中实现该方法,包括管理 IP 选择逻辑(优先 IPv6,次选 IPv4),通过 @Autowired 注入 RESTFacade,并返回包含 RESTConstant.CALLBACK_URL 的 headers 映射。
异步 REST 调用中应用回调 Headers
plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouter.java, plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/lifecycle/VirtualRouterDeployAgentFlow.java, plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/vyos/VyosConnectFlow.java
在虚拟路由器 ping、异步 HTTP 调用处理、Deploy Agent Flow 初始化(包括超时和非超时两个分支)、以及 VyOS Connect Flow 初始化中,将 vrMgr.buildAgentCallbackUrlHeaders(...) 构造的请求头显式传入 restf.asyncJsonPost 调用,替换旧实现中未传入该参数的调用形式。

🎯 2 (Simple) | ⏱️ ~12 分钟

一只兔子来传话,
回调头部有了新花样,
从默认参数变显式构造,
异步请求更明朗,
代码路径更堂皇!🐰

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed 标题遵循 [scope]: 格式,字符数为 53 个,符合 72 字符限制,内容准确反映了 VirtualRouter 回调 IP 选择的核心改动。
Description check ✅ Passed 描述与变更集相关,详细说明了问题根因、解决方案和验证步骤,准确反映了 RESTFacade 和 VirtualRouterManager 中新增方法的变更。
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sync/shixin.ruan/shixin-ZSTAC-85527@@2

Comment @coderabbitai help to get the list of available commands and usage tips.

@ZStack-Robot ZStack-Robot deleted the sync/shixin.ruan/shixin-ZSTAC-85527@@2 branch May 28, 2026 10:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants