mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-15 09:22:55 +00:00
neon_cli.create_tenant() creates a new tenant *and* a timeline on the tenant, with name "main". In most tests, there's no need to create another timeline on the same tenant. There are some more tests that do that, but in the remaining cases, I wasn't be 100% if the presence of extra root timelines affect what the tests test, so I left them alone.
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import time
|
|
|
|
from fixtures.neon_fixtures import NeonEnvBuilder
|
|
|
|
|
|
#
|
|
# Test truncation of FSM and VM forks of a relation
|
|
#
|
|
def test_truncate(neon_env_builder: NeonEnvBuilder, zenbenchmark):
|
|
env = neon_env_builder.init_start()
|
|
n_records = 10000
|
|
n_iter = 10
|
|
|
|
# Problems with FSM/VM forks truncation are most frequently detected during page reconstruction triggered
|
|
# by image layer generation. So adjust default parameters to make it happen more frequently.
|
|
tenant, _ = env.neon_cli.create_tenant(
|
|
conf={
|
|
# disable automatic GC
|
|
"gc_period": "0s",
|
|
# Compact and create images aggressively
|
|
"checkpoint_distance": "1000000",
|
|
"compaction_period": "1 s",
|
|
"compaction_threshold": "3",
|
|
"image_creation_threshold": "1",
|
|
"compaction_target_size": "1000000",
|
|
}
|
|
)
|
|
|
|
endpoint = env.endpoints.create_start("main", tenant_id=tenant)
|
|
cur = endpoint.connect().cursor()
|
|
cur.execute("create table t1(x integer)")
|
|
cur.execute(f"insert into t1 values (generate_series(1,{n_records}))")
|
|
cur.execute("vacuum t1")
|
|
for _ in range(n_iter):
|
|
cur.execute(f"delete from t1 where x>{n_records//2}")
|
|
cur.execute("vacuum t1")
|
|
time.sleep(1) # let pageserver a chance to create image layers
|
|
cur.execute(f"insert into t1 values (generate_series({n_records//2+1}, {n_records}))")
|
|
cur.execute("vacuum t1")
|
|
time.sleep(1) # let pageserver a chance to create image layers
|
|
|
|
cur.execute("select count(*) from t1")
|
|
res = cur.fetchone()
|
|
assert res is not None
|
|
assert res[0] == n_records
|