
There was some unpredictable performance in tests, that was related to the amount of time it took the sft gen_server to accept a cast whihc passed the levelzero_cache. The response time looked to be broadly proportional to the size of the cache - so it appeared to be an issue with passing the large object to the process queue. To avoid this, the penciller now instructs the SFT gen_server to callback to the server for each tree in the cache in turn as it is building the list from the cache. Each of these requests should be reltaively short, and the processing in-between should space out the requests so the Pencille ris not blocked from answering queries when pompting a L0 write.
92 lines
No EOL
3.3 KiB
Erlang
92 lines
No EOL
3.3 KiB
Erlang
|
|
%% Tag to be used on standard Riak KV objects
|
|
-define(RIAK_TAG, o_rkv).
|
|
%% Tag to be used on K/V objects for non-Riak purposes
|
|
-define(STD_TAG, o).
|
|
%% Tag used for secondary index keys
|
|
-define(IDX_TAG, i).
|
|
|
|
%% Inker key type used for 'normal' objects
|
|
-define(INKT_STND, stnd).
|
|
%% Inker key type used for objects which contain no value, only key changes
|
|
%% This is used currently for objects formed under a 'retain' strategy on Inker
|
|
%% compaction, but could be used for special set-type objects
|
|
-define(INKT_KEYD, keyd).
|
|
%% Inker key type used for tombstones
|
|
-define(INKT_TOMB, tomb).
|
|
|
|
-record(sft_options,
|
|
{wait = true :: boolean(),
|
|
expire_tombstones = false :: boolean()}).
|
|
|
|
-record(penciller_work,
|
|
{next_sqn :: integer(),
|
|
clerk :: pid(),
|
|
src_level :: integer(),
|
|
manifest :: list(),
|
|
start_time :: tuple(),
|
|
ledger_filepath :: string(),
|
|
manifest_file :: string(),
|
|
new_manifest :: list(),
|
|
unreferenced_files :: list(),
|
|
target_is_basement = false ::boolean()}).
|
|
|
|
-record(level,
|
|
{level :: integer(),
|
|
is_basement = false :: boolean(),
|
|
timestamp :: erlang:timestamp()}).
|
|
|
|
-record(manifest_entry,
|
|
{start_key :: tuple(),
|
|
end_key :: tuple(),
|
|
owner :: pid(),
|
|
filename :: string()}).
|
|
|
|
-record(cdb_options,
|
|
{max_size :: integer(),
|
|
file_path :: string(),
|
|
binary_mode = false :: boolean()}).
|
|
|
|
-record(inker_options,
|
|
{cdb_max_size :: integer(),
|
|
root_path :: string(),
|
|
cdb_options :: #cdb_options{},
|
|
start_snapshot = false :: boolean(),
|
|
source_inker :: pid(),
|
|
reload_strategy = [] :: list(),
|
|
max_run_length}).
|
|
|
|
-record(penciller_options,
|
|
{root_path :: string(),
|
|
max_inmemory_tablesize :: integer(),
|
|
start_snapshot = false :: boolean(),
|
|
source_penciller :: pid()}).
|
|
|
|
-record(bookie_options,
|
|
{root_path :: string(),
|
|
cache_size :: integer(),
|
|
max_journalsize :: integer(),
|
|
max_pencillercachesize :: integer(),
|
|
snapshot_bookie :: pid(),
|
|
reload_strategy = [] :: list(),
|
|
max_run_length :: integer()}).
|
|
|
|
-record(iclerk_options,
|
|
{inker :: pid(),
|
|
max_run_length :: integer(),
|
|
cdb_options :: #cdb_options{},
|
|
reload_strategy = [] :: list()}).
|
|
|
|
-record(r_content, {
|
|
metadata,
|
|
value :: term()
|
|
}).
|
|
|
|
-record(r_object, {
|
|
bucket,
|
|
key,
|
|
contents :: [#r_content{}],
|
|
vclock,
|
|
updatemetadata=dict:store(clean, true, dict:new()),
|
|
updatevalue :: term()}).
|
|
|