From 82e340eb56da208440e7d8cccd65488029b94212 Mon Sep 17 00:00:00 2001 From: bchamagne Date: Thu, 15 Feb 2024 18:13:39 +0100 Subject: [PATCH] SummaryCache code_change --- .../beacon_chain/subset/summary_cache.ex | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/archethic/beacon_chain/subset/summary_cache.ex b/lib/archethic/beacon_chain/subset/summary_cache.ex index bc50d6d10..c36237f24 100644 --- a/lib/archethic/beacon_chain/subset/summary_cache.ex +++ b/lib/archethic/beacon_chain/subset/summary_cache.ex @@ -6,6 +6,8 @@ defmodule Archethic.BeaconChain.Subset.SummaryCache do alias Archethic.BeaconChain alias Archethic.BeaconChain.Slot alias Archethic.BeaconChain.SummaryTimer + alias Archethic.BeaconChain.ReplicationAttestation + alias Archethic.TransactionChain.TransactionSummary alias Archethic.Crypto alias Archethic.PubSub @@ -14,7 +16,7 @@ defmodule Archethic.BeaconChain.Subset.SummaryCache do alias Archethic.Utils.VarInt use GenServer - @vsn 1 + @vsn 2 @table_name :archethic_summary_cache @@ -39,6 +41,38 @@ defmodule Archethic.BeaconChain.Subset.SummaryCache do {:ok, %{}} end + # update the TransactionSummary in memory + def code_change(1, state, _extra) do + # credo:disable-for-lines:26 + elements = + :ets.tab2list(@table_name) + |> Enum.map(fn {subset, {slot, node_public_key}} -> + slot = + Map.update!( + slot, + :transaction_attestations, + fn attestations -> + Enum.map( + attestations, + fn attestation = %ReplicationAttestation{transaction_summary: summary} -> + %ReplicationAttestation{ + attestation + | transaction_summary: struct(TransactionSummary, Map.from_struct(summary)) + } + end + ) + end + ) + + {subset, {slot, node_public_key}} + end) + + :ets.delete_all_objects(@table_name) + :ets.insert(@table_name, elements) + + {:ok, state} + end + def code_change(_version, state, _extra), do: {:ok, state} def handle_info(:self_repair_sync, state) do