From 148bd50e9fb6e202d5e64844ef5d21062364624f Mon Sep 17 00:00:00 2001 From: James Shubin Date: Sat, 5 Apr 2025 15:28:54 -0400 Subject: [PATCH] engine, etcd: Prevent engine thrashing These two small bugs would allow thrashing to occur since we'd constantly delete and re-add exports, and constantly think that a noop etcd operation made a change. --- engine/graph/exporter.go | 7 +++++++ etcd/client/resources/resources.go | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/engine/graph/exporter.go b/engine/graph/exporter.go index 863c4b67..2c602457 100644 --- a/engine/graph/exporter.go +++ b/engine/graph/exporter.go @@ -236,7 +236,14 @@ func (obj *Exporter) Prune(ctx context.Context, graph *pgraph.Graph) error { // If we do this erroneously, it causes extra traffic. obj.state[k] = false // do this only if the Res is NEW continue // skip it, it's staying + + } else if exists { + // If it exists and it's the same as it was, do nothing. + // This is important to prevent thrashing/flapping... + continue } + + // These don't exist anymore, we have to get rid of them... delete(obj.state, k) // it's gone! resourceDeletes = append(resourceDeletes, &k) } diff --git a/etcd/client/resources/resources.go b/etcd/client/resources/resources.go index dbf8cb04..0316efab 100644 --- a/etcd/client/resources/resources.go +++ b/etcd/client/resources/resources.go @@ -148,7 +148,7 @@ func SetResources(ctx context.Context, client interfaces.Client, hostname string return false, err } - b = b && out.Succeeded // collect the true/false responses... + b = b && !out.Succeeded // collect the true/false responses... } // false means something changed