From d3139cf2efbb99c70398e52d7b03c89507b6c942 Mon Sep 17 00:00:00 2001 From: Gaurav Ghildiyal Date: Mon, 27 Mar 2023 15:16:38 -0700 Subject: [PATCH] Use Patch when syncing GCP BackendService. Linking backend groups still uses Update --- pkg/backends/backends.go | 19 +++++++++++++++++++ pkg/backends/interfaces.go | 2 ++ pkg/backends/syncer.go | 5 ++++- pkg/backends/syncer_test.go | 3 +++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/pkg/backends/backends.go b/pkg/backends/backends.go index 4a00e62760..3534d57fbd 100644 --- a/pkg/backends/backends.go +++ b/pkg/backends/backends.go @@ -129,6 +129,25 @@ func (b *Backends) Update(be *composite.BackendService) error { return nil } +// Patch implements Pool. +func (b *Backends) Patch(be *composite.BackendService) error { + // Ensure the backend service has the proper version before updating. + be.Version = features.VersionFromDescription(be.Description) + scope, err := composite.ScopeFromSelfLink(be.SelfLink) + if err != nil { + return err + } + + key, err := composite.CreateKey(b.cloud, be.Name, scope) + if err != nil { + return err + } + if err := composite.PatchBackendService(b.cloud, key, be); err != nil { + return err + } + return nil +} + // Get implements Pool. func (b *Backends) Get(name string, version meta.Version, scope meta.KeyType) (*composite.BackendService, error) { key, err := composite.CreateKey(b.cloud, name, scope) diff --git a/pkg/backends/interfaces.go b/pkg/backends/interfaces.go index f8f20ab2f0..57826bc5bf 100644 --- a/pkg/backends/interfaces.go +++ b/pkg/backends/interfaces.go @@ -39,6 +39,8 @@ type Pool interface { Create(sp utils.ServicePort, hcLink string) (*composite.BackendService, error) // Update a BackendService given the composite type. Update(be *composite.BackendService) error + // Patch a BackendService given the composite type. + Patch(be *composite.BackendService) error // Delete a BackendService given its name. Delete(name string, version meta.Version, scope meta.KeyType) error // Get the health of a BackendService given its name. diff --git a/pkg/backends/syncer.go b/pkg/backends/syncer.go index dcfee12318..b3b93600b9 100644 --- a/pkg/backends/syncer.go +++ b/pkg/backends/syncer.go @@ -113,7 +113,7 @@ func (s *backendSyncer) ensureBackendService(sp utils.ServicePort) error { } if needUpdate { - if err := s.backendPool.Update(be); err != nil { + if err := s.backendPool.Patch(be); err != nil { return err } } @@ -305,6 +305,9 @@ func ensureProtocol(be *composite.BackendService, p utils.ServicePort) (needsUpd if be.Protocol == string(p.Protocol) { return false } + + fmt.Printf("protocol needs change; got be = %+v, want protocol = %v\n", be, p.Protocol) + be.Protocol = string(p.Protocol) return true } diff --git a/pkg/backends/syncer_test.go b/pkg/backends/syncer_test.go index 88432dbc24..be4f6e11a3 100644 --- a/pkg/backends/syncer_test.go +++ b/pkg/backends/syncer_test.go @@ -154,6 +154,9 @@ func newTestSyncer(fakeGCE *gce.Cloud) *backendSyncer { (fakeGCE.Compute().(*cloud.MockGCE)).MockAlphaBackendServices.UpdateHook = mock.UpdateAlphaBackendServiceHook (fakeGCE.Compute().(*cloud.MockGCE)).MockBetaBackendServices.UpdateHook = mock.UpdateBetaBackendServiceHook (fakeGCE.Compute().(*cloud.MockGCE)).MockBackendServices.UpdateHook = mock.UpdateBackendServiceHook + (fakeGCE.Compute().(*cloud.MockGCE)).MockAlphaBackendServices.PatchHook = mock.UpdateAlphaBackendServiceHook + (fakeGCE.Compute().(*cloud.MockGCE)).MockBetaBackendServices.PatchHook = mock.UpdateBetaBackendServiceHook + (fakeGCE.Compute().(*cloud.MockGCE)).MockBackendServices.PatchHook = mock.UpdateBackendServiceHook (fakeGCE.Compute().(*cloud.MockGCE)).MockHealthChecks.UpdateHook = mock.UpdateHealthCheckHook (fakeGCE.Compute().(*cloud.MockGCE)).MockAlphaHealthChecks.UpdateHook = mock.UpdateAlphaHealthCheckHook (fakeGCE.Compute().(*cloud.MockGCE)).MockAlphaRegionHealthChecks.UpdateHook = mock.UpdateAlphaRegionHealthCheckHook