Protect against concurrent duplicated webhooks#286
Merged
Conversation
By acquiring an update lock on the payment, we can ensure that only one concurrent excecution of the webhook handler will manipulate it. That will avoid duplicated log entries and obscure exceptions. Closes #188
3 tasks
elia
approved these changes
Apr 17, 2023
| it "does nothing if the payment is already voided" do | ||
| payment_method = create(:stripe_payment_method) | ||
| stripe_payment_intent = Stripe::PaymentIntent.construct_from(id: "pi_123") | ||
| stripe_payment_intent = Stripe::PaymentIntent.construct_from(id: "pi_123", cancellation_reason: "duplicate") |
Member
There was a problem hiding this comment.
Just curious about this change, what's the story behind it?
Contributor
There was a problem hiding this comment.
@elia, I think this is from a comment that I left some time ago 😅 #250 (comment)
Contributor
Author
There was a problem hiding this comment.
The cancellation reason from the event is used to build the log entry message. We don't use it when the payment is already voided.
Before this PR, we skipped fetching it when the payment was already voided. However, we're now fetching it before acquiring the lock (where the voided check needs to happen) only to hold the lock for the minimum required time.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
By acquiring an update lock on the payment, we can ensure that only one concurrent excecution of the webhook handler will manipulate it. That will avoid duplicated log entries and obscure exceptions.
Closes #188
Checklist
Check out our PR guidelines for more details.
The following are mandatory for all PRs:
The following are not always needed: