1. 20 7月, 2016 1 次提交
    • J
      New Statistics to track Compression/Decompression (#1197) · 9430333f
      John Alexander 提交于
      * Added new statistics and refactored to allow ioptions to be passed around as required to access environment and statistics pointers (and, as a convenient side effect, info_log pointer).
      
      * Prevent incrementing compression counter when compression is turned off in options.
      
      * Prevent incrementing compression counter when compression is turned off in options.
      
      * Added two more supported compression types to test code in db_test.cc
      
      * Prevent incrementing compression counter when compression is turned off in options.
      
      * Added new StatsLevel that excludes compression timing.
      
      * Fixed casting error in coding.h
      
      * Fixed CompressionStatsTest for new StatsLevel.
      
      * Removed unused variable that was breaking the Linux build
      9430333f
  2. 18 7月, 2016 1 次提交
  3. 17 7月, 2016 1 次提交
  4. 16 7月, 2016 2 次提交
    • S
      DBTest.DynamicLevelCompressionPerLevel: Tune Threshold · 21c55bdb
      sdong 提交于
      Summary: Each SST's file size increases after we add more table properties. Threshold in DBTest.DynamicLevelCompressionPerLevel need to adjust accordingly to avoid occasional failures.
      
      Test Plan: Run the test
      
      Reviewers: andrewkr, yiwu
      
      Subscribers: leveldb, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D60819
      21c55bdb
    • Y
      Refactor cache.cc · 4b952535
      Yi Wu 提交于
      Summary: Refactor cache.cc so that I can plugin clock cache (D55581). Mainly move `ShardedCache` to separate file, move `LRUHandle` back to cache.cc and rename it lru_cache.cc.
      
      Test Plan:
          make check -j64
      
      Reviewers: lightmark, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D59655
      4b952535
  5. 15 7月, 2016 2 次提交
    • I
      Update LANGUAGE-BINDINGS.md · c6a8665b
      Igor Canadi 提交于
      c6a8665b
    • W
      ldb backup support · 880ee363
      Wanning Jiang 提交于
      Summary: add backup support for ldb tool, and use it to run load test for backup on two HDFS envs
      
      Test Plan: first generate some db, then compile against load test in fbcode, run load_test --db=<db path> backup --backup_env_uri=<URI of backup env> --backup_dir=<backup directory> --num_threads=<number of thread>
      
      Reviewers: andrewkr
      
      Reviewed By: andrewkr
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60633
      880ee363
  6. 14 7月, 2016 4 次提交
    • S
      Avoid updating memtable allocated bytes if write_buffer_size is not set · 6797e6ff
      sdong 提交于
      Summary: If options.write_buffer_size is not set, nor options.write_buffer_manager, no need to update the bytes allocated counter in MemTableAllocator, which is expensive in parallel memtable insert case. Remove it can improve parallel memtable insert throughput by 10% with write batch size 128.
      
      Test Plan:
      Run benchmarks
      TEST_TMPDIR=/dev/shm/ ./db_bench --benchmarks=fillrandom -disable_auto_compactions -level0_slowdown_writes_trigger=9999 -level0_stop_writes_trigger=9999 -num=10000000 --writes=1000000 -max_background_flushes=16 -max_write_buffer_number=16 --threads=32 --batch_size=128   -allow_concurrent_memtable_write -enable_write_thread_adaptive_yield
      
      The throughput grows 10% with the benchmark.
      
      Reviewers: andrewkr, yiwu, IslamAbdelRahman, igor, ngbronson
      
      Reviewed By: ngbronson
      
      Subscribers: ngbronson, leveldb, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D60465
      6797e6ff
    • A
      Add DestroyColumnFamilyHandle(ColumnFamilyHandle**) to db.h · dda6c72a
      Aaron Gao 提交于
      Summary:
      add DestroyColumnFamilyHandle(ColumnFamilyHandle**) to close column family instead of deleting cfh*
      User should call this to close a cf and then we can detect the deletion in this function.
      
      Test Plan: make all check -j64
      
      Reviewers: andrewkr, yiwu, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60765
      dda6c72a
    • A
      Avoid FileMetaData copy · 56222f57
      Andrew Kryczka 提交于
      Summary: as titled
      
      Test Plan: unit tests
      
      Reviewers: sdong, lightmark
      
      Reviewed By: lightmark
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60597
      56222f57
    • J
      Fixed output size and removed unneeded loop · 15b7a4ab
      Jay Edgar 提交于
      Summary: In Zlib_Compress and BZip2_Compress the calculation for size was slightly off when using compression_foramt_version 2 (which includes the decompressed size in the output).  Also there were unnecessary loops around the deflate/BZ2_bzCompress calls.  In Zlib_Compress there was also a possible exit from the function after calling deflateInit2 that didn't call deflateEnd.
      
      Test Plan: Standard tests
      
      Reviewers: sdong, IslamAbdelRahman, igor
      
      Reviewed By: igor
      
      Subscribers: sdong, IslamAbdelRahman, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D60537
      15b7a4ab
  7. 13 7月, 2016 2 次提交
    • Y
      Fix deadlock when trying update options when write stalls · 6ea41f85
      Yi Wu 提交于
      Summary:
      When write stalls because of auto compaction is disabled, or stop write trigger is reached,
      user may change these two options to unblock writes. Unfortunately we had issue where the write
      thread will block the attempt to persist the options, thus creating a deadlock. This diff
      fix the issue and add two test cases to detect such deadlock.
      
      Test Plan:
      Run unit tests.
      
      Also, revert db_impl.cc to master (but don't revert `DBImpl::BackgroundCompaction:Finish` sync point) and run db_options_test. Both tests should hit deadlock.
      
      Reviewers: sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60627
      6ea41f85
    • J
      Miscellaneous performance improvements · efd013d6
      Jay Edgar 提交于
      Summary:
      I was investigating performance issues in the SstFileWriter and found all of the following:
      
      - The SstFileWriter::Add() function created a local InternalKey every time it was called generating a allocation and free each time.  Changed to have an InternalKey member variable that can be reset with the new InternalKey::Set() function.
      - In SstFileWriter::Add() the smallest_key and largest_key values were assigned the result of a ToString() call, but it is simpler to just assign them directly from the user's key.
      - The Slice class had no move constructor so each time one was returned from a function a new one had to be allocated, the old data copied to the new, and the old one was freed.  I added the move constructor which also required a copy constructor and assignment operator.
      - The BlockBuilder::CurrentSizeEstimate() function calculates the current estimate size, but was being called 2 or 3 times for each key added.  I changed the class to maintain a running estimate (equal to the original calculation) so that the function can return an already calculated value.
      - The code in BlockBuilder::Add() that calculated the shared bytes between the last key and the new key duplicated what Slice::difference_offset does, so I replaced it with the standard function.
      - BlockBuilder::Add() had code to copy just the changed portion into the last key value (and asserted that it now matched the new key).  It is more efficient just to copy the whole new key over.
      - Moved this same code up into the 'if (use_delta_encoding_)' since the last key value is only needed when delta encoding is on.
      - FlushBlockBySizePolicy::BlockAlmostFull calculated a standard deviation value each time it was called, but this information would only change if block_size of block_size_deviation changed, so I created a member variable to hold the value to avoid the calculation each time.
      - Each PutVarint??() function has a buffer and calls std::string::append().  Two or three calls in a row could share a buffer and a single call to std::string::append().
      
      Some of these will be helpful outside of the SstFileWriter.  I'm not 100% the addition of the move constructor is appropriate as I wonder why this wasn't done before - maybe because of compiler compatibility?  I tried it on gcc 4.8 and 4.9.
      
      Test Plan: The changes should not affect the results so the existing tests should all still work and no new tests were added.  The value of the changes was seen by manually testing the SstFileWriter class through MyRocks and adding timing code to identify problem areas.
      
      Reviewers: sdong, IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D59607
      efd013d6
  8. 12 7月, 2016 4 次提交
    • O
      Update Makefile to fix dependency · e6f68faf
      omegaga 提交于
      Summary: In D33849 we updated Makefile to generate .d files for all .cc sources. Since we have more types of source files now, this needs to be updated so that this mechanism can work for new files.
      
      Test Plan: change a dependent .h file, re-make and see if .o file is recompiled.
      
      Reviewers: sdong, andrewkr
      
      Reviewed By: andrewkr
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60591
      e6f68faf
    • A
      fix test failure · 816ae098
      Aaron Gao 提交于
      Summary: fix Rocksdb Unit Test USER_FAILURE
      
      Test Plan: make all check -j64
      
      Reviewers: sdong, andrewkr
      
      Reviewed By: andrewkr
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60603
      816ae098
    • A
      Fix Log() doc for default level · e295da12
      Andrew Kryczka 提交于
      Summary: as titled
      
      Test Plan: none
      
      Reviewers: sdong, lightmark
      
      Reviewed By: lightmark
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60507
      e295da12
    • A
      update DB::AddFile to ingest list of sst files · 8e6b38d8
      Aaron Gao 提交于
      Summary:
      DB::AddFile(std::string file_path) API that allow them to ingest an SST file created using SstFileWriter
      We want to update this interface to be able to accept a list of files that will be ingested, DB::AddFile(std::vector<std::string> file_path_list).
      
      Test Plan:
      Add test case `AddExternalSstFileList` in `DBSSTTest`. To make sure:
      1. files key ranges are not overlapping with each other
      2. each file key range dont overlap with the DB key range
      3. make sure no snapshots are held
      
      Reviewers: andrewkr, sdong, IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D58587
      8e6b38d8
  9. 09 7月, 2016 3 次提交
    • Y
      Fix clang analyzer errors · 296545a2
      Yi Wu 提交于
      Summary:
      Fixing erros reported by clang static analyzer.
      * Removing some unused variables.
      * Adding assertions to fix false positives reported by clang analyzer.
      * Adding `__clang_analyzer__` macro to suppress false positive warnings.
      
      Test Plan:
          USE_CLANG=1 OPT=-g make analyze -j64
      
      Reviewers: andrewkr, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60549
      296545a2
    • G
      Add release build to RocksDB per-diff/post-commit tests · 61dbfbb6
      Gunnar Kudrjavets 提交于
      Summary: To make sure that we'll have additional verification for release builds, define a new category and add `make release` to per-diff/post-commit tests. This should in theory prevent the release MyRocks integration builds breaks from happening.
      
      Test Plan:
      - `[p]arc diff --preview`
      - Observe the execution in Sandcastle and make sure that release build and tests are executed.
      
      Reviewers: sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D60441
      61dbfbb6
    • S
      Concurrent memtable inserter to update counters and flush state after all inserts · 907f24d0
      sdong 提交于
      Summary: In concurrent memtable insert case, updating counters in MemTable::Add() can count for 5% CPU usage. By batch all the counters and update in the end of the write batch, the CPU overheads are overhead in the use cases where more than one key is updated in one write batch.
      
      Test Plan:
      Write throughput increases 12% with this benchmark setting:
      
      TEST_TMPDIR=/dev/shm/ ./db_bench --benchmarks=fillrandom -disable_auto_compactions -level0_slowdown_writes_trigger=9999 -level0_stop_writes_trigger=9999 -num=10000000 --writes=1000000 -max_background_flushes=16 -max_write_buffer_number=16 --threads=64 --batch_size=128   -allow_concurrent_memtable_write -enable_write_thread_adaptive_yield
      
      Reviewers: andrewkr, IslamAbdelRahman, ngbronson, igor
      
      Reviewed By: ngbronson
      
      Subscribers: ngbronson, leveldb, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D60495
      907f24d0
  10. 08 7月, 2016 4 次提交
  11. 07 7月, 2016 4 次提交
  12. 06 7月, 2016 3 次提交
    • S
      Add options.write_buffer_manager: control total memtable size across DB instances · 32df9733
      sdong 提交于
      Summary: Add option write_buffer_manager to help users control total memory spent on memtables across multiple DB instances.
      
      Test Plan: Add a new unit test.
      
      Reviewers: yhchiang, IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: adela, benj, sumeet, muthu, leveldb, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D59925
      32df9733
    • A
      group multiple batch of flush into one manifest file (one call to LogAndApply) · 5aaef91d
      Aaron Gao 提交于
      Summary: Currently, if several flush outputs are committed together, we issue each manifest write per batch (1 batch = 1 flush = 1 sst file = 1+ continuous memtables). Each manifest write requires one fsync and one fsync to parent directory. In some cases, it becomes the bottleneck of write. We should batch them and write in one manifest write when possible.
      
      Test Plan:
      ` ./db_bench -benchmarks="fillseq" -max_write_buffer_number=16 -max_background_flushes=16 -disable_auto_compactions=true -min_write_buffer_number_to_merge=1 -write_buffer_size=65536 -level0_stop_writes_trigger=10000 -level0_slowdown_writes_trigger=10000`
      **Before**
      ```
      Initializing RocksDB Options from the specified file
      Initializing RocksDB Options from command-line flags
      RocksDB:    version 4.9
      Date:       Fri Jul  1 15:38:17 2016
      CPU:        32 * Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz
      CPUCache:   20480 KB
      Keys:       16 bytes each
      Values:     100 bytes each (50 bytes after compression)
      Entries:    1000000
      Prefix:    0 bytes
      Keys per prefix:    0
      RawSize:    110.6 MB (estimated)
      FileSize:   62.9 MB (estimated)
      Write rate: 0 bytes/second
      Compression: Snappy
      Memtablerep: skip_list
      Perf Level: 1
      WARNING: Assertions are enabled; benchmarks unnecessarily slow
      ------------------------------------------------
      Initializing RocksDB Options from the specified file
      Initializing RocksDB Options from command-line flags
      DB path: [/tmp/rocksdbtest-112628/dbbench]
      fillseq      :     166.277 micros/op 6014 ops/sec;    0.7 MB/s
      ```
      **After**
      ```
      Initializing RocksDB Options from the specified file
      Initializing RocksDB Options from command-line flags
      RocksDB:    version 4.9
      Date:       Fri Jul  1 15:35:05 2016
      CPU:        32 * Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz
      CPUCache:   20480 KB
      Keys:       16 bytes each
      Values:     100 bytes each (50 bytes after compression)
      Entries:    1000000
      Prefix:    0 bytes
      Keys per prefix:    0
      RawSize:    110.6 MB (estimated)
      FileSize:   62.9 MB (estimated)
      Write rate: 0 bytes/second
      Compression: Snappy
      Memtablerep: skip_list
      Perf Level: 1
      WARNING: Assertions are enabled; benchmarks unnecessarily slow
      ------------------------------------------------
      Initializing RocksDB Options from the specified file
      Initializing RocksDB Options from command-line flags
      DB path: [/tmp/rocksdbtest-112628/dbbench]
      fillseq      :      52.328 micros/op 19110 ops/sec;    2.1 MB/s
      ```
      
      Reviewers: andrewkr, IslamAbdelRahman, yhchiang, sdong
      
      Reviewed By: sdong
      
      Subscribers: igor, andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60075
      5aaef91d
    • O
      Fix a bug that accesses invalid address in iterator cleanup function · a45ee831
      omegaga 提交于
      Summary: Reported in T11889874. When registering the cleanup function we should copy the option so that we can still access it if ReadOptions is deleted.
      
      Test Plan: Add a unit test to reproduce this bug.
      
      Reviewers: sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D60087
      a45ee831
  13. 05 7月, 2016 2 次提交
  14. 02 7月, 2016 3 次提交
  15. 01 7月, 2016 4 次提交
    • A
      fix rate limiter to avoid starvation · cb2476a0
      Aaron Gao 提交于
      Summary:
      The current implementation of rate limiter has the possibility to introduce resource starvation when change its limit.
      This diff aims to fix this problem by consuming request bytes partially.
      
      Test Plan:
      ```
      ./rate_limiter_test
      [==========] Running 4 tests from 1 test case.
      [----------] Global test environment set-up.
      [----------] 4 tests from RateLimiterTest
      [ RUN      ] RateLimiterTest.OverflowRate
      [       OK ] RateLimiterTest.OverflowRate (0 ms)
      [ RUN      ] RateLimiterTest.StartStop
      [       OK ] RateLimiterTest.StartStop (0 ms)
      [ RUN      ] RateLimiterTest.Rate
      request size [1 - 1023], limit 10 KB/sec, actual rate: 10.355712 KB/sec, elapsed 2.00 seconds
      request size [1 - 1023], limit 20 KB/sec, actual rate: 19.136564 KB/sec, elapsed 2.00 seconds
      request size [1 - 2047], limit 20 KB/sec, actual rate: 20.783976 KB/sec, elapsed 2.10 seconds
      request size [1 - 2047], limit 40 KB/sec, actual rate: 39.308144 KB/sec, elapsed 2.10 seconds
      request size [1 - 4095], limit 40 KB/sec, actual rate: 40.318349 KB/sec, elapsed 2.20 seconds
      request size [1 - 4095], limit 80 KB/sec, actual rate: 79.667396 KB/sec, elapsed 2.20 seconds
      request size [1 - 8191], limit 80 KB/sec, actual rate: 81.807158 KB/sec, elapsed 2.30 seconds
      request size [1 - 8191], limit 160 KB/sec, actual rate: 160.659761 KB/sec, elapsed 2.20 seconds
      request size [1 - 16383], limit 160 KB/sec, actual rate: 160.700990 KB/sec, elapsed 3.00 seconds
      request size [1 - 16383], limit 320 KB/sec, actual rate: 317.639481 KB/sec, elapsed 2.50 seconds
      [       OK ] RateLimiterTest.Rate (22618 ms)
      [ RUN      ] RateLimiterTest.LimitChangeTest
      [COMPLETE] request size 10 KB, new limit 20KB/sec, refill period 1000 ms
      [COMPLETE] request size 10 KB, new limit 5KB/sec, refill period 1000 ms
      [COMPLETE] request size 20 KB, new limit 40KB/sec, refill period 1000 ms
      [COMPLETE] request size 20 KB, new limit 10KB/sec, refill period 1000 ms
      [COMPLETE] request size 40 KB, new limit 80KB/sec, refill period 1000 ms
      [COMPLETE] request size 40 KB, new limit 20KB/sec, refill period 1000 ms
      [COMPLETE] request size 80 KB, new limit 160KB/sec, refill period 1000 ms
      [COMPLETE] request size 80 KB, new limit 40KB/sec, refill period 1000 ms
      [COMPLETE] request size 160 KB, new limit 320KB/sec, refill period 1000 ms
      [COMPLETE] request size 160 KB, new limit 80KB/sec, refill period 1000 ms
      [       OK ] RateLimiterTest.LimitChangeTest (5002 ms)
      [----------] 4 tests from RateLimiterTest (27620 ms total)
      
      [----------] Global test environment tear-down
      [==========] 4 tests from 1 test case ran. (27621 ms total)
      [  PASSED  ] 4 tests.
      ```
      
      Reviewers: sdong, IslamAbdelRahman, yiwu, andrewkr
      
      Reviewed By: andrewkr
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60207
      cb2476a0
    • A
      Run env_basic_test on Env::Default · 6b716765
      Andrew Kryczka 提交于
      Summary:
      Previously we couldn't run env_basic_test on Env::Default (PosixEnv on
      our platforms) since GetChildren*() behavior was inconsistent with our other
      Envs. We can normalize the output of GetChildren*() such that these test cases
      work on PosixEnv too.
      
      Test Plan: ran env_basic_test
      
      Reviewers: wanning
      
      Reviewed By: wanning
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D59943
      6b716765
    • A
      Move env_basic_test cleanup to TearDown · 9eb0b539
      Andrew Kryczka 提交于
      Summary:
      move cleanup to TearDown and handle directories, so cleanup will happen
      even if a test fails in the middle.
      
      Test Plan: ./env_basic_test
      
      Reviewers: wanning
      
      Reviewed By: wanning
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D60243
      9eb0b539
    • I
      Re-enable linux on travis · 1fe3bf82
      Islam AbdelRahman 提交于
      Summary: Travis clang issue on linux is fixed now, re-enable linux on travis
      
      Test Plan: https://travis-ci.org/facebook/rocksdb/builds/141098948
      
      Reviewers: yiwu, sdong, yhchiang, andrewkr
      
      Reviewed By: andrewkr
      
      Subscribers: andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D60189
      1fe3bf82