Commit graph

932 commits

Author SHA1 Message Date
Martin Sumner
06fd9856b5 Add debug log 2018-05-16 10:34:47 +01:00
Martin Sumner
3d1c085af3 Revert log additions 2018-05-15 10:41:56 +01:00
Martin Sumner
15a5db5055 Sort tuned seg list 2018-05-15 10:36:07 +01:00
Martin Sumner
6160db3377 Further log 2018-05-15 10:30:09 +01:00
Martin Sumner
1e40648c83 Add initial log 2018-05-15 10:11:37 +01:00
Martin Sumner
eb5950a179 Merge branch 'master' into mas-i134-compileflag 2018-05-04 17:14:21 +01:00
Martin Sumner
96cee2a64c Add specific compile flag to avoid deprecation warning
Will see us through OTP 20 and 21.
2018-05-04 17:14:12 +01:00
Martin Sumner
6a20b2ce66 Use leveled_codec types
... and exporting them.

Previously types wer enot exported, and it appears dialyzer treated tham as any() when they were unexported types ??!!??
2018-05-04 15:24:08 +01:00
Martin Sumner
2063cacd8f More spec/doc work in leveled_codec
Note that at some stage KeyChanges got overloaded to mean {KeyChanges, TTL}, and the spec now tries to make this a bit clearer
2018-05-04 11:19:37 +01:00
Martin Sumner
aa34ffda5b Crash not skip on corrupted key 2018-05-03 20:14:36 +01:00
Martin Sumner
2cd20fcb47 Missed generate_uuid reference 2018-05-03 18:26:02 +01:00
Martin Sumner
f88f511df3 leveled_codec spec/doc
Try and make this code a little bit more organised andd easier to follow
2018-05-03 17:18:13 +01:00
Martin Sumner
416aa7c0d3 Reference startup writeup 2018-05-02 16:03:03 +01:00
Martin Sumner
ef9ac57c5e Add information on startup options 2018-05-02 15:48:16 +01:00
Martin Sumner
a9db4a0082 Spec and comment Inker 2018-05-02 10:57:27 +01:00
Martin Sumner
dd7b753688 Add spec and comments to penciller 2018-05-01 21:28:40 +01:00
Martin Sumner
ee5dc43cfd Add doc/spec to bookie
Improve the comments and dialyzer hints within the bookie.
2018-05-01 12:03:24 +01:00
Martin Sumner
8123e49c7a
Merge pull request #132 from martinsumner/mas-i126-intermittentfailure
Mas i126 intermittentfailure
2018-04-30 20:37:22 +01:00
Martin Sumner
37b067e61b Remove failure detection from eunit test
As it now consistently passes
2018-04-30 17:48:34 +01:00
Martin Sumner
941d4d2577 Fix issue with use of ets:next
ets:next is not StartInclusive - so we shouldn't use ets:next when querying the ledger cache, until it has been confirmed thta a matching key to the StartKey is not present.

This reoslves the intermittently failing unit test which highlighted this (and also makes that intermittent failure a permanent failure by expanding the test cases it covers).
2018-04-30 15:20:37 +01:00
Russell Brown
92582de4dd WIP: changes for backend_eqc test
Enable support for $key and $bucket index
2018-04-12 10:06:29 +01:00
Martin Sumner
6e51cbc853 is_alive not needed
Throwback when this was in terminate.
2018-04-10 12:22:00 +01:00
Martin Sumner
45ec837813 de-terminate cdb 2018-04-10 10:32:52 +01:00
Martin Sumner
293bd8fb78 de-terminate inker 2018-04-10 10:05:46 +01:00
Martin Sumner
bb752f1025 de-terminate bookie 2018-04-10 09:54:35 +01:00
Martin Sumner
11ba7029aa de-terminate penciller 2018-04-10 09:51:21 +01:00
Martin Sumner
54d81220b2 Merge branch 'master' into mas-i115-simplettcache 2018-04-05 09:14:02 +01:00
Martin Sumner
766cee50d7 Expand test for join_segment 2018-04-04 22:37:01 +01:00
Martin Sumner
c8552d5bd5 Add exports required by kn_index_tictactree 2018-03-28 14:01:40 +01:00
Martin Sumner
e0d63209a1 Export merge binaries
For use by processes wanting to merge roots or branches
2018-03-26 09:39:34 +01:00
Martin Sumner
c1cd00b498 Allow ignore non-binary subkey for hash
This allows the subkey to be an integer, that will be gnored for hashing purposes
2018-03-22 22:07:24 +00:00
Martin Sumner
b81caf7dee segment_hash -> tictac
the concept of the segment hash belongs to the leveled_tictac module, not the codec.

Previously the alignment of tictac and store was accidental, this change makes it explicit.
2018-03-22 19:03:52 +00:00
Martin Sumner
6ce903ad2b Change segment_hahs for HEAD
Needs toaling with ?RIAK tag, and so that AAE key-ordered and segment-ordered stores also agree on definition of Segment ID
2018-03-22 17:12:58 +00:00
Martin Sumner
cda412508a IsEmpty check
Previously there was no is_empty check, and there was a workaround using binary_bucketlist.  But what if there were many buckets - this is a slow seek (using get next key over and over).

Instead have a proper is_empty check.
2018-03-21 15:31:00 +00:00
Martin Sumner
ef22aabe85 Alter comment 2018-03-20 11:11:41 +00:00
Martin Sumner
096f49bb1d Add missing comment 2018-03-19 11:40:49 +00:00
Russell Brown
d487c1bc51 Fix failing test, I don't understand how
See #122 for details
2018-03-15 11:09:28 +00:00
Martin Sumner
25be7ef535 Change TicTac tree sizing
Previously TicTac trees were of equal width at both levels.  This seemed reasonably efficient way of sclaing up key sizes (e.g. at each increment both level widths doubled giving a 4 x increase in size).

However if we're to do comparisons with fetch_root followed by fetch_branches this might not be as efficient.  As with a 1024 x 1024 tree a 1000 deltas requires the whole tree to eb exchanged, where as with a 4096 * 256 tree a 1000 deltas only requires a quarter of the tree to be sent over the network.

The whole tree, with a 4 byte hash size is 4MB in this case - requiring 30ms of network time on a Gbps link. There may be longer blocking of inter-node communication on LFNs (as per the tests in Meiklejohn's Partisan paper - https://arxiv.org/abs/1802.02652).

This  changes makes TicTac tree tests run slower.  But perhaps this is a price worth paying for smoothing out the potential impact on inter-node communication?
2018-03-14 10:36:17 +00:00
Martin Sumner
a9a20c9150 Smoother temrinate on destroy
don't try and terminate a dead process
2018-03-07 16:20:41 +00:00
Martin Sumner
e29743310d Make destroy "normal"
Put the special actions in the handle_call not the terminate
2018-03-07 16:14:50 +00:00
Martin Sumner
4bf6d3e73d Fiddle with naming in query API
Was easier in the calling applictaion to switch between using and not using a list of the Query format was consistent between those two cases.
2018-03-02 10:20:43 +00:00
Martin Sumner
5312806592 Stop Iterator re-use
The IMM iterator should not be reused, as it has already been filtered for a query.  so if reused for a different query incorrect and unexpected results may occur.

This reuse had been stopped by a previous commit, and this cleans up subsequently unused code.
2018-03-02 08:16:34 +00:00
Martin Sumner
d21d18dd82 Remove rogue log 2018-03-01 23:37:05 +00:00
Martin Sumner
861aa5a7db Support multi-query fold
Allow a single snapshot to run query over multiple ranges.   Used initially to fold over multiple buckets.
2018-03-01 23:19:52 +00:00
Martin Sumner
fa532fbd27 Tidy set_status 2018-02-16 20:56:12 +00:00
Martin Sumner
090e414b23 Coverage issues
Not making proxy object so get_size not required.

Extend tests to improve coverage
2018-02-16 20:27:49 +00:00
Martin Sumner
70dfb77088 Optional lookup in head_only mode
Allow decision to be made on startup whether ObjectSpecs can be looked up directly when running in head_only mode.
2018-02-16 17:06:30 +00:00
Martin Sumner
910ccb6072 Add lookup support in head_only mode
Originally had disabled the ability to lookup individual values when running in head_only mode.  This is a saving of about 11% at PUT time (about 3 microseconds  per PUT) on a macbook.

Not sure this saving is sufficient enought to justify the extra work if this is used as an AAE Keystore with Bitcask and LWW (when we need to lookup the current value before adjusting).

So reverted to re-adding support for HEAD requests with these keys.
2018-02-16 14:16:28 +00:00
Martin Sumner
2b6281b2b5 Initial head_only features
Initial commit to add head_only mode to leveled.  This allows leveled to receive batches of object changes, but where those objects exist only in the Penciller's Ledger (once they have been persisted within the Ledger).

The aim is to reduce significantly the cost of compaction.  Also, the objects ar enot directly accessible (they can only be accessed through folds).  Again this makes life easier during merging in the LSM trees (as no bloom filters have to be created).
2018-02-15 16:14:46 +00:00
Martin Sumner
834704a3ff Merge branch 'mas-i117-factor4scale' of https://github.com/martinsumner/leveled into mas-i117-factor4scale 2018-02-10 08:10:32 +00:00