Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/leo-project/leo_tran
leo_tran is a library to handle a data-transaction. We can easily write programs that manager a data-transaction to avoid a conflicts and reduce unnecessary requests between nodes.
https://github.com/leo-project/leo_tran
erlang leofs library transaction
Last synced: 8 days ago
JSON representation
leo_tran is a library to handle a data-transaction. We can easily write programs that manager a data-transaction to avoid a conflicts and reduce unnecessary requests between nodes.
- Host: GitHub
- URL: https://github.com/leo-project/leo_tran
- Owner: leo-project
- License: apache-2.0
- Created: 2015-06-09T15:06:33.000Z (over 9 years ago)
- Default Branch: develop
- Last Pushed: 2020-05-31T06:18:51.000Z (over 4 years ago)
- Last Synced: 2024-11-08T06:48:45.901Z (2 months ago)
- Topics: erlang, leofs, library, transaction
- Language: Erlang
- Size: 213 KB
- Stars: 1
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
leo_tran
========[![Build Status](https://secure.travis-ci.org/leo-project/leo_tran.png?branch=develop)](http://travis-ci.org/leo-project/leo_tran)
**leo_tran** is a library to handle a data-transaction.
We can easily write programs that manager a data-transaction to avoid a conflicts.## Build Information
* "leo_tran" uses the [rebar](https://github.com/rebar/rebar) build system. Makefile so that simply running "make" at the top level should work.
* "leo_tran" requires Erlang R16B03-1 or later.## Usage in Leo Project
**leo_tran** is used in [**leo_storage**](https://github.com/leo-project/leo_storage) and others.
It is used to reduce unnecessary request between remote-nodes.## Usage
We prepare a server program and a client program to use **leo_tran**.
First, a callback program is as below:
```erlang
%% Launch leo_tran:
ok = application:start(leo_tran).
Method = get,
{value, {ok, Ret_1}} = leo_tran:run(<<"TABLE">>, <<"ID">>, Method, leo_tran_handler_sample).%% Able to control a transaction by options:
%% - Default timeout: 5000 (ms)
%% - Default is_wait_for_tran: true
%% - Default is_lock_tran: true
{value, {ok, Ret_2}} = leo_tran:run(<<"TABLE">>, <<"ID">>, Method, leo_tran_handler_sample,
[{?PROP_TIMEOUT, timer:seconds(1)},
{?PROP_IS_WAIT_FOR_TRAN, true},
{?PROP_IS_LOCK_TRAN, true}
]).%% A Callback Module:
-module(leo_tran_handler_sample).
-behaviour(leo_tran_behaviour).
-include("leo_tran.hrl").
-include_lib("eunit/include/eunit.hrl").-export([run/4, wait/4, resume/4,
commit/4, rollback/5]).-define(MIN_DURATION, timer:seconds(1)).
-spec(run(Table::atom(), Key::binary(), Method::atom(), State::#tran_state{}) ->
ok | {error, any()}).
run(Table, Key, get, State) ->
?debugFmt("GET: ~w, ~p, ~w",
[Table, Key, State#tran_state.started_at]),
ok;
run(Table, Key, put, State) ->
?debugFmt("PUT: ~w, ~p, ~w",
[Table, Key, State#tran_state.started_at]),
ok;
run(Table, Key, delete, State) ->
?debugFmt("DELETE: ~w, ~p, ~w",
[Table, Key, State#tran_state.started_at]),
ok;
run(_,_,_,_) ->
ok.-spec(wait(Table::atom(), Key::binary(), Method::atom(), State::#tran_state{}) ->
ok | {error, any()}).
wait(Table, Key, Method, State) ->
?debugFmt("* WAIT: ~w, ~p, ~w, ~w",
[Table, Key, Method, State#tran_state.started_at]),
ok.-spec(resume(Table::atom(), Key::binary(), Method::atom(), State::#tran_state{}) ->
ok | {error, any()}).
resume(Table, Key, Method,_State) ->
?debugFmt("=> RESUME: ~w, ~p, ~w", [Table, Key, Method]),
ok.-spec(commit(Table::atom(), Key::binary(), Method::atom(), State::#tran_state{}) ->
ok | {error, any()}).
commit(Table, Key, Method,_State) ->
?debugFmt("===> COMMIT: ~w, ~p, ~w", [Table, Key, Method]),
ok.-spec(rollback(Table::atom(), Key::binary(), Method::atom(),
Reason::any(), State::#tran_state{}) ->
ok | {error, any()}).
rollback(Table, Key, Method, Reason,_State) ->
?debugFmt("===> ROLLBACK: ~w, ~p, ~w, ~p", [Table, Key, Method, Reason]),
ok.
```## License
leo_tran's license is [Apache License Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html)