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(test suite) virtual_file_io_engine
and get_vectored_impl
patametrization doesn't work
#7113
fix(test suite) virtual_file_io_engine
and get_vectored_impl
patametrization doesn't work
#7113
Conversation
With this change, the Python tests that override `virtual_file_io_engine` and `get_vectored_impl` fail on `pageserver --init`, exposing the problem.
…verConf A better solution would be for control plane to re-use a struct provided by the pageserver crate, so that everything is in one place in `pageserver/src/config.rs`, but, our config parsing code is (almost) beyond repair anyways.
2732 tests run: 2592 passed, 1 failed, 139 skipped (full report)Failures on Postgres 14
Code coverage* (full report)
* collected from Rust tests only The comment gets automatically updated with the latest test results
763c0b8 at 2024-03-14T11:26:28.864Z :recycle: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, this explains the "override is always specified" for remote storage which I couldn't believe.
Got more context on that? |
9cfd09d
to
9c7ea36
Compare
I think it was from last weeks huddles with you and me. You were explaining how to run pageserver against in-memory minio, configuring it in the Expanding the code more between changes explained to me why: neon/control_plane/src/pageserver.rs Lines 138 to 145 in 9c7ea36
|
test_bulk_insert` benchmark failure is a known issue => #7124 |
This reverts commit 9c7ea36.
Problem
While investigating #7124, I noticed that the benchmark was always using the
DEFAULT_*
virtual_file_io_engine
, i.e.,tokio-epoll-uring
as of #7077.The fundamental problem is that the
control_plane
code has its own view ofPageServerConfig
, which, I believe, will always be a subset of the real pageserver'spageserver/src/config.rs
.For the
virtual_file_io_engine
andget_vectored_impl
parametrization of the test suite, we were constructing a dict on the Python side that contained these parameters, then handed it tocontrol_plane::PageServerConfig
's derivedserde::Deserialize
.The default in serde is to ignore unknown fields, so, the Deserialize impl silently ignored the fields.
In consequence, the fields weren't propagated to the
pageserver --init
call, and the tests ended up using thepageserver/src/config.rs::DEFAULT_
values for the respective options all the time.Tests that explicitly used overrides in
env.pageserver.start()
and similar were not affected by this.But, it means that all the test suite runs where with parametrization didn't properly exercise the code path.
Changes
serde(deny_unknown_fields)
to expose the problemvirtual_file_io_engine
andget_vectored_impl
fail onpageserver --init
, exposing the problem.control_plane
crate'sPageServerConf
by the pageserver crate, so that everything is in one place in
pageserver/src/config.rs
, but, our config parsing code is (almost)beyond repair anyways.
pageserver_virtual_file_io_engine
to be responsive to the env varTesting
Before merging this PR, I re-ran the regression tests & CI with the full matrix of
virtual_file_io_engine
andtokio-epoll-uring
, see 9c7ea36