1. 14 7月, 2020 3 次提交
    • A
      Add FileSystem wrapper classes for IO tracing. (#7002) · d93bd3ce
      Akanksha Mahajan 提交于
      Summary:
      1. Add the wrapper classes FileSystemTracingWrapper, FSSequentialFileTracingWrapper, FSRandomAccessFileTracingWrapper, FSWritableFileTracingWrapper, FSRandomRWFileTracingWrapper that forward the calls to underlying storage system and then pass the file operation information to IOTracer. IOTracer dumps the record in binary format for tracing.
      2. Add the wrapper classes FileSystemPtr, FSSequentialFilePtr, FSRandomAccessFilePtr, FSWritableFilePtr and FSRandomRWFilePtr that overload operator-> and return ptr to underlying storage system or Tracing wrapper class based on enabling/disabling of IO tracing. These classes are added to bypass Tracing Wrapper classes when we disable tracing.
      3. Add enums in trace.h that distinguish which options need to be added for different file operations(Read, close, write etc) as part of tracing record.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7002
      
      Test Plan: make check -j64
      
      Reviewed By: anand1976
      
      Differential Revision: D22127897
      
      Pulled By: akankshamahajan15
      
      fbshipit-source-id: 74cff58ce5661c9a3832dfaa52483f3b2d8565e0
      d93bd3ce
    • J
      Add circleci java build (#7119) · 0ff752cf
      Jay Zhuang 提交于
      Summary:
      Add circleci java build workflow.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7119
      
      Reviewed By: siying
      
      Differential Revision: D22512426
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: 45a7445c861fee48017bae42cdb7172c8b091475
      0ff752cf
    • S
      Add CLANG analyze to CircleCI (#7114) · 43cc622d
      sdong 提交于
      Summary:
      CLANG analyze is useful before pull request. Add it.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7114
      
      Test Plan: Watch the CI results to succeed.
      
      Reviewed By: riversand963
      
      Differential Revision: D22491942
      
      fbshipit-source-id: 9ccad91c6142fedc3d3dd491cf55054827908f36
      43cc622d
  2. 11 7月, 2020 5 次提交
  3. 10 7月, 2020 5 次提交
    • Z
      Fix status message size assert (#7045) · a9a97386
      Zhichao Cao 提交于
      Summary:
      In status.cc, the assert is `assert(sizeof(msgs) > index)`; msgs is a const char* array, sizeof(msgs) is the array size*char* size, which will make the assert pass all the time. Change it to sizeof(msgs)/sizeof(char*) > index.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7045
      
      Test Plan: pass make check
      
      Reviewed By: cheng-chang
      
      Differential Revision: D22291337
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: 4ba8ebbb8da80ace7ca6adcdb0c66726f993659d
      a9a97386
    • 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
    • A
      save key comparisons in BlockIter::BinarySeek (#7068) · 82611ee2
      Andrew Kryczka 提交于
      Summary:
      This is a followup to https://github.com/facebook/rocksdb/issues/6646. In that PR, for simplicity I just appended a comparison against the 0th restart key in case `BinarySeek()`'s binary search landed at index 0. As a result there were `2/(N+1) + log_2(N)` key comparisons. This PR does it differently. Now we expand the binary search range by one so it also covers the case where target is at or before the restart key at index 0. As a result, it involves `log_2(N+1)` key comparisons.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7068
      
      Test Plan:
      ran readrandom with mostly default settings and counted key comparisons
      using `PerfContext`.
      
      before: `user_key_comparison_count = 28881965`
      after: `user_key_comparison_count = 27823245`
      
      setup command:
      
      ```
      $ TEST_TMPDIR=/dev/shm/dbbench ./db_bench -benchmarks=fillrandom,compact -write_buffer_size=1048576 -target_file_size_base=1048576 -max_bytes_for_level_base=4194304 -max_background_jobs=12 -level_compaction_dynamic_level_bytes=true -num=10000000
      ```
      
      benchmark command:
      
      ```
      $ TEST_TMPDIR=/dev/shm/dbbench/ ./db_bench -use_existing_db=true -benchmarks=readrandom -disable_auto_compactions=true -num=10000000 -compression_type=none -reads=1000000 -perf_level=3
      ```
      
      Reviewed By: anand1976
      
      Differential Revision: D22357032
      
      Pulled By: ajkr
      
      fbshipit-source-id: 8b01e9c1c2a4e9d02fc9dfe16c1cc0327f8bdf24
      82611ee2
    • Y
      Parameterize a few tests in DBWALTest (#7105) · f70ad031
      Yanqin Jin 提交于
      Summary:
      As title. The goal is to shorten the execution time of several tests
      when they are combined together in a single TEST_F.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7105
      
      Test Plan:
      make db_wal_test
      ./db_wal_test
      
      Reviewed By: ltamasi
      
      Differential Revision: D22442705
      
      Pulled By: riversand963
      
      fbshipit-source-id: 0ad49b8f21fa86dcd5a4d3c9a06af313735ac217
      f70ad031
    • Y
      Running ./ldb without any extra arg print usage (#7107) · 842bd274
      Yanqin Jin 提交于
      Summary:
      as title.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7107
      
      Test Plan: make ldb && ./ldb
      
      Reviewed By: pdillinger
      
      Differential Revision: D22451399
      
      Pulled By: riversand963
      
      fbshipit-source-id: 797645e06473bb9cf139c533877e5161281515e8
      842bd274
  4. 09 7月, 2020 7 次提交
    • Z
      Fix GetFileDbIdentities (#7104) · b35a2f91
      Zitan Chen 提交于
      Summary:
      Although PR https://github.com/facebook/rocksdb/issues/7032 fixes the construction of the `SstFileDumper` in `GetFileDbIdentities` by setting a proper `Env` of the `Options` passed in the constructor, the file path was not corrected accordingly. This actually disables backup engine to use db session ids in the file names since the `db_session_id` is always empty.
      
      Now it is fixed by setting the correct path in the construction of `SstFileDumper`. Furthermore, to preserve the Direct IO property that backup engine already has, parameter `EnvOptions` is added to `GetFileDbIdentities` and `SstFileDumper`.
      
      The `BackupUsingDirectIO` test is updated accordingly.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7104
      
      Test Plan: backupable_db_test and some manual tests.
      
      Reviewed By: ajkr
      
      Differential Revision: D22443245
      
      Pulled By: gg814
      
      fbshipit-source-id: 056a9bb8b82947c5e73d7c3fbb62bfe23af5e562
      b35a2f91
    • A
      Update Flush policy in PartitionedIndexBuilder on switching from user-key to... · 54f171fe
      Akanksha Mahajan 提交于
      Update Flush policy in PartitionedIndexBuilder on switching from user-key to internal-key mode (#7096)
      
      Summary:
      When format_version is high enough to support user-key and
      there are index entries for same user key that spans multiple data
      blocks then it changes from user-key mode to internal-key mode. But the
      flush policy is not reset to point to Block Builder of internal-keys.
      After this switch, no entries are added to user key index partition
      result, thus it never triggers flushing the block.
      
      Fix: 1. After adding the entry in sub_builder_index_, if there is a switch
      from user-key to internal-key, then flush policy is updated to point to
      Block Builder of internal-keys index partition.
      2. Set sub_builder_index_->seperator_is_key_plus_seq_ = true if
      seperator_is_key_plus_seq_  is set to true so that subsequent partitions
      can also use internal key mode.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7096
      
      Test Plan: make check -j64
      
      Reviewed By: ajkr
      
      Differential Revision: D22416598
      
      Pulled By: akankshamahajan15
      
      fbshipit-source-id: 01fc2dc07ea1b32f8fb803995ebe6e9a3fbe67ac
      54f171fe
    • fix compile error (#7040) · 7c6f3d84
      球状闪电 提交于
      Summary:
      WITH_TESTS=OFF and WITH_BENCHMARK_TOOLS=ON
      
      there has errors:
       /bin/ld: cannot find -ltestharness
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7040
      
      Reviewed By: riversand963
      
      Differential Revision: D22447637
      
      Pulled By: ajkr
      
      fbshipit-source-id: f63058376deb4a2e6722d63541c40caa617c331a
      7c6f3d84
    • P
      cf_consistency_stress (crash_test_with_atomic_flush) checkpoint clean (#7103) · 90fd6b0c
      Peter Dillinger 提交于
      Summary:
      Delicious copy-pasta from https://github.com/facebook/rocksdb/issues/7039
      
      Also fixing DestroyDir to allow files to go missing while it is operating. This seems to fix failures I got with test plan reproducer.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7103
      
      Test Plan:
      make blackbox_crash_test_with_atomic_flush for a while with
      checkpoint_one_in=100
      
      Reviewed By: siying
      
      Differential Revision: D22435315
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 0ec0538402493887aeda43ecc03f32979cb84ced
      90fd6b0c
    • Z
      Fix flaky BackupableDBTest.TableFileCorruptedBeforeBackup (#7102) · cc5c6808
      Zitan Chen 提交于
      Summary:
      The fix in PR https://github.com/facebook/rocksdb/issues/7082 is not really successful because there is still a small chance that the test will fail.
      
      In addtion to flushing, we close the DB and then reopen before corrupting a table file in the DB. Specifically, we corrupt a table file before backup takes place as follows.
      * Open DB
      * Fill DB
      * Flush DB (optional, no flushing here also works)
      * Close DB
      * Reopen DB
      * Corrupt a table file in the DB
      
      This should make the test reliable.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7102
      
      Test Plan:
      `while ./backupable_db_test --gtest_filter=*TableFileCorruptedBeforeBackup*; do true; done`
      (kept running for an hour or so :)
      
      Reviewed By: pdillinger
      
      Differential Revision: D22432417
      
      Pulled By: gg814
      
      fbshipit-source-id: d407eee93ff428bb662f80cde1659fbf0149d0cd
      cc5c6808
    • R
      Add RestoreDBFromLatestBackup to C API, add new C# package (#7092) · 712458fc
      rafael-aero 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/7092
      
      Reviewed By: riversand963
      
      Differential Revision: D22412323
      
      Pulled By: ajkr
      
      fbshipit-source-id: 3fc1c63bb19a8cd2c0ae620800c28f199a7f494b
      712458fc
    • R
      Fixed Factory construct just for calling .Name() (#7080) · b649d8cb
      rockeet 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/7080
      
      Reviewed By: riversand963
      
      Differential Revision: D22412352
      
      Pulled By: ajkr
      
      fbshipit-source-id: 1d7f4c1621040a0130245139b52c3f4d3deac865
      b649d8cb
  5. 08 7月, 2020 6 次提交
    • W
      extend listener callback functions to more file I/O operations (#7055) · 226d1f9c
      wenh 提交于
      Summary:
      Currently, `EventListener` in listner.h only have callback functions for file read and write. One may favor extended callback functions for more file I/O operations like flush, sync and close. This PR tries to add those interface and have them called when appropriate throughout the code base.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7055
      
      Test Plan:
      Write an experimental listener with those new callback functions with log output in them; run experiments and check logs to see those functions are actually called.
      Default test suits `make check` should also be included.
      
      Reviewed By: riversand963
      
      Differential Revision: D22380624
      
      Pulled By: roghnin
      
      fbshipit-source-id: 4121491d45c2c2aae8c255e7998090559a241c6a
      226d1f9c
    • A
      Separate internal and user key comparators in `BlockIter` (#6944) · dd29ad42
      Andrew Kryczka 提交于
      Summary:
      Replace `BlockIter::comparator_` and `IndexBlockIter::user_comparator_wrapper_` with a concrete `UserComparatorWrapper` and `InternalKeyComparator`. The motivation for this change was the inconvenience of not knowing the concrete type of `BlockIter::comparator_`, which prevented calling specialized internal key comparison functions to optimize comparison of keys with global seqno applied.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6944
      
      Test Plan:
      benchmark setup -- single file DBs, in-memory, no compression. "normal_db"
      created by regular flush; "ingestion_db" created by ingesting a file. Both
      DBs have same contents.
      
      ```
      $ TEST_TMPDIR=/dev/shm/normal_db/ ./db_bench -benchmarks=fillrandom,compact -write_buffer_size=10485760000 -disable_auto_compactions=true -compression_type=none -num=1000000
      $ ./ldb write_extern_sst ./tmp.sst --db=/dev/shm/ingestion_db/dbbench/ --compression_type=no --hex --create_if_missing < <(./sst_dump --command=scan --output_hex --file=/dev/shm/normal_db/dbbench/000007.sst | awk 'began {print "0x" substr($1, 2, length($1) - 2), "==>", "0x" $5} ; /^Sst file format: block-based/ {began=1}')
      $ ./ldb ingest_extern_sst ./tmp.sst --db=/dev/shm/ingestion_db/dbbench/
      ```
      
      benchmark run command:
      
      ```
      $ TEST_TMPDIR=/dev/shm/$DB/ ./db_bench -benchmarks=seekrandom -seek_nexts=$SEEK_NEXT -use_existing_db=true -cache_index_and_filter_blocks=false -num=1000000 -cache_size=0 -threads=1 -reads=200000000 -mmap_read=1 -verify_checksum=false
      ```
      
      results: perf improved marginally for ingestion_db and did not change significantly for normal_db:
      
      SEEK_NEXT | DB | code | ops/sec | % change
      -- | -- | -- | -- | --
      0 | normal_db | master | 350880 |  
      0 | normal_db | PR6944 | 351040 | 0.0
      0 | ingestion_db | master | 343255 |  
      0 | ingestion_db | PR6944 | 349424 | 1.8
      10 | normal_db | master | 218711 |  
      10 | normal_db | PR6944 | 217892 | -0.4
      10 | ingestion_db | master | 220334 |  
      10 | ingestion_db | PR6944 | 226437 | 2.8
      
      Reviewed By: pdillinger
      
      Differential Revision: D21924676
      
      Pulled By: ajkr
      
      fbshipit-source-id: ea4288a2eefa8112eb6c651a671c1de18c12e538
      dd29ad42
    • P
      Replace large 'rm' with 'find' (#7095) · 4202c48f
      Peter Dillinger 提交于
      Summary:
      On some platforms like MacOS, a second 'make check' can lead to
      /bin/rm: Argument list too long
      
      This is fixed by replacing with a 'find'. Also, using '-f' for more rm calls
      to avoid prompt.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7095
      
      Test Plan: 'make check' on Linux and MacOS
      
      Reviewed By: riversand963
      
      Differential Revision: D22415808
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 0fd1ebae13739c9d81f9e813e99b062715604d6b
      4202c48f
    • P
      Fix build of db_stress with LIB_MODE=shared (#7098) · 787bf79f
      Peter Dillinger 提交于
      Summary:
      by tracking and linking against runtime dependent libraries in
      Makefile
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7098
      
      Test Plan: look for fix in CircleCI
      
      Reviewed By: riversand963
      
      Differential Revision: D22420860
      
      Pulled By: pdillinger
      
      fbshipit-source-id: d211d709214bf5306db68e43b7a2f18169281022
      787bf79f
    • P
      Exclude c_test from buck build opt mode (#7093) · dbf5c558
      Peter Dillinger 提交于
      Summary:
      Fix a Facebook internal build
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7093
      
      Test Plan:
      buck build mode/opt :c_test :c_test_bin (was compilation
      failure, now "not found")
      buck build mode/dev :c_test :c_test_bin (still passes)
      
      Reviewed By: ajkr
      
      Differential Revision: D22412528
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 8e55c43dbf95386597e4cc690c41d9cbdcee03aa
      dbf5c558
    • P
      Major CircleCI/Linux fixes / tweaks / enhancements (#7078) · 92731b6b
      Peter Dillinger 提交于
      Summary:
      Primarily, this change adds a way to work around a bug limiting the effective output (and therefore debugability) of the Linux builds using parallel make. We would get
      make[1]: write error: stdout
      probably due to a kernel bug, apparently affecting both available ubuntu 16 machine images (maybe not affecting docker images, less horsepower). https://bugs.launchpad.net/ubuntu/+source/linux-signed/+bug/1814393
      
      Now in the CircleCI config, make output on Ubuntu is piped through a custom 'cat' that ignores EAGAIN errors, which seems to fix the problem.
      
      Significant other changes:
      * Add another linux build that combines
        * LIB_MODE=shared, to ensure this works with compile and unit test execution
        * Alternative rocksdb namespace, to ensure this works (not rely on Travis)
        * ASSERT_STATUS_CHECKED=1, but with building all unit tests and running those expected to pass with it
      * Run release build with and without gflags. (Was running only without, ignore large swaths of code in a normal release build! Two regressions in this build, only with gflags, in the last week not caught by CI!)
      * Use gflags with unity and LITE build, as typical case.
      
      Debugability improvements:
      * Use V=1 to show commands being executed (thanks to EAGAIN work-around)
      * Print kernel version and compiler versions as part of V=1 output from Makefile
      
      Cosmetic other changes:
      * Put more commands on one line, for less clutter in CircleCI output pages
      * Remove redundant "all" in "make all check" and put make command options before targets
      * Change some recursive "make clean" into dependency on "clean," toward minimizing unnecessary overhead (detect platform, build version, etc.) of extra recursive makes
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7078
      
      Reviewed By: siying
      
      Differential Revision: D22391647
      
      Pulled By: pdillinger
      
      fbshipit-source-id: d446fccf5a8c568b37dc8748621c8a5c546fe135
      92731b6b
  6. 07 7月, 2020 5 次提交
  7. 04 7月, 2020 1 次提交
    • Z
      Fix flakiness of BackupableDBTest.TableFileCorruptedBeforeBackup (#7082) · 147f7b47
      Zitan Chen 提交于
      Summary:
      If the corruption of a table file is done before flushing, then db manifest may record the checksum for the corrupted table, which results in "matching checksums" when backup engine tries to verfiy the checksum, and causes a flaky test.
      
      Fix the issue by adding `Flush()` before trying to corrupt a table file in *db*.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7082
      
      Test Plan:
      `buck test`
      Without the fix, failed 5 of 100 tests.
      Suspected whether the pseudo randomness causes the issue: doubling `keys_iteration` resulted in 2 of 100 tests failed; deterministically corrupting tables file also caused 2 of 100 tests to fail.
      With the fix, passed 200 of 200 tests.
      
      Reviewed By: pdillinger
      
      Differential Revision: D22375421
      
      Pulled By: gg814
      
      fbshipit-source-id: 7304618e7520684b6087e42d0b58329c5ad18329
      147f7b47
  8. 03 7月, 2020 6 次提交
  9. 02 7月, 2020 2 次提交