diff --git a/test_runner/fixtures/pageserver/utils.py b/test_runner/fixtures/pageserver/utils.py index 76777eca08..f5859550ac 100644 --- a/test_runner/fixtures/pageserver/utils.py +++ b/test_runner/fixtures/pageserver/utils.py @@ -19,15 +19,6 @@ def assert_tenant_state( assert tenant_status["state"]["slug"] == expected_state, message or tenant_status -def tenant_exists(pageserver_http: PageserverHttpClient, tenant_id: TenantId): - tenants = pageserver_http.tenant_list() - matching = [t for t in tenants if TenantId(t["id"]) == tenant_id] - assert len(matching) < 2 - if len(matching) == 0: - return None - return matching[0] - - def remote_consistent_lsn( pageserver_http: PageserverHttpClient, tenant: TenantId, timeline: TimelineId ) -> Lsn: @@ -258,6 +249,7 @@ def wait_tenant_status_404( pageserver_http: PageserverHttpClient, tenant_id: TenantId, iterations: int, + interval: float = 0.250, ): def tenant_is_missing(): data = {} @@ -271,7 +263,7 @@ def wait_tenant_status_404( raise RuntimeError(f"Timeline exists state {data.get('state')}") - wait_until(iterations, interval=0.250, func=tenant_is_missing) + wait_until(iterations, interval=interval, func=tenant_is_missing) def tenant_delete_wait_completed( diff --git a/test_runner/fixtures/utils.py b/test_runner/fixtures/utils.py index 81754c95f7..d03d2e7595 100644 --- a/test_runner/fixtures/utils.py +++ b/test_runner/fixtures/utils.py @@ -303,22 +303,6 @@ def wait_until(number_of_iterations: int, interval: float, func: Fn): raise Exception("timed out while waiting for %s" % func) from last_exception -def wait_while(number_of_iterations: int, interval: float, func): - """ - Wait until 'func' returns false, or throws an exception. - """ - for i in range(number_of_iterations): - try: - if not func(): - return - log.info("waiting for %s iteration %s failed", func, i + 1) - time.sleep(interval) - continue - except Exception: - return - raise Exception("timed out while waiting for %s" % func) - - def run_pg_bench_small(pg_bin: "PgBin", connstr: str): """ Fast way to populate data. diff --git a/test_runner/regress/test_tenant_relocation.py b/test_runner/regress/test_tenant_relocation.py index eb020c101f..32ad5381b4 100644 --- a/test_runner/regress/test_tenant_relocation.py +++ b/test_runner/regress/test_tenant_relocation.py @@ -17,9 +17,9 @@ from fixtures.neon_fixtures import ( from fixtures.pageserver.http import PageserverHttpClient from fixtures.pageserver.utils import ( assert_tenant_state, - tenant_exists, wait_for_last_record_lsn, wait_for_upload, + wait_tenant_status_404, ) from fixtures.port_distributor import PortDistributor from fixtures.remote_storage import RemoteStorageKind, available_remote_storages @@ -29,7 +29,6 @@ from fixtures.utils import ( start_in_background, subprocess_capture, wait_until, - wait_while, ) @@ -269,11 +268,16 @@ def test_tenant_relocation( env = neon_env_builder.init_start() + tenant_id = TenantId("74ee8b079a0e437eb0afea7d26a07209") + # FIXME: Is this expected? env.pageserver.allowed_errors.append( ".*init_tenant_mgr: marking .* as locally complete, while it doesnt exist in remote index.*" ) + # Needed for detach polling. + env.pageserver.allowed_errors.append(f".*NotFound: tenant {tenant_id}.*") + # create folder for remote storage mock remote_storage_mock_path = env.repo_dir / "local_fs_remote_storage" @@ -283,9 +287,7 @@ def test_tenant_relocation( pageserver_http = env.pageserver.http_client() - tenant_id, initial_timeline_id = env.neon_cli.create_tenant( - TenantId("74ee8b079a0e437eb0afea7d26a07209") - ) + _, initial_timeline_id = env.neon_cli.create_tenant(tenant_id) log.info("tenant to relocate %s initial_timeline_id %s", tenant_id, initial_timeline_id) env.neon_cli.create_branch("test_tenant_relocation_main", tenant_id=tenant_id) @@ -469,11 +471,8 @@ def test_tenant_relocation( pageserver_http.tenant_detach(tenant_id) # Wait a little, so that the detach operation has time to finish. - wait_while( - number_of_iterations=100, - interval=1, - func=lambda: tenant_exists(pageserver_http, tenant_id), - ) + wait_tenant_status_404(pageserver_http, tenant_id, iterations=100, interval=1) + post_migration_check(ep_main, 500500, old_local_path_main) post_migration_check(ep_second, 1001000, old_local_path_second)