-
Notifications
You must be signed in to change notification settings - Fork 32
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
RFQ Quoter: generate quotes in parallel #2847
Conversation
WalkthroughThe updates to Changes
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configration File (
|
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.
PR Summary
- Introduced parallel processing for quote generation using goroutines
- Added mutex for synchronization during quote generation
1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #2847 +/- ##
===================================================
+ Coverage 25.66758% 25.84121% +0.17362%
===================================================
Files 770 713 -57
Lines 55424 52811 -2613
Branches 80 80
===================================================
- Hits 14226 13647 -579
+ Misses 39740 37769 -1971
+ Partials 1458 1395 -63
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
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.
Actionable comments posted: 2
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (1)
- services/rfq/relayer/quoter/quoter.go (2 hunks)
Additional context used
GitHub Check: Lint (services/rfq)
services/rfq/relayer/quoter/quoter.go
[failure] 339-339:
Using the variable on range scopekeyTokenID
in function literal (scopelint)
[failure] 343-343:
Using the variable on range scopekeyTokenID
in function literal (scopelint)
Additional comments not posted (4)
services/rfq/relayer/quoter/quoter.go (4)
11-12
: Concurrency and synchronization mechanisms added.The addition of
sync
andsync/atomic
packages is appropriate for managing concurrency and synchronization.
Line range hint
84-84
:
Concurrency using errgroup added.The use of
errgroup
to screen sender and recipient addresses in parallel is an excellent addition for improving performance.
Line range hint
245-245
:
Concurrency and error handling improvements.The changes to handle concurrency and error handling are well-implemented, ensuring efficient and reliable quote submission.
329-331
: Concurrency using errgroup added.The use of
errgroup
to generate quotes in parallel is an excellent addition for improving performance.
if quoteErr != nil { | ||
// continue generating quotes even if one fails | ||
span.AddEvent("error generating quote", trace.WithAttributes( | ||
attribute.String("key_token_id", keyTokenID), |
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.
Fix variable scope issue in goroutine.
The variable keyTokenID
from the range scope is used in the goroutine, which can lead to incorrect behavior.
- span.AddEvent("error generating quote", trace.WithAttributes(
- attribute.String("key_token_id", keyTokenID),
+ span.AddEvent("error generating quote", trace.WithAttributes(
+ attribute.String("key_token_id", keyToken),
Committable suggestion was skipped due to low confidence.
Tools
GitHub Check: Lint (services/rfq)
[failure] 343-343:
Using the variable on range scopekeyTokenID
in function literal (scopelint)
g.Go(func() error { | ||
quote, quoteErr := m.generateQuote(gctx, keyTokenID, chainID, address, balance, destRFQAddr) |
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.
Fix variable scope issue in goroutine.
The variable keyTokenID
from the range scope is used in the goroutine, which can lead to incorrect behavior.
- for _, tokenID := range itemTokenIDs {
- if tokenID == destTokenID {
- g.Go(func() error {
- quote, quoteErr := m.generateQuote(gctx, keyTokenID, chainID, address, balance, destRFQAddr)
+ for i := range itemTokenIDs {
+ if itemTokenIDs[i] == destTokenID {
+ keyToken := keyTokenID
+ g.Go(func() error {
+ quote, quoteErr := m.generateQuote(gctx, keyToken, chainID, address, balance, destRFQAddr)
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
g.Go(func() error { | |
quote, quoteErr := m.generateQuote(gctx, keyTokenID, chainID, address, balance, destRFQAddr) | |
for i := range itemTokenIDs { | |
if itemTokenIDs[i] == destTokenID { | |
keyToken := keyTokenID | |
g.Go(func() error { | |
quote, quoteErr := m.generateQuote(gctx, keyToken, chainID, address, balance, destRFQAddr) |
Tools
GitHub Check: Lint (services/rfq)
[failure] 339-339:
Using the variable on range scopekeyTokenID
in function literal (scopelint)
Deploying sanguine-fe with Cloudflare Pages
|
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.
PR Summary
(updates since last review)
- Modified
services/rfq/relayer/quoter/quoter.go
to generate quotes in parallel using goroutines and an error group - Enhanced error handling during quote generation for increased robustness
- Improved performance and reliability of the quote generation process
1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings
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.
Actionable comments posted: 0
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (1)
- services/rfq/relayer/quoter/quoter.go (2 hunks)
Additional comments not posted (7)
services/rfq/relayer/quoter/quoter.go (7)
11-11
: Imports approved.The new imports for synchronization and parallel processing are appropriate.
Line range hint
48-58
:
Struct additions approved.The added fields for managing relay state and recording metrics are appropriate.
Line range hint
75-99
:
Function changes approved.The initialization of
relayPaused
andquoteAmountGauge
is appropriate.
Line range hint
106-134
:
Function changes approved.The use of
relayPaused
anderrgroup
for parallel processing enhances error handling and efficiency.
Line range hint
184-208
:
Function changes approved.The use of
relayPaused
for error management is appropriate.
Line range hint
213-248
:
Function changes approved.The use of
errgroup
for parallel quote generation enhances efficiency.
329-360
: Function changes approved.The use of
errgroup
for parallel quote generation andsync.Mutex
for synchronization enhances efficiency and thread safety.
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.
PR Summary
(updates since last review)
- Added
rfqRefund
command incontrib/opbot/botmd/commands.go
for refunding quote requests. - Updated
contrib/opbot/botmd/botmd.go
to initialize RPC client, signer, and transaction submitter. - Introduced new configuration fields in
contrib/opbot/config/config.go
for RFQ API, OmniRPC, Signer, Submitter, and Database. - Enhanced tracing middleware in
contrib/opbot/botmd/middleware.go
for better context propagation. - Updated
services/rfq/api/rest/server.go
to add a new API endpoint for retrieving contract addresses.
45 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings
Summary by CodeRabbit
New Features
Bug Fixes