From f94f54a22418c1aa6a92103ba35bb3494ad0ed3b Mon Sep 17 00:00:00 2001 From: Derek Menteer <105233703+hashi-derek@users.noreply.github.com> Date: Wed, 24 May 2023 16:32:45 -0500 Subject: [PATCH] Fix namespaced peer service updates / deletes. (#17456) * Fix namespaced peer service updates / deletes. This change fixes a function so that namespaced services are correctly queried when handling updates / deletes. Prior to this change, some peered services would not correctly be un-exported. * Add changelog. --- .changelog/17456.txt | 3 +++ agent/grpc-external/services/peerstream/replication.go | 6 ++++-- agent/grpc-external/services/peerstream/stream_test.go | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 .changelog/17456.txt diff --git a/.changelog/17456.txt b/.changelog/17456.txt new file mode 100644 index 000000000..7b81d5354 --- /dev/null +++ b/.changelog/17456.txt @@ -0,0 +1,3 @@ +```release-note:bug +peering: Fix issue where modifying the list of exported services did not correctly replicate changes for services that exist in a non-default namespace. +``` diff --git a/agent/grpc-external/services/peerstream/replication.go b/agent/grpc-external/services/peerstream/replication.go index 29d8db9dc..a0c1e4387 100644 --- a/agent/grpc-external/services/peerstream/replication.go +++ b/agent/grpc-external/services/peerstream/replication.go @@ -285,9 +285,11 @@ func (s *Server) handleUpsertExportedServiceList( exportedServices[snSidecarProxy] = struct{}{} serviceNames = append(serviceNames, sn) } - entMeta := structs.NodeEnterpriseMetaInPartition(partition) - _, serviceList, err := s.GetStore().ServiceList(nil, entMeta, peerName) + // Ensure we query services from all namespaces in this partition when we perform + // this query or else we may not propagate updates / deletes correctly. + entMeta := acl.NewEnterpriseMetaWithPartition(partition, acl.WildcardName) + _, serviceList, err := s.GetStore().ServiceList(nil, &entMeta, peerName) if err != nil { return err } diff --git a/agent/grpc-external/services/peerstream/stream_test.go b/agent/grpc-external/services/peerstream/stream_test.go index a2f1adb97..da4c55b22 100644 --- a/agent/grpc-external/services/peerstream/stream_test.go +++ b/agent/grpc-external/services/peerstream/stream_test.go @@ -1960,7 +1960,7 @@ func processResponse_ExportedServiceUpdates( localEntMeta acl.EnterpriseMeta, peerName string, tests []PeeringProcessResponse_testCase, -) { +) *MutableStatus { // create a peering in the state store peerID := "1fabcd52-1d46-49b0-b1d8-71559aee47f5" require.NoError(t, store.PeeringWrite(31, &pbpeering.PeeringWriteRequest{ @@ -2041,6 +2041,7 @@ func processResponse_ExportedServiceUpdates( run(t, tc) }) } + return mst } func Test_processResponse_ExportedServiceUpdates(t *testing.T) {