Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement quorum reads and response merging for /v1/alerts. #4126

Merged
merged 2 commits into from
Apr 28, 2021

Conversation

stevesg
Copy link
Contributor

@stevesg stevesg commented Apr 26, 2021

What this PR does:

Reading alert listings via /v1/alerts will now read from a quorum of
replicas and return a merged response. The merging logic returns a union
of the alerts from all responses. When the same alert is returned by
multiple replicas, one is just chosen arbitrarily. This should be
sufficient as alerts posted to each replica should be identical.

The replicas may have some disagreement on the alert status, but this
should become consistent over time. For the /v2 API, we can use the
"updatedAt" timestamp to choose the most up-to-date status, but this
field is not available for the /v1 API.

Merging for /v2/alerts and /v2/alerts/groups to follow.

Checklist

  • Tests updated
  • Documentation added
  • CHANGELOG.md updated - the order of entries should be [CHANGE], [FEATURE], [ENHANCEMENT], [BUGFIX]

Reading alert listings via /v1/alerts will now read from a quorum of
replicas and return a merged response. The merging logic returns a union
of the alerts from all responses. When the same alert is returned by
multiple replicas, one is just chosen arbitrarily. This should be
sufficient as alerts posted to each replica should be identical.

The replicas may have some disagreement on the alert status, but this
should become consistent over time. For the /v2 API, we can use the
"updatedAt" timestamp to choose the most up-to-date status, but this
field is not available for the /v1 API.

Merging for /v2/alerts and /v2/alerts/groups to follow.

Signed-off-by: Steve Simpson <[email protected]>
Copy link
Contributor

@pracucci pracucci left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Amazing job, flawless! You 🤘 !

I just left few non-blocking nits.

Copy link
Contributor

@pstibrany pstibrany left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

@@ -0,0 +1,15 @@
package merger
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Super-Nit: Not sure this package carries its own weight. I know there will be v2 implementation too, but it's still looks pretty thin. Same goes for Merger interface.

Copy link
Contributor Author

@stevesg stevesg Apr 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree and wasn't 100% sure what to do. The pkg/alertmanager package is getting very busy, was my reasoning here.

Would a pkg/alertmanager/distributor perhaps be better?

Also regarding the interface, I'd be equally happy with functions, if that's what you meant? (I was mainly taking inspiration from here

type Merger interface {
)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personally I would just use pkg/alertmanager, I think it's still a small package.

Also regarding the interface, I'd be equally happy with functions, if that's what you meant?

Yes, I was thinking about just using functions here. My reasoning is that 1) we're only going to have 2 implementations (v1, v2 api) and 2) client doesn't need to supply its own implementation. But I am first to admit this is just a personal preference for this specific case, and don't mind keeping it as-is.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have a strong opinion here. I personally did like the merger package, given it's content is self contained but moving to pkg/alertmanager looks good to me as well. Let's just not block on this. V2 merging PR is awaiting for this PR! 😉

Would a pkg/alertmanager/distributor perhaps be better?

I wouldn't name the package distributor because we already have pkg/distributor and in the past (when we tried pkg/alertmanager/distributor at some point) we realised it was causing much confusion when reading the code.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leaving as-is to unblock, happy to refactor after the fact.

Signed-off-by: Steve Simpson <[email protected]>
@pracucci pracucci enabled auto-merge (squash) April 28, 2021 08:05
@pracucci pracucci merged commit c724737 into cortexproject:master Apr 28, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants