-
Notifications
You must be signed in to change notification settings - Fork 273
Problem: rollback don't work without enable fast node #833
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
Merged
Merged
Changes from 1 commit
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| { pkgs ? import ../../nix { } }: | ||
| let cronosd = (pkgs.callPackage ../../. { }); | ||
| in | ||
| cronosd.overrideAttrs (oldAttrs: { | ||
| patches = oldAttrs.patches or [ ] ++ [ | ||
| ./broken-cronosd.patch | ||
| ]; | ||
| }) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| diff --git a/app/app.go b/app/app.go | ||
| index 21eab4d..156fad7 100644 | ||
| --- a/app/app.go | ||
| +++ b/app/app.go | ||
| @@ -773,6 +773,10 @@ func (app *App) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.R | ||
|
|
||
| // EndBlocker application updates every end block | ||
| func (app *App) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock { | ||
| + if ctx.BlockHeight() % 10 == 0 { | ||
| + store := ctx.KVStore(app.keys["cronos"]) | ||
| + store.Set([]byte("hello"), []byte("world")) | ||
| + } | ||
| return app.mm.EndBlock(ctx, req) | ||
| } | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| local config = import 'default.jsonnet'; | ||
|
|
||
| config { | ||
| 'cronos_777-1'+: { | ||
| 'app-config'+: { | ||
| 'iavl-disable-fastnode': true, | ||
| }, | ||
| validators: super.validators + [{ | ||
| name: 'fullnode', | ||
| }], | ||
| }, | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,94 @@ | ||
| import configparser | ||
| import subprocess | ||
| from pathlib import Path | ||
|
|
||
| import pytest | ||
| from pystarport import ports | ||
| from pystarport.cluster import SUPERVISOR_CONFIG_FILE | ||
|
|
||
| from .network import setup_custom_cronos | ||
| from .utils import supervisorctl, wait_for_block, wait_for_port | ||
|
|
||
|
|
||
| def update_node2_cmd(path, cmd, i): | ||
| ini_path = path / SUPERVISOR_CONFIG_FILE | ||
| ini = configparser.RawConfigParser() | ||
| ini.read(ini_path) | ||
| for section in ini.sections(): | ||
| if section == f"program:cronos_777-1-node{i}": | ||
| ini[section].update( | ||
| { | ||
| "command": f"{cmd} start --home %(here)s/node{i}", | ||
| "autorestart": "false", # don't restart when stopped | ||
| } | ||
| ) | ||
| with ini_path.open("w") as fp: | ||
| ini.write(fp) | ||
|
|
||
|
|
||
| def post_init(broken_binary): | ||
| def inner(path, base_port, config): | ||
| chain_id = "cronos_777-1" | ||
| update_node2_cmd(path / chain_id, broken_binary, 2) | ||
|
|
||
| return inner | ||
|
|
||
|
|
||
| @pytest.fixture(scope="module") | ||
| def custom_cronos(tmp_path_factory): | ||
| path = tmp_path_factory.mktemp("rollback") | ||
|
|
||
| cmd = [ | ||
| "nix-build", | ||
| "--no-out-link", | ||
| Path(__file__).parent / "configs/broken-cronosd.nix", | ||
| ] | ||
| print(*cmd) | ||
| broken_binary = Path(subprocess.check_output(cmd).strip().decode()) / "bin/cronosd" | ||
| print(broken_binary) | ||
|
|
||
| # init with genesis binary | ||
| yield from setup_custom_cronos( | ||
| path, | ||
| 26400, | ||
| Path(__file__).parent / "configs/rollback.jsonnet", | ||
| post_init=post_init(broken_binary), | ||
| wait_port=False, | ||
| ) | ||
|
|
||
|
|
||
| def test_rollback(custom_cronos): | ||
| """ | ||
| test using rollback command to fix app-hash mismatch situation. | ||
| - the broken node will sync up to block 10 then crash. | ||
| - use rollback command to rollback the db. | ||
| - switch to correct binary should make the node syncing again. | ||
| """ | ||
| wait_for_port(ports.rpc_port(custom_cronos.base_port(2))) | ||
|
|
||
| print("wait for node2 to sync the first 10 blocks") | ||
| cli2 = custom_cronos.cosmos_cli(2) | ||
| wait_for_block(cli2, 10) | ||
|
|
||
| print("wait for a few more blocks on the healthy nodes") | ||
| cli = custom_cronos.cosmos_cli(0) | ||
| wait_for_block(cli, 13) | ||
|
|
||
| # (app hash mismatch happens after the 10th block, detected in the 11th block) | ||
| print("check node2 get stuck at block 10") | ||
| assert cli2.block_height() == 10 | ||
|
|
||
| print("stop node2") | ||
| supervisorctl(custom_cronos.base_dir / "../tasks.ini", "stop", "cronos_777-1-node2") | ||
|
|
||
| print("do rollback on node2") | ||
| cli2.rollback() | ||
|
|
||
| print("switch to normal binary") | ||
| update_node2_cmd(custom_cronos.base_dir, "cronosd", 2) | ||
| supervisorctl(custom_cronos.base_dir / "../tasks.ini", "update") | ||
| wait_for_port(ports.rpc_port(custom_cronos.base_port(2))) | ||
|
|
||
| print("check node2 sync again") | ||
| cli2 = custom_cronos.cosmos_cli(2) | ||
| wait_for_block(cli2, 15) |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.