From 7bf77c51cd784051f82218c871553f4ebcc7ca6f Mon Sep 17 00:00:00 2001 From: Michael Schurter Date: Wed, 11 May 2022 13:41:09 -0700 Subject: [PATCH] consul: allow stale namespace results Nomad reconciles services it expects to be registered in Consul with what is actually registered in the local Consul agent. This is necessary to prevent leaking service registrations if Nomad crashes at certain points (or if there are bugs). When Consul has namespaces enabled, we must iterate over each available namespace to be sure no services were leaked into non-default namespaces. Since this reconciliation happens often, there's no need to require results from the Consul leader server. In large clusters this creates far more load than the "freshness" of the response is worth. Therefore this patch switches the request to AllowStale=true --- command/agent/consul/namespaces_client.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/command/agent/consul/namespaces_client.go b/command/agent/consul/namespaces_client.go index 974b2e705a3b..7f7961bd2645 100644 --- a/command/agent/consul/namespaces_client.go +++ b/command/agent/consul/namespaces_client.go @@ -4,6 +4,8 @@ import ( "sort" "sync" "time" + + "github.com/hashicorp/consul/api" ) const ( @@ -66,9 +68,6 @@ func (ns *NamespacesClient) allowable(now time.Time) bool { } // List returns a list of Consul Namespaces. -// -// TODO(shoenig): return empty string instead of "default" when namespaces are not -// enabled. (Coming in followup PR). func (ns *NamespacesClient) List() ([]string, error) { if !ns.allowable(time.Now()) { // TODO(shoenig): lets return the empty string instead, that way we do not @@ -76,7 +75,10 @@ func (ns *NamespacesClient) List() ([]string, error) { return []string{"default"}, nil } - namespaces, _, err := ns.namespacesAPI.List(nil) + qo := &api.QueryOptions{ + AllowStale: true, + } + namespaces, _, err := ns.namespacesAPI.List(qo) if err != nil { return nil, err }