File: bcfold_setup

package info (click to toggle)
erlang-bitcask 2.0.8%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 1,612 kB
  • sloc: erlang: 7,929; ansic: 2,954; makefile: 229; exp: 86; sh: 14
file content (52 lines) | stat: -rwxr-xr-x 1,400 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#! /usr/bin/env escript 

main([BitcaskDir, DataDir]) ->
    load_bitcask(BitcaskDir),
    make_small(DataDir),
    make_medium(DataDir),
    make_large(DataDir),
    make_cs(DataDir).
       

load_bitcask(Dir) ->
    Path = Dir ++ "/ebin/",
    Modlist = filelib:fold_files(Path, 
                                 ".*.beam", false, 
                                 fun(X, Acc) ->
                                         Mod0 = filename:rootname(filename:basename(X)),
                                         Mod = list_to_atom(Mod0),
                                         [Mod | Acc]
                                 end, []),
    code:add_path(Path),
    lists:map(fun code:load_abs/1, Modlist).


make_small(Dir) ->
    make_dir(Dir++"/small/", 32, 100).

make_medium(Dir) ->
    make_dir(Dir++"/medium/", 32, 2048).

make_large(Dir) ->
    make_dir(Dir++"/large/", 32, 50*1024).

make_cs(Dir) ->
    make_dir(Dir++"/cs/", 32, 1024*1024).

make_dir(Dir, KeySz, BinSz) ->
    Ref = bitcask:open(Dir, [read_write]),

    %% header size + key size + binary size + ext term format overhead
    BinarySize = 14 + KeySz + BinSz + 12,
    %%        1GB
    NumObjs = (1073741824 div BinarySize) + 1,
    Key = crypto:rand_bytes(KeySz),
    Bin = crypto:rand_bytes(BinSz),
    [bitcask:put(Ref, <<Key/binary,X:32>>, Bin) ||
        X <- lists:seq(1, NumObjs)],
    bitcask:close(Ref).