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

Optimize exec async #16

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open

Optimize exec async #16

wants to merge 8 commits into from

Conversation

NRHelmi
Copy link
Contributor

@NRHelmi NRHelmi commented Aug 11, 2022

Return fast-path response if exists

@NRHelmi NRHelmi requested review from vilterp and NHDaly August 11, 2022 00:16
@NRHelmi NRHelmi changed the title Fix exec async race condition Optimize exec async Aug 11, 2022
@@ -4,15 +4,32 @@

public class TransactionAsyncResult extends Entity {

public Boolean gotCompletedResult;
Copy link

Choose a reason for hiding this comment

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

let's call this gotCompleteResult, not gotCompletedResult, inline with the Go SDK: https://github.com/RelationalAI/rai-sdk-go/blob/bbc1c3bba86b43865e983d992d48161e5652530f/rai/models.go#L302-L303

It doesn't mean that the transaction was completed, it means that it was either completed or aborted, and we got the results.

Copy link

Choose a reason for hiding this comment

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

I guess there are a few cases we're covering with this type:

  1. ExecuteAsync => fast path; contains results. state is aborted or completed
  2. ExecuteAsync => slow path; doesn't contain results. state is running
  3. Execute => regardless of path, contains results. either aborted or completed

I guess gotCompleteResult differentiates (1) from (2)? But why do we need it? Can't we use the state to differentiate?

What am I missing @NHDaly

Copy link
Member

@NHDaly NHDaly Aug 11, 2022

Choose a reason for hiding this comment

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

We discussed how in the original spec (before you joined the project, i think, @vilterp), we intended to have a fourth state:
4. ExecuteAsync => fast path; does not contain results (because they are too big to send over the wire, and you presumably want to page them). state is aborted or completed

So i think this isn't strictly needed right now; it's a future-proofing that you and I did while we were looking at the code.

Copy link

Choose a reason for hiding this comment

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

K thanks. I forgot that it was future proofing and not a case we need now.

@NHDaly
Copy link
Member

NHDaly commented Aug 17, 2022

PR merge conflicts. let us know when you're ready for us to look again!

@NRHelmi
Copy link
Contributor Author

NRHelmi commented Aug 22, 2022

@NHDaly PR looks good again 😄

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.

3 participants