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

perf: modify DelegatorSharesInvariant for better performance #12170

Merged
merged 4 commits into from
Jun 7, 2022

Conversation

catShaark
Copy link
Contributor

@catShaark catShaark commented Jun 7, 2022

Description

Closes: #XXXX

The code in DelegatorSharesInvariant is inefficient as it uses k.GetValidatorDelegations for each validator in valset, k.GetValidatorDelegations iterates through all the delegations and return all delegations that has validator address equal to the validator address passed in. This mean we have len(valset) number of all delegations iterations.

Proposal

Change the code in DelegatorSharesInvariant so that it iterate all delegations once, reduce genesis import time quite a bit.


Author Checklist

All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.

I have...

  • included the correct type prefix in the PR title
  • added ! to the type prefix if API or client breaking change
  • targeted the correct branch (see PR Targeting)
  • provided a link to the relevant issue or specification
  • followed the guidelines for building modules
  • included the necessary unit and integration tests
  • added a changelog entry to CHANGELOG.md
  • included comments for documenting Go code
  • updated the relevant documentation or specification
  • reviewed "Files changed" and left comments if necessary
  • confirmed all CI checks have passed

Reviewers Checklist

All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.

I have...

  • confirmed the correct type prefix in the PR title
  • confirmed ! in the type prefix if API or client breaking change
  • confirmed all author checklist items have been addressed
  • reviewed state machine logic
  • reviewed API design and naming
  • reviewed documentation is accurate
  • reviewed tests and test coverage
  • manually tested (if applicable)

@catShaark catShaark requested a review from a team as a code owner June 7, 2022 02:21
@catShaark catShaark changed the title modify DelegatorSharesInvariant for better performance perf: modify DelegatorSharesInvariant for better performance Jun 7, 2022
@catShaark
Copy link
Contributor Author

I did profiling on importing genesis. I imported a 1.8G genesis file ( exported from an osmosis mainet node ), it takes 241 sec while the DelegatorSharesInvariant invariant alone takes 85 sec.

Copy link
Contributor

@alexanderbez alexanderbez left a comment

Choose a reason for hiding this comment

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

LGTM. @ValarDragon mind taking a quick look?

Copy link
Contributor

@ValarDragon ValarDragon left a comment

Choose a reason for hiding this comment

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

Logic lgtm! Needs comment specifying that were iterating this way / what's happening in these lines

@alexanderbez alexanderbez added backport/0.45.x backport/0.46.x PR scheduled for inclusion in the v0.46's next stable release labels Jun 7, 2022
@alexanderbez alexanderbez merged commit f052877 into cosmos:main Jun 7, 2022
mergify bot pushed a commit that referenced this pull request Jun 7, 2022
mergify bot pushed a commit that referenced this pull request Jun 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport/0.46.x PR scheduled for inclusion in the v0.46's next stable release C:x/staking
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants