Permalink
Commits on Jan 21, 2012
  1. Merge pull request #8 from jlouis/qc-sync-range

    Qc sync range
    krestenkrab committed Jan 21, 2012
  2. Fix a bug in lsm_tree:close/1.

    There is a race condition based on the monitor set in a call. We might
    get a normal exit from the monitor message deep inside gen_server.
    This has to be handled. I've seen this race in my QC tests.
    committed Jan 21, 2012
  3. Make the sync_range call test work.

    Currently, we are also synchronizing all the key collection in the
    call. But in the future we might want to interleave that with other
    operations.
    committed Jan 21, 2012
  4. Build a record for the trees.

    This is a needed step to support range-queries since we may collect
    range queries at a later time, interleaved with the normal operations.
    committed Jan 21, 2012
Commits on Jan 20, 2012
  1. Make close/1 resilient to noproc

    Getting noproc exceptions here is ok, we simply
    ignore such errors.
    krestenkrab committed Jan 20, 2012
  2. Rename merger2 -> merger

    krestenkrab committed Jan 20, 2012
  3. Remove unused merger

    krestenkrab committed Jan 20, 2012
Commits on Jan 19, 2012
  1. Add both sync and async range fold

    Sync blocks insert/lookup while doing a range
    query, but still buffers the results in a
    per-range query process.  
    
    Async fold runs on a hard link copy of the
    underlying tree data.
    
    This commit and also fixes a number of bugs 
    related to folding; it was not taking nursery 
    data into account.
    krestenkrab committed Jan 19, 2012
  2. Make lsm_btree:close/1 stop more processes

    Closing a tree did not stop ongoing merge
    processes beyond the current top level.
    Now close synchronously calls down through all
    levels and closes each one.
    krestenkrab committed Jan 19, 2012
  3. Update readme

    krestenkrab committed Jan 19, 2012
  4. Close trees before cleanup

    Problem is that we sometimes get errors resulting
    from files being written as a result of pending
    merges.  Closing a tree should stop all such
    file-level activity.
    krestenkrab committed Jan 19, 2012
Commits on Jan 16, 2012
Commits on Jan 15, 2012
  1. README: Explain 'LSM' and provide link to paper.

    Erik Søe Sørensen committed with krestenkrab Jan 8, 2012
  2. Implement lsm_btree:fold_range/5

    First implementation of range fold
    
    Range folding doesn't prohibit insert/lookup or
    merge operations, but each level can only have
    one range fold operation active.
    
    Thus, worst case active range folds can double
    space requirements, because it holds hard-linked
    copies of used btree files.
    krestenkrab committed Jan 15, 2012
Commits on Jan 11, 2012
  1. Bugfix merged in basho/ebloom

    so we can go back to depending on basho/ebloom
    krestenkrab committed Jan 11, 2012
Commits on Jan 10, 2012
  1. Improve nursery handling

    - Code moved to separate module
    - Recovery now operational; re-opening a
      tree will actually read the nursery log.
    
    We use a sequential log file for the nursery
    and also keep inserted {K,V} in memory
    only 32 K/V pairs at a time.
    
    NURSERY_SIZE = (1 bsl TOP_LEVEL)
    configured in src/lsm_btree.htl
    krestenkrab committed Jan 10, 2012
Commits on Jan 8, 2012
Commits on Jan 7, 2012
  1. Optimize open dict check.

    A dict is open and with keys if its size is greater than 0. Go through
    the dicts one by one with lists:any/2 and use that to optimize the
    check. Ought to run faster than traversing the full set.
    committed Jan 7, 2012
  2. Implement failing key lookup.

    We generate a set of names that are highly unlikely to be in the tree
    as well because this makes it way easier for the ?SUCHTHAT macro to
    succeed.
    committed Jan 7, 2012
  3. Work on failing keys. Optimize generator.

    To make failing keys work we must be able to produce a key in fewer
    failures then currently. So encode the picker for non-empty trees
    directly so it is much faster and doesn't try to do it by generating a
    case and then asking "is this one good enough?". A simple
    dict:filter/2 does it.
    committed Jan 7, 2012
  4. Minor typo

    krestenkrab committed Jan 7, 2012
  5. Update REAME

    krestenkrab committed Jan 7, 2012
  6. Add close to shame tests

    krestenkrab committed Jan 7, 2012
  7. Allow put(Key, Binary|'deleted')

    Last missing piece to make delete work it seems
    krestenkrab committed Jan 7, 2012
  8. Remove warning

    krestenkrab committed Jan 7, 2012