Switch branches/tags
Commits on Oct 23, 2013
  1. initial version

    evanmcc committed Oct 23, 2013
Commits on May 10, 2013
  1. Merge tag '1.6.1' into 1.6

    Jared Morrow
    Jared Morrow committed May 10, 2013
    Tag bitcask 1.6.1
Commits on Apr 2, 2013
  1. Roll bitcask version 1.6.1

    Jared Morrow
    Jared Morrow committed Apr 2, 2013
Commits on Mar 29, 2013
  1. Merge pull request #86 from basho/slf-purge-stale-file-race

    slfritchie committed Mar 29, 2013
    Fix race with deleting stale input files from merge, h/t @evanmcc
Commits on Mar 28, 2013
  1. Fix race with deleting stale input files from merge, h/t @evanmcc

    slfritchie committed Mar 28, 2013
    Evan found a failing QuickCheck + PULSE test case that causes a
    fold to fail when racing with a merge.  The race appears to be
    very difficult to trigger via QC + PULSE, alas, even when
    tweaking the operation weights to get more puts + folds + merge
    operations to happen on average.
    My proposed fix is to move the call to `purge_setuid_files/1`
    to the `init_keydir()` function.  `init_keydir()` knows if
    we're opening the keydir for the first time (`not_ready` or
    not), so purge the stale setuid files only in the `not_ready`
Commits on Mar 12, 2013
  1. Merge remote-tracking branch 'origin/1.6'

    slfritchie committed Mar 12, 2013
    The 1.6 branch has diverged from master ... merging in recent mods.
Commits on Mar 5, 2013
  1. Merge pull request #74 from basho/jdb-fix-travis-failure

    slfritchie committed Mar 5, 2013
    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
  2. Add ?IMPLIES(length(Ops) > 1, ...) to avoid legit model ambiguity

    slfritchie committed Mar 5, 2013
    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.
Commits on Feb 14, 2013
  1. Change default Bitcask I/O mode to Erlang

    jtuple committed Feb 14, 2013
    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.
Commits on Feb 8, 2013
  1. Merge branch '1.6'

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

    jtuple committed Feb 6, 2013
    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.
Commits on Jan 29, 2013
  1. Roll bitcask version 1.6.0

    Jared Morrow
    Jared Morrow committed Jan 29, 2013
Commits on Dec 3, 2012
  1. Fix Travis CI failure of multiple_merges_during_fold_test

    jtuple committed Dec 3, 2012
    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).
  2. Merge branch 'jdb-avoid-file-nifs'

    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

    jtuple committed Nov 28, 2012
    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.
Commits on Nov 27, 2012
Commits on Nov 16, 2012
  1. Merge pull request #70 from basho/slf-dialyzer20121116

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

    slfritchie committed Nov 16, 2012
    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.
  3. Add usage example to comments at top of Run-eunit-loop.expect

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