From 1d47833304accc93dd71e5ce5d17147c6988311e Mon Sep 17 00:00:00 2001 From: Alex Chi Date: Tue, 16 May 2023 15:32:56 -0400 Subject: [PATCH] add test cases Signed-off-by: Alex Chi --- pageserver/src/tenant/mgr.rs | 5 +++++ test_runner/regress/test_tenants.py | 31 +++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/pageserver/src/tenant/mgr.rs b/pageserver/src/tenant/mgr.rs index 419a4f9d32..b0f4d2ae78 100644 --- a/pageserver/src/tenant/mgr.rs +++ b/pageserver/src/tenant/mgr.rs @@ -296,6 +296,11 @@ pub async fn create_tenant( let created_tenant = schedule_local_tenant_processing(conf, &tenant_directory, remote_storage, ctx)?; + fail::fail_point!("tenant-create-fail", |_| { + created_tenant.set_stopping(); // add this to all possible error paths + anyhow::bail!("tenant-create-fail"); + }); + let crated_tenant_id = created_tenant.tenant_id(); if tenant_id != crated_tenant_id { created_tenant.set_stopping(); diff --git a/test_runner/regress/test_tenants.py b/test_runner/regress/test_tenants.py index 5642449ce6..bb33bf8c04 100644 --- a/test_runner/regress/test_tenants.py +++ b/test_runner/regress/test_tenants.py @@ -397,3 +397,34 @@ def test_pageserver_with_empty_tenants( assert ( tenant_broken_count == 1 ), f"Tenant {tenant_without_timelines_dir} should have metric as broken" + +# Check that empty tenants work with or without the remote storage +@pytest.mark.parametrize( + "remote_storage_kind", available_remote_storages() + [RemoteStorageKind.NOOP] +) +def test_pageserver_create_tenants_fail( + neon_env_builder: NeonEnvBuilder, remote_storage_kind: RemoteStorageKind +): + neon_env_builder.enable_remote_storage( + remote_storage_kind=remote_storage_kind, + test_name="test_pageserver_create_tenants_fail", + ) + + env = neon_env_builder.init_start() + + env.pageserver.allowed_errors.append( + ".*marking .* as locally complete, while it doesnt exist in remote index.*" + ) + env.pageserver.allowed_errors.append( + ".*could not load tenant.*Failed to list timelines directory.*" + ) + + pageserver_http = env.pageserver.http_client() + pageserver_http.configure_failpoints(("tenant-create-fail", "return")) + + client = env.pageserver.http_client() + + dir = client.tenant_create() + + path = Path(env.repo_dir) / "tenants" / str(dir) + assert not path.exists()