This branch incorporates handling of options in eleveldb to support the new cluster-wide leveldb expiry mechanism. This includes cuttlefish changes to eleveldb.schema as well as C++ code to support parsing those options in eleveldb and instantiating the expiry module in leveldb.
Changes include:
c_src/eleveldb.cc
code has been changed to include leveldb_os/expiry_os.h header file
new atoms have been added for expiry_enabled, expiry_minutes and whole_file_expiry options
code has been added to parse_open_option, to parse the corresponding expiry options.
NB: Per notes in the code, I have changed the logic that instantiates the leveldb::ExpiryModuleOS object to create it if any expiry option is specified. This differs from the original version in mv-expiry-schema2 branch, which only instantiated the object if non-default values were specified. I believe that this is either an oversight, or an accident waiting to happen. If the leveldb ExpiryModuleOS constructor were to change the default values of certain parameters for example, then it would cause those options to be lost if they were specified prior to enabling expiry
priv/eleveldb.schema
Schema now contains mappings for expiry parameters eleveldb.expiry_enabled, eleveldb.expiry_minutes and eleveldb.whole_file_expiry
Per @matthewvon 's suggestion, I have changed the default eleveldb.compression from 'snappy' to 'lz4'
c_src/refobjects.cc
A log comment was added in LevelIteratorWrapper::LogIterator() when debugging a Meltwater ticket (iterator hang, which we now believe has been fixed). This was commented out in the develop branch, but the uncommented version had been incorporated into riak_ts-develop. I have removed the line entirely to avoid confusion.
build_deps.sh
LEVELDB_VSN has been changed from 2.0.22 to the leveldb tag containing the expiry code (this is still a WIP, but should be 2.0.24 when done)
rebar.config
Some comments were added regarding buildbot unit tests on the develop branch. I have left those in
Tests
All unit tests pass against this branch
I've also tested this branch in riak_test for basic TS put and query functionality (including simple range-scan and secondary filtering), and it behaves as expected
I've also run a series of put/get KV latency tests against this branch and found that latencies agree with the TS1.3 baseline
Overview
This branch incorporates handling of options in eleveldb to support the new cluster-wide leveldb expiry mechanism. This includes cuttlefish changes to eleveldb.schema as well as C++ code to support parsing those options in eleveldb and instantiating the expiry module in leveldb.
Changes include:
c_src/eleveldb.cc
code has been added to parse_open_option, to parse the corresponding expiry options.
NB: Per notes in the code, I have changed the logic that instantiates the leveldb::ExpiryModuleOS object to create it if any expiry option is specified. This differs from the original version in mv-expiry-schema2 branch, which only instantiated the object if non-default values were specified. I believe that this is either an oversight, or an accident waiting to happen. If the leveldb ExpiryModuleOS constructor were to change the default values of certain parameters for example, then it would cause those options to be lost if they were specified prior to enabling expiry
priv/eleveldb.schema
c_src/refobjects.cc
build_deps.sh
rebar.config
Tests