Skip to content

Commit

Permalink
chore: raise detailed message when deleting txn missing key (#792)
Browse files Browse the repository at this point in the history
  • Loading branch information
jyeshe committed Jul 20, 2022
1 parent 6be2041 commit e6f0366
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lib/ae_mdw/database.ex
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,10 @@ defmodule AeMdw.Database do

@spec delete(transaction(), table(), key()) :: :ok
def delete(txn, table, key) do
if not RocksDbCF.exists?(txn, table, key) do
raise "Txn delete on missing key: #{table}, #{inspect(key)}"
end

:ok = RocksDbCF.delete(txn, table, key)
end

Expand Down
10 changes: 10 additions & 0 deletions lib/ae_mdw/db/rocksdb_cf.ex
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,16 @@ defmodule AeMdw.Db.RocksDbCF do
end
end

@spec exists?(transaction(), table(), key()) :: boolean()
def exists?(txn, table, index) do
key = :sext.encode(index)

case RocksDb.dirty_get(txn, table, key) do
{:ok, _value} -> true
:not_found -> false
end
end

@spec first_key(table()) :: {:ok, key()} | :not_found
def first_key(table) do
{:ok, it} = RocksDb.iterator(table)
Expand Down
14 changes: 14 additions & 0 deletions test/ae_mdw/database_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,18 @@ defmodule AeMdw.DatabaseTest do
end)
end
end

describe "delete/3" do
test "raises error when key doesn't exist" do
txn = Database.transaction_new()
Database.write(txn, Model.Block, Model.block(index: {123, 0}))

refute :not_found == Database.dirty_fetch(txn, Model.Block, {123, 0})
assert :ok = Database.delete(txn, Model.Block, {123, 0})

assert_raise RuntimeError, "Txn delete on missing key: #{Model.Block}, {123, 0}", fn ->
Database.delete(txn, Model.Block, {123, 0})
end
end
end
end
7 changes: 7 additions & 0 deletions test/ae_mdw/db/rocksdbcf_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,13 @@ defmodule AeMdw.Db.RocksDbCFTest do
assert :ok = RocksDbCF.put(txn, Model.Tx, m_tx)
refute RocksDbCF.exists?(Model.Tx, txi)
end

test "returns true when key exists in transaction", %{txn: txn} do
txi = System.unique_integer() |> abs()
m_tx = Model.tx(index: txi)
assert :ok = RocksDbCF.put(txn, Model.Tx, m_tx)
assert RocksDbCF.exists?(txn, Model.Tx, txi)
end
end

describe "first_key/1" do
Expand Down

0 comments on commit e6f0366

Please sign in to comment.