Packages
ferricstore
0.10.2
0.11.14
0.11.12
0.11.11
0.11.10
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.2.0
0.1.0
FerricFlow durable workflows and queues with native-protocol storage, Raft durability, and Bitcask persistence.
Current section
Files
Jump to
Current section
Files
lib/ferricstore/stream/local_state.ex
defmodule Ferricstore.Stream.LocalState do
@moduledoc false
alias Ferricstore.Commands.Stream.CacheKey
alias Ferricstore.Commands.Stream.Waiters
@tables [
Ferricstore.Stream.Meta,
Ferricstore.Stream.Groups,
Ferricstore.Stream.Index
]
@spec clear() :: :ok
def clear, do: clear(nil)
@spec clear(term()) :: :ok
def clear(store) do
scope = CacheKey.scope(store)
Enum.each(@tables, fn table ->
if :ets.whereis(table) != :undefined do
clear_table(table, scope)
end
end)
Waiters.notify_scope(store)
:ok
end
defp clear_table(table, :unscoped), do: :ets.delete_all_objects(table)
defp clear_table(Ferricstore.Stream.Meta = table, {:ok, scope}) do
delete_scoped(table, {{{:"$1", :_}, :_, :_, :_, :_, :_}, scope})
end
defp clear_table(Ferricstore.Stream.Groups = table, {:ok, scope}) do
delete_scoped(table, {{{{:"$1", :_}, :_}, :_, :_, :_}, scope})
end
defp clear_table(Ferricstore.Stream.Index = table, {:ok, scope}) do
delete_scoped(table, {{{:ready, {:"$1", :_}}, :_}, scope})
delete_scoped(table, {{{{:"$1", :_}, :_, :_}, :_, :_}, scope})
end
defp delete_scoped(table, {head, scope}) do
:ets.select_delete(table, [
{head, [{:"=:=", :"$1", {:const, scope}}], [true]}
])
end
end