VXLAN persistent networks create bridges on hosts that never ran a VM on them, but don't clean them up
- 主要言語
- Java
- スター
- 3.1k
- フォーク
- 1.4k
- 平均マージ
- 6日 19時間
- マージ済み PR(30日)
- 32
説明
### problem
With a persistent network offering, CloudStack builds the network's bridge on **every** host in the zone. But when the network is deleted it only cleans the bridge up on hosts that actually ran a VM on it. On every other host, the bridge and its VXLAN interface stay behind forever.
**Investigation**
There is a difference between the filters when creating a persistent network, and removing a persistent network.
**Creation:**
`DefaultHostListener.setupPersistentNetwork()` creates the bridges on hostConnect/hostEnabled for all networks from `getAllPersistentNetworksFromZone()` - no isolation-method filter.
**Removal:**
`NetworkOrchestrator.cleanupPersistentnNetworkResources()` is gated by `networkMeetsPersistenceCriteria()`, which requires the broadcast URI scheme to be `Vlan`, so for `vxlan://` networks `CleanupPersistentNetworkResourceCommand` is never sent. (`hostAboutToBeRemoved()` sends the same cleanup with no scheme check either - the VLAN-only gate exists only on the network-delete path.)
Hosts that ran a VM on the network are cleaned up via the normal VM-lifecycle teardown, so the leak only affects uninvolved hosts.
### versions
4.22.1.1, KVM, advanced zone with VXLAN isolation, persistent network offerings.
### The steps to reproduce the bug
1. Advanced zone, KVM, VXLAN isolation, 3+ hosts.
2. Create a VPC with two tiers on a persistent offering.
3. Start VMs so they land on only some hosts. (Restarting `cloudstack-agent` on an uninvolved host also creates the bridges there via hostConnect.)
4. Delete the tiers, then the VPC.
5. `ls -d /sys/class/net/brvx-*` on each host.
Expected behaviour:
The bridge and VXLAN interface are removed from every host in the zone.
Actual behaviour:
The VNI is still present on hosts that never ran a VM on the network; `CleanupPersistentNetworkResourceCommand` never appears in `management-server.log` during the delete.
### What to do about it?
Accept `Vxlan` alongside `Vlan` in `networkMeetsPersistenceCriteria()`, or drop the scheme check to match the setup path.
コントリビューションガイド
調査の方向性
NetworkOrchestrator.cleanupPersistentnNetworkResources() と networkMeetsPersistenceCriteria() から始め、次に DefaultHostListener.setupPersistentNetwork() と hostAboutToBeRemoved() と比較します。3 台以上のホストで永続 VXLAN ネットワークの削除フローを再現し、management-server.log と /sys/class/net/brvx-* を調査します。cleanup が送信され、すべてのホストから bridge と VXLAN インターフェースが消えれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- java
- 領域
- infrastructure, networking
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 活発
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 74/100