1. 16 10月, 2021 1 次提交
    • M
      SyncPoint::Process thrashes heap ... fix it (#9023) · 678ba5e4
      matthewvon 提交于
      Summary:
      The first parameter of SyncPoint::Process is "const std::string&".  The majority, maybe all, of the actual calls to this function use a "const char *".  The conversion before entering the function requires a construction of a std::string object on the heap.  This std::object is then typically not needed because first use of the string is a rocksdb::Slice which has a less costly conversion of char * to slice.
      
      Example:
      
      We have a load and iterate test.  The test loads 10m keys and iterates most via 10 rocksdb::Iterator objects.  We used TCMALLOC to gather information about allocation and space usage during iterators.
      
      - Before this PR:  test took 32 min 17 sec
      - After this PR:  test took 1 min 14 sec
      
      The TCMALLOC top object list before this PR:
      
      <pre>
      Total: 5105999 objects
       5003717  98.0%  98.0%  5009471  98.1% rocksdb::DBIter::MergeValuesNewToOld (inline)
         20260   0.4%  98.4%    20260   0.4% std::__cxx11::basic_string::_M_mutate
         15214   0.3%  98.7%    15214   0.3% rocksdb::UncompressBlockContentsForCompressionType (inline)
         13408   0.3%  99.0%    13408   0.3% std::_Rb_tree::_M_emplace_hint_unique [clone .constprop.416] (inline)
         12957   0.3%  99.2%    12957   0.3% std::_Rb_tree::_M_emplace_hint_unique [clone .constprop.405] (inline)
          9327   0.2%  99.4%     9327   0.2% std::_Rb_tree::_M_copy (inline)
          7691   0.2%  99.5%     9919   0.2% JVM_FindSignal
          2859   0.1%  99.6%     2859   0.1% rocksdb::Cleanable::RegisterCleanup
          2844   0.1%  99.7%     2844   0.1% std::map::operator[] (inline)
      </pre>
      
      The "MergeValuesNewToOld (inline)" objects are the #define wrappers to SyncPoint::Process.  We discovered this in a 5.18 rocksdb release.  There TCMALLOC was more specific that std::basic_string was being constructed.  I believe that was before SyncPoint::Process was declared inline in subsequent releases.
      
      The TCMALLOC top object list after this PR:
      
      <pre>
      Total: 104911 objects
         45090  43.0%  43.0%    45090  43.0% rocksdb::Cleanable::RegisterCleanup
         29995  28.6%  71.6%    29995  28.6% rocksdb::LRUCacheShard::Insert
         15229  14.5%  86.1%    15229  14.5% rocksdb::UncompressBlockContentsForCompressionType (inline)
          4373   4.2%  90.3%     4551   4.3% JVM_FindSignal
          2881   2.7%  93.0%     2881   2.7% rocksdb::::ReadBlockFromFile (inline)
          1162   1.1%  94.1%     1176   1.1% rocksdb::BlockFetcher::ReadBlockContents (inline)
          1036   1.0%  95.1%     1036   1.0% std::__cxx11::basic_string::_M_mutate
           869   0.8%  95.9%      869   0.8% std::vector::_M_realloc_insert (inline)
           806   0.8%  96.7%      806   0.8% SnmpAgent::GetVariables (inline)
      </pre>
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/9023
      
      Reviewed By: pdillinger
      
      Differential Revision: D31610907
      
      Pulled By: mrambacher
      
      fbshipit-source-id: 574ff51b639dd46ad253a8e664a575f06b7cc85d
      678ba5e4
  2. 06 5月, 2021 1 次提交
    • S
      Refactor kill point (#8241) · e19908cb
      sdong 提交于
      Summary:
      Refactor kill point to one single class, rather than several extern variables. The intention was to drop unflushed data before killing to simulate some job, and I tried to a pointer to fault ingestion fs to the killing class, but it ended up with harder than I thought. Perhaps we'll need to do this in another way. But I thought the refactoring itself is good so I send it out.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8241
      
      Test Plan: make release and run crash test for a while.
      
      Reviewed By: anand1976
      
      Differential Revision: D28078486
      
      fbshipit-source-id: f9182c1455f52e6851c13f88a21bade63bcec45f
      e19908cb
  3. 10 7月, 2020 1 次提交
    • M
      More Makefile Cleanup (#7097) · c7c7b07f
      mrambacher 提交于
      Summary:
      Cleans up some of the dependencies on test code in the Makefile while building tools:
      - Moves the test::RandomString, DBBaseTest::RandomString into Random
      - Moves the test::RandomHumanReadableString into Random
      - Moves the DestroyDir method into file_utils
      - Moves the SetupSyncPointsToMockDirectIO into sync_point.
      - Moves the FaultInjection Env and FS classes under env
      
      These changes allow all of the tools to build without dependencies on test_util, thereby simplifying the build dependencies.  By moving the FaultInjection code, the dependency in db_stress on different libraries for debug vs release was eliminated.
      
      Tested both release and debug builds via Make and CMake for both static and shared libraries.
      
      More work remains to clean up how the tools are built and remove some unnecessary dependencies.  There is also more work that should be done to get the Makefile and CMake to align in their builds -- what is in the libraries and the sizes of the executables are different.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7097
      
      Reviewed By: riversand963
      
      Differential Revision: D22463160
      
      Pulled By: pdillinger
      
      fbshipit-source-id: e19462b53324ab3f0b7c72459dbc73165cc382b2
      c7c7b07f
  4. 20 6月, 2020 1 次提交
  5. 03 6月, 2020 1 次提交
    • S
      Reduce dependency on gtest dependency in release code (#6907) · 298b00a3
      sdong 提交于
      Summary:
      Release code now depends on gtest, indirectly through including "test_util/testharness.h". This creates multiple problems. One important reason is the definition of IGNORE_STATUS_IF_ERROR() in test_util/testharness.h. Move it to sync_point.h instead.
      Note that utilities/cassandra/format.h still depends on "test_util/testharness.h". This will be resolved in a separate diff.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6907
      
      Test Plan: Run all existing tests.
      
      Reviewed By: ajkr
      
      Differential Revision: D21829884
      
      fbshipit-source-id: 9253c19ffde2936f3ae68998210f8e54f645a6e6
      298b00a3
  6. 24 4月, 2020 1 次提交
  7. 21 2月, 2020 1 次提交
    • S
      Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) · fdf882de
      sdong 提交于
      Summary:
      When dynamically linking two binaries together, different builds of RocksDB from two sources might cause errors. To provide a tool for user to solve the problem, the RocksDB namespace is changed to a flag which can be overridden in build time.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6433
      
      Test Plan: Build release, all and jtest. Try to build with ROCKSDB_NAMESPACE with another flag.
      
      Differential Revision: D19977691
      
      fbshipit-source-id: aa7f2d0972e1c31d75339ac48478f34f6cfcfb3e
      fdf882de
  8. 31 5月, 2019 1 次提交
  9. 05 6月, 2018 1 次提交
  10. 24 3月, 2018 1 次提交
  11. 09 3月, 2018 1 次提交
  12. 03 2月, 2018 1 次提交
  13. 01 9月, 2017 1 次提交
  14. 16 7月, 2017 1 次提交
  15. 23 5月, 2017 1 次提交
  16. 28 4月, 2017 1 次提交
  17. 17 12月, 2016 1 次提交
    • D
      gcc-7 requires include <functional> for std::function · 816c1e30
      Daniel Black 提交于
      Summary:
      Fixes compile error:
      
      In file included from ./util/statistics.h:17:0,
                       from ./util/stop_watch.h:8,
                       from ./util/perf_step_timer.h:9,
                       from ./util/iostats_context_imp.h:8,
                       from ./util/posix_logger.h:27,
                       from ./port/util_logger.h:18,
                       from ./db/auto_roll_logger.h:15,
                       from db/auto_roll_logger.cc:6:
      ./util/thread_local.h:65:16: error: 'function' in namespace 'std' does not name a template type
         typedef std::function<void(void*, void*)> FoldFunc;
      Closes https://github.com/facebook/rocksdb/pull/1656
      
      Differential Revision: D4318702
      
      Pulled By: yiwu-arbug
      
      fbshipit-source-id: 8c5d17a
      816c1e30
  18. 08 7月, 2016 1 次提交
  19. 10 2月, 2016 1 次提交
  20. 11 12月, 2015 1 次提交
  21. 16 10月, 2015 1 次提交
    • S
      Allow users to disable some kill points in db_stress · e1a5ff85
      sdong 提交于
      Summary:
      Give a name for every kill point, and allow users to disable some kill points based on prefixes. The kill points can be passed by db_stress through a command line paramter. This provides a way for users to boost the chance of triggering low frequency kill points
      This allow follow up changes in crash test scripts to improve crash test coverage.
      
      Test Plan:
      Manually run db_stress with variable values of --kill_random_test and --kill_prefix_blacklist. Like this:
       --kill_random_test=2 --kill_prefix_blacklist=Posix,WritableFileWriter::Append,WritableFileWriter::WriteBuffered,WritableFileWriter::Sync
      
      Reviewers: igor, kradhakrishnan, rven, IslamAbdelRahman, yhchiang
      
      Reviewed By: yhchiang
      
      Subscribers: leveldb, dhruba
      
      Differential Revision: https://reviews.facebook.net/D48735
      e1a5ff85
  22. 18 7月, 2015 1 次提交
    • S
      Move rate_limiter, write buffering, most perf context instrumentation and most... · 6e9fbeb2
      sdong 提交于
      Move rate_limiter, write buffering, most perf context instrumentation and most random kill out of Env
      
      Summary: We want to keep Env a think layer for better portability. Less platform dependent codes should be moved out of Env. In this patch, I create a wrapper of file readers and writers, and put rate limiting, write buffering, as well as most perf context instrumentation and random kill out of Env. It will make it easier to maintain multiple Env in the future.
      
      Test Plan: Run all existing unit tests.
      
      Reviewers: anthony, kradhakrishnan, IslamAbdelRahman, yhchiang, igor
      
      Reviewed By: igor
      
      Subscribers: leveldb, dhruba
      
      Differential Revision: https://reviews.facebook.net/D42321
      6e9fbeb2
  23. 15 4月, 2015 1 次提交
    • S
      SyncPoint to allow a callback with an argument and use it to get... · fcb206b6
      sdong 提交于
      SyncPoint to allow a callback with an argument and use it to get DBTest.DynamicLevelCompressionPerLevel2 more straight-forward
      
      Summary:
      Allow users to give a callback function with parameter using sync point, so more complicated verification can be done in tests.
      Use it in DBTest.DynamicLevelCompressionPerLevel2 so that failures will be more easy to debug.
      
      Test Plan: Run all tests. Run DBTest.DynamicLevelCompressionPerLevel2 with valgrind check.
      
      Reviewers: rven, yhchiang, anthony, kradhakrishnan, igor
      
      Reviewed By: igor
      
      Subscribers: leveldb, dhruba
      
      Differential Revision: https://reviews.facebook.net/D36999
      fcb206b6
  24. 03 3月, 2015 1 次提交
    • I
      options.level_compaction_dynamic_level_bytes to allow RocksDB to pick size... · db037393
      Igor Canadi 提交于
      options.level_compaction_dynamic_level_bytes to allow RocksDB to pick size bases of levels dynamically.
      
      Summary:
      When having fixed max_bytes_for_level_base, the ratio of size of largest level and the second one can range from 0 to the multiplier. This makes LSM tree frequently irregular and unpredictable. It can also cause poor space amplification in some cases.
      
      In this improvement (proposed by Igor Kabiljo), we introduce a parameter option.level_compaction_use_dynamic_max_bytes. When turning it on, RocksDB is free to pick a level base in the range of (options.max_bytes_for_level_base/options.max_bytes_for_level_multiplier, options.max_bytes_for_level_base] so that real level ratios are close to options.max_bytes_for_level_multiplier.
      
      Test Plan: New unit tests and pass tests suites including valgrind.
      
      Reviewers: MarkCallaghan, rven, yhchiang, igor, ikabiljo
      
      Reviewed By: ikabiljo
      
      Subscribers: yoshinorim, ikabiljo, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D31437
      db037393
  25. 18 4月, 2014 2 次提交
  26. 03 4月, 2014 1 次提交
    • H
      [RocksDB] Fix a race condition in GetSortedWalFiles · 48bc0c6a
      Haobo Xu 提交于
      Summary: This patch fixed a race condition where a log file is moved to archived dir in the middle of GetSortedWalFiles. Without the fix, the log file would be missed in the result, which leads to transaction log iterator gap. A test utility SyncPoint is added to help reproducing the race condition.
      
      Test Plan: TransactionLogIteratorRace; make check
      
      Reviewers: dhruba, ljin
      
      Reviewed By: dhruba
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D17121
      48bc0c6a