Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Commits on Mar 5, 2013
  1. @slfritchie

    Merge pull request #74 from basho/jdb-fix-travis-failure

    slfritchie authored
    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
  2. @slfritchie
  3. @slfritchie
  4. @slfritchie
  5. @slfritchie

    Add ?IMPLIES(length(Ops) > 1, ...) to avoid legit model ambiguity

    slfritchie authored
    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. @jtuple
  2. @jtuple

    Change default Bitcask I/O mode to Erlang

    jtuple authored
    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. @jaredmorrow

    Merge branch '1.6'

    jaredmorrow authored
Commits on Feb 6, 2013
  1. @jtuple
  2. @jtuple

    Make Bitcask I/O mode configurable: Erlang vs NIF

    jtuple authored
    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. @jaredmorrow

    Roll bitcask version 1.6.0

    jaredmorrow authored
Commits on Dec 3, 2012
  1. @jtuple

    Fix Travis CI failure of multiple_merges_during_fold_test

    jtuple authored
    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. @jtuple

    Merge branch 'jdb-avoid-file-nifs'

    jtuple authored
    Conflicts:
    	test/bitcask_timeshift.erl
  3. @jtuple
  4. @jtuple
Commits on Nov 29, 2012
  1. @jtuple
  2. @jtuple
  3. @jtuple
Commits on Nov 28, 2012
  1. @jtuple
  2. @jtuple

    Use Erlang file I/O from dedicated procs rather than NIFs

    jtuple authored
    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
  1. @slfritchie
  2. @slfritchie
Commits on Nov 21, 2012
  1. @bsparrow435
  2. @bsparrow435

    more fixes

    bsparrow435 authored
Commits on Nov 20, 2012
  1. @bsparrow435

    more fixes

    bsparrow435 authored
  2. @bsparrow435

    More fixes

    bsparrow435 authored
  3. @bsparrow435

    More fixes

    bsparrow435 authored
Commits on Nov 19, 2012
  1. @bsparrow435

    More changes

    bsparrow435 authored
  2. @bsparrow435

    initial try

    bsparrow435 authored
Commits on Nov 16, 2012
  1. @slfritchie

    Merge pull request #70 from basho/slf-dialyzer20121116

    slfritchie authored
    Clear all Dialyzer warnings
  2. @slfritchie

    Remove type inference cruft

    slfritchie authored
  3. @slfritchie

    Minimal changes to get zero Dialyzer warnings

    slfritchie authored
    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.
  4. @slfritchie
  5. @slfritchie
  6. @slfritchie

    Add usage example to comments at top of Run-eunit-loop.expect

    slfritchie authored
    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
Something went wrong with that request. Please try again.