-
Notifications
You must be signed in to change notification settings - Fork 0
perf(delegators): significantly improve extraction performance #36
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
Conversation
WalkthroughThe pull request introduces modifications to two key files: Changes
Sequence DiagramsequenceDiagram
participant Reader as Delegators Reader
participant Keeper as Staking Keeper
participant Accounts as Account Walker
participant Payload as Payload Generator
Reader->>Accounts: Walk through accounts
Accounts-->>Reader: Provide account address
Reader->>Keeper: Extract delegations
Keeper-->>Reader: Return delegations
Reader->>Payload: Convert delegations to JSON
Payload-->>Reader: Return JSON payload
The sequence diagram illustrates the new flow of processing delegations, showing how the system now walks through accounts, extracts delegations, and converts them to payloads in a more streamlined manner. ✨ Finishing Touches
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 using PR comments)
Other keywords and placeholders
CodeRabbit Configuration 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.
Actionable comments posted: 1
🧹 Nitpick comments (1)
pkg/delegators/reader.go (1)
89-91
: Simplify the delegation extraction by removing unnecessary use oflo.FlatMap
.Since we're dealing with a single address, using
lo.FlatMap
over a slice containing only one element adds unnecessary complexity. You can simplify the code by calling the extraction function directly.Apply this diff to simplify the code:
- delegations := lo.FlatMap([]sdk.AccAddress{addr}, - extractDelegations(ctx, r.logger, keepers.Staking, killChan), - ) + delegations, err := extractDelegations(ctx, r.logger, keepers.Staking, killChan)(addr, 0) + if err != nil { + return true, err + }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
pkg/delegators/reader.go
(3 hunks)pkg/keeper/keeper.go
(2 hunks)
🔇 Additional comments (3)
pkg/delegators/reader.go (2)
88-109
:⚠️ Potential issueEnsure proper error handling and prevent potential deadlocks with
killChan
.The current implementation sends errors to
killChan
within callbacks, which may lead to blocking ifkillChan
is not being consumed properly. This could cause deadlocks. Consider handling errors directly within the function or ensure thatkillChan
is consumed in a non-blocking manner.Please verify that
killChan
is being consumed appropriately. If necessary, adjust the error handling to prevent blocking. Here's a possible way to refactor error handling:// Inside ProcessData function err = keepers.Account.Accounts.Walk(ctx, nil, func(addr sdk.AccAddress, _ sdk.AccountI) (stop bool, err error) { - delegations := lo.FlatMap([]sdk.AccAddress{addr}, - extractDelegations(ctx, r.logger, keepers.Staking, killChan), - ) + delegations, err := extractDelegations(ctx, r.logger, keepers.Staking)(addr, 0) + if err != nil { + r.logger.Error(err.Error()) + return true, err + } // ... rest of the code })
100-105
:⚠️ Potential issueAdd nil check for
delegations
to prevent potential nil pointer dereference.If
delegations
isnil
due to an error, iterating over it will cause a runtime panic. Ensure you check fornil
before iterating.Apply this diff to add a nil check:
+ if delegations == nil { + return false, nil + } for _, delegation := range delegations { json, err := delegatorToPayload(r, delegation) if err != nil { return true, err } outputChan <- json }Likely invalid or redundant comment.
pkg/keeper/keeper.go (1)
116-117
: Verify that all required interfaces are registered after changing the registration method.By switching from manual interface registration to using
authtypes.RegisterInterfaces
andvestingtypes.RegisterInterfaces
, ensure that all necessary interfaces, including any custom ones, are properly registered. Missing interface registrations can lead to issues with encoding/decoding.Please confirm that the new registration methods cover all required interfaces. If uncertain, consider adding the following verification script:
✅ Verification successful
Standard SDK interface registration methods are correctly implemented
The verification confirms that using
authtypes.RegisterInterfaces
andvestingtypes.RegisterInterfaces
is sufficient as:
- No custom interfaces requiring registration were found in the codebase
- The only interface definition found is an internal IO-related interface that doesn't require codec registration
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify that all necessary interfaces are registered. # List all interfaces registered grep -rnw 'pkg/' -e 'RegisterInterface' | grep -E 'authtypes|vestingtypes' # Check for any custom interfaces that need registration grep -rnw 'pkg/' -e 'interfaceRegistry.RegisterInterface'Length of output: 128
Script:
#!/bin/bash # Search for interface registrations and definitions more broadly echo "=== Searching for interface registrations ===" rg -l "RegisterInterfaces|RegisterImplementations" --type go echo -e "\n=== Looking for interface definitions ===" ast-grep --pattern 'type $_ interface { $$$ }' echo -e "\n=== Checking for custom codec registrations ===" rg -l "codec\.Register|RegisterCodec|RegisterConcrete" --type goLength of output: 617
@coderabbitai resolve |
✅ Actions performedComments resolved. |
🎉 This PR is included in version 1.0.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Switch to using the right keeper functions for extracting delegator data, making the process way faster.