diff --git a/apps/arweave/src/ar_data_sync.erl b/apps/arweave/src/ar_data_sync.erl index 06b117d03..100846655 100644 --- a/apps/arweave/src/ar_data_sync.erl +++ b/apps/arweave/src/ar_data_sync.erl @@ -220,11 +220,10 @@ add_chunk(DataRoot, DataPath, Chunk, Offset, TXSize) -> %% relative end offset to end up in one of the configured storage modules. is_estimated_long_term_chunk(DataRootOffsetReply, EndOffset) -> WeaveSize = ar_node:get_current_weave_size(), - IsTipCovered = is_offset_vicinity_covered(WeaveSize), case DataRootOffsetReply of not_found -> %% A chunk from a pending transaction. - IsTipCovered; + is_offset_vicinity_covered(WeaveSize); {ok, {TXStartOffset, _}} -> WeaveSize = ar_node:get_current_weave_size(), Size = ar_node:get_recent_max_block_size(), diff --git a/apps/arweave/src/ar_storage_module.erl b/apps/arweave/src/ar_storage_module.erl index 345dc1aa9..60ab22f3e 100644 --- a/apps/arweave/src/ar_storage_module.erl +++ b/apps/arweave/src/ar_storage_module.erl @@ -4,6 +4,8 @@ get_by_id/1, get_range/1, get_packing/1, get_size/1, get/2, get_all/1, get_all/2, has_any/1, has_range/2]). +-export([get_unique_sorted_intervals/1]). + -include_lib("arweave/include/ar.hrl"). -include_lib("arweave/include/ar_consensus.hrl"). -include_lib("arweave/include/ar_config.hrl"). @@ -183,8 +185,14 @@ has_any(Offset) -> %% @doc Return true if the given range is covered by the configured storage modules. has_range(Start, End) -> {ok, Config} = application:get_env(arweave, config), - Intervals = get_unique_sorted_intervals(Config#config.storage_modules), - has_range(Start, End, Intervals). + case ets:lookup(?MODULE, unique_sorted_intervals) of + [] -> + Intervals = get_unique_sorted_intervals(Config#config.storage_modules), + ets:insert(?MODULE, {unique_sorted_intervals, Intervals}), + has_range(Start, End, Intervals); + [{_, Intervals}] -> + has_range(Start, End, Intervals) + end. %%%=================================================================== %%% Private functions.