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

fix: cherry pick rollback fix #20

Merged
merged 3 commits into from
Mar 26, 2024

Conversation

czarcas7ic
Copy link
Member


PR checklist

  • Tests written/updated
  • Changelog entry added in .changelog (we use unclog to manage our changelog)
  • Updated relevant documentation (docs/ or spec/) and code comments

…nged` while rollback at a special height (backport cometbft#2136) (cometbft#2611)

closes: cometbft#2137 cometbft#1074

## Description
Rollback at a specific height causes the node to fail to start. This is
caused by the error code:

https://github.com/cometbft/cometbft/blob/635d0b596c7300c98caa57e7aab26a7a4579ab97/internal/state/rollback.go#L71

According to the definition of the `State` struct as below

https://github.com/cometbft/cometbft/blob/635d0b596c7300c98caa57e7aab26a7a4579ab97/internal/state/state.go#L63
`LastHeightValidatorsChanged` satisfy the following condition under any
circumstances
1 <= `state.LastHeightValidatorsChanged` <= `state.LastBlockHeight + 1 +
1`

this condition can also be confirmed by looking at the code in `func
(store dbStore) save(state State, key []byte) error`

https://github.com/cometbft/cometbft/blob/635d0b596c7300c98caa57e7aab26a7a4579ab97/internal/state/store.go#L229

`state.LastHeightValidatorsChanged` is with `nextHeight +
1`(`state.LastBlockHeight + 1 + 1`) corresponds.


When we rollback from block height `state.LastHeightValidatorsChanged -
1` to height `state.LastHeightValidatorsChanged - 2`,
`newState.LastHeightValidatorsChanged` would be wrong to modified into
the `state.LastHeightValidatorsChanged - 1`
 

## Issue
Let me give an example to describe the issue:

### example
> ... => [block 242 (5validators)] ==state1(5validators)==> [block 243
(5validators)] ==state2(4validators)==> [block 244 (4validators)] => ...
 
1. Assume that the current height of the block is 243, current state is
`state2` and `state2.LastHeightValidatorsChanged` == 244, validatorSet
changed to 4 validators in the block 244 and state2

2. Rollback to block 242 and state1, the target `rollbackHeight` == 242

3. Since the error code,
https://github.com/cometbft/cometbft/blob/635d0b596c7300c98caa57e7aab26a7a4579ab97/internal/state/rollback.go#L71
`state1.LastHeightValidatorsChanged` was changed to 243 incorrectly and
it should be 244

4. After rollbacked to block 242, node could not start properly

## Solution
See code for details.


#### PR checklist

- [x] Tests written/updated
- [ ] Changelog entry added in `.changelog` (we use
[unclog](https://github.com/informalsystems/unclog) to manage our
changelog)
- [x] Updated relevant documentation (`docs/` or `spec/`) and code
comments
- [x] Title follows the [Conventional
Commits](https://www.conventionalcommits.org/en/v1.0.0/) spec
<hr>This is an automatic backport of pull request cometbft#2136 done by
[Mergify](https://mergify.com).

Co-authored-by: Ethan <[email protected]>
@czarcas7ic czarcas7ic changed the base branch from main to osmo/v0.37.4 March 25, 2024 23:08
@czarcas7ic czarcas7ic added the S:backport/v24 backport to the osmo-v24/v0.37.4 branch label Mar 25, 2024
@czarcas7ic czarcas7ic merged commit 44a06f6 into osmo/v0.37.4 Mar 26, 2024
17 checks passed
czarcas7ic added a commit that referenced this pull request Mar 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S:backport/v24 backport to the osmo-v24/v0.37.4 branch
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant