
When running a load of mainly 2i queries, there is a huge cost in the previous snapshot code. The time taken to create a clone of the Penciller (duplicating all the LoopState) varied between 1 and 200ms depedning on the size of the LoopState. For 2i queries, most of that LoopState was then being thrown away after running the query against the levelzero_cache. This was taking < 1ms on average. It would be better to avoid the o(100)ms of CPU burning and block for o(1)ms - so th eorder of events have been changed ot filter first so only the small part of the LoopState actually required is copied to the clone.
81 lines
No EOL
2.9 KiB
Erlang
81 lines
No EOL
2.9 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).
|
|
|
|
-define(CACHE_TYPE, skpl).
|
|
|
|
-record(sft_options,
|
|
{wait = true :: boolean(),
|
|
expire_tombstones = false :: boolean(),
|
|
penciller :: pid()}).
|
|
|
|
-record(level,
|
|
{level :: integer(),
|
|
is_basement = false :: boolean(),
|
|
timestamp :: integer()}).
|
|
|
|
-record(manifest_entry,
|
|
{start_key :: tuple(),
|
|
end_key :: tuple(),
|
|
owner :: pid()|list(),
|
|
filename :: string()}).
|
|
|
|
-record(cdb_options,
|
|
{max_size :: integer(),
|
|
file_path :: string(),
|
|
waste_path :: string(),
|
|
binary_mode = false :: boolean(),
|
|
sync_strategy = sync}).
|
|
|
|
-record(inker_options,
|
|
{cdb_max_size :: integer(),
|
|
root_path :: string(),
|
|
cdb_options :: #cdb_options{},
|
|
start_snapshot = false :: boolean(),
|
|
source_inker :: pid(),
|
|
reload_strategy = [] :: list(),
|
|
waste_retention_period :: integer(),
|
|
max_run_length}).
|
|
|
|
-record(penciller_options,
|
|
{root_path :: string(),
|
|
max_inmemory_tablesize :: integer(),
|
|
start_snapshot = false :: boolean(),
|
|
snapshot_query,
|
|
bookies_mem :: tuple(),
|
|
source_penciller :: pid(),
|
|
levelzero_cointoss = false :: boolean()}).
|
|
|
|
-record(iclerk_options,
|
|
{inker :: pid(),
|
|
max_run_length :: integer(),
|
|
cdb_options = #cdb_options{} :: #cdb_options{},
|
|
waste_retention_period :: integer(),
|
|
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()}).
|
|
|