Current section

Files

Jump to
rocksdb test blob_metadata.erl
Raw

test/blob_metadata.erl

-module(blob_metadata).
-include_lib("eunit/include/eunit.hrl").
-define(rm_rf(Dir), rocksdb_test_util:rm_rf(Dir)).
basic_test() ->
?rm_rf("test_blob_meta"),
{ok, Db} =
rocksdb:open(
"test_blob_meta",
[{create_if_missing, true}
,{enable_blob_files, true}
,{min_blob_size, 0}]), %% All values go to blob files
try
%% Write some data and flush to create blob files
Value = list_to_binary(lists:duplicate(100, $a)),
ok = rocksdb:put(Db, <<"key1">>, Value, []),
ok = rocksdb:put(Db, <<"key2">>, Value, []),
ok = rocksdb:flush(Db, []),
%% Get column family metadata
{ok, Meta} = rocksdb:get_column_family_metadata(Db),
%% Verify metadata structure
true = is_map(Meta),
#{size := Size, file_count := FileCount, name := Name,
blob_file_size := BlobFileSize, blob_files := BlobFiles} = Meta,
true = is_integer(Size),
true = is_integer(FileCount),
true = is_binary(Name),
?assertEqual(<<"default">>, Name),
true = is_integer(BlobFileSize),
true = BlobFileSize > 0, %% Should have blob data
true = is_list(BlobFiles),
true = length(BlobFiles) >= 1, %% At least one blob file
%% Verify blob file metadata structure
[FirstBlob | _] = BlobFiles,
true = is_map(FirstBlob),
#{blob_file_number := BlobNum, blob_file_name := BlobName,
blob_file_path := BlobPath, size := BlobSize,
total_blob_count := BlobCount, total_blob_bytes := BlobBytes,
garbage_blob_count := GarbageCount, garbage_blob_bytes := GarbageBytes} = FirstBlob,
true = is_integer(BlobNum),
true = is_binary(BlobName),
true = is_binary(BlobPath),
true = is_integer(BlobSize),
true = BlobSize > 0,
true = is_integer(BlobCount),
true = BlobCount >= 2, %% We wrote 2 keys
true = is_integer(BlobBytes),
true = BlobBytes > 0,
true = is_integer(GarbageCount),
true = is_integer(GarbageBytes)
after
ok = rocksdb:close(Db),
?rm_rf("test_blob_meta")
end,
ok.
column_family_test() ->
?rm_rf("test_blob_meta_cf"),
{ok, Db, [DefaultH]} =
rocksdb:open_with_cf(
"test_blob_meta_cf",
[{create_if_missing, true}],
[{"default", [{enable_blob_files, true}, {min_blob_size, 0}]}]),
{ok, TestH} = rocksdb:create_column_family(Db, "test",
[{enable_blob_files, true}, {min_blob_size, 0}]),
try
%% Write to different column families
Value = list_to_binary(lists:duplicate(100, $x)),
ok = rocksdb:put(Db, DefaultH, <<"key1">>, Value, []),
ok = rocksdb:put(Db, TestH, <<"key2">>, Value, []),
ok = rocksdb:flush(Db, []),
%% Get metadata for default column family
{ok, DefaultMeta} = rocksdb:get_column_family_metadata(Db, DefaultH),
#{name := DefaultName} = DefaultMeta,
?assertEqual(<<"default">>, DefaultName),
%% Get metadata for test column family
{ok, TestMeta} = rocksdb:get_column_family_metadata(Db, TestH),
#{name := TestName} = TestMeta,
?assertEqual(<<"test">>, TestName)
after
ok = rocksdb:close(Db),
?rm_rf("test_blob_meta_cf")
end,
ok.