Skip to content

Commit 190ebad

Browse files
author
Albert Schimpf
committed
simple kv store
0 parents  commit 190ebad

18 files changed

+532
-0
lines changed

.gitignore

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
_build/
2+
*.beam
3+
.eunit
4+
rel/antidote
5+
dev
6+
*.swp
7+
*.swo
8+
src/*.swo
9+
dialyzer_unhandled_warnings
10+
.local_dialyzer_plt
11+
dialyzer_warnings
12+
doc/
13+
.DS_Store
14+
logs/
15+
logger_logs/
16+
eunit_logs/
17+
tags
18+
rel/vars/*.config
19+
docs/_site/
20+
docs/.sass-cache/
21+
docs/.jekyll-metadata
22+
docs/_pdf
23+
docs/.idea/
24+
log/
25+
data/
26+
compile_commands.json
27+
data.*/
28+
log.*/
29+
erl_crash.dump
30+
rebar3.crashdump
31+
test/.rebar3/erlcinfo
32+
.idea/
33+
antidote.iml
34+
edoc/
35+
#docker local builds uses a tmp dir to fetch build scripts
36+
docker-tmpdir*

Makefile

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
REBAR = $(shell pwd)/rebar3
2+
BASEDIR = $(shell pwd)
3+
RELPATH = _build/default/rel/rcl_memkv
4+
PRODRELPATH = _build/prod/rel/rcl_memkv
5+
DEV1RELPATH = _build/dev1/rel/rcl_memkv
6+
DEV2RELPATH = _build/dev2/rel/rcl_memkv
7+
DEV3RELPATH = _build/dev3/rel/rcl_memkv
8+
APPNAME = rcl_memkv
9+
SHELL = /bin/bash
10+
11+
.PHONY: rel
12+
13+
all: compile
14+
15+
compile:
16+
$(REBAR) compile
17+
18+
clean:
19+
$(REBAR) clean
20+
21+
console: rel
22+
_build/default/rel/rcl_memkv/bin/rcl_memkv console ${ARGS}
23+
24+
rel:
25+
$(REBAR) release
26+
27+
xref: compile
28+
${REBAR} xref skip_deps=true
29+
30+
dialyzer:
31+
${REBAR} dialyzer
32+
33+
34+
devrel1:
35+
$(REBAR) as dev1 release
36+
37+
devrel2:
38+
$(REBAR) as dev2 release
39+
40+
devrel3:
41+
$(REBAR) as dev3 release
42+
43+
devrel: devrel1 devrel2 devrel3
44+
45+
46+
dev1-attach:
47+
$(BASEDIR)/_build/dev1/rel/rcl_memkv/bin/$(APPNAME) remote_console
48+
49+
dev2-attach:
50+
$(BASEDIR)/_build/dev2/rel/rcl_memkv/bin/$(APPNAME) remote_console
51+
52+
dev3-attach:
53+
$(BASEDIR)/_build/dev3/rel/rcl_memkv/bin/$(APPNAME) remote_console
54+
55+
dev1-console:
56+
$(BASEDIR)/_build/dev1/rel/rcl_memkv/bin/$(APPNAME) console
57+
58+
dev2-console:
59+
$(BASEDIR)/_build/dev2/rel/rcl_memkv/bin/$(APPNAME) console
60+
61+
dev3-console:
62+
$(BASEDIR)/_build/dev3/rel/rcl_memkv/bin/$(APPNAME) console
63+
64+
devrel-start:
65+
for d in $(BASEDIR)/_build/dev*; do $$d/rel/rcl_memkv/bin/$(APPNAME) start; done
66+
67+
devrel-stop:
68+
for d in $(BASEDIR)/_build/dev*; do $$d/rel/rcl_memkv/bin/$(APPNAME) stop; done
69+
70+
devrel-join:
71+
for d in $(BASEDIR)/_build/dev{2,3}; do $$d/rel/rcl_memkv/bin/$(APPNAME) eval 'riak_core:join("[email protected]")'; done
72+
73+
devrel-cluster-plan:
74+
$(BASEDIR)/_build/dev1/rel/rcl_memkv/bin/$(APPNAME) eval 'riak_core_claimant:plan()'
75+
76+
devrel-cluster-commit:
77+
$(BASEDIR)/_build/dev1/rel/rcl_memkv/bin/$(APPNAME) eval 'riak_core_claimant:commit()'

Readme.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
An up-to-date simple in-memory key-value store written with riak_core_lite.

config/sys.config

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
%% -*- mode: erlang; -*-
2+
[
3+
%% logger config
4+
{kernel, [
5+
6+
% logger formatters (level: emergency | alert | critical | error | warning | notice | info | debug)
7+
{logger, [
8+
{handler, default, logger_std_h,
9+
#{level => notice,
10+
formatter => {logger_formatter, #{single_line => false, max_size => 2048}},
11+
config => #{type => standard_io}}}
12+
]},
13+
14+
% main level
15+
{logger_level, info}
16+
]},
17+
18+
19+
{riak_core, [
20+
%% riak directories
21+
{ring_state_dir, "data"},
22+
{platform_data_dir, "data"},
23+
24+
%% determines how many vnodes will be used
25+
%% also determines the number of files the log is sliced into
26+
%% has to be an exponent of 2
27+
%% low number will decrease file accesses (good for testing) and boot time
28+
%% high number enables scaling and generates smaller log files
29+
{ring_creation_size, 8},
30+
31+
{handoff_port, 8099}
32+
]}
33+
].

config/sys_dev1.config

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
%% -*- mode: erlang; -*-
2+
[
3+
%% logger config
4+
{kernel, [
5+
6+
% logger formatters
7+
{logger, [
8+
{handler, default, logger_std_h,
9+
#{level => notice,
10+
formatter => {logger_formatter, #{single_line => false, max_size => 2048}},
11+
config => #{type => standard_io}}}
12+
]},
13+
14+
% main level
15+
{logger_level, info}
16+
]},
17+
18+
19+
{riak_core, [
20+
%% riak directories
21+
{ring_state_dir, "data/dev1"},
22+
{platform_data_dir, "data/dev1"},
23+
24+
%% determines how many vnodes will be used
25+
%% also determines the number of files the log is sliced into
26+
%% has to be an exponent of 2
27+
%% low number will decrease file accesses (good for testing) and boot time
28+
%% high number enables scaling and generates smaller log files
29+
{ring_creation_size, 16},
30+
{handoff_port, 8199}
31+
]}
32+
].

config/sys_dev2.config

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
%% -*- mode: erlang; -*-
2+
[
3+
%% logger config
4+
{kernel, [
5+
6+
% logger formatters
7+
{logger, [
8+
{handler, default, logger_std_h,
9+
#{level => notice,
10+
formatter => {logger_formatter, #{single_line => false, max_size => 2048}},
11+
config => #{type => standard_io}}}
12+
]},
13+
14+
% main level
15+
{logger_level, info}
16+
]},
17+
18+
19+
{riak_core, [
20+
%% riak directories
21+
{ring_state_dir, "data/dev2"},
22+
{platform_data_dir, "data/dev2"},
23+
24+
%% determines how many vnodes will be used
25+
%% also determines the number of files the log is sliced into
26+
%% has to be an exponent of 2
27+
%% low number will decrease file accesses (good for testing) and boot time
28+
%% high number enables scaling and generates smaller log files
29+
{ring_creation_size, 16},
30+
{handoff_port, 8299}
31+
]}
32+
].

config/sys_dev3.config

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
%% -*- mode: erlang; -*-
2+
[
3+
%% logger config
4+
{kernel, [
5+
6+
% logger formatters
7+
{logger, [
8+
{handler, default, logger_std_h,
9+
#{level => notice,
10+
formatter => {logger_formatter, #{single_line => false, max_size => 2048}},
11+
config => #{type => standard_io}}}
12+
]},
13+
14+
% main level
15+
{logger_level, info}
16+
]},
17+
18+
19+
{riak_core, [
20+
%% riak directories
21+
{ring_state_dir, "data/dev3"},
22+
{platform_data_dir, "data/dev3"},
23+
24+
%% determines how many vnodes will be used
25+
%% also determines the number of files the log is sliced into
26+
%% has to be an exponent of 2
27+
%% low number will decrease file accesses (good for testing) and boot time
28+
%% high number enables scaling and generates smaller log files
29+
{ring_creation_size, 16},
30+
{handoff_port, 8399}
31+
]}
32+
].

config/vm.args

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Name of the node
2+
3+
4+
## Cookie for distributed erlang
5+
-setcookie cookie

config/vm_dev1.args

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Name of the node
2+
3+
4+
## Cookie for distributed erlang
5+
-setcookie kv-cookie

config/vm_dev2.args

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Name of the node
2+
3+
4+
## Cookie for distributed erlang
5+
-setcookie kv-cookie

config/vm_dev3.args

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Name of the node
2+
3+
4+
## Cookie for distributed erlang
5+
-setcookie kv-cookie

rebar.config

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{deps, [ riak_core_lite ]}.
2+
3+
{plugins, [rebar3_format]}.
4+
5+
{relx, [{release, {rcl_memkv, "1.0.0"}, [rcl_memkv]},
6+
{dev_mode, false},
7+
{extended_start_script, true}
8+
]}.
9+
10+
{profiles, [
11+
{prod, [{relx, [{dev_mode, false}, {include_erts, true}]}]},
12+
{dev1, [{relx, [ {sys_config, "config/sys_dev1.config"}, {vm_args, "config/vm_dev1.args"} ]}]},
13+
{dev2, [{relx, [ {sys_config, "config/sys_dev2.config"}, {vm_args, "config/vm_dev2.args"} ]}]},
14+
{dev3, [{relx, [ {sys_config, "config/sys_dev3.config"}, {vm_args, "config/vm_dev3.args"} ]}]}
15+
]}.

rebar.lock

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{"1.1.0",
2+
[{<<"poolboy">>,{pkg,<<"poolboy">>,<<"1.5.2">>},1},
3+
{<<"riak_core_lite">>,{pkg,<<"riak_core_lite">>,<<"0.10.0">>},0}]}.
4+
[
5+
{pkg_hash,[
6+
{<<"poolboy">>, <<"392B007A1693A64540CEAD79830443ABF5762F5D30CF50BC95CB2C1AAAFA006B">>},
7+
{<<"riak_core_lite">>, <<"52864992CBD2331F7C5E7753374D8F1655A2046B64A6DF3E5184B6D42E936963">>}]}
8+
].

rebar3

815 KB
Binary file not shown.

src/rcl_memkv.app.src

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
%% -*- erlang -*-
2+
{application, rcl_memkv, [
3+
{description, "A simple kv store"},
4+
{vsn, "1.0.0"},
5+
{applications, [ kernel, stdlib, riak_core ]},
6+
{mod, {rcl_memkv_app, []}}
7+
]}.

src/rcl_memkv_app.erl

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-module(rcl_memkv_app).
2+
3+
-behaviour(application).
4+
5+
-export([start/2, stop/1]).
6+
7+
%% ===================================================================
8+
%% Application callbacks
9+
%% ===================================================================
10+
11+
start(_StartType, _StartArgs) ->
12+
case rcl_memkv_sup:start_link() of
13+
{ok, Pid} ->
14+
ok = riak_core:register([{vnode_module, rcl_memkv_key_store_vnode}]),
15+
ok = riak_core_node_watcher:service_up(rcl_memkv_key_store, self()),
16+
17+
{ok, Pid};
18+
{error, Reason} ->
19+
{error, Reason}
20+
end.
21+
22+
stop(_State) ->
23+
ok.

0 commit comments

Comments
 (0)