GithubHelp home page GithubHelp logo

antidote_pb's Introduction

Erlang client for Antiodote

Build Status

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

Example

%% 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),

antidote_pb's People

Contributors

deepthidevaki avatar marsleezm avatar bieniusa avatar peterzeller avatar aletomsic avatar cmeiklejohn avatar tcrain avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.