From f4a643122ca4197323beaa23c0ce1d841cd1d302 Mon Sep 17 00:00:00 2001 From: June Kelly Date: Tue, 9 Jan 2024 16:49:03 +0000 Subject: [PATCH] Change default ets table type to `set`, and make configurable (#38) * Change default ets table type to `set`, and make configurable * Document the `:ets_table_type` option * Add link to mnesia backend --------- Co-authored-by: Shane Kilkelly Co-authored-by: epinault --- lib/hammer/backend/ets.ex | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/hammer/backend/ets.ex b/lib/hammer/backend/ets.ex index 4fed847..3f3e044 100644 --- a/lib/hammer/backend/ets.ex +++ b/lib/hammer/backend/ets.ex @@ -16,6 +16,8 @@ defmodule Hammer.Backend.ETS do - `expiry_ms`: (integer) time in ms before a bucket is auto-deleted, should be larger than the expected largest size/duration of a bucket - `cleanup_interval_ms`: (integer) time between cleanup runs, + - `ets_table_type`: (atom) type of ETS table, defaults to `:set`, and can be + either `:set` or `:ordered_set` Example: @@ -160,6 +162,7 @@ defmodule Hammer.Backend.ETS do def init(args) do cleanup_interval_ms = Keyword.get(args, :cleanup_interval_ms) expiry_ms = Keyword.get(args, :expiry_ms) + ets_table_type = Keyword.get(args, :ets_table_type, :set) if !expiry_ms do raise RuntimeError, "Missing required config: expiry_ms" @@ -169,9 +172,13 @@ defmodule Hammer.Backend.ETS do raise RuntimeError, "Missing required config: cleanup_interval_ms" end + if ets_table_type not in [:set, :ordered_set] do + raise RuntimeError, "Invalid config: ets_table_type '#{ets_table_type}'" + end + case :ets.info(@ets_table_name) do :undefined -> - :ets.new(@ets_table_name, [:named_table, :ordered_set, :public]) + :ets.new(@ets_table_name, [:named_table, ets_table_type, :public]) :timer.send_interval(cleanup_interval_ms, :prune) _ ->