mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-09-12 07:54:49 +08:00
Optimise tracker diffing (#2992)
This commit is contained in:
parent
de568f84b9
commit
1ba59c6ac2
1 changed files with 22 additions and 16 deletions
|
@ -118,19 +118,22 @@ defmodule Livebook.Tracker do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp handle_topic_diff(@sessions_topic, {joins, leaves}, state) do
|
defp handle_topic_diff(@sessions_topic, {joins, leaves}, state) do
|
||||||
joins = Map.new(joins)
|
leave_messages =
|
||||||
leaves = Map.new(leaves)
|
for {id, meta} <- leaves, into: %{} do
|
||||||
|
{id, {:session_closed, meta.session}}
|
||||||
|
end
|
||||||
|
|
||||||
messages =
|
messages =
|
||||||
for id <- Enum.uniq(Map.keys(joins) ++ Map.keys(leaves)) do
|
for {id, meta} <- joins, into: leave_messages do
|
||||||
case {joins[id], leaves[id]} do
|
# If there is a corresponding leave, it is actually an update.
|
||||||
{%{session: session}, nil} -> {:session_created, session}
|
if leave_messages[id] do
|
||||||
{nil, %{session: session}} -> {:session_closed, session}
|
{id, {:session_updated, meta.session}}
|
||||||
{%{session: session}, %{}} -> {:session_updated, session}
|
else
|
||||||
|
{id, {:session_created, meta.session}}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for message <- messages do
|
for {_id, message} <- messages do
|
||||||
Phoenix.PubSub.direct_broadcast!(
|
Phoenix.PubSub.direct_broadcast!(
|
||||||
state.node_name,
|
state.node_name,
|
||||||
state.pubsub_server,
|
state.pubsub_server,
|
||||||
|
@ -141,19 +144,22 @@ defmodule Livebook.Tracker do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp handle_topic_diff(@apps_topic, {joins, leaves}, state) do
|
defp handle_topic_diff(@apps_topic, {joins, leaves}, state) do
|
||||||
joins = Map.new(joins)
|
leave_messages =
|
||||||
leaves = Map.new(leaves)
|
for {id, meta} <- leaves, into: %{} do
|
||||||
|
{id, {:app_closed, meta.app}}
|
||||||
|
end
|
||||||
|
|
||||||
messages =
|
messages =
|
||||||
for slug <- Enum.uniq(Map.keys(joins) ++ Map.keys(leaves)) do
|
for {id, meta} <- joins, into: leave_messages do
|
||||||
case {joins[slug], leaves[slug]} do
|
# If there is a corresponding leave, it is actually an update.
|
||||||
{%{app: app}, nil} -> {:app_created, app}
|
if leave_messages[id] do
|
||||||
{nil, %{app: app}} -> {:app_closed, app}
|
{id, {:app_updated, meta.app}}
|
||||||
{%{app: app}, %{}} -> {:app_updated, app}
|
else
|
||||||
|
{id, {:app_created, meta.app}}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for message <- messages do
|
for {_id, message} <- messages do
|
||||||
Phoenix.PubSub.direct_broadcast!(
|
Phoenix.PubSub.direct_broadcast!(
|
||||||
state.node_name,
|
state.node_name,
|
||||||
state.pubsub_server,
|
state.pubsub_server,
|
||||||
|
|
Loading…
Add table
Reference in a new issue