Packages
rocksdb
2.6.1
3.1.1
3.1.0
3.0.0
2.6.2
2.6.1
retired
2.6.0
retired
2.5.0
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.9.0
1.8.0
1.7.0
1.6.0
1.5.1
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.1
1.1.0
1.0.0
0.26.2
0.26.1
0.26.0
0.25.0
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.0
0.21.0
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
RocksDB for Erlang
Retired package: Release invalid - Build broken, use 2.6.2
Current section
Files
Jump to
Current section
Files
test/background_work.erl
%% Copyright (c) 2016-2026 Benoit Chesneau.
%%
%% This file is provided to you under the Apache License,
%% Version 2.0 (the "License"); you may not use this file
%% except in compliance with the License. You may obtain
%% a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing,
%% software distributed under the License is distributed on an
%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
%% KIND, either express or implied. See the License for the
%% specific language governing permissions and limitations
%% under the License.
-module(background_work).
-include_lib("eunit/include/eunit.hrl").
-define(rm_rf(Dir), rocksdb_test_util:rm_rf(Dir)).
%% Test pause and continue background work
pause_continue_background_work_test() ->
?rm_rf("erocksdb.background_work.test"),
{ok, Ref} = rocksdb:open("erocksdb.background_work.test", [{create_if_missing, true}]),
%% Write some data
ok = rocksdb:put(Ref, <<"key1">>, <<"value1">>, []),
ok = rocksdb:put(Ref, <<"key2">>, <<"value2">>, []),
%% Pause background work
ok = rocksdb:pause_background_work(Ref),
%% Write more data while paused
ok = rocksdb:put(Ref, <<"key3">>, <<"value3">>, []),
%% Resume background work
ok = rocksdb:continue_background_work(Ref),
%% Verify all data is still readable
{ok, <<"value1">>} = rocksdb:get(Ref, <<"key1">>, []),
{ok, <<"value2">>} = rocksdb:get(Ref, <<"key2">>, []),
{ok, <<"value3">>} = rocksdb:get(Ref, <<"key3">>, []),
ok = rocksdb:close(Ref),
rocksdb:destroy("erocksdb.background_work.test", []),
?rm_rf("erocksdb.background_work.test"),
ok.
%% Test disable and enable manual compaction
disable_enable_manual_compaction_test() ->
?rm_rf("erocksdb.manual_compaction.test"),
{ok, Ref} = rocksdb:open("erocksdb.manual_compaction.test", [{create_if_missing, true}]),
%% Write some data
[ok = rocksdb:put(Ref, <<"key", (integer_to_binary(I))/binary>>,
<<"value", (integer_to_binary(I))/binary>>, [])
|| I <- lists:seq(1, 100)],
%% Disable manual compaction
ok = rocksdb:disable_manual_compaction(Ref),
%% Re-enable manual compaction
ok = rocksdb:enable_manual_compaction(Ref),
%% Now compact_range should work
ok = rocksdb:compact_range(Ref, undefined, undefined, []),
%% Verify data is still readable
{ok, <<"value1">>} = rocksdb:get(Ref, <<"key1">>, []),
{ok, <<"value100">>} = rocksdb:get(Ref, <<"key100">>, []),
ok = rocksdb:close(Ref),
rocksdb:destroy("erocksdb.manual_compaction.test", []),
?rm_rf("erocksdb.manual_compaction.test"),
ok.
%% Test that compact_range is blocked when manual compaction is disabled
compaction_blocked_when_disabled_test() ->
?rm_rf("erocksdb.compaction_blocked.test"),
{ok, Ref} = rocksdb:open("erocksdb.compaction_blocked.test", [{create_if_missing, true}]),
%% Write some data
[ok = rocksdb:put(Ref, <<"key", (integer_to_binary(I))/binary>>,
<<"value", (integer_to_binary(I))/binary>>, [])
|| I <- lists:seq(1, 50)],
%% Disable manual compaction
ok = rocksdb:disable_manual_compaction(Ref),
%% Try to compact - should return an error indicating compaction is disabled
Result = rocksdb:compact_range(Ref, undefined, undefined, []),
%% When manual compaction is disabled, compact_range returns an error
?assertMatch({error, _}, Result),
%% Re-enable manual compaction
ok = rocksdb:enable_manual_compaction(Ref),
%% Now compact_range should work
ok = rocksdb:compact_range(Ref, undefined, undefined, []),
ok = rocksdb:close(Ref),
rocksdb:destroy("erocksdb.compaction_blocked.test", []),
?rm_rf("erocksdb.compaction_blocked.test"),
ok.