1. 02 10月, 2020 3 次提交
    • L
      Reduce the number of iterations in DBTest.FileCreationRandomFailure (#7481) · 786c1a2c
      Levi Tamasi 提交于
      Summary:
      `DBTest.FileCreationRandomFailure` frequently times out during our
      continuous test runs. (It's a case of "stress test posing as unit test.")
      The patch reduces the number of iterations to avoid this. Note that
      the lower numbers are still sufficient to trigger both flushes and
      compactions, so test coverage is still the same.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7481
      
      Test Plan: `make check`
      
      Reviewed By: riversand963
      
      Differential Revision: D24034712
      
      Pulled By: ltamasi
      
      fbshipit-source-id: 8731a9446e5a121a1041b00f0df473b9f714935a
      786c1a2c
    • S
      Introduce options.check_flush_compaction_key_order (#7467) · 75081755
      sdong 提交于
      Summary:
      Introduce an new option options.check_flush_compaction_key_order, by default set to true, which checks key order of flush and compaction, and fail the operation if the order is violated.
      Also did minor refactor hash checking code, which consolidates the hashing logic to a vlidation class, where the key ordering logic is added.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7467
      
      Test Plan: Add unit tests to validate the check can catch reordering in flush and compaction, and can be properly disabled.
      
      Reviewed By: riversand963
      
      Differential Revision: D24010683
      
      fbshipit-source-id: 8dd6292d2cda8006054e9ded7cfa4bf405f0527c
      75081755
    • K
      Fix MSVC-related build issues (#7439) · 3e745053
      Koby Kahane 提交于
      Summary:
      This PR addresses some build and functional issues on MSVC targets, as a step towards an eventual goal of having RocksDB build successfully for Windows on ARM64.
      
      Addressed issues include:
      - BitsSetToOne and CountTrailingZeroBits do not compile on non-x64 MSVC targets. A fallback implementation of BitsSetToOne when Intel intrinsics are not available is added, based on the C++20 `<bit>` popcount implementation in Microsoft's STL.
      - The implementation of FloorLog2 for MSVC targets (including x64) gives incorrect results. The unit test easily detects this, but CircleCI is currently configured to only run a specific set of tests for Windows CMake builds, so this seems to have been unnoticed.
      - AsmVolatilePause does not use YieldProcessor on Windows ARM64 targets, even though it is available.
      - When CondVar::TimedWait calls Microsoft STL's condition_variable::wait_for, it can potentially trigger a bug (just recently fixed in the upcoming VS 16.8's STL) that deadlocks various tests that wait for a timer to execute, since `Timer::Run` doesn't get a chance to execute before being blocked by the test function acquiring the mutex.
      - In c_test, `GetTempDir` assumes a POSIX-style temp path.
      - `NormalizePath` did not eliminate consecutive POSIX-style path separators on Windows, resulting in test failures in e.g., wal_manager_test.
      - Various other test failures.
      
      In a followup PR I hope to modify CircleCI's config.yml to invoke all RocksDB unit tests in Windows CMake builds with CTest, instead of the current use of `run_ci_db_test.ps1` which requires individual tests to be specified and is missing many of the existing tests.
      
      Notes from peterd: FloorLog2 is not yet used in production code (it's for something in progress). I also added a few more inexpensive platform-dependent tests to Windows CircleCI runs. And included facebook/folly#1461 as requested
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7439
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D24021563
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 0ec2027c0d6a494d8a0fe38d9667fc2f7e29f7e7
      3e745053
  2. 01 10月, 2020 10 次提交
  3. 30 9月, 2020 8 次提交
  4. 29 9月, 2020 7 次提交
  5. 26 9月, 2020 7 次提交
    • Y
      Re-add extra compiler flags when building unittests (#7437) · 8f826403
      Yanqin Jin 提交于
      Summary:
      Re-add extra_compiler_flags when building unit tests for fbcode.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7437
      
      Test Plan: Integrate with buck and run internal tests.
      
      Reviewed By: pdillinger
      
      Differential Revision: D23943924
      
      Pulled By: riversand963
      
      fbshipit-source-id: b92b7ad003e06e0860c45efc5f7f9684233d0c55
      8f826403
    • J
      Fix TSAN build and re-enable the tests (#7386) · fa92b9dc
      Jay Zhuang 提交于
      Summary:
      Resolve TSAN build warnings and re-enable disabled TSAN tests.
      
      Not sure if it's a compiler issue or TSAN check issue. Switching from
      conditional operator to if-else mitigated the problem.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7386
      
      Test Plan:
      run TSAN check 10 times in circleci.
      
      ```
      WARNING: ThreadSanitizer: data race (pid=27735)
        Atomic write of size 8 at 0x7b54000005e8 by thread T32:
          #0 __tsan_atomic64_store <null> (db_test+0x4cee95)
          https://github.com/facebook/rocksdb/issues/1 std::__atomic_base<unsigned long>::store(unsigned long, std::memory_order) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/atomic_base.h:374:2 (db_test+0x78460e)
          https://github.com/facebook/rocksdb/issues/2 rocksdb::VersionSet::SetLastSequence(unsigned long) /home/circleci/project/./db/version_set.h:1058:20 (db_test+0x78460e)
      ...
        Previous read of size 8 at 0x7b54000005e8 by thread T31:
          #0 bool rocksdb::DBImpl::MultiCFSnapshot<std::unordered_map<unsigned int, rocksdb::DBImpl::MultiGetColumnFamilyData, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, rocksdb::DBImpl::MultiGetColumnFamilyData> > > >(rocksdb::ReadOptions const&, rocksdb::ReadCallback*, std::function<rocksdb::DBImpl::MultiGetColumnFamilyData* (std::unordered_map<unsigned int, rocksdb::DBImpl::MultiGetColumnFamilyData, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, rocksdb::DBImpl::MultiGetColumnFamilyData> > >::iterator&)>&, std::unordered_map<unsigned int, rocksdb::DBImpl::MultiGetColumnFamilyData, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, rocksdb::DBImpl::MultiGetColumnFamilyData> > >*, unsigned long*) /home/circleci/project/db/db_impl/db_impl.cc (db_test+0x715087)
      ```
      
      Reviewed By: ltamasi
      
      Differential Revision: D23725226
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: a6d662a5ea68111246cd32ec95f3411a25f76bc6
      fa92b9dc
    • P
      EnableFileDeletions only read field while holding mutex (#7435) · c8a12aa9
      Peter Dillinger 提交于
      Summary:
      Possible fix for a TSAN issue reported in EnableFileDeletions.
      disable_delete_obsolete_files_ should only be accessed holding the db
      mutex, but for logging it was being accessed outside holding the mutex,
      now fixed.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7435
      
      Test Plan: existing tests, watch for recurrence
      
      Reviewed By: ltamasi
      
      Differential Revision: D23917578
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 8573025bca3f6fe169b24b87bbfc4ce9667b0482
      c8a12aa9
    • C
      Track WAL in MANIFEST: add method to check WAL consistency (#7236) · 1a24f4d1
      Cheng Chang 提交于
      Summary:
      Add a method `CheckWals` in `WalSet` to check the logs on disk. See `CheckWals`'s comments.
      This method will be used to check consistency of WALs during DB recovery.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7236
      
      Test Plan: a set of tests are added to wal_edit_test.cc.
      
      Reviewed By: riversand963
      
      Differential Revision: D23036505
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: 5b1d6857ac173429b00f950c32c4a5b8d063a732
      1a24f4d1
    • J
      MultiGet() with timestamp should respect snapshot (#7404) · 8c9fff91
      Jay Zhuang 提交于
      Summary:
      Similar to PR https://github.com/facebook/rocksdb/issues/7227, add read callback to filter out rows with with
      higher sequence number.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7404
      
      Reviewed By: riversand963
      
      Differential Revision: D23790762
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: bce854307612f1a22f985ffc934da627d0a139c2
      8c9fff91
    • J
      Add ASSERT_STATUS_CHECKED flag support (#7332) · c5b3128f
      Jay Zhuang 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/7332
      
      Test Plan: `cmake .. -DASSERT_STATUS_CHECKED=1`, then run tests
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D23437128
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: 66fce57ae5d126e7a8b91c16a73c81438cf3b65e
      c5b3128f
    • L
      Introduce a helper method UncompressData (#7434) · 30fb9dd5
      Levi Tamasi 提交于
      Summary:
      The patch introduces a helper method in `util/compression.h` called `UncompressData`
      that dispatches calls to the correct uncompression method based on type, and changes
      `UncompressBlockContentsForCompressionType` and `Benchmark::Uncompress` in
      `db_bench` so they are implemented in terms of the new method. This eliminates
      some code duplication. (`Benchmark::Compress` is also updated to use the previously
      introduced `CompressData` helper.)
      
      In addition, the patch brings the implementation of `Snappy_Uncompress` into sync with
      the other uncompression methods by making the method compute the buffer size and allocate
      the buffer itself. Finally, the patch eliminates some potentially risky back-and-forth conversions
      between various unsigned and signed integer types by exposing the size of the allocated buffer
      as a `size_t` instead of an `int`.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7434
      
      Test Plan:
      `make check`
      `./db_bench -benchmarks=compress,uncompress --compression_type ...`
      
      Reviewed By: riversand963
      
      Differential Revision: D23900011
      
      Pulled By: ltamasi
      
      fbshipit-source-id: b25df63ceec4639889be94acb22eb53e530c54e0
      30fb9dd5
  6. 25 9月, 2020 1 次提交
  7. 24 9月, 2020 4 次提交
    • Z
      Add AppendWithVerify and PositionedAppendWithVerify to Env and FileSystem (#7419) · 0ce9b3a2
      Zhichao Cao 提交于
      Summary:
      Add new AppendWithVerify and PositionedAppendWithVerify APIs to Env and FileSystem to bring the data verification information (data checksum information) from upper layer (e.g., WritableFileWriter) to the storage layer. This PR only include the API definition, no functional codes are added to unblock other developers which depend on these APIs.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7419
      
      Test Plan: make -j32
      
      Reviewed By: pdillinger
      
      Differential Revision: D23883196
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: 94676c26bc56144cc32e3661f84f21eccd790411
      0ce9b3a2
    • A
      Add IO Tracer Parser (#7333) · 98ac6b64
      Akanksha Mahajan 提交于
      Summary:
      Implement a parsing tool io_tracer_parser that takes IO trace file (binary file) with command line argument --io_trace_file and output file with --output_file and dumps the IO trace records in outputfile in human readable form.
      
      Also added unit test cases that generates IO trace records and calls io_tracer_parse to parse those records.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7333
      
      Test Plan:
      make check -j64,
       Add unit test cases.
      
      Reviewed By: anand1976
      
      Differential Revision: D23772360
      
      Pulled By: akankshamahajan15
      
      fbshipit-source-id: 9c20519c189362e6663352d08863326f3e496271
      98ac6b64
    • P
      Add and fix clang -Wshift-sign-overflow (#7431) · 31d1cea4
      Peter Dillinger 提交于
      Summary:
      This option is apparently used by some teams within Facebook
      (internal ref T75998621)
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7431
      
      Test Plan: USE_CLANG=1 make check before (fails) and after
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D23876584
      
      Pulled By: pdillinger
      
      fbshipit-source-id: abb8b67a1f1aac75327944d266e284b2b6727191
      31d1cea4
    • A
      Fix scope of `ReadOptions` in `SstFileReader` (#7432) · 0698598f
      Andrew Kryczka 提交于
      Summary:
      a4a4a2da changed the contract of `TableReader::NewIterator()` to require
      `ReadOptions` outlive the returned iterator. But I didn't notice that
      `SstFileReader` violates the new contract and needs to be adapted. The unit test
      provided here exposes the problem when run under ASAN.
      
      ```
      $ ./sst_file_reader_test --gtest_filter=SstFileReaderTest.ReadOptionsOutOfScope
      Note: Google Test filter = SstFileReaderTest.ReadOptionsOutOfScope
      [==========] Running 1 test from 1 test case.
      [----------] Global test environment set-up.
      [----------] 1 test from SstFileReaderTest
      [ RUN      ] SstFileReaderTest.ReadOptionsOutOfScope
      =================================================================
      ==3238048==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7ffd6189e158 at pc 0x000001298350 bp 0x7ffd6189c280 sp 0x7ffd6189c278
      READ of size 8 at 0x7ffd6189e158 thread T0
          #0 0x129834f in rocksdb::BlockBasedTableIterator::InitDataBlock() table/block_based/block_based_table_iterator.cc:236
          https://github.com/facebook/rocksdb/issues/1 0x12b01f7 in rocksdb::BlockBasedTableIterator::SeekImpl(rocksdb::Slice const*) table/block_based/block_based_table_iterator.cc:77
          https://github.com/facebook/rocksdb/issues/2 0x844d28 in rocksdb::IteratorWrapperBase<rocksdb::Slice>::SeekToFirst() table/iterator_wrapper.h:116
          https://github.com/facebook/rocksdb/issues/3 0x844d28 in rocksdb::DBIter::SeekToFirst() db/db_iter.cc:1352
          https://github.com/facebook/rocksdb/issues/4 0x52482b in rocksdb::SstFileReaderTest_ReadOptionsOutOfScope_Test::TestBody() table/sst_file_reader_test.cc:150
          https://github.com/facebook/rocksdb/issues/5 0x5f433c in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:3899
          https://github.com/facebook/rocksdb/issues/6 0x5f433c in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:3935
          https://github.com/facebook/rocksdb/issues/7 0x5cc2de in testing::Test::Run() third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:3973
          https://github.com/facebook/rocksdb/issues/8 0x5cc988 in testing::Test::Run() third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:3965
          https://github.com/facebook/rocksdb/issues/9 0x5cc988 in testing::TestInfo::Run() third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:4149
          https://github.com/facebook/rocksdb/issues/10 0x5cce9a in testing::TestInfo::Run() third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:4124
          https://github.com/facebook/rocksdb/issues/11 0x5cce9a in testing::TestCase::Run() third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:4267
          https://github.com/facebook/rocksdb/issues/12 0x5ce696 in testing::TestCase::Run() third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:4253
          https://github.com/facebook/rocksdb/issues/13 0x5ce696 in testing::internal::UnitTestImpl::RunAllTests() third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:6633
          https://github.com/facebook/rocksdb/issues/14 0x5f541c in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:3899
          https://github.com/facebook/rocksdb/issues/15 0x5f541c in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:3935
          https://github.com/facebook/rocksdb/issues/16 0x5cee74 in testing::UnitTest::Run() third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc:6242
          https://github.com/facebook/rocksdb/issues/17 0x4c0332 in RUN_ALL_TESTS() third-party/gtest-1.8.1/fused-src/gtest/gtest.h:22104
          https://github.com/facebook/rocksdb/issues/18 0x4c0332 in main table/sst_file_reader_test.cc:213
          https://github.com/facebook/rocksdb/issues/19 0x7fb0263281a5 in __libc_start_main (/usr/local/fbcode/platform007/lib/libc.so.6+0x211a5)
          https://github.com/facebook/rocksdb/issues/20 0x523e56  (/data/users/andrewkr/rocksdb/sst_file_reader_test+0x523e56)
      
      Address 0x7ffd6189e158 is located in stack of thread T0 at offset 568 in frame
          #0 0x52428f in rocksdb::SstFileReaderTest_ReadOptionsOutOfScope_Test::TestBody() table/sst_file_reader_test.cc:131
      
        This frame has 9 object(s):
          [32, 40) 'reader'
          [96, 104) '<unknown>'
          [160, 168) '<unknown>'
          [224, 232) 'iter'
          [288, 304) 'gtest_ar'
          [352, 368) '<unknown>'
          [416, 440) 'keys'
          [480, 512) '<unknown>'
          [544, 680) 'ropts' <== Memory access at offset 568 is inside this variable
      HINT: this may be a false positive if your program uses some custom stack unwind mechanism or swapcontext
            (longjmp and C++ exceptions *are* supported)
       AddressSanitizer: stack-use-after-scope table/block_based/block_based_table_iterator.cc:236 in rocksdb::BlockBasedTableIterator::InitDataBlock()
      ...
      ```
      
      The fix is to use `ArenaWrappedDBIter` which has support for holding a
      `ReadOptions` in an `Arena` whose lifetime is tied to the iterator.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7432
      
      Test Plan: verified the provided unit test no longer fails
      
      Reviewed By: pdillinger
      
      Differential Revision: D23880043
      
      Pulled By: ajkr
      
      fbshipit-source-id: 9464c37408f7bd7c9c4a90ceffb04d9f0ca7a494
      0698598f