Skip to content

Commit cdee480

Browse files
authored
fix: set db events rate as tenant.max_events_per_second (#1608)
1 parent 7c0b073 commit cdee480

File tree

5 files changed

+22
-18
lines changed

5 files changed

+22
-18
lines changed

lib/extensions/postgres_cdc_rls/replication_poller.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ defmodule Extensions.PostgresCdcRls.ReplicationPoller do
3131
tenant_id = args["id"]
3232
Logger.metadata(external_id: tenant_id, project: tenant_id)
3333

34-
rate_counter_args = Tenants.db_events_per_second_rate(tenant_id, 4000)
34+
%Realtime.Api.Tenant{} = tenant = Tenants.Cache.get_tenant_by_external_id(tenant_id)
35+
rate_counter_args = Tenants.db_events_per_second_rate(tenant)
3536

3637
RateCounter.new(rate_counter_args)
3738

lib/realtime/tenants.ex

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -233,20 +233,9 @@ defmodule Realtime.Tenants do
233233
end
234234

235235
@doc "RateCounter arguments for counting database events per second."
236-
@spec db_events_per_second_rate(Tenant.t() | String.t()) :: RateCounter.Args.t()
237-
def db_events_per_second_rate(%Tenant{} = tenant), do: db_events_per_second_rate(tenant.external_id)
238-
239-
def db_events_per_second_rate(tenant_id) when is_binary(tenant_id) do
240-
opts = [
241-
telemetry: %{
242-
event_name: [:channel, :db_events],
243-
measurements: %{},
244-
metadata: %{tenant: tenant_id}
245-
}
246-
]
247-
248-
%RateCounter.Args{id: db_events_per_second_key(tenant_id), opts: opts}
249-
end
236+
@spec db_events_per_second_rate(Tenant.t()) :: RateCounter.Args.t()
237+
def db_events_per_second_rate(%Tenant{} = tenant),
238+
do: db_events_per_second_rate(tenant.external_id, tenant.max_events_per_second)
250239

251240
@doc "RateCounter arguments for counting database events per second with a limit."
252241
@spec db_events_per_second_rate(String.t(), non_neg_integer) :: RateCounter.Args.t()

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.61.0",
7+
version: "2.61.1",
88
elixir: "~> 1.18",
99
elixirc_paths: elixirc_paths(Mix.env()),
1010
start_permanent: Mix.env() == :prod,

test/realtime/extensions/cdc_rls/replication_poller_test.exs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ defmodule Realtime.Extensions.PostgresCdcRls.ReplicationPollerTest do
3737

3838
tenant = Containers.checkout_tenant(run_migrations: true)
3939

40+
{:ok, tenant} =
41+
Realtime.Api.get_tenant_by_external_id(tenant.external_id)
42+
|> Realtime.Api.update_tenant(%{"max_events_per_second" => 123})
43+
4044
subscribers_pids_table = :ets.new(__MODULE__, [:public, :bag])
4145
subscribers_nodes_table = :ets.new(__MODULE__, [:public, :set])
4246

@@ -71,7 +75,17 @@ defmodule Realtime.Extensions.PostgresCdcRls.ReplicationPollerTest do
7175
Process.sleep(1100)
7276

7377
rate = Realtime.Tenants.db_events_per_second_rate(tenant)
74-
assert {:ok, %RateCounter{sum: sum}} = RateCounter.get(rate)
78+
79+
assert {:ok,
80+
%RateCounter{
81+
sum: sum,
82+
limit: %{
83+
value: 123,
84+
measurement: :avg,
85+
triggered: false
86+
}
87+
}} = RateCounter.get(rate)
88+
7589
assert sum == 0
7690
end
7791

test/realtime/monitoring/prom_ex/plugins/tenant_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ defmodule Realtime.PromEx.Plugins.TenantTest do
2525

2626
def fake_db_event(external_id) do
2727
external_id
28-
|> Realtime.Tenants.db_events_per_second_rate()
28+
|> Realtime.Tenants.db_events_per_second_rate(100)
2929
|> Realtime.RateCounter.new()
3030

3131
external_id

0 commit comments

Comments
 (0)