From ea2b7c4bdfa90dc616253514360b4822b5542770 Mon Sep 17 00:00:00 2001 From: Oleh Rakovych <44996098+olehrakovych@users.noreply.github.com> Date: Thu, 6 Feb 2025 04:04:13 +0100 Subject: [PATCH] fix(remote): Support partial remote instance failure (#990) Failing remotes allowed and logged Co-authored-by: Oleh Rakovych --- api/endpoint_status.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/api/endpoint_status.go b/api/endpoint_status.go index 64c5df72..691fa8ca 100644 --- a/api/endpoint_status.go +++ b/api/endpoint_status.go @@ -59,12 +59,14 @@ func getEndpointStatusesFromRemoteInstances(remoteConfig *remote.Config) ([]*end for _, instance := range remoteConfig.Instances { response, err := httpClient.Get(instance.URL) if err != nil { - return nil, err + // Log the error but continue with other instances + logr.Errorf("[api.getEndpointStatusesFromRemoteInstances] Failed to retrieve endpoint statuses from %s: %s", instance.URL, err.Error()) + continue } var endpointStatuses []*endpoint.Status if err = json.NewDecoder(response.Body).Decode(&endpointStatuses); err != nil { _ = response.Body.Close() - logr.Errorf("[api.getEndpointStatusesFromRemoteInstances] Silently failed to retrieve endpoint statuses from %s: %s", instance.URL, err.Error()) + logr.Errorf("[api.getEndpointStatusesFromRemoteInstances] Failed to decode endpoint statuses from %s: %s", instance.URL, err.Error()) continue } _ = response.Body.Close() @@ -73,6 +75,10 @@ func getEndpointStatusesFromRemoteInstances(remoteConfig *remote.Config) ([]*end } endpointStatusesFromAllRemotes = append(endpointStatusesFromAllRemotes, endpointStatuses...) } + // Only return nil, error if no remote instances were successfully processed + if len(endpointStatusesFromAllRemotes) == 0 && remoteConfig.Instances != nil { + return nil, fmt.Errorf("failed to retrieve endpoint statuses from all remote instances") + } return endpointStatusesFromAllRemotes, nil }