-
Notifications
You must be signed in to change notification settings - Fork 3
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
Refactor account processing implementation to be more efficient #553
Refactor account processing implementation to be more efficient #553
Conversation
service/src/main/kotlin/io/provenance/explorer/service/async/ScheduledTaskService.kt
Outdated
Show resolved
Hide resolved
transaction { it.apply { this.processing = true } } | ||
send(it.processValue) | ||
transaction { record.apply { this.processing = true } } | ||
accountService.updateTokenCounts(record.processValue) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see now - updateTokenCounts
is suspended. I think you'll want to do the following because as it stands right now the subsequent line is ran before updateTokenCounts
completes, and also whether it throws an exception or not.
accountService.updateTokenCounts(record.processValue) | |
runBlocking { accountService.updateTokenCounts(record.processValue) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I updated my suggested change above so that there's no blocking calls inside of the runBlocking
, even this isn't idiomatic, but at least it's correct from a concurrency perspective and alleviates the need for a larger change surface area.
With this, the runBlocking
on 449
can be removed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, good catch. I was hoping not to use runBlocking at all, but all the grpc client methods use suspend. I decided I would look into why this pattern is used instead of change it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's a great model, but requires up and down the stack to adhere to it. In this case, the jdbc driver is thread based calls so it requires constantly bridging blocking and nonblocking code.
Description
closes: #552
Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.
Unreleased
section inCHANGELOG.md
Files changed
in the Github PR explorerCodecov Report
in the comment section below once CI passes