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

Remove SQL support for Ledger State #4504

Closed
wants to merge 8 commits into from

Conversation

SirTyson
Copy link
Contributor

Description

Resolves #4501, #4502, and #4503

Rebased on #4403. This PR

  1. Removes the flag for background eviction scan, making it mandatory
  2. Removes the flag for SQL ledger state, making BucketListDB mandatory
  3. Removes the --in-memory command line option.

Because of ongoing State Archival work that requires these changes, I've opted for a single branch to avoid rebasing complexity. That being said, I can open more granular PRs to assist in the reviewing process. In particular, 1 can be seperated into it's own PR.

Unfortunately, in order to make tests work without SQL ledger state tables, I've cannibalized --in-memory mode to be a testing only mode. This reuses most of the --in-memory code, but modifies it such that a node would not be able to sync with the network in this mode. For this reason, I think we need to deprecate SQL and --in-memory mode at the same time.

Finally, all tests pass except for "herder externalizes values". While I changed the TestDB mode for that test (as the old SQL mode is no longer supported), no other changes should have been made. I haven't been able to figure out why it's failing, but perhaps someone more familiar with Herder like @marta-lokhova could take a look.

Checklist

  • Reviewed the contributing document
  • Rebased on top of master (no merge commits)
  • Ran clang-format v8.0.0 (via make format or the Visual Studio extension)
  • Compiles
  • Ran all tests
  • If change impacts performance, include supporting evidence per the performance document

@marta-lokhova
Copy link
Contributor

what does the herder failure look like? I checked CI logs, but it failed due to clang-format before it could get to the test.

@SirTyson
Copy link
Contributor Author

what does the herder failure look like? I checked CI logs, but it failed due to clang-format before it could get to the test.

I pushed the formatting update, now the CI fails with the error I've been getting.

@SirTyson SirTyson marked this pull request as ready for review November 25, 2024 17:54
@SirTyson
Copy link
Contributor Author

Closing, will break into smaller parts for merging.

@SirTyson SirTyson closed this Nov 26, 2024
@SirTyson SirTyson mentioned this pull request Nov 27, 2024
6 tasks
github-merge-queue bot pushed a commit that referenced this pull request Dec 13, 2024
# Description

Resolves #4501 and partially resolves #4502

This PR removes `--in-memory`. Specifically, core will not crash if this
flag is passed in for Horizon compatibility reasons, but will ignore it
and related flags.

Additionally, `--in-memory` has been cannibalized to use in testing.
Previously, any test that committed changes directly to the root ltx was
incompatible with BucketListDB and required SQL. This is an issue, as we
are deprecating SQL for ledger state, and it would not make sense to
maintain this SQL overhead for testing only. While I've removed most of
the `in-memory` code, I've saved the bits regarding the never committing
ledger root to use for the direct ltx commit test cases. Thus we remove
the test dependency for SQL.

In order to properly test the orderbook, the `in-memory` testing mode
still maintains and queries a SQL database just for offers (similar to
what BucketListDB does).

Originally I did one PR for removing SQL, `--in-memory` and mandating
background eviction. This was way to big to merge but may be helpful in
providing context on what changes are in flight after this PR:
#4504.

Currently everything works except for the "herder externalizes values"
test. With BucketListDB testing mode, nodes can be restarted, but direct
ltx commits are not supported. With the in-memory mode testing, ltx can
be committed to directly, but nodes can not be restarted.

~~For all tests except for "herder externalizes values", this if fine.
However, "herder externalizes values" is the only test that both
directly commits to the ltx and restarts nodes. In particular, the
`setupUpgradeAtNextLedger` function directly commits to the ltx. I've
seperated the test into two helper functions, one that doesn't require
restart and one that does. I _think_ that the restart test doesn't
actually require an upgrade to occur. I think the test just used
upgrades in order to populate ledgers with some meaningful, detectable
work to make sure externalized ledgers aren't applied several times. If
the upgrade operation is not integral to this test, we can probably find
a workaround. Alternatively, we can maybe go through the full upgrade
arming process with BucketListDB support instead of cutting corners with
direct ltx commits. I'm not well versed in herder tests though, so I've
left the failing test as is. If we can remove the upgrade and check the
condition some other way, this is the path of least resistance.~~

Test has been fixed to use upgrades compatible with BucketListDB.

# Checklist
- [x] Reviewed the
[contributing](https://github.com/stellar/stellar-core/blob/master/CONTRIBUTING.md#submitting-changes)
document
- [x] Rebased on top of master (no merge commits)
- [x] Ran `clang-format` v8.0.0 (via `make format` or the Visual Studio
extension)
- [x] Compiles
- [x] Ran all tests
- [ ] If change impacts performance, include supporting evidence per the
[performance
document](https://github.com/stellar/stellar-core/blob/master/performance-eval/performance-eval.md)
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.

Deprecate --in-memory mode
2 participants