GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — network: ExternalGuestNetworkGuru should defer to specialized gurus by msinhore · Pull Request #133 · shapeblue/cloudstack

Conversation

@msinhore

@msinhore msinhore commented Apr 30, 2026

Copy link
Copy Markdown

ExternalGuestNetworkGuru.canHandle currently accepts any Advanced / Guest / Isolated|L2 offering whose physical network advertises GRE / L3 / VLAN as one of its isolation methods, regardless of the provider list on the offering. When the same physical network also advertises a SDN-specific isolation method (OVN, NSX, NETRIS, ...), operators routinely keep VLAN registered alongside it for legacy offerings — and that single fact is enough to make this guru claim modern, specialized offerings too.

NetworkOrchestrator.setupNetwork iterates every NetworkGuru and persists one NetworkVO row per matching guru. With the current canHandle, the specialized guru (e.g. OvnGuestNetworkGuru) creates the real row that gets implemented, while ExternalGuestNetworkGuru silently creates a second, parallel row that stays in Allocated state forever: no broadcast_uri, no implement() call, but visible in listNetworks and the UI as a phantom tier / network.

This breaks user-visible state in two ways:

  • listNetworks returns duplicate entries for every isolated network or VPC tier on a zone whose physical network keeps VLAN registered alongside the specialized isolation method.
  • Cleanup paths can leave the orphaned row behind even after the real network is destroyed, because it was never linked to any backend state.

The fix is to make ExternalGuestNetworkGuru bail out of canHandle when the offering binds any of its services to a provider that ships its own dedicated NetworkGuru: Ovn, Netris, Nsx, Tungsten, Ovs. Those providers have their own canHandle that already gates on their isolation method and their provider in networkOfferingServiceMapDao — so the specialized guru is always the canonical claimant for those offerings.

The list is intentionally explicit and conservative: it covers every in-tree guest NetworkGuru that lives outside ExternalGuestNetworkGuru and that targets the same Isolated / L2 offerings on the Advanced zone. SspGuestNetworkGuru and VxlanGuestNetworkGuru are not in the list because they use isolation methods (SSP, VXLAN) that ExternalGuestNetworkGuru never matched in the first place, so there was no overlap to fix there.

Lab-validated end to end on an OVN-backed zone whose physical network had OVN+VLAN registered: every newly created VPC tier and isolated network now produces exactly one networks row instead of two.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@msinhore
network: ExternalGuestNetworkGuru should defer to specialized gurus
01f65c6
ExternalGuestNetworkGuru.canHandle currently accepts any Advanced /
Guest / Isolated|L2 offering whose physical network advertises
GRE / L3 / VLAN as one of its isolation methods, regardless of the
provider list on the offering. When the same physical network also
advertises a SDN-specific isolation method (OVN, NSX, NETRIS, ...),
operators routinely keep VLAN registered alongside it for legacy
offerings — and that single fact is enough to make this guru claim
modern, specialized offerings too.

NetworkOrchestrator.setupNetwork iterates every NetworkGuru and
persists one NetworkVO row per matching guru. With the current
canHandle, the specialized guru (e.g. OvnGuestNetworkGuru) creates
the real row that gets implemented, while ExternalGuestNetworkGuru
silently creates a second, parallel row that stays in Allocated state
forever: no broadcast_uri, no implement() call, but visible in
listNetworks and the UI as a phantom tier / network.

This breaks user-visible state in two ways:
- listNetworks returns duplicate entries for every isolated network or
  VPC tier on a zone whose physical network keeps VLAN registered
  alongside the specialized isolation method.
- Cleanup paths can leave the orphaned row behind even after the real
  network is destroyed, because it was never linked to any backend
  state.

The fix is to make ExternalGuestNetworkGuru bail out of canHandle when
the offering binds any of its services to a provider that ships its
own dedicated NetworkGuru: Ovn, Netris, Nsx, Tungsten, BigSwitchBcf,
NiciraNvp, Opendaylight, BrocadeVcs, Ovs. Those providers have their
own canHandle that already gates on their isolation method *and*
their provider in networkOfferingServiceMapDao — so the specialized
guru is always the canonical claimant for those offerings.

The list is intentionally explicit and conservative: it covers every
in-tree guest NetworkGuru that lives outside ExternalGuestNetworkGuru
and that targets the same Isolated / L2 offerings on the Advanced
zone. SspGuestNetworkGuru and VxlanGuestNetworkGuru are not in the
list because they use isolation methods (SSP, VXLAN) that
ExternalGuestNetworkGuru never matched in the first place, so there
was no overlap to fix there.

Lab-validated end to end on an OVN-backed zone whose physical network
had OVN+VLAN registered: every newly created VPC tier and isolated
network now produces exactly one networks row instead of two.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@msinhore
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.