Skip to content

Commit 0b7ad8a

Browse files
committed
fix: invalidate cache on any Tenant update
1 parent 35023f8 commit 0b7ad8a

File tree

4 files changed

+13
-12
lines changed

4 files changed

+13
-12
lines changed

lib/realtime/api.ex

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ defmodule Realtime.Api do
66

77
import Ecto.Query
88

9+
alias Ecto.Changeset
910
alias Realtime.Api.Extensions
1011
alias Realtime.Api.Tenant
1112
alias Realtime.GenCounter
@@ -198,7 +199,7 @@ defmodule Realtime.Api do
198199
new_settings = Map.put(settings, to, value)
199200

200201
extension
201-
|> Ecto.Changeset.cast(%{settings: new_settings}, [:settings])
202+
|> Changeset.cast(%{settings: new_settings}, [:settings])
202203
|> Repo.update!()
203204
end
204205
end
@@ -222,23 +223,21 @@ defmodule Realtime.Api do
222223
|> Map.put(:events_per_second_now, current)
223224
end
224225

225-
defp maybe_invalidate_cache(
226-
%Ecto.Changeset{changes: changes, valid?: true, data: %{external_id: external_id}} = changeset
227-
)
228-
when changes != %{} and requires_restarting_db_connection(changeset) do
226+
defp maybe_invalidate_cache(%Changeset{changes: changes, valid?: true, data: %{external_id: external_id}})
227+
when changes != %{} do
229228
Tenants.Cache.distributed_invalidate_tenant_cache(external_id)
230229
end
231230

232231
defp maybe_invalidate_cache(_changeset), do: nil
233232

234-
defp maybe_trigger_disconnect(%Ecto.Changeset{data: %{external_id: external_id}} = changeset)
233+
defp maybe_trigger_disconnect(%Changeset{data: %{external_id: external_id}} = changeset)
235234
when requires_disconnect(changeset) do
236235
SocketDisconnect.distributed_disconnect(external_id)
237236
end
238237

239238
defp maybe_trigger_disconnect(_changeset), do: nil
240239

241-
defp maybe_restart_db_connection(%Ecto.Changeset{data: %{external_id: external_id}} = changeset)
240+
defp maybe_restart_db_connection(%Changeset{data: %{external_id: external_id}} = changeset)
242241
when requires_restarting_db_connection(changeset) do
243242
Connect.shutdown(external_id)
244243
end

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ defmodule Realtime.MixProject do
44
def project do
55
[
66
app: :realtime,
7-
version: "2.57.5",
7+
version: "2.57.6",
88
elixir: "~> 1.18",
99
elixirc_paths: elixirc_paths(Mix.env()),
1010
start_permanent: Mix.env() == :prod,

test/realtime/api_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ defmodule Realtime.ApiTest do
214214
end
215215

216216
test "valid data and no changes to tenant will not refresh cache", %{tenant: tenant} do
217-
reject(&Realtime.Tenants.Cache.get_tenant_by_external_id/1)
217+
reject(&Realtime.Tenants.Cache.distributed_invalidate_tenant_cache/1)
218218
assert {:ok, %Tenant{}} = Api.update_tenant(tenant, %{name: tenant.name})
219219
end
220220
end

test/realtime/tenants/cache_test.exs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
defmodule Realtime.Tenants.CacheTest do
2-
alias Realtime.Rpc
32
# async: false due to the usage of dev_realtime tenant
43
use Realtime.DataCase, async: false
54

65
alias Realtime.Api
7-
alias Realtime.Tenants.Cache
6+
alias Realtime.Rpc
87
alias Realtime.Tenants
8+
alias Realtime.Tenants.Cache
99

1010
setup do
1111
{:ok, tenant: tenant_fixture()}
@@ -15,7 +15,9 @@ defmodule Realtime.Tenants.CacheTest do
1515
test "tenants cache returns a cached result", %{tenant: tenant} do
1616
external_id = tenant.external_id
1717
assert %Api.Tenant{name: "tenant"} = Cache.get_tenant_by_external_id(external_id)
18-
Api.update_tenant(tenant, %{name: "new name"})
18+
19+
changeset = Api.Tenant.changeset(tenant, %{name: "new name"})
20+
Repo.update!(changeset)
1921
assert %Api.Tenant{name: "new name"} = Tenants.get_tenant_by_external_id(external_id)
2022
assert %Api.Tenant{name: "tenant"} = Cache.get_tenant_by_external_id(external_id)
2123
end

0 commit comments

Comments
 (0)