Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions cmd/unbounded-net-controller/cluster_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"k8s.io/klog/v2"

"github.com/Azure/unbounded/internal/net/controller"
statuspkg "github.com/Azure/unbounded/internal/net/status"
statusv1alpha1 "github.com/Azure/unbounded/internal/net/status/v1alpha1"
"github.com/Azure/unbounded/internal/version"
)
Expand Down Expand Up @@ -821,12 +822,8 @@ func collectClusterProblems(status *ClusterStatusResponse) []StatusProblem {
}

if overview := status.NodeOverviews[node.NodeInfo.Name]; overview != nil {
if overview.RouteMismatch {
appendProblem("node", nodeName, "Route next-hop mismatches (expected vs present)")
}

if unhealthy := overview.PeerCount - overview.HealthyPeers; unhealthy > 0 {
appendProblem("node", nodeName, fmt.Sprintf("%d peers are not healthy", unhealthy))
for _, message := range statuspkg.OverviewDiagnosticMessages(*overview, node.NodeInfo.ProviderID) {
appendProblem("node", nodeName, message)
}

continue
Expand Down
1 change: 1 addition & 0 deletions cmd/unbounded-net-controller/node_overview_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ func TestClusterOverviewPreservesCountsAndEnrichment(t *testing.T) {
overview := statusv1alpha1.NodeStatusOverview{
NodeInfo: NodeInfo{Name: "node", SiteName: "site", WireGuard: &WireGuardStatusInfo{Interface: "wg0"}},
StatusSource: "ws", PeerCount: 20, HealthyPeers: 17, RouteCount: 30, RouteMismatch: true,
RouteMismatchCount: 2, UnhealthyPeerLinks: 3,
}
c.PatchOverview("node", overview)
snapshot := c.Get()
Expand Down
29 changes: 29 additions & 0 deletions cmd/unbounded-net-controller/overview_diagnostics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,35 @@ func TestOverviewDiagnosticMessagesMatchFullProblems(t *testing.T) {
t.Fatalf("IPIP warning applied outside Azure: %v", otherCloud)
}

metadata := statuspkg.OverviewMetadata(overview)
metadata.NodeInfo.ProviderID = node.NodeInfo.ProviderID
cluster := &ClusterStatusResponse{
Nodes: []*NodeStatusResponse{&metadata},
NodeOverviews: map[string]*statusv1alpha1.NodeStatusOverview{"node": &overview},
}

problems := collectClusterProblems(cluster)
if len(problems) != 1 || !slices.Equal(problems[0].Errors, fullProblems[0].Errors) {
t.Fatalf("overview problem pipeline=%+v, legacy=%+v", problems, fullProblems)
}

metadata.NodeInfo.ProviderID = "other://vm"

if problems = collectClusterProblems(cluster); len(problems) != 1 || len(problems[0].Errors) != 2 {
t.Fatalf("controller ignored enriched cloud identity: %+v", problems)
}

overview.RouteMismatch = false
overview.RouteMismatchCount = 0
overview.UnhealthyPeerLinks = 0

if problems = collectClusterProblems(cluster); len(problems) != 0 {
t.Fatalf("overview peer counts incorrectly replaced diagnostic link health: %+v", problems)
}

overview.RouteMismatchCount = 3
overview.UnhealthyPeerLinks = 2

overview.UsesIPIP = false
if noIPIP := statuspkg.OverviewDiagnosticMessages(overview, node.NodeInfo.ProviderID); len(noIPIP) != 2 {
t.Fatalf("Azure warning applied without IPIP: %v", noIPIP)
Expand Down