Use a faster sets implementation available since OTP 24
Since OTP 24 a version of sets implemented using maps is available [1]
Replace a few case where we use sets with the new implementation.
[1] https://www.erlang.org/doc/man/sets.html
diff --git a/src/global_changes/src/global_changes_listener.erl b/src/global_changes/src/global_changes_listener.erl
index 71d14e2..924071e 100644
--- a/src/global_changes/src/global_changes_listener.erl
+++ b/src/global_changes/src/global_changes_listener.erl
@@ -55,7 +55,7 @@
State = #state{
update_db = UpdateDb,
pending_update_count = 0,
- pending_updates = sets:new(),
+ pending_updates = sets:new([{version, 2}]),
max_event_delay = MaxEventDelay,
dbname = global_changes_util:get_dbname()
},
@@ -99,7 +99,7 @@
{false, true} ->
State0#state{
update_db = Boolean,
- pending_updates = sets:new(),
+ pending_updates = sets:new([{version, 2}]),
pending_update_count = 0,
last_update_time = undefined
};
@@ -141,7 +141,7 @@
0
),
State1 = State#state{
- pending_updates = sets:new(),
+ pending_updates = sets:new([{version, 2}]),
pending_update_count = 0,
last_update_time = undefined
},
diff --git a/src/global_changes/src/global_changes_server.erl b/src/global_changes/src/global_changes_server.erl
index e9a9c5f..0e4cea1 100644
--- a/src/global_changes/src/global_changes_server.erl
+++ b/src/global_changes/src/global_changes_server.erl
@@ -69,7 +69,7 @@
State = #state{
update_db = UpdateDb,
pending_update_count = 0,
- pending_updates = sets:new(),
+ pending_updates = sets:new([{version, 2}]),
max_write_delay = MaxWriteDelay,
dbname = GlobalChangesDbName,
handler_ref = erlang:monitor(process, Handler)
@@ -106,7 +106,7 @@
{false, true} ->
State0#state{
update_db = Boolean,
- pending_updates = sets:new(),
+ pending_updates = sets:new([{version, 2}]),
pending_update_count = 0
};
_ ->
@@ -177,7 +177,7 @@
0
),
{noreply, State#state{
- pending_updates = sets:new(),
+ pending_updates = sets:new([{version, 2}]),
pending_update_count = 0
}}.
diff --git a/src/mem3/src/mem3_sync_event_listener.erl b/src/mem3/src/mem3_sync_event_listener.erl
index a01921f..4389291 100644
--- a/src/mem3/src/mem3_sync_event_listener.erl
+++ b/src/mem3/src/mem3_sync_event_listener.erl
@@ -63,7 +63,7 @@
ok = subscribe_for_config(),
Delay = config:get_integer("mem3", "sync_delay", 5000),
Frequency = config:get_integer("mem3", "sync_frequency", 500),
- Buckets = lists:duplicate(Delay div Frequency + 1, sets:new()),
+ Buckets = lists:duplicate(Delay div Frequency + 1, sets:new([{version, 2}])),
St = #state{
nodes = mem3_sync:nodes_db(),
shards = mem3_sync:shards_db(),
@@ -163,7 +163,7 @@
[sets:union([B | ToMerge]) | Buckets1];
M ->
%% Extend the number of buckets by M
- lists:duplicate(M, sets:new()) ++ Buckets0
+ lists:duplicate(M, sets:new([{version, 2}])) ++ Buckets0
end.
%% To ensure that mem3_sync:push/2 is indeed called with roughly the frequency
@@ -180,7 +180,7 @@
case Delta > Frequency of
true ->
{Buckets1, [ToPush]} = lists:split(length(Buckets0) - 1, Buckets0),
- Buckets2 = [sets:new() | Buckets1],
+ Buckets2 = [sets:new([{version, 2}]) | Buckets1],
%% There's no sets:map/2!
sets:fold(
fun(ShardName, _) -> push_shard(ShardName) end,