From ed51af9edd573dd5a013deb6fe6bd5ff9d02116e Mon Sep 17 00:00:00 2001 From: gotjosh Date: Thu, 10 Feb 2022 10:53:59 +0000 Subject: [PATCH 1/4] Ruler: Rule group not found API message We copied over the ruler code as part of #5089, and it seems that at the same time we stopped depending on the object storage implementation of Cortex. Turns out, there are (slight) differences between the clients which meant that response returned by the API when we try to get a rule group that is not found had changed. This ensures that is consistent with the error assertion that we have in the code for the ruler. --- pkg/storage/chunk/gcp/gcs_object_client.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/storage/chunk/gcp/gcs_object_client.go b/pkg/storage/chunk/gcp/gcs_object_client.go index c30ae24ee802..e668878f1deb 100644 --- a/pkg/storage/chunk/gcp/gcs_object_client.go +++ b/pkg/storage/chunk/gcp/gcs_object_client.go @@ -125,6 +125,9 @@ func (s *GCSObjectClient) GetObject(ctx context.Context, objectKey string) (io.R func (s *GCSObjectClient) getObject(ctx context.Context, objectKey string) (rc io.ReadCloser, size int64, err error) { reader, err := s.getsBuckets.Object(objectKey).NewReader(ctx) if err != nil { + if err == storage.ErrObjectNotExist { + return nil, 0, chunk.ErrStorageObjectNotFound + } return nil, 0, err } From b7267e12579cee25d7980d6ceac627ecf6f66aab Mon Sep 17 00:00:00 2001 From: gotjosh Date: Thu, 10 Feb 2022 11:07:20 +0000 Subject: [PATCH 2/4] Use the method from the interfaace to determine object storage --- pkg/ruler/rulestore/objectclient/rule_store.go | 2 +- pkg/storage/chunk/gcp/gcs_object_client.go | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/pkg/ruler/rulestore/objectclient/rule_store.go b/pkg/ruler/rulestore/objectclient/rule_store.go index 747cf728f6cc..a187815e642c 100644 --- a/pkg/ruler/rulestore/objectclient/rule_store.go +++ b/pkg/ruler/rulestore/objectclient/rule_store.go @@ -54,7 +54,7 @@ func NewRuleStore(client chunk.ObjectClient, loadConcurrency int, logger log.Log func (o *RuleStore) getRuleGroup(ctx context.Context, objectKey string, rg *rulespb.RuleGroupDesc) (*rulespb.RuleGroupDesc, error) { reader, _, err := o.client.GetObject(ctx, objectKey) if err != nil { - if err.Error() == chunk.ErrStorageObjectNotFound.Error() { + if o.client.IsObjectNotFoundErr(err) { level.Debug(o.logger).Log("msg", "rule group does not exist", "name", objectKey) return nil, errors.Wrapf(rulestore.ErrGroupNotFound, "get rule group user=%q, namespace=%q, name=%q", rg.GetUser(), rg.GetNamespace(), rg.GetName()) } diff --git a/pkg/storage/chunk/gcp/gcs_object_client.go b/pkg/storage/chunk/gcp/gcs_object_client.go index e668878f1deb..c30ae24ee802 100644 --- a/pkg/storage/chunk/gcp/gcs_object_client.go +++ b/pkg/storage/chunk/gcp/gcs_object_client.go @@ -125,9 +125,6 @@ func (s *GCSObjectClient) GetObject(ctx context.Context, objectKey string) (io.R func (s *GCSObjectClient) getObject(ctx context.Context, objectKey string) (rc io.ReadCloser, size int64, err error) { reader, err := s.getsBuckets.Object(objectKey).NewReader(ctx) if err != nil { - if err == storage.ErrObjectNotExist { - return nil, 0, chunk.ErrStorageObjectNotFound - } return nil, 0, err } From fd6ed16805cb94c996a2ef83107b14734ccec067 Mon Sep 17 00:00:00 2001 From: gotjosh Date: Thu, 10 Feb 2022 11:10:05 +0000 Subject: [PATCH 3/4] also include DeleteObject --- pkg/ruler/rulestore/objectclient/rule_store.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/ruler/rulestore/objectclient/rule_store.go b/pkg/ruler/rulestore/objectclient/rule_store.go index a187815e642c..a51e04ae997e 100644 --- a/pkg/ruler/rulestore/objectclient/rule_store.go +++ b/pkg/ruler/rulestore/objectclient/rule_store.go @@ -214,7 +214,7 @@ func (o *RuleStore) SetRuleGroup(ctx context.Context, userID string, namespace s func (o *RuleStore) DeleteRuleGroup(ctx context.Context, userID string, namespace string, groupName string) error { objectKey := generateRuleObjectKey(userID, namespace, groupName) err := o.client.DeleteObject(ctx, objectKey) - if err == chunk.ErrStorageObjectNotFound { + if o.client.IsObjectNotFoundErr(err) { return rulestore.ErrGroupNotFound } return err From 425496caad27c93b98d9f92fb1fa9748d1c70ca5 Mon Sep 17 00:00:00 2001 From: gotjosh Date: Thu, 10 Feb 2022 11:15:28 +0000 Subject: [PATCH 4/4] appease the linter --- pkg/ruler/rulestore/objectclient/rule_store.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/ruler/rulestore/objectclient/rule_store.go b/pkg/ruler/rulestore/objectclient/rule_store.go index a51e04ae997e..b945c298af0b 100644 --- a/pkg/ruler/rulestore/objectclient/rule_store.go +++ b/pkg/ruler/rulestore/objectclient/rule_store.go @@ -54,7 +54,7 @@ func NewRuleStore(client chunk.ObjectClient, loadConcurrency int, logger log.Log func (o *RuleStore) getRuleGroup(ctx context.Context, objectKey string, rg *rulespb.RuleGroupDesc) (*rulespb.RuleGroupDesc, error) { reader, _, err := o.client.GetObject(ctx, objectKey) if err != nil { - if o.client.IsObjectNotFoundErr(err) { + if o.client.IsObjectNotFoundErr(err) { level.Debug(o.logger).Log("msg", "rule group does not exist", "name", objectKey) return nil, errors.Wrapf(rulestore.ErrGroupNotFound, "get rule group user=%q, namespace=%q, name=%q", rg.GetUser(), rg.GetNamespace(), rg.GetName()) }