diff --git a/include/antidote_utils.hrl b/include/antidote_utils.hrl index a7c0f6e..0935c13 100644 --- a/include/antidote_utils.hrl +++ b/include/antidote_utils.hrl @@ -1,23 +1,70 @@ - -type downstream_record() :: term(). -type actor() :: term(). -type key() :: term(). --type op() :: {update | merge, downstream_record()}. +-type op() :: {update | merge, downstream_record()}. -type type() :: atom(). --type dcid() :: 'undefined' | {atom(),tuple()}. %% TODO, is this the only structure that is returned by riak_core_ring:cluster_name(Ring)? +-type dcid() :: 'undefined' | {atom(), tuple()}. %% TODO, is this the only structure that is returned by riak_core_ring:cluster_name(Ring)? +-type payload() :: term(). +-record(operation, {op_number::op_num(), payload :: payload()}). +-type operation() :: #operation{}. +-type snapshot() :: term(). +-type op_num() :: non_neg_integer(). -type snapshot_time() :: vectorclock:vectorclock(). +-record(materialized_snapshot, { + last_op_id :: op_num(), %% This is the opid of the latest op in the list + %% of ops for this key included in this snapshot + %% before an op that was not included, so to a new + %% snapshot will be generated by starting from this op + value :: snapshot(), + snapshot_time :: snapshot_time()}). + -type clock_time() :: non_neg_integer(). --type dc_and_commit_time() :: {dcid(), clock_time()}. +-type dc_and_commit_time() :: {dcid(), clock_time()}. + +-record(tx_id, {local_start_time :: clock_time(), + server_pid :: atom()}). --record(tx_id, {local_start_time :: clock_time(), - server_pid :: atom()}). -record(clocksi_payload, {key :: key(), - type :: type(), - op_param :: op(), - snapshot_time :: snapshot_time(), - commit_time :: dc_and_commit_time(), - txid :: txid()}). + type :: type(), + op_param :: op(), + snapshot_time :: snapshot_time(), + commit_time :: dc_and_commit_time(), + txid :: txid()}). -type vectorclock() :: vectorclock:vectorclock(). -type txid() :: #tx_id{}. -type clocksi_payload() :: #clocksi_payload{}. + + +%% AntidoteDB +-type bucket() :: term(). +-record(payload, {key :: key(), type :: type(), op_param, actor :: actor()}). + +-record(commit_log_payload, {commit_time :: dc_and_commit_time(), + snapshot_time :: snapshot_time() +}). + +-record(update_log_payload, {key :: key(), + bucket :: bucket(), + type :: type(), + op :: op() +}). + +-record(abort_log_payload, {}). + +-record(prepare_log_payload, {prepare_time :: non_neg_integer()}). + +-type any_log_payload() :: #update_log_payload{} | #commit_log_payload{} | #abort_log_payload{} | #prepare_log_payload{}. + +-record(log_operation, { + tx_id :: txid(), + op_type :: update | prepare | commit | abort | noop, + log_payload :: #commit_log_payload{}| #update_log_payload{} | #abort_log_payload{} | #prepare_log_payload{}}). +-record(op_number, {node :: {node(), dcid()}, global :: non_neg_integer(), local :: non_neg_integer()}). + +%% The way records are stored in the log. +-record(log_record, { + version :: non_neg_integer(), %% The version of the log record, for backwards compatability + op_number :: #op_number{}, + bucket_op_number :: #op_number{}, + log_operation :: #log_operation{}}).