From 109a2627b8ff6c0fd9cb5b33e72dd89923540053 Mon Sep 17 00:00:00 2001 From: santiago-ventura <160760719+santiago-ventura@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:49:40 +0200 Subject: [PATCH] health.go uses the cache to retrieve the space --- internal/cf/client.go | 9 ++++++++- internal/cf/health.go | 10 ++++++++-- internal/controllers/space_controller.go | 4 ++-- internal/facade/health.go | 10 +++++++--- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/internal/cf/client.go b/internal/cf/client.go index 18a9e1d..7ce8867 100644 --- a/internal/cf/client.go +++ b/internal/cf/client.go @@ -225,7 +225,7 @@ func NewSpaceClient(spaceGuid string, url string, username string, password stri } -func NewSpaceHealthChecker(spaceGuid string, url string, username string, password string) (facade.SpaceHealthChecker, error) { +func NewSpaceHealthChecker(spaceGuid string, url string, username string, password string, config *config.Config) (facade.SpaceHealthChecker, error) { clientCacheMutex.Lock() defer clientCacheMutex.Unlock() @@ -254,6 +254,13 @@ func NewSpaceHealthChecker(spaceGuid string, url string, username string, passwo } } + if config.IsResourceCacheEnabled && client.resourceCache == nil { + if cfResourceCache != nil { + // It is expected cfResourceCache be already populated + client.resourceCache = cfResourceCache + } + } + return client, err } diff --git a/internal/cf/health.go b/internal/cf/health.go index 7e3fc0c..46789c8 100644 --- a/internal/cf/health.go +++ b/internal/cf/health.go @@ -7,8 +7,14 @@ package cf import "context" -func (c *spaceClient) Check(ctx context.Context) error { - // TODO: Need to check if caching needed here or code can be removed +// TODO: Ask why do we have the health check with a different client than the origanization unit? +func (c *spaceClient) Check(ctx context.Context, owner string) error { + if c.resourceCache.checkResourceCacheEnabled() { + _, inCache := c.resourceCache.getSpaceFromCache(owner) + if inCache { + return nil + } + } _, err := c.client.Spaces.Get(ctx, c.spaceGuid) if err != nil { return err diff --git a/internal/controllers/space_controller.go b/internal/controllers/space_controller.go index ae9cd6f..243f09e 100644 --- a/internal/controllers/space_controller.go +++ b/internal/controllers/space_controller.go @@ -235,13 +235,13 @@ func (r *SpaceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (resu url := string(secret.Data["url"]) username := string(secret.Data["username"]) password := string(secret.Data["password"]) - checker, err := r.HealthCheckerBuilder(status.SpaceGuid, url, username, password) + checker, err := r.HealthCheckerBuilder(status.SpaceGuid, url, username, password, r.Config) if err != nil { return ctrl.Result{}, errors.Wrapf(err, "failed to build the healthchecker from secret %s", secretName) } log.V(1).Info("Checking space") - if err := checker.Check(ctx); err != nil { + if err := checker.Check(ctx, cfspace.Owner); err != nil { return ctrl.Result{}, errors.Wrap(err, "healthcheck failed") } diff --git a/internal/facade/health.go b/internal/facade/health.go index 394ba6d..b525838 100644 --- a/internal/facade/health.go +++ b/internal/facade/health.go @@ -5,11 +5,15 @@ SPDX-License-Identifier: Apache-2.0 package facade -import "context" +import ( + "context" + + "github.com/sap/cf-service-operator/internal/config" +) //counterfeiter:generate . SpaceHealthChecker type SpaceHealthChecker interface { - Check(ctx context.Context) error + Check(ctx context.Context, owner string) error } -type SpaceHealthCheckerBuilder func(string, string, string, string) (SpaceHealthChecker, error) +type SpaceHealthCheckerBuilder func(string, string, string, string, *config.Config) (SpaceHealthChecker, error)