diff --git a/.changeset/ten-rice-sparkle.md b/.changeset/ten-rice-sparkle.md new file mode 100644 index 0000000000..8803c747c5 --- /dev/null +++ b/.changeset/ten-rice-sparkle.md @@ -0,0 +1,5 @@ +--- +"@core/sync-service": patch +--- + +fix: correctly scope the storage based on the tenant and use already-provided tenant id diff --git a/integration-tests/tests/_macros.luxinc b/integration-tests/tests/_macros.luxinc index 84cdc32dd8..649a0498a4 100644 --- a/integration-tests/tests/_macros.luxinc +++ b/integration-tests/tests/_macros.luxinc @@ -84,7 +84,7 @@ [endmacro] [macro setup_electric] - [invoke setup_electric_with_env "ELECTRIC_DATABASE_ID=integration_test_tenant DATABASE_URL=$database_url"] + [invoke setup_electric_with_env "DATABASE_URL=$database_url"] [endmacro] [macro setup_multi_tenant_electric] @@ -96,7 +96,7 @@ [endmacro] [macro setup_electric_with_env_and_tenant env] - [invoke setup_electric_with_env "ELECTRIC_DATABASE_ID=integration_test_tenant DATABASE_URL=$database_url $env"] + [invoke setup_electric_with_env "DATABASE_URL=$database_url $env"] [endmacro] [macro setup_electric_shell shell_name port env] @@ -107,7 +107,7 @@ [endmacro] [macro setup_electric_shell_with_tenant shell_name port] - [invoke setup_electric_shell $shell_name $port "ELECTRIC_DATABASE_ID=integration_test_tenant DATABASE_URL=$database_url"] + [invoke setup_electric_shell $shell_name $port "DATABASE_URL=$database_url"] [endmacro] [macro add_tenant tenant_id electric_port] diff --git a/packages/sync-service/.env.dev b/packages/sync-service/.env.dev index 5aaaa42a13..346d295c7d 100644 --- a/packages/sync-service/.env.dev +++ b/packages/sync-service/.env.dev @@ -5,6 +5,5 @@ ELECTRIC_CACHE_MAX_AGE=1 ELECTRIC_CACHE_STALE_AGE=3 # using a small chunk size of 10kB for dev to speed up tests ELECTRIC_LOG_CHUNK_BYTES_THRESHOLD=10000 -ELECTRIC_DATABASE_ID=test_tenant # configuring a second database for multi-tenancy integration testing OTHER_DATABASE_URL=postgresql://postgres:password@localhost:54322/electric?sslmode=disable diff --git a/packages/sync-service/.env.test b/packages/sync-service/.env.test index 439f18af07..dd48e6bbee 100644 --- a/packages/sync-service/.env.test +++ b/packages/sync-service/.env.test @@ -1,3 +1,2 @@ LOG_LEVEL=info DATABASE_URL=postgresql://postgres:password@localhost:54321/postgres?sslmode=disable -ELECTRIC_DATABASE_ID=test_tenant diff --git a/packages/sync-service/config/runtime.exs b/packages/sync-service/config/runtime.exs index d45900bee8..2203fbe3d8 100644 --- a/packages/sync-service/config/runtime.exs +++ b/packages/sync-service/config/runtime.exs @@ -172,8 +172,12 @@ replication_stream_id = storage = {storage_mod, storage_opts} prometheus_port = env!("ELECTRIC_PROMETHEUS_PORT", :integer, nil) +# The provided database id is relevant if you had used v0.8 and want to keep the storage +# instead of having hanging files. We use a provided value as stack id, but nothing else. +provided_database_id = env!("ELECTRIC_DATABASE_ID", :string, "single_stack") config :electric, + provided_database_id: provided_database_id, allow_shape_deletion: enable_integration_testing, cache_max_age: cache_max_age, cache_stale_age: cache_stale_age, diff --git a/packages/sync-service/lib/electric/application.ex b/packages/sync-service/lib/electric/application.ex index 2539c5b043..54686b2015 100644 --- a/packages/sync-service/lib/electric/application.ex +++ b/packages/sync-service/lib/electric/application.ex @@ -15,7 +15,7 @@ defmodule Electric.Application do # We have "instance id" identifier as the node ID, however that's generated every runtime, # so isn't stable across restarts. Our storages however scope themselves based on this stack ID # so we're just hardcoding it here. - stack_id = "single_stack" + stack_id = Application.get_env(:electric, :provided_database_id, "single_stack") router_opts = [ diff --git a/packages/sync-service/lib/electric/shape_cache/file_storage.ex b/packages/sync-service/lib/electric/shape_cache/file_storage.ex index f9d6e328b5..21a9161bc0 100644 --- a/packages/sync-service/lib/electric/shape_cache/file_storage.ex +++ b/packages/sync-service/lib/electric/shape_cache/file_storage.ex @@ -33,9 +33,10 @@ defmodule Electric.ShapeCache.FileStorage do @impl Electric.ShapeCache.Storage def shared_opts(opts) do stack_id = Keyword.fetch!(opts, :stack_id) - storage_dir = Keyword.get(opts, :storage_dir, "./shapes/#{stack_id}") + storage_dir = Keyword.get(opts, :storage_dir, "./shapes") - %{base_path: storage_dir, stack_id: stack_id} + # Always scope the provided storage dir by stack id + %{base_path: Path.join(storage_dir, stack_id), stack_id: stack_id} end @impl Electric.ShapeCache.Storage