From b8172d23d4f8d6c6efb0a5e2e91331db645e94d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Caba=C3=A7o?= Date: Tue, 12 Nov 2024 14:03:05 +0000 Subject: [PATCH] fix: Add init warning; increase tenant cache to 6 hours (#1212) --- lib/realtime/tenants.ex | 2 +- lib/realtime/tenants/cache.ex | 5 +++-- lib/realtime/tenants/connect.ex | 21 ++++++++++----------- mix.exs | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/realtime/tenants.ex b/lib/realtime/tenants.ex index d00e3b0b3..3d7080895 100644 --- a/lib/realtime/tenants.ex +++ b/lib/realtime/tenants.ex @@ -34,7 +34,7 @@ defmodule Realtime.Tenants do ## Examples iex> Realtime.Tenants.get_health_conn(%Realtime.Api.Tenant{external_id: "not_found_tenant"}) - {:error, :not_found} + {:error, :tenant_database_connection_initializing} """ @spec get_health_conn(Tenant.t()) :: {:error, term()} | {:ok, pid()} diff --git a/lib/realtime/tenants/cache.ex b/lib/realtime/tenants/cache.ex index c3a221e76..ca2e5076b 100644 --- a/lib/realtime/tenants/cache.ex +++ b/lib/realtime/tenants/cache.ex @@ -5,12 +5,13 @@ defmodule Realtime.Tenants.Cache do require Cachex.Spec alias Realtime.Tenants - + @expiration :timer.hours(6) def child_spec(_) do %{ id: __MODULE__, start: - {Cachex, :start_link, [__MODULE__, [expiration: Cachex.Spec.expiration(default: 30_000)]]} + {Cachex, :start_link, + [__MODULE__, [expiration: Cachex.Spec.expiration(default: @expiration)]]} } end diff --git a/lib/realtime/tenants/connect.ex b/lib/realtime/tenants/connect.ex index 64e3e0a7c..a47124479 100644 --- a/lib/realtime/tenants/connect.ex +++ b/lib/realtime/tenants/connect.ex @@ -56,13 +56,14 @@ defmodule Realtime.Tenants.Connect do {:ok, conn} -> {:ok, conn} - {:error, :not_found} -> + {:error, :tenant_database_unavailable} -> call_external_node(tenant_id, opts) - {:error, :initializing} -> - {:error, :initializing} + {:error, :tenant_database_connection_initializing} -> + :timer.sleep(100) + call_external_node(tenant_id, opts) - {:error, :unknown_error} -> + {:error, :initializing} -> {:error, :tenant_database_unavailable} end end @@ -73,26 +74,24 @@ defmodule Realtime.Tenants.Connect do @spec get_status(binary()) :: {:ok, pid()} | {:error, - :unknown_error + :tenant_database_unavailable | :initializing - | :not_found} + | :tenant_database_connection_initializing} def get_status(tenant_id) do case :syn.lookup(__MODULE__, tenant_id) do {_, %{conn: conn}} when not is_nil(conn) -> - # we have the database connection pid in syn {:ok, conn} {_, %{conn: nil}} -> - # syn has registred the tenant process but we haven't updated the registry with the database connection pid {:error, :initializing} :undefined -> - # syn hasn't registered anything we need to start the database connection supervision tree - {:error, :not_found} + Logger.warning("Connection process starting up") + {:error, :tenant_database_connection_initializing} error -> log_error("SynInitializationError", error) - {:error, :unknown_error} + {:error, :tenant_database_unavailable} end end diff --git a/mix.exs b/mix.exs index fd6c95e55..87fcc77ff 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Realtime.MixProject do def project do [ app: :realtime, - version: "2.33.36", + version: "2.33.37", elixir: "~> 1.16.0", elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod,