mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-03 19:42:55 +00:00
this patch adds support for tenants. This touches mostly pageserver. Directory layout on disk is changed to contain new layer of indirection. Now path to particular repository has the following structure: <pageserver workdir>/tenants/<tenant id>. Tenant id has the same format as timeline id. Tenant id is included in pageserver commands when needed. Also new commands are available in pageserver: tenant_list, tenant_create. This is also reflected CLI. During init default tenant is created and it's id is saved in CLI config, so following commands can use it without extra options. Tenant id is also included in compute postgres configuration, so it can be passed via ServerInfo to safekeeper and in connection string to pageserver. For more info see docs/multitenancy.md.
52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
import os
|
|
|
|
from fixtures.utils import mkdir_if_needed
|
|
from fixtures.zenith_fixtures import ZenithPageserver, PostgresFactory
|
|
|
|
pytest_plugins = ("fixtures.zenith_fixtures")
|
|
|
|
|
|
def test_isolation(pageserver: ZenithPageserver, postgres: PostgresFactory, pg_bin, zenith_cli, test_output_dir, pg_distrib_dir,
|
|
base_dir, capsys):
|
|
|
|
# Create a branch for us
|
|
zenith_cli.run(["branch", "test_isolation", "empty"])
|
|
|
|
# Connect to postgres and create a database called "regression".
|
|
# isolation tests use prepared transactions, so enable them
|
|
pg = postgres.create_start('test_isolation', config_lines=['max_prepared_transactions=100'])
|
|
pg.safe_psql('CREATE DATABASE isolation_regression')
|
|
|
|
# Create some local directories for pg_isolation_regress to run in.
|
|
runpath = os.path.join(test_output_dir, 'regress')
|
|
mkdir_if_needed(runpath)
|
|
mkdir_if_needed(os.path.join(runpath, 'testtablespace'))
|
|
|
|
# Compute all the file locations that pg_isolation_regress will need.
|
|
build_path = os.path.join(pg_distrib_dir, 'build/src/test/isolation')
|
|
src_path = os.path.join(base_dir, 'vendor/postgres/src/test/isolation')
|
|
bindir = os.path.join(pg_distrib_dir, 'bin')
|
|
schedule = os.path.join(src_path, 'isolation_schedule')
|
|
pg_isolation_regress = os.path.join(build_path, 'pg_isolation_regress')
|
|
|
|
pg_isolation_regress_command = [
|
|
pg_isolation_regress,
|
|
'--use-existing',
|
|
'--bindir={}'.format(bindir),
|
|
'--dlpath={}'.format(build_path),
|
|
'--inputdir={}'.format(src_path),
|
|
'--schedule={}'.format(schedule),
|
|
]
|
|
|
|
env = {
|
|
'PGPORT': str(pg.port),
|
|
'PGUSER': pg.username,
|
|
'PGHOST': pg.host,
|
|
}
|
|
|
|
# Run the command.
|
|
# We don't capture the output. It's not too chatty, and it always
|
|
# logs the exact same data to `regression.out` anyway.
|
|
with capsys.disabled():
|
|
pg_bin.run(pg_isolation_regress_command, env=env, cwd=runpath)
|