#antidote_pb
Erlang client for antiodote protocol buffer interface
###Interface for transactions
-
start_transaction (Pid, timestamp, properties) --> transaction_descriptor
starts a new transaction and returns a transaction_descriptor which is a transaction identifier to be used with further operations of the transaction. timestamp provides the causality information. properties is a list of configurable parameters for the transaction. Currently only property supported which specifies to use static or interactive transactions. Example:
Clock = term_to_binary(ignore), %% First time there is no clock information {ok, TxId} = start_transaction(Pid, Clock, [{static=true}]). %% Use static transactions
-
read_objects (Pid, [bound_object], transaction_descriptor) --> {ok, Vals}
reads a set of keys. Example:
{ok, [Val1, Val2]} = ([O1, O2], TxId), Value = antidotec_counter:value(Val1). %% Assuming O1 is of type counter
-
update_objects (Pid, [{bound_object, operation, op_parameters}], transaction_descriptor) -> ok
update a set of object with the specified operations. operation is any allowed (upstream) operation on the crdt type for bound_object, op_parameters are parameters to the operation. Example:
Obj = antidotec_counter:increment(1, antidotec_counter:new()), ok = antidotec_pb:update_objects(Pid, antidotec_counter:to_ops(BObj, Obj), TxId).
-
abort_transaction (Pid, transaction_descriptor) aborts a transaction
-
commit_transaction (Pid, transaction_descriptor) --> {ok,timestamp} OR aborted
%% Starts pb socket
{ok, Pid} = antidotec_pb_socket:start(?ADDRESS, ?PORT),
BObj = {Key, riak_dt_pncounter, Bucket},
Obj = antidotec_counter:increment(Amount, antidotec_counter:new()),
{ok, TxId} = antidotec_pb:start_transaction(Pid, term_to_binary(ignore), {}),
ok = antidotec_pb:update_objects(Pid,
antidotec_counter:to_ops(BObj, Obj),
TxId),
{ok, TimeStamp} = antidotec_pb:commit_transaction(Pid, TxId),
%% Use TimeStamp for subsequent transactions if required
{ok, TxId2} = antidotec_pb:start_transaction(Pid, TimeStamp, [{static=true}]),
...
...
%% Close pb socket
_Disconnected = antidotec_pb_socket:stop(Pid),