Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

can changes go back to incubaid? #566

Open
wants to merge 554 commits into
base: 1.8
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
554 commits
Select commit Hold shift + click to select a range
eb792a8
make it work with git
Aug 17, 2016
993b39d
Merge pull request #115 from openvstorage/setup.py2git
Aug 17, 2016
fb337d7
add cmx files in installed client
Aug 17, 2016
00af358
Merge pull request #117 from openvstorage/cmx
Aug 18, 2016
7f4f6fa
sigh centos
domsj Aug 18, 2016
f1701fa
Merge pull request #119 from openvstorage/centos-sigh
domsj Aug 18, 2016
36b2070
disable travis cache as it currently makes the build fail due to a la…
domsj Aug 19, 2016
4eccd9c
assert serialization of counted lists
Aug 22, 2016
357aa29
Merge pull request #120 from openvstorage/travis
domsj Aug 22, 2016
5160605
Merge pull request #121 from openvstorage/assert_counted_list_ser
Aug 22, 2016
c335df4
introduce client config ini format, which includes tls info
domsj Aug 22, 2016
2000bc8
allow getting arakoon config from another arakoon
domsj Aug 22, 2016
e1a0838
update arakoon_client.mllib
domsj Aug 22, 2016
4a5e35c
implement to_ini for arakoon_client_config
domsj Aug 24, 2016
f4895c3
fix config bug tlog_max_size
Aug 26, 2016
d44b3b4
fix build
HarukaMa Aug 29, 2016
5fcc0da
autofix for missing .tlog file and (failing) test
Aug 29, 2016
a4e7dff
bugfix
domsj Aug 29, 2016
ff458c9
bug fix: correct iterate for tiny tlogs
Aug 29, 2016
63ccbc4
remove cucu
Aug 29, 2016
9cecd98
Merge pull request #124 from openvstorage/client-config
domsj Aug 29, 2016
01b3250
Merge branch '1.9' into issue_125
Aug 29, 2016
e23bcd1
conditionally remove database
Aug 29, 2016
f283d14
Merge pull request #127 from openvstorage/issue_125
Aug 29, 2016
f49df62
skip leading slash in arakoon config path
domsj Aug 30, 2016
5670692
Merge pull request #129 from openvstorage/arakoon-config-path
domsj Aug 30, 2016
b9ae34e
verify_store;get-raw; set < file
Aug 30, 2016
8cbfc4d
Merge pull request #130 from openvstorage/verify_db
Aug 30, 2016
4b93dac
removed 'down', loop when not canceled
Aug 30, 2016
a35f859
Merge pull request #131 from openvstorage/issue_126
Aug 30, 2016
c83108f
make_release: 1.9.10
Aug 30, 2016
7bfc67d
Merge pull request #132 from openvstorage/1.9.10
Aug 30, 2016
eed92f2
fix race
Aug 31, 2016
84e1267
2 more tests for collapse
Aug 31, 2016
1b4925c
align ubuntu starting image
Sep 1, 2016
adfe744
Merge pull request #134 from openvstorage/issue_133
Sep 1, 2016
7d59ebe
make_release: 1.9.11
Sep 1, 2016
3aad4b7
master can have more valid states
Sep 1, 2016
e4e01f4
Merge pull request #136 from openvstorage/ci_fixes
Sep 1, 2016
e44d7e8
Merge pull request #135 from openvstorage/1.9.11
Sep 1, 2016
f4e8ec3
test for scenario
Sep 2, 2016
afd7051
load plugins for local collapse
domsj Sep 12, 2016
dd77d2f
Merge pull request #141 from openvstorage/local-collapse-load-plugins
domsj Sep 12, 2016
70ebaa4
make_release: 1.9.12
domsj Sep 20, 2016
e0a3d8e
Merge pull request #142 from openvstorage/1.9.12
domsj Sep 20, 2016
b0097de
update ocaml-redis
domsj Sep 22, 2016
5f2d9f3
Merge pull request #143 from openvstorage/update-ocaml-redis
domsj Sep 22, 2016
f9048a5
make_release: 1.9.13
Sep 30, 2016
5a47411
Merge pull request #144 from openvstorage/1.9.13
Sep 30, 2016
6389c41
failing test for learner case
Oct 3, 2016
3984ecb
Merge pull request #145 from openvstorage/failing_learner
Oct 3, 2016
c432438
control where tests live
Oct 4, 2016
d17c648
add a 'nose' suite
Oct 4, 2016
18e7425
Merge pull request #146 from openvstorage/jenkins_test_home
Oct 4, 2016
c6934cf
which pgrep?
Oct 4, 2016
220b620
Merge pull request #147 from openvstorage/more_jenkins
Oct 5, 2016
4156e6a
Merge branch '1.9' into issue_93
Oct 5, 2016
ea16607
is fuser a better option?
Oct 5, 2016
2fd3269
Popen + wait
Oct 6, 2016
2fe4fc9
does python matter?
Oct 6, 2016
59c51cd
avoid -daemonize
Oct 7, 2016
255287c
bash as PID 1 in container
domsj Oct 7, 2016
5c78b69
avoid -daemonize
Oct 7, 2016
38a19f2
Merge branch 'issue_93-jan' into issue_93
Oct 7, 2016
e0f6765
zombie reaper for 1604
Oct 7, 2016
d8e8f09
inject via Popen
Oct 7, 2016
64aaf3f
more robust etcd test
Oct 8, 2016
69080fb
stability
Oct 8, 2016
798ca33
Merge pull request #148 from openvstorage/issue_93
Oct 10, 2016
78828ef
invalidate tlog map after catchup_tlog
Oct 10, 2016
bbf7e3b
only add to compression after entry is written
Oct 11, 2016
d5a83bd
Merge pull request #150 from openvstorage/issue_137
Oct 11, 2016
5f67f8a
Merge pull request #151 from openvstorage/tlog_absence
Oct 12, 2016
e0cbada
move to camltc-0.9.4
Oct 21, 2016
3a1fac0
make_release: 1.9.14
Oct 24, 2016
db7947d
Merge pull request #153 from openvstorage/1.9.14
Oct 24, 2016
e20fa95
route through "$@"
Oct 24, 2016
13d8e1f
Merge pull request #154 from openvstorage/centos_build_fix
Oct 24, 2016
990d6d0
Merge pull request #152 from openvstorage/camltc-0.9.4
Nov 3, 2016
a1e7d21
make_release: 1.9.15
domsj Nov 3, 2016
6fb142e
Merge pull request #155 from openvstorage/1.9.15
domsj Nov 3, 2016
1a204d9
fix centos build (new epel release)
domsj Jan 11, 2017
d0b3f56
Merge pull request #158 from openvstorage/centos
domsj Jan 11, 2017
4cf9424
Update Index page of Arakoon Gitbook https://github.com/openvstorage/…
Jan 20, 2017
c9ff602
fix docker (by moving to core version that still works)
Mar 23, 2017
c300e2c
closer to orig
Mar 23, 2017
d38c4f3
comments
Mar 23, 2017
c62bd9c
Merge pull request #159 from openvstorage/docker_fix
Mar 23, 2017
b10341e
dump synced sequence in full splendor too
Apr 11, 2017
5d17278
add inspect-store command
domsj Apr 11, 2017
918ac3d
Merge pull request #163 from openvstorage/inspect-tc
domsj Apr 12, 2017
05c2da7
Merge pull request #162 from openvstorage/SyncedSeq2s
Apr 12, 2017
c1f27f9
64KB Lwt_io.default_buffer_size
Apr 12, 2017
5e20145
1MB buffer for file copy
Apr 12, 2017
1626da7
fix bug in copy_file
Apr 12, 2017
8b97ecd
show problems in travis
Apr 12, 2017
5f388e7
Merge pull request #164 from openvstorage/default_buffer_size
Apr 12, 2017
af1a065
make_release: 1.9.16
Apr 12, 2017
3566787
Merge pull request #165 from openvstorage/1.9.16
Apr 12, 2017
143e990
test can be run twice in a row now
Apr 12, 2017
fa166fa
Merge pull request #166 from openvstorage/test_catchup_mixed_config
Apr 13, 2017
9cabff4
cleanup tlogs after local collapse, even when there was nothing to co…
domsj Apr 14, 2017
8205cee
Merge pull request #169 from openvstorage/collapse-local-cleanup
domsj Apr 14, 2017
06005d5
check cluster id in store, to prevent ops errors
domsj Apr 18, 2017
6c8713f
PR comment (use cluster_id from config for local collapse)
domsj Apr 19, 2017
aaf4d9c
Merge pull request #170 from openvstorage/store-check-cluster-id
domsj Apr 19, 2017
2960474
add tlogs_to_keep parameter to cli
Apr 20, 2017
42e81bc
make_release: 1.9.17
Apr 20, 2017
2faccd2
move to v.0.9.114.41+37
Apr 20, 2017
5d0e96f
Merge pull request #173 from openvstorage/change_janestreet_repo
Apr 20, 2017
fab0926
Merge pull request #171 from openvstorage/issue_168
Apr 20, 2017
d2df59b
Merge pull request #172 from openvstorage/1.9.17
Apr 20, 2017
cd521a7
changes for Lwt.3.0.0
Apr 20, 2017
9153614
Lwt_unix.bind signature change
Apr 20, 2017
1a5da78
Merge pull request #174 from openvstorage/lwt.3.0.0
Apr 20, 2017
7162afe
no longer depend on janestreet's opam repo
May 23, 2017
78df3a8
Merge pull request #175 from openvstorage/rejoin_main_opam
May 23, 2017
e3051dc
make_release: 1.9.18
Jun 1, 2017
f7538d8
Merge pull request #176 from openvstorage/1.9.18
Jun 1, 2017
fc8a0c4
Updated pyrakoon
JeffreyDevloo Jun 13, 2017
5049612
Merge pull request #178 from openvstorage/update_pyrakoon
domsj Jun 13, 2017
881e1d9
failing tests
Jun 22, 2017
ed882b7
fix
Jun 22, 2017
eef4457
extra test (and fix the one we had)
Jun 23, 2017
3463794
Merge pull request #184 from openvstorage/find_start_bug
Jun 23, 2017
c301393
allow fiddling with store i
domsj Jun 23, 2017
c3029fa
make_release: 1.9.19
Jun 23, 2017
f3d1433
Merge pull request #186 from openvstorage/fiddle-store-i
domsj Jun 23, 2017
9254ef8
Merge pull request #187 from openvstorage/1.9.19
Jun 23, 2017
c180e8a
logging tweaks
Jun 23, 2017
f910fd0
Merge pull request #188 from openvstorage/log_level_tweaks
Jun 23, 2017
a3c9d01
throttling for optimize db
domsj Jul 31, 2017
2e81a1c
optimize File_system.copy_file to avoid 2 userspace copies
domsj Jul 31, 2017
0e88c04
Merge pull request #192 from openvstorage/optimize-db-slowdown
domsj Aug 8, 2017
65ea372
harvest_limited
Jul 20, 2017
6346fd2
change a few log levels from info to debug
domsj Jul 24, 2017
b221966
Merge pull request #193 from openvstorage/optimize-copy-file
domsj Aug 8, 2017
d0fb085
cater for value & message when harvesting
Aug 9, 2017
fbcdc13
recycle send buffer for msg serialization
Aug 9, 2017
9e24e29
make_release: 1.9.20
Aug 9, 2017
1b32a7d
Merge pull request #190 from openvstorage/harvest_limited
Aug 9, 2017
77ad9f4
Merge pull request #195 from openvstorage/1.9.20
Aug 10, 2017
f7464f2
big sequences can flood logs: no more.
Aug 22, 2017
c002af3
Merge pull request #197 from openvstorage/1.9.19.no_big_dump
Aug 22, 2017
849473c
add update.mli
Aug 22, 2017
5d39a7d
Merge pull request #198 from openvstorage/update.mli
Aug 22, 2017
1021be4
make_release: 1.9.21
Aug 22, 2017
817286e
Merge pull request #199 from openvstorage/1.9.21
Aug 22, 2017
6d11324
upgrade dependencies
Aug 9, 2017
f0d5002
typo
Aug 16, 2017
899ed39
explicit option for ppx_deriving.4.1 & base.v0.9.3
Aug 24, 2017
47b667d
Merge pull request #200 from openvstorage/ocaml.4.04.2
Aug 24, 2017
bbc30cb
back to Lwt.3.0.0
Aug 24, 2017
82ff286
Merge pull request #201 from openvstorage/lwt.3.0.0
Aug 24, 2017
37c9542
make_release: 1.9.22
Aug 24, 2017
d4f2572
Merge pull request #202 from openvstorage/1.9.22
Aug 24, 2017
5f080ac
Upgrade toolchain, opamify build
Dec 8, 2017
c043161
Merge pull request #206 from openvstorage/toolchain-upgrade
delamonpansie Dec 11, 2017
8c5ec20
make_release: 1.9.23
Dec 29, 2017
ef7e792
Merge pull request #207 from openvstorage/1.9.23
Dec 29, 2017
f2d36d9
build arakoon_version.ml with -opaque
Jan 16, 2018
cee0fed
needed opam switch inside the repo
Jan 16, 2018
1b9a72a
Merge pull request #208 from openvstorage/opaque-version
Jan 16, 2018
d61cab3
remove ubuntu.14.04 & centos-7
Jan 16, 2018
3537c74
Merge pull request #209 from openvstorage/opam_switch
Jan 18, 2018
cc237f8
Simplify drop_master
Jan 24, 2018
95e5561
allow loading a plugin when using --replay-tlogs so userfunctions can…
domsj Jan 24, 2018
df338a2
pr comment
domsj Jan 25, 2018
be0b4ce
Merge pull request #211 from openvstorage/replay-tlogs-load-plugin
domsj Jan 25, 2018
9e006aa
Minor cleanup
Jan 25, 2018
136a862
Merge pull request #213 from openvstorage/readability
delamonpansie Jan 25, 2018
3ea6931
Quote binary strings
Jan 26, 2018
83fec18
Merge pull request #215 from openvstorage/quote-binary-string
delamonpansie Jan 26, 2018
9554085
add tzdata package
Jan 26, 2018
467d378
clean builds
Jan 26, 2018
e857ff1
Remove unused script
Jan 29, 2018
9aa0c3e
Fix: under "set -u" variable access must be guarded against undefined
Jan 29, 2018
f46623f
Move ./run_with_timeout_and_progress.sh into travis.sh
Jan 29, 2018
4ae0ad0
Remove unused depends
Jan 29, 2018
be65099
Merge pull request #216 from openvstorage/tzdata
Jan 29, 2018
3f41d5a
Remove dead code.
Jan 26, 2018
c11a906
Indent
Jan 26, 2018
a4686ef
Fix progress printing broken in f46623f
Jan 29, 2018
d30e8ad
Merge pull request #217 from openvstorage/cleanup
delamonpansie Jan 29, 2018
20f7df2
Merge pull request #214 from openvstorage/dead-code
delamonpansie Jan 30, 2018
d07ec3f
Lock TZ at startup
Jan 30, 2018
1828150
Merge pull request #219 from openvstorage/no-stat-localtime
delamonpansie Jan 30, 2018
3cc12a6
Dynamic JOBS calculation
Jan 18, 2018
f4060fb
Silence nonrelevant error
Jan 18, 2018
176a0e7
Pass -use-ocamlfind implicitly
Jan 18, 2018
a3daf4b
Build arakoon.native before testing
Jan 18, 2018
2e602c2
Remove unused read_only
Jan 19, 2018
d56ecce
Do not polute $HOME
Jan 23, 2018
fb4d177
Decrease op_count to sane value
Jan 23, 2018
a31ae73
Indent
Jan 23, 2018
e325913
Add comments
Jan 24, 2018
82b4f1d
Factor out decline_client_update
Jan 24, 2018
3c041b7
Simplify decline_client_update
Jan 24, 2018
926c8ea
Split slave_steady_state
Jan 24, 2018
64a5690
Learner node
Jan 25, 2018
c05c167
Merge pull request #210 from openvstorage/learner-node
delamonpansie Jan 31, 2018
08abd98
add inspect-cluster command
domsj Feb 1, 2018
342634a
fix issue in tlog_map when last part of a catchup is a .tlx
domsj Feb 6, 2018
5b62b2a
'unit' (ocaml) test suite should make clean first too
domsj Feb 6, 2018
2dd4a7e
fix failing tests
domsj Feb 7, 2018
aea5e5c
expand inspect-cluster command a bit more
domsj Feb 7, 2018
ff786ba
bugfix: failed catchup might apply one entry too far to the store
domsj Feb 12, 2018
37ab95f
Merge pull request #220 from openvstorage/inspect-cluster
domsj Feb 12, 2018
a8ec2b8
make_release: 1.9.24 (#221)
Feb 13, 2018
4c1a509
large dependency upgrade + fix more packages (#222)
Feb 15, 2018
1b544cb
move to ezxmlm.1.0.2 (#224)
Feb 15, 2018
a49e38d
make_release: 1.9.25 (#223)
Feb 15, 2018
556f01e
typo
Feb 15, 2018
a96b6ec
Prefix inifiles library with arakoon to avoid conflict with ocaml-ini…
andersfugmann Mar 5, 2018
93f3c7c
Merge pull request #225 from openvstorage/wrap_inifiles
andersfugmann Mar 6, 2018
f0726ec
opam's snappy no longer likes 4.06
Apr 3, 2018
d40d5d3
Merge pull request #226 from openvstorage/snappy_anti_revisionism
Apr 3, 2018
5feff82
Rename interval.ml to arakoon_interval.ml
andersfugmann Apr 6, 2018
571af68
Merge pull request #227 from openvstorage/fix_module_name_clash
andersfugmann Apr 9, 2018
c31f0e8
Add core to the list of dependencies for arakoon client
andersfugmann May 2, 2018
0d73bb8
Merge pull request #228 from openvstorage/update_meta_dependencies
andersfugmann May 2, 2018
04c2ed3
allow DeletePrefix in a Sequence
Jul 18, 2018
b156078
Merge pull request #231 from openvstorage/DeletePrefix_in_sequence
Jul 18, 2018
929a5b6
allows catchup-only to pick a specific node
Nov 8, 2018
7e49a30
vendoring camltc package
Nov 8, 2018
e91c78d
sourceNode parameter in cluster mgmt
Nov 9, 2018
cf414ab
Merge pull request #233 from openvstorage/specific_catchup_only
Nov 12, 2018
7a5a24d
deprecate fsync, replace with fsync_interval and fsync_entries
Jan 16, 2019
b1752e5
Merge pull request #234 from openvstorage/fsync_knobs
Jan 16, 2019
d99fa38
Update pyrakoon to the refactored branch
JeffreyDevloo Feb 26, 2019
636d724
Merge pull request #235 from openvstorage/1.9_update_submodule
Mar 5, 2019
f205068
add test for inspect
Mar 5, 2019
c09c0e2
move inspect to common to make it usable outside of test
Mar 6, 2019
b207eb8
remove compiler warning
Mar 6, 2019
74296a4
restoring dump_store in all its optional grandor
Mar 6, 2019
1c3fd64
restart_master_long times 3
Mar 6, 2019
020ddaa
jenkins can't handle it
Mar 7, 2019
fd43c74
Merge pull request #236 from openvstorage/test_inspect
Mar 7, 2019
aab3fcc
instead of competing, let the other racing slave win
Mar 11, 2019
80b3ac6
latest pyrakoon
Mar 11, 2019
21c44c6
Merge pull request #237 from openvstorage/multi_paxos_improvement
Mar 11, 2019
9ca7986
adds AssertRange to python client
Apr 26, 2019
ed38d2c
Merge pull request #238 from openvstorage/python_assert_range
toolslive Apr 26, 2019
f03adee
move to 4.07.1
Mar 28, 2019
de8d51b
Merge pull request #239 from openvstorage/4.07.1
toolslive May 7, 2019
c197304
clean $TEST_HOME/tmp
May 7, 2019
87319ce
removed Jan Doms as author (upon his request)
May 8, 2019
1859133
Merge branch '1.9' of github.com:openvstorage/arakoon into 1.9
May 8, 2019
44efb7d
smoother jenkins experience (no more out of memory)
May 7, 2019
1843981
Merge pull request #62 from openvstorage/fix_jenkins
May 9, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@ redhat/BUILD
/_virtualenv
/examples/ocaml/_build/
/examples/ocaml/demo.native
/testresults.xml
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "pylabs/pyrakoon"]
path = pylabs/pyrakoon
url = git://github.com/Incubaid/pyrakoon.git
url = https://github.com/openvstorage/pyrakoon.git
6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 16 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,22 @@
dist: xenial
language: c
env:
- PPA=avsm/ocaml42+opam11

before_install: ./travis.sh before_install
sudo: required

install: ./travis.sh install
script: ./travis.sh script

git:
submodules: false

services:
- docker

# cache:
# directories:
# - ~/cache
# timeout:
# 1000

env:
- USE_CACHE=0 # set to 1 to enable
55 changes: 17 additions & 38 deletions COMPILING
Original file line number Diff line number Diff line change
@@ -1,49 +1,28 @@
We use opam
We use docker to build arakoon, so the easiest way to get started is to use our docker images.

Some of the packages we use are not in the main opam repository (yet). So it's easiest if you add our devel repo:
Preliminary steps

opam remote --kind git add devel git://github.com/Incubaid/opam-repository-devel.git
Install docker for your system, see https://docs.docker.com/engine/installation for instructions.
After that make sure your user belongs to the docker group: sudo usermod -a -G docker your_user

Packages we use:
Building

ocamlfind.1.3.3
snappy.0.1.0
camlbz2.0.6.0
ssl
lwt with SSL support
camltc
quickcheck
Run
./docker/run.sh ubuntu-16.04 build
from the root of the repository.

When it's been a while you might want to run `opam update` first to get the latest versions.
Running the tests

./docker/run.sh ubuntu-16.04 unit
./docker/run.sh ubuntu-16.04 b
./docker/run.sh ubuntu-16.04 c
./docker/run.sh ubuntu-16.04 d

COMPILING:
Enter the docker container

make
(you can inspect the makefile for more fine grained targets)
(if you get errors and you've built arakoon before you could try a `make clean` first)
./docker/run.sh ubuntu-16.04 bash

RUNNING THE TESTS:
Build packages

./arakoon.native --run-all-tests

COVERAGE:
Bisect needs to be installed. (get it from http://bisect.x9c.fr/)

ocamlbuild -tag use_bisect -tag use_macro arakoon.d.byte
./report.sh

DEBIAN packages:
fakeroot debian/rules clean
fakeroot debian/rules build
fakeroot debian/rules binary

Python egg:
python setup.py bdist_egg



have fun,

The arakoon team
./docker/run.sh ubuntu-16.04 package_deb

58 changes: 58 additions & 0 deletions GITBOOK.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Arakoon

[Arakoon](http://arakoon.org/) is a distributed key-value store that guarantees consistency above anything else. It was created by the Open vStorage team due to a lack of existing solutions fitting our requirements, and is available as Open Source software.

Arakoon aims to be easy to understand and use, whilst at the same time taking the following features into consideration:
* Consistency: The system as a whole needs to provide a consistent view on the distributed state. This stems from the experience that eventual consistency is too heavy a burden for a user application to manage. A simple example is the retrieval of the value for a key where you might receive none, one or multiple values depending on the weather conditions. The next question is always: Why don’t a get a result? Is it because there is no value, or merely because I currently cannot retrieve it?
* Conditional and Atomic Updates: We don’t need full blown transactions (would be nice to have though), but we do need updates that abort if the state is not what we expect it to be. So at least an atomic conditional update and an atomic multi-update are needed.
* Robustness: The system must be able to cope with failure of individual components, without concessions to consistency. However, whenever consistency can no longer be guaranteed, updates must simply fail.
* Locality Control: When we deploy a system over 2 datacenters, we want guarantees that the entire state is indeed present in both datacenters. This is something we could not get from distributed hash tables using consistent hashing.
* Healing & Recovery: Whenever a component dies and is subsequently revived or replaced, the system must be able to guide that component towards a situation where that node again fully participates. If this cannot be done fully automatically, then human intervention should be trivial.
* Explicit Failure: Whenever there is something wrong, failure should propagate quite quickly.

## An Arakoon deployment
An Arakoon cluster consist of a small collection of nodes (typically 1,2,3 or 5 nodes) that contains the full range of key-value pairs, and clients that manipulate the key/value space. In principle, all nodes have the entire key/value space. There is one distinguished node called the master with which all clients communicate to perform updates. A client contacts any node to find out the master, and then just conversates with the master. If a master dies, a new one is elected automatically, and clients fail over to that master. A slave node is a node that is not master. A node that is not up-to-date cannot become master.

The diagram below shows 3 clients connected to an Arakoon cluster that consists of 3 Arakoon nodes.
![](docs/Images/ArakoonDeployment.png)

Updates to the Arakoon database are consistent. An Arakoon client always looks up the master of a cluster and then sends a request to the master. The master node of a cluster has a queue of all client requests. The moment that a request is queued, the master node sends the request to all his slaves and writes the request in the Transaction Log (TLog). When the slaves receive a request, they store this also in their proper TLog and send an acknowledgement to the master.

A master awaits for the acknowledgements of the slaves. When he receives an acknowledgement of half the nodes plus one, the master pushes the key/value pair in its database. In a five node setup (one master and four slaves), the master must receive an acknowledgement of two slaves before he writes his data to the database, since he is also taken into account as node.

After having written his data in his database, the master starts the following request in his queue. When a slave receives this new request, the slaves first write the previous request in their proper database before handling the new request. This way a slave is always certain that the master has successfully written the data in his proper database.

If the master node dies, a new master election happens using [paxos](https://en.wikipedia.org/wiki/Paxos_(computer_science)). If a slave dies, the master is not affected. When a slave comes up, it tries to catchup. The slave first downloads the missing parts of the log. Then it iterates over the tlog while adding the missing updates to its local store. When finished the client again compares its log state with that of the other nodes to make sure it is up to date.

The directory structure of a node typically looks like this:
```
root@cmp02:/opt/OpenvStorage/db/arakoon/ovsdb# ls -als
total 0
0 drwxr-xr-x 1 ovs ovs 14 Dec 1 17:29 .
0 drwxr-xr-x 1 ovs ovs 10 Dec 1 17:29 ..
0 drwxr-xr-x 1 ovs ovs 84 Dec 2 13:22 db
0 drwxr-xr-x 1 ovs ovs 58 Dec 3 12:07 tlogs
root@cmp02:/opt/OpenvStorage/db/arakoon/ovsdb/db# ls -als
total 680
0 drwxr-xr-x 1 ovs ovs 84 Dec 2 13:22 .
0 drwxr-xr-x 1 ovs ovs 14 Dec 1 17:29 ..
676 -rwxr-xr-x 1 ovs ovs 690176 Dec 3 14:03 tGLpPNHEDxNOOqOZ.db
4 -rw-r--r-- 1 ovs ovs 276 Dec 3 14:03 tGLpPNHEDxNOOqOZ.db.wal
root@cmp02:/opt/OpenvStorage/db/arakoon/ovsdb/tlogs# ls -als
total 13744
0 drwxr-xr-x 1 ovs ovs 58 Dec 3 12:07 .
0 drwxr-xr-x 1 ovs ovs 14 Dec 1 17:29 ..
3732 -rw-r--r-- 1 ovs ovs 3819824 Dec 2 08:32 000.tlx
3776 -rw-r--r-- 1 ovs ovs 3863492 Dec 2 21:09 001.tlx
3920 -rw-r--r-- 1 ovs ovs 4013559 Dec 3 12:07 002.tlx
2316 -rw-r--r-- 1 ovs ovs 2368293 Dec 3 14:03 003.tlog
```

nodename.db: the actual key/value store.
nodename.db.wal: security database to keep the key/value store consistent, for example in case of a failure.
XXX.tlog: The transaction log files, contains the logs for all transactions executed on the node.
XXX.tlx: A compressed transaction log file.

## Arakoon Log files
The log files for the different Arakoon databases can be found under `/var/log/syslog` or through `journalctl -u <DB name>....service -n 10000 --no-pager | less`.

9 changes: 4 additions & 5 deletions META
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# -*- conf -*-

description = "Arakoon client"
version = "1.8.6"
version = "1.9.25"
exists_if = "arakoon_client.cma,arakoon_client.cmxa,arakoon_client.cmxs"
requires = "threads lwt lwt.unix str oUnit quickcheck lwt.ssl ocplib-endian nocrypto cstruct"
archive(byte) = "arakoon_client.cma"
archive(native) = "arakoon_client.cmxa"

requires = "threads lwt lwt.unix str oUnit quickcheck lwt_ssl ocplib-endian redis-lwt uri core"
archive(byte) = "arakoon_client.cma tcp_keepalive_sockopt_stubs.o"
archive(native) = "arakoon_client.cmxa tcp_keepalive_sockopt_stubs.o"
121 changes: 53 additions & 68 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,84 +1,69 @@
# This makefile wrapper makes DEBIAN packaging easier.
PREFIX ?=/usr

START = $(DESTDIR)$(PREFIX)
# The debian installer defined DESTDIR. If set, we install where debian expects it,
# othervice we install where opam expects it
ifdef DESTDIR
LIBDIR=$(DESTDIR)/usr/lib/ocaml
PREFIX=$(DESTDIR)/usr
else
PREFIX=$(shell opam config var prefix)
LIBDIR=$(shell opam config var lib)
endif

OCAML_LIBDIR ?= $(START)/lib/ocaml/
#OCAML_LIBDIR ?= `ocamlfind printconf destdir`
OCAML_FIND ?= ocamlfind
all: arakoon.native bench.native lwt_buffer_test.native

all: build
build:
@dune build

arakoon.native: build
@ln -sf _build/default/src/main/arakoon.exe arakoon.native

bench.native:
@dune build src/main/bs_bench.exe
@ln -sf _build/default/src/main/bs_bench.exe bs_bench.native

lwt_buffer_test.native:
@dune build src/main/lwt_buffer_test.exe
@ln -sf _build/default/src/main/lwt_buffer_test.exe lwt_buffer_test.native

clean:
ocamlbuild -clean
dune clean
rm -f arakoon.native bs_bench.native lwt_buffer_test.native

build:
ocamlbuild -j 4 -use-ocamlfind arakoon.byte arakoon.native arakoon_client.cma arakoon_client.cmxa arakoon_client.a arakoon_client.cmxs plugin_helper.cmi

bench:
ocamlbuild -use-ocamlfind bs_bench.native

test:
./arakoon.native --run-all-tests

install: install_client install_server man

install_server:
mkdir -p $(START)/bin/
cp ./arakoon.native $(START)/bin/arakoon

install_client:
mkdir -p $(OCAML_LIBDIR)
$(OCAML_FIND) install arakoon_client -destdir $(OCAML_LIBDIR) META \
_build/src/arakoon_client.cma \
_build/src/arakoon_client.cmxa \
_build/src/arakoon_client.cmxs \
_build/src/client/stamp.cmi \
_build/src/client/arakoon_exc.mli \
_build/src/client/arakoon_exc.cmi \
_build/src/client/arakoon_client_config.cmi \
_build/src/client/arakoon_client.mli \
_build/src/client/arakoon_client.cmi \
_build/src/client/arakoon_remote_client.mli \
_build/src/client/arakoon_remote_client.cmi \
_build/src/client/protocol_common.cmi \
_build/src/client/client_helper.cmi \
_build/src/inifiles/inifiles.mli \
_build/src/inifiles/inifiles.cmi \
_build/src/lib/std.cmi \
_build/src/plugins/registry.mli \
_build/src/plugins/registry.cmi \
_build/src/plugins/plugin_helper.mli \
_build/src/plugins/plugin_helper.cmi \
_build/src/node/key.mli \
_build/src/node/key.cmi \
_build/src/node/simple_store.cmi \
_build/src/nursery/routing.cmi \
_build/src/tlog/interval.cmi \
_build/src/tlog/update.cmi \
_build/src/tools/ini.cmi \
_build/src/tools/llio.mli \
_build/src/tools/llio.cmi \
_build/src/tools/network.cmi \
_build/src/tools/lwt_extra.cmi \
_build/src/tools/typed_ssl.mli \
_build/src/tools/typed_ssl.cmi \
_build/src/arakoon_client.a

uninstall_client:
$(OCAML_FIND) remove arakoon_client -destdir $(OCAML_LIBDIR)

coverage:
ocamlbuild -use-ocamlfind \
-tag use_bisect \
arakoon.d.byte
test: build
dune exec -- arakoon test

install: build
@mkdir -p $(LIBDIR) $(PREFIX)
ifdef DESTDIR
mkdir -p $(DESTDIR)/usr/lib
ldd arakoon.native | \
grep librocksdb | \
awk '/=> /{print $$3}' | \
xargs cp --target-directory $(DESTDIR)/usr/lib
endif
dune install --libdir=$(LIBDIR) --prefix=$(PREFIX)

uninstall: build
dune uninstall --libdir=$(LIBDIR) --prefix=$(PREFIX)

uninstall_client: build
dune uninstall -p arakoon_client --libdir=$(LIBDIR) --prefix=$(PREFIX)

man:
ln -s ./arakoon.native arakoon
help2man --name='Arakoon, a consistent key value store' ./arakoon > debian/arakoon.man
rm arakoon

.PHONY: install test build install_client bench
examples:
dune build examples/ocaml/plugin_demo.exe examples/ocaml/demo.exe

doc:
dune build @doc


.PHONY: install uninstall test build bench examples arakoon.native doc man



indent-tabs-to-spaces:
Expand Down
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Arakoon
=======
![](https://travis-ci.org/Incubaid/arakoon.svg?branch=1.8)
[![](https://travis-ci.org/openvstorage/arakoon.svg?branch=1.9)](https://travis-ci.org/openvstorage/arakoon)

Arakoon is a distributed key/value store with preference for consistency. More technically, it's a [Multi-Paxos](http://en.wikipedia.org/wiki/Paxos_%28computer_science%29#Multi-Paxos) implementation (written in [OCaml](http://ocaml.org/)) running on top of [TokyoCabinet](http://fallabs.com/tokyocabinet/).

Expand Down Expand Up @@ -51,9 +51,15 @@ An overview of all command-line options is available by running `arakoon.native

Of course you want to use Arakoon from within a program. We provide OCaml, C and Python clients.

Documentation
--------------
For additional information please visit the [Arakoon GitBook](https://openvstorage.gitbooks.io/arakoon).


Releases
--------
Arakoon releases are available from the [releases](https://github.com/Incubaid/arakoon/releases) page. Any `1.X` branch corresponds to the development of releases in the `1.X` series.

Arakoon releases are available from the [releases](https://github.com/openvstorage/arakoon/releases) page. Any `1.X` branch corresponds to the development of releases in the `1.X` series.

Have fun,

Expand Down
6 changes: 6 additions & 0 deletions SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Summary

* [Arakoon Troubleshooting](docs/troubleshooting.md)
* [Retrieve Arakoon masters](docs/retrieveArakoonMasters.md)
* [Unable to start Arakoon service due to discrepancy between Alba and Arakoon version](docs/unableToStartArakoonServiceDueToDiscrepancyBetweenAlbaAndArakoonVersion.md)
* [Collapse arakoon](docs/collapseArakoon.md)
18 changes: 11 additions & 7 deletions _tags
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,21 @@ true: debug
true: annot
true: thread
true: package(lwt)
true: package(lwt.preemptive)
true: package(lwt.unix)
true: package(lwt.ssl)
true: package(lwt_ssl)
true: package(oUnit)
true: package(bz2)
true: package(str)
true: package(camltc)
true: package(dynlink)
true: package(quickcheck)
true: pp(camlp4of)
true: package(lwt_log)
true: package(uri)
true: package(redis-lwt)
true: package(core)
true: package(snappy)
true: package(ocplib-endian)
true: package(uuidm)
true: package(nocrypto)

"src":include
"src/lib":include
"src/tools":include
Expand All @@ -29,12 +30,15 @@ true: package(nocrypto)
"src/inifiles": include
"src/nursery": include
"src/plugins": include
"examples/ocaml": include
#"examples/ocaml": include
"src/main" : include
<**/arakoon.*{byte,native}>: is_main, linkall
<**/nursery.*{byte,native}>: is_main
<**/profile.*{byte,native}>: is_main, package(ocamlviz)
<**/bs_bench.*{byte,native}>: is_main
<examples/ocaml/*.{byte,native}>: is_main
#<examples/ocaml/*.{byte,native}>: is_main
"logger_macro.cmo" : use_camlp4, camlp4orf
<src/**/*.ml> : camlp4of, use_log_macro, maybe_use_bisect, unsafe_string
"rpmbuild": -traverse
"arakoon_docker_rpm": -traverse
"arakoon_version.ml": opaque
Loading