Permalink
Commits on Mar 5, 2013
  1. Merge pull request #74 from basho/jdb-fix-travis-failure

    Fix Travis CI failure of multiple_merges_during_fold_test
    
    After many intermittent timing failures over in TravisCI land, we have this:
    
        BUILD PASSED: [bitcask jdb-fix-travis-failure:771c92d] by Scott Lystig Fritchie https://travis-ci.org/basho/bitcask/builds/5266676
    slfritchie committed Mar 5, 2013
  2. Add ?IMPLIES(length(Ops) > 1, ...) to avoid legit model ambiguity

    in cases where the op list is too short to make a reasonable &
    correct guess of behavior.
    
    Use eqc:testing_time/2 for test length & EUnit timeout at 2x
    testing time.
    slfritchie committed Mar 5, 2013
Commits on Feb 14, 2013
  1. Change default Bitcask I/O mode to Erlang

    Additional testing demonstrates that using Erlang's built-in I/O
    provides more consistent behavior than the synchronous NIF approach.
    While the NIF approach is known to provide higher throughput, the
    non-deterministic impact on the Erlang VM from the use of blocking
    NIFs outweighs the benefit. Defaulting to the safer option. Users
    can manually revert to using NIFs if desired.
    jtuple committed Feb 14, 2013
Commits on Feb 8, 2013
  1. Merge branch '1.6'

    jaredmorrow committed Feb 8, 2013
Commits on Feb 6, 2013
  1. Make Bitcask I/O mode configurable: Erlang vs NIF

    The recent changes to revert Bitcask to using pure Erlang file I/O
    have lead to noticeable performance regressions in certain workloads.
    This change makes the file mode configurable, setting the default to
    the previous NIF-based approach. Users can switch to the Erlang-based
    I/O mode if they run into situations where the NIF-approach leads to
    scheduler collapse.
    
    The option is determined based on the Bitcask application variable
    'io_mode'. When missing or set to 'nif', the NIF-approach is used.
    When set to 'erlang', standard Erlang efile is used.
    jtuple committed Feb 6, 2013
Commits on Jan 29, 2013
Commits on Dec 3, 2012
  1. Fix Travis CI failure of multiple_merges_during_fold_test

    The environment that Travis runs test under unfortunately does not
    immediately pick up the expected number of files to merge for the
    different merge operations in the multiple_merges_during_fold_test.
    This commit changes the test to re-try merging until the expected
    result is seen (or eventually have the test timeout).
    jtuple committed Dec 3, 2012
  2. Merge branch 'jdb-avoid-file-nifs'

    Conflicts:
    	test/bitcask_timeshift.erl
    jtuple committed Dec 3, 2012
Commits on Nov 29, 2012
Commits on Nov 28, 2012
  1. Use Erlang file I/O from dedicated procs rather than NIFs

    Bitcask previously used raw file I/O to read/write files. However, since
    raw file I/O uses a non-optimized selective receive to wait for a reply
    back from the efile driver, this approach had numerous problems when
    Bitcask was used within processes with many incoming messages (such as how
    Bitcask is used in Riak).
    
    In commit 79d5eb3, NIFs were introduced
    to solve this problem. The file I/O NIFs would block the Erlang scheduler,
    but solve the issue encountered with selective receive. Unfortunately,
    using blocking NIFs is much worse than originally thought. Thus, NIFs are
    not the right solution to this problem.
    
    This commit changes Bitcask to once again use Erlang's built-in file I/O,
    but now wraps each open file in a separate gen_server that interacts with
    the raw port. The original process now waits on a gen_server reply which
    uses an optimized selective receive, while the file process handles the
    unoptimized selective receive from the port driver. In our usage, the file
    process only has a single request outstanding, and therefore does not run
    into the selective receive issue.
    jtuple committed Nov 28, 2012
Commits on Nov 27, 2012
Commits on Nov 21, 2012
  1. more fixes

    bsparrow435 committed Nov 21, 2012
Commits on Nov 20, 2012
  1. more fixes

    bsparrow435 committed Nov 20, 2012
  2. More fixes

    bsparrow435 committed Nov 20, 2012
  3. More fixes

    bsparrow435 committed Nov 20, 2012
Commits on Nov 19, 2012
  1. More changes

    bsparrow435 committed Nov 19, 2012
  2. initial try

    bsparrow435 committed Nov 19, 2012
Commits on Nov 16, 2012
  1. Merge pull request #70 from basho/slf-dialyzer20121116

    Clear all Dialyzer warnings
    slfritchie committed Nov 16, 2012
  2. Minimal changes to get zero Dialyzer warnings

    Nice to see that Dialyzer caught a bug from parallel development,
    adding the is_empty_estimate/1 function, and today's merge of
    the new QuickCheck model.
    slfritchie committed Nov 16, 2012
  3. Add usage example to comments at top of Run-eunit-loop.expect

    For the record, the versions of QuickCheck & PULSE that I
    was using for this testing:
    
    * QuickCheck 1.27.2
    * PULSE 1.27.2
    * git://github.com/Quviq/pulse_otp.git
      commit dff6ea12af94c0320d4a5beabc16a1fa50abf688
      Author: Hans Svensson <hanssv@gmail.com>
      Date:   Mon Aug 27 15:42:43 2012 +0200
    slfritchie committed Nov 16, 2012