From 08f682b217fd35e32536f17311e2939227802df1 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Thu, 26 Oct 2023 17:40:56 +0000 Subject: [PATCH] script to duplicate a tenant a bunch of times, using the API added in previous commit Setup the pageserver using a config like below. Then use the script like so, against the tenant to duplicate: poetry run python3 ./test_runner/duplicate_tenant.py 7ea51af32d42bfe7fb93bf5f28114d09 200 8 backup of pageserver.toml d =1 pg_distrib_dir ='/home/admin/neon-main/pg_install' http_auth_type ='Trust' pg_auth_type ='Trust' listen_http_addr ='127.0.0.1:9898' listen_pg_addr ='127.0.0.1:64000' broker_endpoint ='http://127.0.0.1:50051/' #control_plane_api ='http://127.0.0.1:1234/' # Initial configuration file created by 'pageserver --init' #listen_pg_addr = '127.0.0.1:64000' #listen_http_addr = '127.0.0.1:9898' #wait_lsn_timeout = '60 s' #wal_redo_timeout = '60 s' #max_file_descriptors = 10000 #page_cache_size = 160000 # initial superuser role name to use when creating a new tenant #initial_superuser_name = 'cloud_admin' #broker_endpoint = 'http://127.0.0.1:50051' #log_format = 'plain' #concurrent_tenant_size_logical_size_queries = '1' #metric_collection_interval = '10 min' #cached_metric_collection_interval = '0s' #synthetic_size_calculation_interval = '10 min' #disk_usage_based_eviction = { max_usage_pct = .., min_avail_bytes = .., period = "10s"} #background_task_maximum_delay = '10s' [tenant_config] #checkpoint_distance = 268435456 # in bytes #checkpoint_timeout = 10 m #compaction_target_size = 134217728 # in bytes #compaction_period = '20 s' #compaction_threshold = 10 #gc_period = '1 hr' #gc_horizon = 67108864 #image_creation_threshold = 3 #pitr_interval = '7 days' #min_resident_size_override = .. # in bytes #evictions_low_residence_duration_metric_threshold = '24 hour' #gc_feedback = false # make it determinsitic gc_period = '0s' checkpoint_timeout = '3650 day' compaction_period = '20 s' compaction_threshold = 10 compaction_target_size = 134217728 checkpoint_distance = 268435456 image_creation_threshold = 3 [remote_storage] local_path = '/home/admin/neon-main/bench_repo_dir/repo/remote_storage_local_fs' --- test_runner/duplicate_tenant.py | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 test_runner/duplicate_tenant.py diff --git a/test_runner/duplicate_tenant.py b/test_runner/duplicate_tenant.py new file mode 100644 index 0000000000..c0672718ad --- /dev/null +++ b/test_runner/duplicate_tenant.py @@ -0,0 +1,43 @@ +# Usage from top of repo: +# poetry run python3 test_runner/duplicate_tenant.py b97965931096047b2d54958756baee7b 10 +from queue import Queue +import sys +import threading + +import requests +from fixtures.pageserver.http import PageserverHttpClient +from fixtures.types import TenantId + +initial_tenant = sys.argv[1] +ncopies = int(sys.argv[2]) +numthreads = int(sys.argv[3]) + + +# class DuckTypedNeonEnv: +# pass + + +# cli = NeonCli(DuckTypedNeonEnv()) + +q = Queue() +for i in range(0, ncopies): + q.put(i) + +for i in range(0, numthreads): + q.put(None) + + +def create(): + while True: + if q.get() == None: + break + new_tenant = TenantId.generate() + res = requests.post( + f"http://localhost:9898/v1/tenant/{initial_tenant}/duplicate", + json={"new_tenant_id": str(new_tenant)}, + ) + res.raise_for_status() + + +for i in range(0, numthreads): + threading.Thread(target=create).start()