Skip to content

Commit 7c75e16

Browse files
authored
refactor: delete duplicated logic and wrap DBLevel calls (#1285)
1 parent 46ce72b commit 7c75e16

File tree

3 files changed

+36
-24
lines changed

3 files changed

+36
-24
lines changed

lib/lambda_ethereum_consensus/store/blob_db.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,9 @@ defmodule LambdaEthereumConsensus.Store.BlobDb do
8787

8888
with {:ok, it} <- Db.iterate(),
8989
{:ok, @block_root_prefix <> _, _value} <-
90-
Exleveldb.iterator_move(it, last_finalized_key),
90+
Db.iterator_move(it, last_finalized_key),
9191
{:ok, keys_to_remove} <- get_block_root_keys_to_remove(it),
92-
:ok <- Exleveldb.iterator_close(it) do
92+
:ok <- Db.iterator_close(it) do
9393
total_removed =
9494
keys_to_remove
9595
|> Enum.reduce_while(0, fn
@@ -111,7 +111,7 @@ defmodule LambdaEthereumConsensus.Store.BlobDb do
111111
@spec get_block_root_keys_to_remove(list(binary()), :eleveldb.itr_ref()) ::
112112
{:ok, list(binary())}
113113
defp get_block_root_keys_to_remove(keys_to_remove \\ [], iterator) do
114-
case Exleveldb.iterator_move(iterator, :prev) do
114+
case Db.iterator_move(iterator, :prev) do
115115
{:ok, <<@block_root_prefix, _rest::binary>> = block_root_key, _root} ->
116116
[block_root_key | keys_to_remove] |> get_block_root_keys_to_remove(iterator)
117117

lib/lambda_ethereum_consensus/store/db.ex

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,41 +14,49 @@ defmodule LambdaEthereumConsensus.Store.Db do
1414

1515
@spec put(binary, binary) :: :ok
1616
def put(key, value) do
17-
ref = GenServer.call(@registered_name, :get_ref)
18-
Exleveldb.put(ref, key, value)
17+
Exleveldb.put(ref(), key, value)
1918
end
2019

2120
@spec delete(binary) :: :ok
2221
def delete(key) do
23-
ref = GenServer.call(@registered_name, :get_ref)
24-
Exleveldb.delete(ref, key)
22+
Exleveldb.delete(ref(), key)
2523
end
2624

2725
@spec get(binary) :: {:ok, binary} | :not_found
2826
def get(key) do
29-
ref = GenServer.call(@registered_name, :get_ref)
30-
Exleveldb.get(ref, key)
27+
Exleveldb.get(ref(), key)
3128
end
3229

3330
@spec size() :: non_neg_integer()
3431
def size() do
35-
ref = GenServer.call(@registered_name, :get_ref)
36-
{:ok, size} = :eleveldb.status(ref, "leveldb.total-bytes")
32+
{:ok, size} = :eleveldb.status(ref(), "leveldb.total-bytes")
3733
String.to_integer(size)
3834
end
3935

4036
@spec iterate() :: {:ok, :eleveldb.itr_ref()} | {:error, any()}
4137
def iterate() do
42-
ref = GenServer.call(@registered_name, :get_ref)
43-
# TODO: wrap cursor to make it DB-agnostic
44-
Exleveldb.iterator(ref, [])
38+
Exleveldb.iterator(ref(), [])
4539
end
4640

4741
@spec iterate_keys() :: {:ok, :eleveldb.itr_ref()} | {:error, any()}
4842
def iterate_keys() do
49-
ref = GenServer.call(@registered_name, :get_ref)
50-
# TODO: wrap cursor to make it DB-agnostic
51-
Exleveldb.iterator(ref, [], :keys_only)
43+
Exleveldb.iterator(ref(), [], :keys_only)
44+
end
45+
46+
@spec iterator_close(:eleveldb.itr_ref()) :: :ok
47+
def iterator_close(iter_ref) do
48+
Exleveldb.iterator_close(iter_ref)
49+
end
50+
51+
@spec iterator_move(
52+
:eleveldb.itr_ref(),
53+
:first | :last | :next | :prefetch | :prefetch_stop | :prev | binary()
54+
) ::
55+
{:error, :invalid_iterator | :iterator_closed}
56+
| {:ok, binary()}
57+
| {:ok, binary(), binary()}
58+
def iterator_move(iter_ref, action) do
59+
Exleveldb.iterator_move(iter_ref, action)
5260
end
5361

5462
@impl true
@@ -74,4 +82,8 @@ defmodule LambdaEthereumConsensus.Store.Db do
7482
Application.fetch_env!(:lambda_ethereum_consensus, __MODULE__)
7583
|> Keyword.fetch!(:dir)
7684
end
85+
86+
defp ref() do
87+
GenServer.call(__MODULE__, :get_ref)
88+
end
7789
end

lib/lambda_ethereum_consensus/store/kv_schema.ex

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ defmodule LambdaEthereumConsensus.Store.KvSchema do
6666

6767
with {:ok, it} <- Db.iterate_keys(),
6868
{:ok, encoded_start} <- do_encode_key(start_key),
69-
{:ok, ^encoded_start} <- Exleveldb.iterator_move(it, encoded_start) do
69+
{:ok, ^encoded_start} <- Db.iterator_move(it, encoded_start) do
7070
res = iterate(it, starting_value, f, direction, encoded_start, include_first?)
71-
Exleveldb.iterator_close(it)
71+
Db.iterator_close(it)
7272
{:ok, res}
7373
else
7474
# The iterator moved for the first time to a place where it wasn't expected.
@@ -109,7 +109,7 @@ defmodule LambdaEthereumConsensus.Store.KvSchema do
109109
def first_key() do
110110
{:ok, it} = Db.iterate_keys()
111111

112-
case Exleveldb.iterator_move(it, @prefix) do
112+
case Db.iterator_move(it, @prefix) do
113113
{:ok, @prefix <> _k = full_key} -> do_decode_key(full_key)
114114
{:ok, _other} -> :not_found
115115
{:error, :invalid_iterator} -> :not_found
@@ -135,7 +135,7 @@ defmodule LambdaEthereumConsensus.Store.KvSchema do
135135
defp key_iterator(key) do
136136
with {:ok, it} <- Db.iterate_keys(),
137137
{:ok, encoded_start} <- do_encode_key(key),
138-
{:ok, ^encoded_start} <- Exleveldb.iterator_move(it, encoded_start) do
138+
{:ok, ^encoded_start} <- Db.iterator_move(it, encoded_start) do
139139
{:first, it, key}
140140
else
141141
# The iterator moved for the first time to a place where it wasn't expected.
@@ -154,7 +154,7 @@ defmodule LambdaEthereumConsensus.Store.KvSchema do
154154
defp next_key({:first, it, key}, direction), do: {[key], {:next, it}}
155155

156156
defp move_iterator(it, direction) do
157-
case Exleveldb.iterator_move(it, direction) do
157+
case Db.iterator_move(it, direction) do
158158
{:ok, @prefix <> _ = k} ->
159159
{:ok, decoded_key} = do_decode_key(k)
160160
{[decoded_key], {:next, it}}
@@ -168,7 +168,7 @@ defmodule LambdaEthereumConsensus.Store.KvSchema do
168168
defp next_key({:error, _}, _direction), do: nil
169169

170170
defp close(nil), do: :ok
171-
defp close(it), do: :ok == Exleveldb.iterator_close(it)
171+
defp close(it), do: :ok == Db.iterator_close(it)
172172

173173
defp iterate(it, acc, f, direction, _first_key, false) do
174174
iterate(it, acc, f, direction)
@@ -189,7 +189,7 @@ defmodule LambdaEthereumConsensus.Store.KvSchema do
189189
end
190190

191191
defp accumulate(it, acc, f, direction) do
192-
case Exleveldb.iterator_move(it, direction) do
192+
case Db.iterator_move(it, direction) do
193193
{:ok, @prefix <> _ = k} ->
194194
{:ok, decoded_key} = do_decode_key(k)
195195
{:cont, f.(decoded_key, acc)}

0 commit comments

Comments
 (0)