Skip to content

Fix block() issues with reactive transactions. #1537

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

Merged
merged 2 commits into from
Aug 12, 2022

Conversation

mikereiche
Copy link
Collaborator

Closes #1530.

  • You have read the Spring Data contribution guidelines.
  • There is a ticket in the bug tracker for the project in our JIRA.
  • You use the code formatters provided here and have them applied to your changes. Don’t submit any formatting related changes.
  • You submit test cases (unit or integration tests) that back your changes.
  • You added yourself as author in the headers of the classes you touched. Amend the date range in the Apache license header if needed. For new types, add the license header (copy from another file and set the current year only).

@mikereiche mikereiche requested a review from daschl August 11, 2022 14:31
Copy link
Contributor

@programmatix programmatix left a comment

Choose a reason for hiding this comment

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

What I was getting at on the previous review, about an important check being removed, is that the new overload of checkForTransactionInThreadLocalStorage() cannot detect that it's in a blocking transaction.

I've created a patch with a fix and some new tests, but I'm too stupid to figure out how to add that commit to your PR here. So please see my PR: #1538

that does not use TransactionMarkerOwner.  As this bypasses
a critical check on whether we are inside a blocking
transaction.

Two new tests in SDKTransactionsSaveIntegrationTests
(reactiveSaveInBlockingTransaction and blockingSaveInBlockingTransaction)
will fail without this, as the .save() does not realise
it's in a transaction.

Adding new tests, for .save() and for performing transactions
in reactor blocking threads.
@mikereiche
Copy link
Collaborator Author

What I was getting at on the previous review, about an important check being removed, is that the new overload of checkForTransactionInThreadLocalStorage() cannot detect that it's in a blocking transaction.

And I couldn't figure out how to use the original checkForTransactionInThreadLocalStorage() without (also) having a TransactionMarkerOwner.get() that doesn't return a Mono. The solution you put in save() didn't occur to me.

@mikereiche mikereiche merged commit 34646c1 into main Aug 12, 2022
@programmatix
Copy link
Contributor

Ah, understood now. No worries

@mikereiche mikereiche deleted the datacouch_1530_fix_block_on_save branch February 27, 2023 18:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Use of block on save document with reactive repository
2 participants