mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-16 18:02:56 +00:00
Compare files in existing compute node's pgdata with fresh basebackup at the same lsn. We expect that content is identical, except tmp files Use it after some tests.
102 lines
3.1 KiB
Python
102 lines
3.1 KiB
Python
import os
|
|
import pathlib
|
|
|
|
from contextlib import closing
|
|
from fixtures.zenith_fixtures import ZenithPageserver, PostgresFactory, ZenithCli, check_restored_datadir_content
|
|
|
|
pytest_plugins = ("fixtures.zenith_fixtures")
|
|
|
|
|
|
#
|
|
# Test CREATE DATABASE when there have been relmapper changes
|
|
#
|
|
def test_createdb(
|
|
zenith_cli: ZenithCli,
|
|
pageserver: ZenithPageserver,
|
|
postgres: PostgresFactory,
|
|
pg_bin,
|
|
):
|
|
zenith_cli.run(["branch", "test_createdb", "empty"])
|
|
|
|
pg = postgres.create_start('test_createdb')
|
|
print("postgres is running on 'test_createdb' branch")
|
|
|
|
with closing(pg.connect()) as conn:
|
|
with conn.cursor() as cur:
|
|
# Cause a 'relmapper' change in the original branch
|
|
cur.execute('VACUUM FULL pg_class')
|
|
|
|
cur.execute('CREATE DATABASE foodb')
|
|
|
|
cur.execute('SELECT pg_current_wal_insert_lsn()')
|
|
lsn = cur.fetchone()[0]
|
|
|
|
# Create a branch
|
|
zenith_cli.run(["branch", "test_createdb2", "test_createdb@" + lsn])
|
|
|
|
pg2 = postgres.create_start('test_createdb2')
|
|
|
|
# Test that you can connect to the new database on both branches
|
|
for db in (pg, pg2):
|
|
db.connect(dbname='foodb').close()
|
|
|
|
#
|
|
# Test DROP DATABASE
|
|
#
|
|
def test_dropdb(
|
|
zenith_cli: ZenithCli,
|
|
pageserver: ZenithPageserver,
|
|
postgres: PostgresFactory,
|
|
pg_bin,
|
|
):
|
|
zenith_cli.run(["branch", "test_dropdb", "empty"])
|
|
|
|
pg = postgres.create_start('test_dropdb')
|
|
print("postgres is running on 'test_dropdb' branch")
|
|
|
|
with closing(pg.connect()) as conn:
|
|
with conn.cursor() as cur:
|
|
cur.execute('CREATE DATABASE foodb')
|
|
|
|
cur.execute('SELECT pg_current_wal_insert_lsn()')
|
|
lsn_before_drop = cur.fetchone()[0]
|
|
|
|
cur.execute("SELECT oid FROM pg_database WHERE datname='foodb';")
|
|
dboid = cur.fetchone()[0]
|
|
|
|
|
|
with closing(pg.connect()) as conn:
|
|
with conn.cursor() as cur:
|
|
cur.execute('DROP DATABASE foodb')
|
|
|
|
cur.execute('CHECKPOINT')
|
|
|
|
cur.execute('SELECT pg_current_wal_insert_lsn()')
|
|
lsn_after_drop = cur.fetchone()[0]
|
|
|
|
|
|
# Create two branches before and after database drop.
|
|
zenith_cli.run(["branch", "test_before_dropdb", "test_dropdb@" + lsn_before_drop])
|
|
pg_before = postgres.create_start('test_before_dropdb')
|
|
|
|
zenith_cli.run(["branch", "test_after_dropdb", "test_dropdb@" + lsn_after_drop])
|
|
pg_after = postgres.create_start('test_after_dropdb')
|
|
|
|
# Test that database exists on the branch before drop
|
|
pg_before.connect(dbname='foodb').close()
|
|
|
|
# Test that database subdir exists on the branch before drop
|
|
dbpath = pathlib.Path(pg_before.pgdata_dir) / 'base' / str(dboid)
|
|
print(dbpath)
|
|
|
|
assert os.path.isdir(dbpath) == True
|
|
|
|
# Test that database subdir doesn't exist on the branch after drop
|
|
dbpath = pathlib.Path(pg_after.pgdata_dir) / 'base' / str(dboid)
|
|
print(dbpath)
|
|
|
|
assert os.path.isdir(dbpath) == False
|
|
|
|
# Check that we restore the content of the datadir correctly
|
|
check_restored_datadir_content(zenith_cli, pg, lsn_after_drop, postgres)
|