Skip to content

services/horizon: Check state rebuild in state verification integration test #3127

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 15 commits into from
Oct 28, 2020

Conversation

bartekn
Copy link
Contributor

@bartekn bartekn commented Oct 14, 2020

PR Checklist

PR Structure

  • This PR has reasonably narrow scope (if not, break it down into smaller PRs).
  • This PR avoids mixing refactoring changes with feature changes (split into two PRs
    otherwise).
  • This PR's title starts with name of package that is most changed in the PR, ex.
    services/friendbot, or all or doc if the changes are broad or impact many
    packages.

Thoroughness

  • This PR adds tests for the most critical parts of the new functionality or fixes.
  • I've updated any docs (developer docs, .md
    files, etc... affected by this change). Take a look in the docs folder for a given service,
    like this one.

Release planning

  • I've updated the relevant CHANGELOG (here for Horizon) if
    needed with deprecations, added features, breaking changes, and DB schema changes.
  • I've decided if this PR requires a new major/minor version according to
    semver, or if it's mainly a patch change. The PR is targeted at the next
    release branch if it's not a patch change.

Recreating because #3102 was removed because I removed a release branch.

What

Check state rebuild in state verification integration test.

Why

All integration tests start from empty state so we don't test building state from history archives. Extended state verification integration test to trigger state rebuild (horizon expingest trigger-state-rebuild) and verify rebuild state again. Such test would catch the bugs like #3100 and #3096.

Known limitations

It will make the test 3x slower so let's merge it after moving integration tests to nightly runs.

@bartekn bartekn requested a review from a team October 14, 2020 09:15
@cla-bot cla-bot bot added the cla: yes label Oct 14, 2020
Copy link
Contributor

@Shaptic Shaptic left a comment

Choose a reason for hiding this comment

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

LGTM but I recommend a second pair of eyes on this! 👀

@bartekn
Copy link
Contributor Author

bartekn commented Oct 22, 2020

@Shaptic good feedback. Changes implemented in 063ffe2.

@bartekn bartekn changed the title services/horizon: Check state rebuild in state verification integration test services/horizon: Check state rebuild in state verification integration test. Oct 22, 2020
@bartekn bartekn changed the title services/horizon: Check state rebuild in state verification integration test. services/horizon: Check state rebuild in state verification integration test, remove integration tests from PR checks Oct 22, 2020
for !itest.LedgerIngested(thirdCheckpoint) {
t.Log("Third checkpoint ledger not ingested yet...")
time.Sleep(5 * time.Second)
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Wait, okay so now that I understand the checkpoint thing a little more, why do we check for secondCheckpoint, then thirdCheckpoint, and only then do the state verification? It seems the check for the second is redundant, no? Since it has to wait for the third as the next step, and third implies second.

Copy link
Contributor Author

@bartekn bartekn Oct 26, 2020

Choose a reason for hiding this comment

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

Ingestion is running a state machine (fsm.go file). During normal Horizon operations with usually stay in resumeState all the time. However, horizon ingest trigger-state-rebuild command makes the machine jump to startState. There, we fall into the case that makes us wait for the next checkpoint. Why? It's because after the first checkpoint and state verification we're at ledger above 63. But the last checkpoint is still 63. So we wait for the network to close the second ledger to be able to catchup. This won't trigger state verification because it's triggered from resumeState only. That's why we need to wait for the third checkpoint.

@bartekn
Copy link
Contributor Author

bartekn commented Oct 28, 2020

I merged master with #3167 and reverted e8d89da (integration tests are quick now). Can I have one last review? @2opremio @tamirms @Shaptic

@bartekn bartekn changed the title services/horizon: Check state rebuild in state verification integration test, remove integration tests from PR checks services/horizon: Check state rebuild in state verification integration test Oct 28, 2020
@bartekn bartekn merged commit a89275a into stellar:master Oct 28, 2020
@bartekn bartekn deleted the integration-state-rebuild branch October 28, 2020 17:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants