Skip to content

Commit

Permalink
Integrate network patch in the p2p summary dump
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelmanzanera committed Mar 9, 2023
1 parent 6cc16c1 commit 3cfac2c
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 10 deletions.
21 changes: 16 additions & 5 deletions lib/archethic/db/embedded_impl/p2p_view.ex
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ defmodule Archethic.DB.EmbeddedImpl.P2PView do
(node_public_key :: Crypto.key()) => {
available? :: boolean(),
average_availability :: float(),
network_patch :: String.t()
network_patch :: String.t() | nil
}
}
def get_views do
Expand Down Expand Up @@ -74,11 +74,19 @@ defmodule Archethic.DB.EmbeddedImpl.P2PView do

available_bit = if available?, do: 1, else: 0
avg_availability_int = (avg_availability * 100) |> trunc()
network_patch_bin = String.to_integer(network_patch, 16)

network_patch_bin =
case network_patch do
nil ->
<<0::8>>

_ ->
<<1::8, String.to_integer(network_patch, 16)::16>>
end

acc =
<<acc::bitstring, node_key::binary, available_bit::8, avg_availability_int::8,
DateTime.to_unix(availability_update)::32, network_patch_bin::16>>
DateTime.to_unix(availability_update)::32, network_patch_bin::binary>>

serialize(rest, acc)
end
Expand All @@ -92,11 +100,14 @@ defmodule Archethic.DB.EmbeddedImpl.P2PView do

{network_patch, rest} =
case rest do
<<network_patch_bin::16, rest::bitstring>> ->
<<1::8, network_patch_bin::16, rest::bitstring>> ->
{Integer.to_string(network_patch_bin, 16), rest}

<<0::8, rest::bitstring>> ->
{nil, rest}

_ ->
{"", rest}
{nil, rest}
end

available? = if available_bit == 1, do: true, else: false
Expand Down
9 changes: 6 additions & 3 deletions lib/archethic/p2p/mem_table_loader.ex
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,7 @@ defmodule Archethic.P2P.MemTableLoader do
is_same_slot? = DateTime.compare(DateTime.utc_now(), next_repair_time) == :lt

p2p_summaries = DB.get_last_p2p_summaries()

previously_available = Enum.filter(p2p_summaries, &match?({_, true, _, _}, &1))
previously_available = Enum.filter(p2p_summaries, &match?({_, true, _, _, _}, &1))

node_key = Crypto.first_node_public_key()

Expand Down Expand Up @@ -206,7 +205,7 @@ defmodule Archethic.P2P.MemTableLoader do
defp first_node_change?(_, _), do: false

defp load_p2p_summary(
{node_public_key, available?, avg_availability, availability_update},
{node_public_key, available?, avg_availability, availability_update, network_patch},
is_same_slot?
) do
if available? do
Expand All @@ -218,5 +217,9 @@ defmodule Archethic.P2P.MemTableLoader do
end

MemTable.update_node_average_availability(node_public_key, avg_availability)

if network_patch do
MemTable.update_node_network_patch(node_public_key, network_patch)
end
end
end
7 changes: 5 additions & 2 deletions lib/archethic/self_repair/sync.ex
Original file line number Diff line number Diff line change
Expand Up @@ -359,11 +359,14 @@ defmodule Archethic.SelfRepair.Sync do
end

P2P.set_node_average_availability(node_key, avg_availability)
P2P.update_node_network_patch(node_key, network_patch)

if network_patch do
P2P.update_node_network_patch(node_key, network_patch)
end

%Node{availability_update: availability_update} = P2P.get_node_info!(node_key)

{node_key, available?, avg_availability, availability_update}
{node_key, available?, avg_availability, availability_update, network_patch}
end

defp update_statistics(date, []) do
Expand Down

0 comments on commit 3cfac2c

Please sign in to comment.