Commit graph

269 commits

Author SHA1 Message Date
martinsumner
630f802780 Inker Close nastiness
Try to stop some of the potential deadlocking around Inker close and
prove that snapshots at higher Manifest SQNs can be ignored
2016-11-14 19:34:11 +00:00
martinsumner
44738f7c75 Deferred Deletion of Journals
This allows for deleted journals to be retained for a period (the
waste_retnetion_period).  The idea being that a backup strategy can
ensure that all journals are backed up, even ones created and removed
from within a backup period - so that any restore pont is possible.

This is also a pre-cursor to removing some of the PromptDelete
complexity from the Inker Clerk - all compactions can prompt deletion as
deletion is now deferred.
2016-11-14 11:17:14 +00:00
martinsumner
dbb840d75e Ooops - test commenting 2016-11-09 22:06:02 +00:00
martinsumner
16c424cd7b Add tombstone to compaction problem
Minor test refinement
2016-11-09 20:03:44 +00:00
martinsumner
feb3c2a524 Add recovr strategy test 2016-11-09 16:27:47 +00:00
martinsumner
b9090a3109 Testutil and pause 2016-11-07 12:19:17 +00:00
martinsumner
e2670e6e8c Testutil and Pause
Part of the testutil code is not recognising pause
2016-11-07 12:18:00 +00:00
martinsumner
8f068c1280 Fixup API to allow for Tags to be passed
plus fixes to previous commits moving API functions into testutil
2016-11-07 10:42:49 +00:00
martinsumner
37c23a5b38 Shift pause out of leveled
Leveled will now signal the need for a pause due to back-pressure, but
not actually pause itself.  The hope is that in a riak implementation
this pause can be managed by the put_fsm, and so not lock the store.
2016-11-07 10:27:38 +00:00
martinsumner
4583460328 Clean API of Riak-specific Methods
Clena the API of Riak specific methods, and also resolve timing issue in
simple_server unit test.  Previously this would end up with missing data
(and a lower sequence number after start) because of the penciller_clerk
timeout being relatively large in the context of this test.  Now the
timeout has bene reduced the L0 slot is cleared by the time of the
close.  To make sure an extra sleep has been added as a precaution to
avoid any intermittent issues.
2016-11-07 10:11:57 +00:00
martinsumner
a251f3eab0 Speed up query count test
Less individual querys to make count will speed up this taste, without
changing the nature of it
2016-11-04 18:20:00 +00:00
martinsumner
479dc3ac80 Registering and releasing of Journal snapshots
Added a test of journal compaction with a registered snapshot and it
showed that the deleting of files did not correctly check the list of
registerd snapshots.  Corrected.
2016-11-04 15:56:57 +00:00
martinsumner
171baefc0c SFT Background Failure
Let it crash approach - stop trying to catch and propgate failure of
write
2016-11-04 14:31:19 +00:00
martinsumner
eeeee07081 Fold Objects - Check values test
Test that summed values in fold objects before and after restart
2016-11-04 14:23:37 +00:00
martinsumner
68b17c71b3 Expand fold objects support
Fold over bucket and fold over index added
2016-11-04 11:01:37 +00:00
martinsumner
ee39b48313 Messed up test fixed 2016-11-03 13:34:06 +00:00
martinsumner
2f28ae86e4 Journal compaction test to cover deleted objects 2016-11-03 12:31:00 +00:00
martinsumner
a752074148 Undo commenting 2016-11-03 12:12:56 +00:00
martinsumner
37e78dcdc9 Expanded AAE tests to include busted hashtable
Busted the hashtable in a Journal file, and demonstrated it can be fixed
by changing the extension name (no need to recover from backup if only
the hashtable is bust)
2016-11-03 12:11:50 +00:00
martinsumner
e8a7888397 Experiment with new cache size algorithm
Remove the jitter probability and make it a smooth function heading
towards the max ache size
2016-11-03 09:19:02 +00:00
martinsumner
0572f43b8a Uncomment test 2016-11-02 15:40:22 +00:00
martinsumner
898f86a08d Add Fold Object by KeyList support 2016-11-02 15:38:51 +00:00
martinsumner
8601e219d5 Revert test commenting
Commented out some tests - bring back in
2016-11-02 13:34:34 +00:00
martinsumner
a56ed18ba9 Test timing
Look to see if test timing related to intermittent failure
2016-11-02 13:27:16 +00:00
martinsumner
e7506c3c1f Startup work - baffled
Changes the stratup otpions to a prolist to make it easier to get
environment variables as default.

Tried application:start - and completely baffled as to how to get this
to work.
2016-11-02 12:58:27 +00:00
martinsumner
ce34235f2f Revert commented out test
Unintentional commenting
2016-11-01 01:38:48 +00:00
martinsumner
84a92b5f95 Further testing of compaction
Check we avoid crashing in challenging compaction scenarios
2016-11-01 00:46:14 +00:00
martinsumner
7d35ef7126 Lame AAE hashtree query test
Corruption of the values wihtin the journal doesn't get detected by the
hashtree query
2016-10-31 22:17:29 +00:00
martinsumner
73004328e1 Recovery Tests
Some initial entropy tests showing loss of data from a corrupted CDB
file.
2016-10-31 20:58:19 +00:00
martinsumner
3b05874b8a Add initial timestamp support
Covered only by basic unit test at present.
2016-10-31 12:12:06 +00:00
martinsumner
4cffecf2ca Handle gen_server:cast slowness
There was some unpredictable performance in tests, that was related to
the amount of time it took the sft gen_server to accept a cast whihc
passed the levelzero_cache.

The response time looked to be broadly proportional to the size of the
cache - so it appeared to be an issue with passing the large object to
the process queue.

To avoid this, the penciller now instructs the SFT gen_server to
callback to the server for each tree in the cache in turn as it is
building the list from the cache.  Each of these requests should be
reltaively short, and the processing in-between should space out the
requests so the Pencille ris not blocked from answering queries when
pompting a L0 write.
2016-10-31 01:33:33 +00:00
martinsumner
311179964a Quality review
Minor test fix-up and quality changes
2016-10-30 22:06:44 +00:00
martinsumner
0e6ee486f8 Make tets less pointless
Journla compaction test wouldn't actually cause compaction
2016-10-30 20:14:11 +00:00
martinsumner
cdb01cd24f Quality Review
Looked through test coverage and dialyzer output and attempted to fill
test gaps and strip out untestable code (to let it crash).
2016-10-29 00:52:49 +01:00
martinsumner
0e4632ee31 Test correction
In one test run the numbe rof files fluctuated but ended at zero.  The
ending at zero is the importnat thing.
2016-10-27 22:23:19 +01:00
martinsumner
c6ca973517 Penciller shutdown when empty
Stop the penciller from writing an empty file, when shutting down and
the L0 Cache is empty.

Also parameter fiddle to see impact of the Penciller changes.
2016-10-27 21:40:43 +01:00
martinsumner
a00a123817 Recovery strategy testing
Test added for the "retain" recovery strategy.  This strategy makes sure
a full history of index changes is made so that if the Ledger is wiped
out, the Ledger cna be fully rebuilt from the Journal.

This exposed two journal compaction problems

- The BestRun selected did not have the source files correctly sorted in
order before compaction
-  The compaction process incorrectly dealt with the KeyDelta object
left after a compaction - i.e. compacting twice the same key caused that
key history to be lost.

These issues have now been corrected.
2016-10-27 00:57:19 +01:00
martinsumner
4cdc6211a0 Handling 'returned' in penciller unit tests
The unit tests for the Penciller couldn't cope with the returned status
- and so would intermittently fail (after tightening the timeout on sft
check_ready.
2016-10-26 21:03:50 +01:00
martinsumner
254183369e CDB - switch to gen_fsm
The CDB file management server has distinct states, and was growing case
logic to prevent certain messages from being handled in ceratin states,
and to handle different messages differently.  So this has now been
converted to a gen_fsm.

As part of resolving this, the space_clear_ondelete test has been
completed, and completing this revealed that the Penciller could not
cope with a change which emptied the ledger.  So a series of changes has
been handled to allow it to smoothly progress to an empty manifest.
2016-10-26 20:39:16 +01:00
martinsumner
0c331b9c30 Tests uncommented
Accidentally commented tests it pervious commit
2016-10-26 11:45:35 +01:00
martinsumner
2a47acc758 Rolback hash|no_hash and batch journal compaction
The no_hash option in CDB files became too hard to manage, in particular
the need to scan the whole file to find the last_key rather than cheat
and use the index.  It has been removed for now.

The writing to the journal during journal compaction has now been
enhanced by a mput option on the CDB file write - so it can write each
batch as one pwrite operation.
2016-10-26 11:39:27 +01:00
martinsumner
c78b5bca7d Basement Tombstones
Further progress towards the tidying up of basement tombstones in the
Ledger, with support added for key-listing to help with testing (and as
a potentially required feature).

The test is incomplete, but committing at this stage as the last commit
broke some tests (within the test code).

There are some outstanding questions about the handling of tombstones in
the Journal during compaction.  There exists a condition whereby values
could return if a recent journal is compacted and tombstones are removed
(as they are no longer present), but older journals have not been
compacted.  Now on stop/start - if the Ledger is wiped the removal of
the keys will be forgotten but the original PUTs would still remain.

The safest thing maybe to have rule that tombstones are never deleted
from the Inker's Journal - and accept the build-up of garbage.  Or there
could be an addition to the compaction process that checks back through
all the inker files to check that the Key of a tombstone is not present
in the past, before it is removed in the compaction.
2016-10-23 22:45:43 +01:00
martinsumner
e9c568a8b3 Test fix-up
There was a test that failed to close down a bookie and that caused some
issues.  The issues are double-reoslved, the close down was tidied as
well as the forgotten close being added back in.

There is some generla tidy around in anticipation of TTL support.
2016-10-21 21:26:28 +01:00
martinsumner
0a2053b557 Improved unit test of CRC chekcing in bloom filter
Confirm the impact of bit-flipping in the bloom filter
2016-10-21 16:08:41 +01:00
martinsumner
b2089baa1e Correct tombstone handling
Prepare SFT files for handling tombstones correctly (without expiry
dates).

Also some work as it can be seen from tests that some SFT files ar enot
be cleared out correctly.  Pausing before trying t clear out the fles to
experiment and trial the possibility that there is a timing issue.
2016-10-21 15:21:37 +01:00
martinsumner
c431bf3b0a Broken snapshot test
The test confirming that deleting sft files wer eheld open whilst
snapshots were registered was actually broken.  This test has now been
fixed, as well as the logic in registring snapshots which had used
ledger_sqn mistakenly rather than manifest_sqn.
2016-10-21 11:38:30 +01:00
martinsumner
0324edd6f6 Rotating object tests
Recent fixes have been made to problems associated with rapidly changing
objexts especially on re-opening of the bookie.  Test of rotating
objects from both an index query and a fetch perspective added to better
detect such issues in the future.
2016-10-20 12:16:17 +01:00
martinsumner
7319b8f415 Redundant clauses
Remove some redundant clauses, and fix up some logging
2016-10-19 20:51:30 +01:00
martinsumner
12fe1d01bd Penciller Manifest and Locking
The penciller had the concept of a manifest_lock - but it wasn't clear
what the purpose of it was.

The updating of the manifest has now been updated to reduce the code and
make the process cleaner and more obvious.  Now the committed manifest
only covers non-L0 levels.  A clerk can work concurrently on a manifest
change whilst the Penciller is accepting a new L0 file.

On startup the manifets is opened as well as any L0 file.  There is a
possible race condition with killing process where there may be a L0
file which is merged but undeleted - and this is believed to be inert.

There is some outstanding work still.  Currently the whole store is
paused if a push_mem is received by the Penciller, and the writing of a
L0 sft file has not been completed.  The creation of a L0 file appears
to take about 300ms, so if the ledger_cache fills in this period a pause
will occurr (perhaps due to objects with lots of index entries).  It
would be preferable to pause more elegantly in this situation.  Perhaps
there should be a harsh timeout on the call to check the SFT complete,
and catching it should cause a refused response.  The next PUT will then
wait, but a any queued GETs can progress.
2016-10-19 17:34:58 +01:00
martinsumner
f16f71ae81 Revert ominshambles performance refactoring
To try and improve performance index entries had been removed from the
Ledger Cache, and a shadow list of the LedgerCache (in SQN order) was
kept to avoid gb_trees:to_list on push_mem.

This did not go well.  The issue was that ets does not deal with
duplicate keys in the list when inserting (it will only insert one, but
it is not clear which one).

This has been reverted back out.

The ETS parameters have been changed to [set, private].  It is not used
as an iterator, and is no longer passed out of the process (the
memtable_copy is sent instead).  This also avoids the tab2list function
being called.
2016-10-19 00:10:48 +01:00