Skip to content
69 changes: 58 additions & 11 deletions include/antidote_utils.hrl
Original file line number Diff line number Diff line change
@@ -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{}}).