mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-04 12:02:55 +00:00
## Problem We support two ingest protocols on the pageserver: vanilla and interpreted. Interpreted has been the only protocol in use for a long time. ## Summary of changes * Remove the ingest handling of the vanilla protocol * Remove tenant and pageserver configuration for it * Update all tests that tweaked the ingest protocol ## Compatibility Backward compatibility: * The new pageserver version can read the existing pageserver configuration and it will ignore the unknown field. * When the tenant config is read from the storcon db or from the pageserver disk, the extra field will be ignored. Forward compatiblity: * Both the pageserver config and the tenant config map missing fields to their default value. I'm not aware of any tenant level override that was made for this knob.
87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
import pytest
|
|
from fixtures.log_helper import log
|
|
from fixtures.neon_cli import WalCraft
|
|
|
|
if TYPE_CHECKING:
|
|
from fixtures.neon_fixtures import NeonEnvBuilder
|
|
|
|
# Restart nodes with WAL end having specially crafted shape, like last record
|
|
# crossing segment boundary, to test decoding issues.
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"wal_type",
|
|
[
|
|
"simple",
|
|
"last_wal_record_xlog_switch",
|
|
"last_wal_record_xlog_switch_ends_on_page_boundary",
|
|
"last_wal_record_crossing_segment",
|
|
"wal_record_crossing_segment_followed_by_small_one",
|
|
],
|
|
)
|
|
def test_crafted_wal_end(
|
|
neon_env_builder: NeonEnvBuilder,
|
|
wal_type: str,
|
|
):
|
|
env = neon_env_builder.init_start()
|
|
env.create_branch("test_crafted_wal_end")
|
|
env.pageserver.allowed_errors.extend(
|
|
[
|
|
# seems like pageserver stop triggers these
|
|
".*initial size calculation failed.*Bad state (not active).*",
|
|
]
|
|
)
|
|
|
|
endpoint = env.endpoints.create("test_crafted_wal_end")
|
|
wal_craft = WalCraft(extra_env=None, binpath=env.neon_binpath)
|
|
endpoint.config(wal_craft.postgres_config())
|
|
endpoint.start()
|
|
res = endpoint.safe_psql_many(
|
|
queries=[
|
|
"CREATE TABLE keys(key int primary key)",
|
|
"INSERT INTO keys SELECT generate_series(1, 100)",
|
|
"SELECT SUM(key) FROM keys",
|
|
]
|
|
)
|
|
assert res[-1][0] == (5050,)
|
|
|
|
wal_craft.in_existing(wal_type, endpoint.connstr())
|
|
|
|
log.info("Restarting all safekeepers and pageservers")
|
|
env.pageserver.stop()
|
|
env.safekeepers[0].stop()
|
|
env.safekeepers[0].start()
|
|
env.pageserver.start()
|
|
|
|
log.info("Trying more queries")
|
|
res = endpoint.safe_psql_many(
|
|
queries=[
|
|
"SELECT SUM(key) FROM keys",
|
|
"INSERT INTO keys SELECT generate_series(101, 200)",
|
|
"SELECT SUM(key) FROM keys",
|
|
]
|
|
)
|
|
assert res[0][0] == (5050,)
|
|
assert res[-1][0] == (20100,)
|
|
|
|
log.info("Restarting all safekeepers and pageservers (again)")
|
|
env.pageserver.stop()
|
|
env.safekeepers[0].stop()
|
|
env.safekeepers[0].start()
|
|
env.pageserver.start()
|
|
|
|
log.info("Trying more queries (again)")
|
|
res = endpoint.safe_psql_many(
|
|
queries=[
|
|
"SELECT SUM(key) FROM keys",
|
|
"INSERT INTO keys SELECT generate_series(201, 300)",
|
|
"SELECT SUM(key) FROM keys",
|
|
]
|
|
)
|
|
assert res[0][0] == (20100,)
|
|
assert res[-1][0] == (45150,)
|