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

[OTE-829] upgrade handler for affiliates #2332

Merged
merged 7 commits into from
Sep 25, 2024
Merged

Conversation

affanv14
Copy link
Contributor

@affanv14 affanv14 commented Sep 24, 2024

Changelist

[Describe or list the changes made in this PR]

Test Plan

[Describe how this PR was tested (if applicable)]

Author/Reviewer Checklist

  • If this PR has changes that result in a different app state given the same prior state and transaction list, manually add the state-breaking label.
  • If the PR has breaking postgres changes to the indexer add the indexer-postgres-breaking label.
  • If this PR isn't state-breaking but has changes that modify behavior in PrepareProposal or ProcessProposal, manually add the label proposal-breaking.
  • If this PR is one of many that implement a specific feature, manually label them all feature:[feature-name].
  • If you wish to for mergify-bot to automatically create a PR to backport your change to a release branch, manually add the label backport/[branch-name].
  • Manually add any of the following labels: refactor, chore, bug.

Summary by CodeRabbit

  • New Features

    • Introduced a new function to set default tiers for affiliates during the upgrade process.
    • Enhanced the structure of affiliate tiers with specific requirements and fee structures.
  • Bug Fixes

    • Updated upgrade handler setup to include the AffiliatesKeeper, improving the upgrade handling process.
  • Tests

    • Added a function to verify the correct initialization of affiliate tiers post-upgrade.

@affanv14 affanv14 requested a review from a team as a code owner September 24, 2024 17:25
Copy link
Contributor

coderabbitai bot commented Sep 24, 2024

Warning

Rate limit exceeded

@affanv14 has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 8 minutes and 20 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Files that changed from the base of the PR and between 351fccc and 1825faf.

Walkthrough

The changes introduce modifications to the upgrade handling process within the protocol. The setupUpgradeHandlers function now includes app.AffiliatesKeeper as an argument, enhancing its functionality. A new function, setDefaultTiersForAffiliates, is added to manage affiliate tiers during upgrades. Additionally, a test function, postUpgradeAffiliatesModuleTiersCheck, is implemented to verify that the affiliates module initializes correctly with default tiers post-upgrade.

Changes

File Change Summary
protocol/app/upgrades.go Updated setupUpgradeHandlers to include app.AffiliatesKeeper as an argument.
protocol/app/upgrades/v7.0.0/upgrade.go Added setDefaultTiersForAffiliates function to update affiliate tiers and modified CreateUpgradeHandler to include affiliatesKeeper as a parameter.
protocol/app/upgrades/v7.0.0/upgrade_container_test.go Introduced postUpgradeAffiliatesModuleTiersCheck to verify affiliate tiers post-upgrade and updated postUpgradeChecks to include this new check.
protocol/app/testdata/default_genesis_state.json Updated affiliate_tiers structure to include four distinct tier objects with specific requirements and fee structures.
protocol/x/affiliates/types/genesis.go Modified DefaultGenesis function to initialize AffiliateTiers with a reference to DefaultAffiliateTiers instead of an empty slice.

Possibly related PRs

Suggested labels

feature:indexer/affiliates

Poem

In the meadow where upgrades bloom,
Affiliates rise, dispelling gloom.
With tiers set right, they dance and play,
In harmony, they find their way.
Hops of joy, a code so neat,
Celebrate change, oh what a treat! 🐇✨


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?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@affanv14 affanv14 changed the title upgrade handler upgrade handler for affiliates Sep 24, 2024
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

Outside diff range and nitpick comments (4)
protocol/app/upgrades/v7.0.0/upgrade.go (2)

60-62: LGTM: New function to set default affiliate tiers.

The setDefaultTiersForAffiliates function is well-implemented and serves its purpose of updating affiliate tiers with default values during the upgrade process.

Consider adding a log message to indicate that the default tiers have been set. This can be helpful for debugging and monitoring the upgrade process. For example:

 func setDefaultTiersForAffiliates(ctx sdk.Context, k affiliateskeeper.Keeper) {
 	k.UpdateAffiliateTiers(ctx, affiliatetypes.DefaultAffiliateTiers)
+	ctx.Logger().Info("Default affiliate tiers have been set")
 }

69-69: LGTM: Updated CreateUpgradeHandler with affiliate tier initialization.

The changes to CreateUpgradeHandler are well-implemented:

  1. The function signature is correctly updated to include affiliatesKeeper.
  2. The new setDefaultTiersForAffiliates function is called at an appropriate point in the upgrade process.

Consider adding error handling for the setDefaultTiersForAffiliates call. While the current implementation assumes this operation always succeeds, it's generally a good practice to handle potential errors, especially during critical processes like upgrades. For example:

 // Set default tiers for affiliates.
-setDefaultTiersForAffiliates(sdkCtx, affiliatesKeeper)
+if err := setDefaultTiersForAffiliates(sdkCtx, affiliatesKeeper); err != nil {
+    return nil, fmt.Errorf("failed to set default affiliate tiers: %w", err)
+}

This would require updating the setDefaultTiersForAffiliates function to return an error if the UpdateAffiliateTiers call fails.

Also applies to: 81-83

protocol/app/upgrades/v7.0.0/upgrade_container_test.go (2)

104-119: LGTM: New function to check affiliate tiers post-upgrade.

The postUpgradeAffiliatesModuleTiersCheck function is well-implemented and correctly verifies that the affiliates module has been initialized with the default tiers after the upgrade. The query, unmarshalling, and assertion are all handled appropriately.

Consider adding an assertion to check the length of affiliateTiersResp.Tiers before comparing it with affiliatestypes.DefaultAffiliateTiers. This would provide a more informative error message if the lengths don't match. For example:

 require.NoError(t, err)
+require.Equal(t, len(affiliatestypes.DefaultAffiliateTiers), len(affiliateTiersResp.Tiers), "Number of tiers doesn't match")
 require.Equal(t, affiliatestypes.DefaultAffiliateTiers, affiliateTiersResp.Tiers)

Line range hint 1-119: Overall assessment: Well-implemented upgrade test for affiliates module.

The changes in this file effectively implement the necessary tests for the upgrade handler, with a focus on verifying the correct initialization of the affiliates module. The new postUpgradeAffiliatesModuleTiersCheck function is well-integrated into the existing test structure and provides good coverage for the upgrade process.

Consider adding similar post-upgrade checks for other modules that might be affected by the upgrade, if any. This would ensure comprehensive testing of all upgrade-related changes across the system.

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between c34d56d and ac61de2.

Files selected for processing (3)
  • protocol/app/upgrades.go (1 hunks)
  • protocol/app/upgrades/v7.0.0/upgrade.go (3 hunks)
  • protocol/app/upgrades/v7.0.0/upgrade_container_test.go (3 hunks)
Additional comments not posted (4)
protocol/app/upgrades.go (1)

35-35: LGTM: Addition of AffiliatesKeeper to upgrade handler.

The addition of app.AffiliatesKeeper as an argument to CreateUpgradeHandler is appropriate if there are new upgrade requirements related to affiliates. This change allows the upgrade handler to access and potentially modify affiliate data during the upgrade process.

To ensure consistency, let's verify the CreateUpgradeHandler function definition and its usage:

Please review the output to confirm that the CreateUpgradeHandler function definition includes AffiliatesKeeper as a parameter and that all other usages of this function are updated accordingly.

Verification successful

: The addition of app.AffiliatesKeeper to the CreateUpgradeHandler function is correctly implemented. The function definition includes affiliatesKeeper affiliateskeeper.Keeper, and all relevant usages have been updated accordingly. No issues were found.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the CreateUpgradeHandler function definition and its usage

# Check the CreateUpgradeHandler function definition
echo "Checking CreateUpgradeHandler function definition:"
rg --type go "func\s+CreateUpgradeHandler" -A 10

# Check other usages of CreateUpgradeHandler
echo "\nChecking other usages of CreateUpgradeHandler:"
rg --type go "CreateUpgradeHandler\(" -A 5

Length of output: 10138

protocol/app/upgrades/v7.0.0/upgrade.go (1)

12-13: LGTM: New imports for affiliates functionality.

The new imports for affiliateskeeper and affiliatetypes are correctly added and follow the existing import style of the file. These imports are necessary for the new affiliate-related functionality introduced in this upgrade.

protocol/app/upgrades/v7.0.0/upgrade_container_test.go (2)

14-14: LGTM: New import for affiliates types.

The new import for affiliatestypes is correctly added and necessary for the new affiliate-related functionality.


52-54: LGTM: New affiliate module check added to post-upgrade checks.

The new function call postUpgradeAffiliatesModuleTiersCheck is appropriately added to the postUpgradeChecks function. The comment accurately describes its purpose, ensuring that the affiliates module has been initialized with the default tiers after the upgrade.

@affanv14 affanv14 changed the title upgrade handler for affiliates [OTE-829] upgrade handler for affiliates Sep 24, 2024
Copy link

linear bot commented Sep 24, 2024

setDefaultTiersForAffiliates(sdkCtx, affiliatesKeeper)

// Set the module version to 1 to skip init genesis during the first upgrade.
vm[affiliatetypes.ModuleName] = 1
Copy link
Contributor

Choose a reason for hiding this comment

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

Why is this needed for x/affiliate which is a new module that didn't exist in v6?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

its because RunMigrations calls InitGenesis here

Copy link
Contributor Author

Choose a reason for hiding this comment

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

which overwrites setDefaultTiersForAffiliates

@affanv14 affanv14 merged commit 6f9ede5 into main Sep 25, 2024
21 checks passed
@affanv14 affanv14 deleted the affan/affiliates-upgrade branch September 25, 2024 20:55
@affanv14
Copy link
Contributor Author

https://github.com/Mergifyio backport release/protocol/v7.x

Copy link
Contributor

mergify bot commented Sep 26, 2024

backport release/protocol/v7.x

✅ Backports have been created

mergify bot pushed a commit that referenced this pull request Sep 26, 2024
(cherry picked from commit 6f9ede5)

# Conflicts:
#	protocol/app/upgrades/v7.0.0/upgrade_container_test.go
affanv14 added a commit that referenced this pull request Sep 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

Successfully merging this pull request may close these issues.

2 participants