scaling fix: coalesce session push notifications
This commit is contained in:
parent
d97a7bff81
commit
85e31bbca0
14
lib/floof.ex
14
lib/floof.ex
|
@ -95,7 +95,11 @@ defmodule Floof do
|
|||
{backlog, sesskey}
|
||||
|
||||
{:SessionPushed, sesskey} ->
|
||||
:ok = send_summary(client, :requestpull, Floof.SessionManager.peek(sesskey))
|
||||
sesskeys = coalesce_sesspushes([sesskey])
|
||||
[sesskey | _] = sesskeys
|
||||
dcdids = Enum.map(MapSet.new(sesskeys), &MapSet.new(Floof.SessionManager.peek(&1)))
|
||||
dcdids = Enum.reduce(dcdids, &MapSet.union(&1, &2))
|
||||
:ok = send_summary(client, :requestpull, dcdids)
|
||||
{backlog, sesskey}
|
||||
|
||||
{:SessionDetached, old_sesskey} ->
|
||||
|
@ -198,6 +202,14 @@ defmodule Floof do
|
|||
:ok = Floof.PacketSpool.store_new_multi(backlog)
|
||||
end
|
||||
|
||||
defp coalesce_sesspushes(sesskeys) do
|
||||
receive do
|
||||
{:SessionPushed, sesskey} -> coalesce_sesspushes([sesskey | sesskeys])
|
||||
after
|
||||
10 -> sesskeys
|
||||
end
|
||||
end
|
||||
|
||||
defp partition_hashes(xs) do
|
||||
xs
|
||||
|> Floof.DistributorSeen.have_we_multi()
|
||||
|
|
|
@ -105,7 +105,8 @@ defmodule Floof.SessionManager do
|
|||
&case :dets.lookup(&1.dets_file, key) do
|
||||
{:error, _} -> []
|
||||
items -> Enum.map(items, fn {_, x} -> x end)
|
||||
end
|
||||
end,
|
||||
:infinity
|
||||
)
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue