m/n/core/clusternet: avoid spurious updates, log more
This should make debugging
https://github.com/monogon-dev/monogon/issues/235 easier, as I haven't
been able to replicate it locally.
Change-Id: I23f1a1d3d22841558e0db3e32b76b8bb8319fd3d
Reviewed-on: https://review.monogon.dev/c/monogon/+/1876
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/core/clusternet/clusternet.go b/metropolis/node/core/clusternet/clusternet.go
index dea0f89..2e01c77 100644
--- a/metropolis/node/core/clusternet/clusternet.go
+++ b/metropolis/node/core/clusternet/clusternet.go
@@ -103,14 +103,32 @@
supervisor.Signal(ctx, supervisor.SignalHealthy)
var kubePrefixes *Prefixes
+ var prevKubePrefixes *Prefixes
+
var localAddr net.IP
+ var prevLocalAddr net.IP
+
for {
+ kubeChanged := false
+ localChanged := false
+
select {
case <-ctx.Done():
return ctx.Err()
case kubePrefixes = <-kubeC:
+ if !kubePrefixes.Equal(prevKubePrefixes) {
+ kubeChanged = true
+ }
case n := <-netC:
localAddr = n.ExternalAddress
+ if !localAddr.Equal(prevLocalAddr) {
+ localChanged = true
+ }
+ }
+
+ // Ignore spurious updates.
+ if !localChanged && !kubeChanged {
+ continue
}
// Prepare prefixes to submit to cluster.
@@ -128,7 +146,7 @@
prefixes.Update(kubePrefixes)
}
- supervisor.Logger(ctx).Infof("Submitting prefixes: %s", prefixes)
+ supervisor.Logger(ctx).Infof("Submitting prefixes: %s (kube update: %v, local update: %v)", prefixes, kubeChanged, localChanged)
err := backoff.Retry(func() error {
_, err := s.Curator.UpdateNodeClusterNetworking(ctx, &apb.UpdateNodeClusterNetworkingRequest{
@@ -145,6 +163,10 @@
if err != nil {
return fmt.Errorf("couldn't update curator: %w", err)
}
+
+ prevKubePrefixes = kubePrefixes
+ prevLocalAddr = localAddr
+
}
}
@@ -200,6 +222,12 @@
} else {
succeeded = len(newNodes)
}
- supervisor.Logger(ctx).Infof("Successfully updated %d out of %d nodes", succeeded, len(newNodes))
+
+ if len(newNodes) != 0 {
+ supervisor.Logger(ctx).Infof("Successfully updated %d out of %d nodes", succeeded, len(newNodes))
+
+ numNodes, numPrefixes := nodes.stats()
+ supervisor.Logger(ctx).Infof("Total: %d nodes, %d prefixes.", numNodes, numPrefixes)
+ }
}
}