• This repository has been archived on 28/Sep/2021
  • Stars
    star
    892
  • Rank 51,161 (Top 2 %)
  • Language
    Erlang
  • License
    Apache License 2.0
  • Created over 10 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Prototype implementation of Lasp in Erlang.

Lasp

Build Status

Overview

Lasp is a programming model for synchronization-free computations.

Installing

Lasp requires Erlang 19 or greater. Once you have Erlang installed, do the following to install and build Lasp.

$ git clone [email protected]:lasp-lang/lasp.git
$ cd lasp
$ make

Creating a small cluster

Clone Lasp:

$ git clone https://github.com/lasp-lang/lasp.git

Run two shells

$ rebar3 shell --name [email protected]
$ rebar3 shell --name [email protected]

Exceute to node a:

1> lasp_peer_service:join('[email protected]').
ok
2> lasp_peer_service:members().
{ok,['[email protected]','[email protected]']}

Execute node b:

1> lasp_peer_service:members().
{ok,['[email protected]','[email protected]']}     

Go back to node a and run:

3> Content = #{what => i_am_an_awmap_value}.

% create a lasp CRDT
AwMapVarName = <<"awmap">>.
Key1 = <<"key1">>.
AwMapType = {state_awmap, [state_mvregister]}.
{ok, {AwMap, _, _, _}} = lasp:declare({AwMapVarName, AwMapType}, AwMapType).

% Update the CRDT with the content
{ok, _} = lasp:update(AwMap, {apply, Key1, {set, nil, Content}}, term_to_binary(self())).

Go to node b and retrieve the content of the CRDT:

2> {ok,[{_, AwMapSet}]} = lasp:query({<<"awmap">>,{state_awmap,[state_mvregister]}}).

3> sets:to_list(AwMapSet).
% [#{what => i_am_an_awmap_value}]

Running a shell

You can run a Erlang shell where you can interact with a Lasp node by doing the following:

$ make shell

Running the test suite

To run the test suite, which will execute all of the Lasp scenarios, use the following command.

$ make check

Notes

If using the Distributed Erlang backend, make sure that all nodes are configured to use the same cookie.

Code examples

This blog post by @marianoguerra contains concise sample code.