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 horizon db reap command #2336

Merged
merged 4 commits into from
Feb 28, 2020
Merged

Fix horizon db reap command #2336

merged 4 commits into from
Feb 28, 2020

Conversation

tamirms
Copy link
Contributor

@tamirms tamirms commented Feb 27, 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.

What

Close #2307

When the db reap command is called, ledger.CurrentState() returns an uninitialized struct where the latest history ledger sequence is set to 0. Consequently, the reap system always concludes that there are no ledgers preceding the cutoff point. To fix this bug we need to call app.UpdateLedgerState() to ensure that ledger.CurrentState() is properly initialized.

Another problem with the reap command is that it does not delete from all history tables (e.g. history_trades). This commit fixes this issue by calling DeleteRangeAll() which is used by the ingestion system to clear history tables prior to running a reingest range command.

Known limitations

[N/A]

When the db reap command is called, `ledger.CurrentState()` returns an uninitialized struct where the latest history ledger sequence is set to 0. Consequently, the reap system always concludes that there are no ledgers preceding the cutoff point. To fix this bug we need to call `app.UpdateLedgerState()` to ensure that ledger.CurrentState() is properly initialized.

Another problem with the reap command is that it does not delete from all history tables (e.g. history_trades). This commit fixes this issue by calling `DeleteRangeAll()` which is used by the ingestion system to clear history tables prior to running a reingest range command.
@cla-bot cla-bot bot added the cla: yes label Feb 27, 2020
@tamirms tamirms changed the base branch from master to release-horizon-v1.1.0 February 27, 2020 22:12
@tamirms
Copy link
Contributor Author

tamirms commented Feb 27, 2020

two questions:

I assume the fact that horizon db reap neglected to delete rows from the history_trades table was a mistake. Am I right or is that the actual intended behavior?

Should this PR be merged into master or should it remain in the 1.1.0 release?

Copy link
Contributor

@abuiles abuiles left a comment

Choose a reason for hiding this comment

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

@tamirms good catch! 👍

Copy link
Contributor

@bartekn bartekn left a comment

Choose a reason for hiding this comment

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

I assume the fact that horizon db reap neglected to delete rows from the history_trades table was a mistake. Am I right or is that the actual intended behavior?

I think it was a bug, so 👍 for fixing it!

Should this PR be merged into master or should it remain in the 1.1.0 release?

I think we should only use the release branch for breaking changes and some new features we know require more testing before we can release.

services/horizon/CHANGELOG.md Outdated Show resolved Hide resolved
@tamirms tamirms changed the base branch from release-horizon-v1.1.0 to master February 28, 2020 15:54
@tamirms tamirms merged commit 76b2b52 into stellar:master Feb 28, 2020
@tamirms tamirms deleted the fix-reap branch February 28, 2020 15:57
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.

horizon db reap command does nothing
3 participants