From ff9c9680e69ff4eb7dfbe9de4b18af2da5faad09 Mon Sep 17 00:00:00 2001 From: Hans Kristian Flaatten Date: Wed, 25 Oct 2023 09:53:00 +0200 Subject: [PATCH] Resume publish when creating a new publisher (#226) * Resume publish when creating a new publisher * Make labels consistent --- controllers/unleash_controller.go | 15 +++++++++++---- controllers/unleash_controller_test.go | 6 +++++- pkg/federation/publisher.go | 3 +++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/controllers/unleash_controller.go b/controllers/unleash_controller.go index 03fea770..45987806 100644 --- a/controllers/unleash_controller.go +++ b/controllers/unleash_controller.go @@ -32,7 +32,12 @@ import ( "github.com/nais/unleasherator/pkg/unleashclient" ) -const unleashFinalizer = "unleash.nais.io/finalizer" +const ( + unleashFinalizer = "unleash.nais.io/finalizer" + unleashPublishMetricStatusSending = "sending" + unleashPublishMetricStatusSuccess = "success" + unleashPublishMetricStatusFailed = "failed" +) var ( // unleashStatus is a Prometheus metric which will be used to expose the status of the Unleash instances @@ -321,21 +326,23 @@ func (r *UnleashReconciler) publish(ctx context.Context, unleash *unleashv1.Unle } log.Info("Publishing Unleash instance to federation") + // Count the number of Unleash instances published + unleashPublished.WithLabelValues("provisioned", unleashPublishMetricStatusSending).Inc() token, err := unleash.AdminToken(ctx, r.Client, r.OperatorNamespace) if err != nil { - unleashPublished.WithLabelValues("provisioned", "failed").Inc() + unleashPublished.WithLabelValues("provisioned", unleashPublishMetricStatusFailed).Inc() log.Error(err, "Failed to fetch API token") return fmt.Errorf("publish could not fetch API token: %w", err) } err = r.Federation.Publisher.Publish(ctx, unleash, string(token)) if err != nil { - unleashPublished.WithLabelValues("provisioned", "failed").Inc() + unleashPublished.WithLabelValues("provisioned", unleashPublishMetricStatusFailed).Inc() return fmt.Errorf("publish could not publish Unleash instance: %w", err) } - unleashPublished.WithLabelValues("provisioned", "success").Inc() + unleashPublished.WithLabelValues("provisioned", unleashPublishMetricStatusSuccess).Inc() return nil } diff --git a/controllers/unleash_controller_test.go b/controllers/unleash_controller_test.go index f0264f37..6ab6f6b0 100644 --- a/controllers/unleash_controller_test.go +++ b/controllers/unleash_controller_test.go @@ -161,7 +161,11 @@ var _ = Describe("Unleash controller", func() { Expect(mockPublisher.AssertCalled(GinkgoT(), "Publish", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("*unleash_nais_io_v1.Unleash"), mock.AnythingOfType("string"))).To(BeTrue()) Expect(mockPublisher.AssertNumberOfCalls(GinkgoT(), "Publish", 1)).To(BeTrue()) - val, err := promCounterVecVal(unleashPublished, "provisioned", "success") + val, err := promCounterVecVal(unleashPublished, "provisioned", unleashPublishMetricStatusSending) + Expect(err).To(BeNil()) + Expect(val).To(Equal(float64(1))) + + val, err = promCounterVecVal(unleashPublished, "provisioned", unleashPublishMetricStatusSuccess) Expect(err).To(BeNil()) Expect(val).To(Equal(float64(1))) diff --git a/pkg/federation/publisher.go b/pkg/federation/publisher.go index 95db97fc..149d5b44 100644 --- a/pkg/federation/publisher.go +++ b/pkg/federation/publisher.go @@ -59,5 +59,8 @@ func (p *publisher) Publish(ctx context.Context, unleash *unleashv1.Unleash, api } func NewPublisher(client *pubsub.Client, topic *pubsub.Topic) Publisher { + // Fix for the following pubsub error, this clears the ordering key for the topic when the publisher is created + // pubsub: Publishing for ordering key, order, paused due to previous error. Call topic.ResumePublish(orderingKey) before resuming publishing + topic.ResumePublish(pubsubOrderingKey) return &publisher{client: client, topic: topic} }