1. 12 12月, 2020 1 次提交
    • P
      Fix memory leak for ColumnFamily drop with live iterator (#7749) · b1ee1914
      Peter Dillinger 提交于
      Summary:
      Uncommon bug seen by ASAN with
      ColumnFamilyTest.LiveIteratorWithDroppedColumnFamily, if the last two
      references to a ColumnFamilyData are both SuperVersions (during
      InstallSuperVersion). The fix is to use UnrefAndTryDelete even in
      SuperVersion::Cleanup but with a parameter to avoid re-entering Cleanup
      on the same SuperVersion being cleaned up.
      
      ColumnFamilyData::Unref is considered unsafe so removed.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7749
      
      Test Plan: ./column_family_test --gtest_filter=*LiveIter* --gtest_repeat=100
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D25354304
      
      Pulled By: pdillinger
      
      fbshipit-source-id: e78f3a3f67c40013b8432f31d0da8bec55c5321c
      b1ee1914
  2. 11 12月, 2020 3 次提交
  3. 10 12月, 2020 9 次提交
    • A
      Add further tests to ASSERT_STATUS_CHECKED (2) (#7698) · 8ff6557e
      Adam Retter 提交于
      Summary:
      Second batch of adding more tests to ASSERT_STATUS_CHECKED.
      
      * external_sst_file_basic_test
      * checkpoint_test
      * db_wal_test
      * db_block_cache_test
      * db_logical_block_size_cache_test
      * db_blob_index_test
      * optimistic_transaction_test
      * transaction_test
      * point_lock_manager_test
      * write_prepared_transaction_test
      * write_unprepared_transaction_test
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7698
      
      Reviewed By: cheng-chang
      
      Differential Revision: D25441664
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 9e78867f32321db5d4833e95eb96c5734526ef00
      8ff6557e
    • M
      Fix use of positional args in BUCK rules (#7760) · 8e2749fd
      Michael Lee 提交于
      Summary:
      Prefer to use keyword args rather than positional args for Buck rules. This appears to be the only remaining instance for `custom_unittest`
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7760
      
      Test Plan: Search for other instances of `custom_unittest` without `name`
      
      Reviewed By: cheng-chang
      
      Differential Revision: D25439887
      
      Pulled By: mzlee
      
      fbshipit-source-id: 518c541a5c01207c7b0c1f7322addf5cc4f09f92
      8e2749fd
    • M
      Invalidate iterator on transaction clear (#7733) · 71239908
      Manuel Ung 提交于
      Summary:
      Some clients do not close their iterators until after the transaction finishes. To handle this case, we will invalidate any iterators on transaction clear.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7733
      
      Reviewed By: cheng-chang
      
      Differential Revision: D25261158
      
      Pulled By: lth
      
      fbshipit-source-id: b91320f00c54cbe0e6882b794b34f3bb5640dbc0
      71239908
    • C
      Carry over min_log_number_to_keep_2pc in new MANIFEST (#7747) · 80159f6e
      Cheng Chang 提交于
      Summary:
      When two phase commit is enabled, `VersionSet::min_log_number_to_keep_2pc` is set during flush.
      But when a new MANIFEST is created, the `min_log_number_to_keep_2pc` is not carried over to the new MANIFEST. So if a new MANIFEST is created and then DB is reopened, the `min_log_number_to_keep_2pc` will be lost.  This may cause DB recovery errors.
      The bug is reproduced in a new unit test in `version_set_test.cc`.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7747
      
      Test Plan: The new unit test in `version_set_test.cc` should pass.
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D25350661
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: eee890d5b19f15769069670692e270ae31044ece
      80159f6e
    • A
      Ensure that MultiGet works properly with compressed cache (#7756) · 8a1488ef
      anand76 提交于
      Summary:
      Ensure that when direct IO is enabled and a compressed block cache is
      configured, MultiGet inserts compressed data blocks into the compressed
      block cache.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7756
      
      Test Plan: Add unit test to db_basic_test
      
      Reviewed By: cheng-chang
      
      Differential Revision: D25416240
      
      Pulled By: anand1976
      
      fbshipit-source-id: 75d57526370c9c0a45ff72651f3278dbd8a9086f
      8a1488ef
    • C
      Add a test for disabling tracking WAL (#7757) · 3c2a4488
      Cheng Chang 提交于
      Summary:
      If WAL tracking was enabled, then disabled during reopen, the previously tracked WALs should be removed from MANIFEST.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7757
      
      Test Plan: a new unit test `DBBasicTest.DisableTrackWal` is added.
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D25410508
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: 9d8d9e665066135930a7c1035bb8c2f68bded6a0
      3c2a4488
    • C
      Add a new db_map_fuzzer (#7762) · 89cc06b3
      Cheng Chang 提交于
      Summary:
      Execute randomly generated operations on both a DB and a std::map,
      then reopen the DB and make sure that iterating the DB produces the
      same key-value pairs as iterating through the std::map.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7762
      
      Test Plan: cd fuzz && make db_map_fuzzer && ./db_map_fuzzer
      
      Reviewed By: pdillinger
      
      Differential Revision: D25437485
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: 3a93f7efd046b194193e45d2ab1ad81565510781
      89cc06b3
    • C
      Always track WAL obsoletion (#7759) · efe827ba
      Cheng Chang 提交于
      Summary:
      Currently, when a WAL becomes obsolete after flushing, if VersionSet::WalSet does not contain the WAL, we do not track the WAL obsoletion event in MANIFEST.
      
      But consider this case:
      * WAL 10 is synced, a VersionEdit is LogAndApplied to MANIFEST to log this WAL addition event, but the VersionEdit is not applied to WalSet yet since its corresponding ManifestWriter is still pending in the write queue;
      * Since the above ManifestWriter is blocking, the LogAndApply will block on a conditional variable and release the db mutex, so another LogAndApply can proceed to enqueue other VersionEdits concurrently;
      * Now flush happens, and WAL 10 becomes obsolete, although WalSet does not contain WAL 10 yet, we should call LogAndApply to enqueue a VersionEdit to indicate the obsoletion of WAL 10;
      * otherwise, when the queued edit indicating WAL 10 addition is logged to MANIFEST, and DB crashes and reopens, the WAL 10 might have been removed from disk, but it still exists in MANIFEST.
      
      This PR changes the behavior to: always `LogAndApply` any WAL addition or obsoletion event, without considering the order issues caused by concurrency, but when applying the edits to `WalSet`, do not add the WALs if they are already obsolete. In this approach, the logical events of WAL addition and obsoletion are always tracked in MANIFEST, so we can inspect the MANIFEST and know all the previous WAL events, but we choose to ignore certain events due to the concurrency issues such as the case above, or the case in https://github.com/facebook/rocksdb/pull/7725.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7759
      
      Test Plan: make check
      
      Reviewed By: pdillinger
      
      Differential Revision: D25423089
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: 9cb9a7fbc1875bf954f2a42f9b6cfd6d49a7b21c
      efe827ba
    • S
      LockTree library, originally from PerconaFT (#7753) · 98236fb1
      Sergei Petrunia 提交于
      Summary:
      To be used for implementing Range Locking.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7753
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D25378980
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: 801a9c5cd92a84654ca2586b73e8f69001e89320
      98236fb1
  4. 09 12月, 2020 4 次提交
    • A
      Add further tests to ASSERT_STATUS_CHECKED (1) (#7679) · 7b2216c9
      Adam Retter 提交于
      Summary:
      First batch of adding more tests to ASSERT_STATUS_CHECKED.
      
      * db_iterator_test
      * db_memtable_test
      * db_merge_operator_test
      * db_merge_operand_test
      * write_batch_test
      * write_batch_with_index_test
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7679
      
      Reviewed By: ajkr
      
      Differential Revision: D25399270
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 3017d0a686aec5cd2d743fc2acbbf75df239f3ba
      7b2216c9
    • P
      Fix build on FreeBSD/powerpc64(le) (#7732) · 66e54c59
      pkubaj 提交于
      Summary:
      To build on FreeBSD, arch_ppc_probe needs to be adapted to FreeBSD.
      
      Since FreeBSD uses elf_aux_info as an getauxval equivalent, use it and include necessary headers:
      - machine/cpu.h for PPC_FEATURE2_HAS_VEC_CRYPTO,
      - sys/auxv.h for elf_aux_info,
      - sys/elf_common.h for AT_HWCAP2.
      
      elf_aux_info isn't checked for being available, because it's available since FreeBSD 12.0. rocksdb assumes using Clang on FreeBSD, but powerpc* platforms switch to Clang only since 13.0.
      
      This patch makes rocksdb build on FreeBSD on powerpc64 and powerpc64le platforms.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7732
      
      Reviewed By: ltamasi
      
      Differential Revision: D25399194
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 9c905147d75f98cd2557dd2f86a940b8e6c5afcd
      66e54c59
    • V
      Adding ARM AT_HWCAP support for FreeBSD (#7750) · 93c6c18c
      Vincent Milum Jr 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/7750
      
      Reviewed By: ltamasi
      
      Differential Revision: D25400609
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 13b15e2f490acc011b648fbd9615ea8e580cccc7
      93c6c18c
    • C
      Do not track obsolete WALs in MANIFEST even if they are synced (#7725) · 07030c6f
      Cheng Chang 提交于
      Summary:
      Consider the case:
      1. All column families are flushed, so all WALs become obsolete, but no WAL is removed from disk yet because the removal is asynchronous, a VersionEdit is written to MANIFEST indicating that WALs before a certain WAL number are obsolete, let's say this number is 3;
      2. `SyncWAL` is called, so all the on-disk WALs are synced, and if track_and_verify_wal_in_manifest=true, the WALs will be tracked in MANIFEST, let's say the WAL numbers are 1 and 2;
      3. DB crashes;
      4. During DB recovery, when replaying MANIFEST, we first see that WAL with number < 3 are obsolete, then we see that WAL 1 and 2 are synced, so according to current implementation of `WalSet`, the `WalSet` will be recovered to include WAL 1 and 2;
      5. WAL 1 and 2 are asynchronously deleted from disk, then the WAL verification algorithm fails with `Corruption: missing WAL`.
      
      The above case is reproduced in a new unit test `DBBasicTestTrackWal::DoNotTrackObsoleteWal`.
      
      The fix is to maintain the upper bound of the obsolete WAL numbers, any WAL with number less than the maintained number is considered to be obsolete, so shouldn't be tracked even if they are later synced. The number is maintained in `WalSet`.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7725
      
      Test Plan:
      1. a new unit test `DBBasicTestTrackWal::DoNotTrackObsoleteWal` is added.
      2. run `make crash_test` on devserver.
      
      Reviewed By: riversand963
      
      Differential Revision: D25238914
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: f5dccd57c3d89f19565ec5731f2d42f06d272b72
      07030c6f
  5. 08 12月, 2020 8 次提交
    • Y
      Refactor ProcessManifestWrites a little bit (#7751) · 11c4be22
      Yanqin Jin 提交于
      Summary:
      This PR removes a nested loop inside ProcessManifestWrites. The new
      implementation has the same behavior as the old code with simpler logic
      and lower complexity.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7751
      
      Test Plan:
      make check
      Run make crash_test on devserver and succeeds 3 times.
      
      Reviewed By: ltamasi
      
      Differential Revision: D25363526
      
      Pulled By: riversand963
      
      fbshipit-source-id: 27e681949dacd7501a752e5e517b9e85b54ccb2e
      11c4be22
    • S
      Range Locking: Allow different LockManagers, add Range Lock definitions (#7443) · d8bd9fc7
      Sergei Petrunia 提交于
      Summary:
      This PR has two commits:
      1.  Modify the code to allow different Lock Managers (of any kind) to be used.  It is implied that a LockManager uses its own custom LockTracker.
      2.  Add definitions for Range Locking (class Endpoint and GetRangeLock() function.
      
      cheng-chang, is this what you've had in mind (should the PR have both item 1 and item 2?)
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7443
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D24123172
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: c6548ad6d4cc3c25f68d13b29147bc6fdf357185
      d8bd9fc7
    • M
      Change ErrorHandler methods to return const Status& (#7539) · db03172d
      mrambacher 提交于
      Summary:
      This change eliminates the need for a lot of the PermitUncheckedError calls on return from ErrorHandler methods.  The calls are no longer needed as the status is returned as a reference rather than a copy.  Additionally, this means that the originating status (recovery_error_, bg_error_) is not cleared implicitly as a result of calling one of these methods.
      
      For this class, I do not know if the proper behavior should be to call PermitUncheckedError in the destructor or if the checked state should be cleared when the status is cleared.  I did tests both ways.  Without the code in the destructor, the status will need to be cleared in at least some of the places where it is set to OK.  When running tests, I found no instances where this class was destructed with a non-OK, non-checked Status.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7539
      
      Reviewed By: anand1976
      
      Differential Revision: D25340565
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 1730c035c81a475875ea745226112030ec25136c
      db03172d
    • L
      Do not use ASSERT_OK in child threads in ExternalSstFileTest.PickedLevelBug (#7754) · 8a06fe27
      Levi Tamasi 提交于
      Summary:
      `googletest` uses exceptions to communicate assertion failures when
      `GTEST_THROW_ON_FAILURE` is set, which does not go well with
      `std::thread`s, since an exception escaping the top-level function of an
      `std::thread` object or an `std::thread` getting destroyed without
      having been `join`ed or `detach`ed first results in a call to
      `std::terminate`. The patch fixes this by moving the `Status` assertions
      of background operations in `ExternalSstFileTest.PickedLevelBug` to the
      main thread.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7754
      
      Test Plan: `make check`
      
      Reviewed By: riversand963
      
      Differential Revision: D25383808
      
      Pulled By: ltamasi
      
      fbshipit-source-id: 32fb2721e5169ec898d218900bc0d83eead45d03
      8a06fe27
    • D
      OSS-Fuzz integration and db_fuzzer (#7674) · ba2a3bf0
      davkor 提交于
      Summary:
      This PR adds a fuzzer to the project and infrastructure to integrate Rocksdb with OSS-Fuzz. OSS-Fuzz is a service run by Google that performs continuous fuzzing of important open source projects. The LevelDB project is also in being fuzzed by OSS-Fuzz (https://github.com/google/oss-fuzz/tree/master/projects/leveldb). Essentially, OSS-Fuzz will perform the fuzzing for you and email you bug reports, coverage reports etc. All we need is a set of email addresses that will receive this information.
      
      For cross-referencing, the PR that adds the OSS-Fuzz logic is here: https://github.com/google/oss-fuzz/pull/4642
      
      The `db_fuzzer` of the PR performs stateful fuzzing of Rocksdb by calling a sequence of Rockdb's APIs with random input in each fuzz iteration. Each fuzz iteration, thus, creates a new instance of Rocksdb and operates on this given instance. The goal is to test diverse states of Rocksdb and ensure no state lead to error conditions, e.g. memory corruption vulnerabilities.
      
      The fuzzer is similar (although more complex) to the fuzzer that is currently being used to analyse Leveldb (https://github.com/google/oss-fuzz/blob/master/projects/leveldb/fuzz_db.cc)
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7674
      
      Reviewed By: pdillinger
      
      Differential Revision: D25238536
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: 610331c49a77eb68d3b1d7d5ef1b0ce230ac0630
      ba2a3bf0
    • A
      Handling misuse of snprintf return value (#7686) · 20c7d7c5
      Akanksha Mahajan 提交于
      Summary:
      Handle misuse of snprintf return value to avoid Out of bound
      read/write.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7686
      
      Test Plan: make check -j64
      
      Reviewed By: riversand963
      
      Differential Revision: D25030831
      
      Pulled By: akankshamahajan15
      
      fbshipit-source-id: 1a1d181c067c78b94d720323ae00b79566b57cfa
      20c7d7c5
    • N
      Make the TARGETS file Starlark compliant (#7743) · b77569f1
      Neil Mitchell 提交于
      Summary:
      Buck TARGETS files are sometimes parsed with Python, and sometimes with Starlark - this TARGETS file was not Starlark compliant. In Starlark you can't have a top-level if in a TARGETS file, but you can have a ternary `a if b else c`. Therefore I converted TARGETS, and updated the generator for it.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7743
      
      Reviewed By: pdillinger
      
      Differential Revision: D25342587
      
      Pulled By: ndmitchell
      
      fbshipit-source-id: 88cbe8632071a45a3ea8675812967614c62c78d1
      b77569f1
    • A
      Fix unit test failure ppc64le in travis (#7752) · 1df85848
      Akanksha Mahajan 提交于
      Summary:
      Added a fix for the failure of
      DBTest2.PartitionedIndexUserToInternalKey on ppc64le in travis
      Closes https://github.com/facebook/rocksdb/issues/7746
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7752
      
      Test Plan:
      Ran travis job multiple times and it passed. Will keep
      watching the travis job after this patch.
      
      Reviewed By: pdillinger
      
      Differential Revision: D25373130
      
      Pulled By: akankshamahajan15
      
      fbshipit-source-id: fa0e3f85f75b687415044a506e42cc38ead87975
      1df85848
  6. 06 12月, 2020 1 次提交
    • Y
      Add full_history_ts_low to column family (#7740) · eee0af9a
      Yanqin Jin 提交于
      Summary:
      Following https://github.com/facebook/rocksdb/issues/7655 and https://github.com/facebook/rocksdb/issues/7657, this PR adds `full_history_ts_low_` to `ColumnFamilyData`.
      `ColumnFamilyData::full_history_ts_low_` will be used to create `FlushJob` and `CompactionJob`.
      
      `ColumnFamilyData::full_history_ts_low` is persisted to the MANIFEST file. An application can only
      increase its value. Consider the following case:
      
      >
      > The database has a key at ts=950. `full_history_ts_low` is first set to 1000, and then a GC is triggered
      > and cleans up all data older than 1000. If the application sets `full_history_ts_low` to 900 afterwards,
      > and tries to read at ts=960, the key at 950 is not seen. From the perspective of the read, the result
      > is hard to reason. For simplicity, we just do now allow decreasing full_history_ts_low for now.
      >
      
      During recovery, the value of `full_history_ts_low` is restored for each column family if applicable. Note that
      version edits in the MANIFEST file for the same column family may have `full_history_ts_low` unsorted due
      to the potential interleaving of `LogAndApply` calls. Only the max will be used to restore the state of the
      column family.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7740
      
      Test Plan: make check
      
      Reviewed By: ltamasi
      
      Differential Revision: D25296217
      
      Pulled By: riversand963
      
      fbshipit-source-id: 24acda1df8262cd7cfdc6ce7b0ec56438abe242a
      eee0af9a
  7. 05 12月, 2020 5 次提交
    • P
      Migrate away from broken macos on Travis (#7745) · e34b2e9f
      Peter Dillinger 提交于
      Summary:
      Add macos+cmake build on CircleCI instead.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7745
      
      Test Plan: CI
      
      Reviewed By: riversand963
      
      Differential Revision: D25352864
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 6b0a328cbe715bc3b43d70e919a27c834edcf079
      e34b2e9f
    • L
      Add blob support to DBIter (#7731) · 61932cdf
      Levi Tamasi 提交于
      Summary:
      The patch adds iterator support to the integrated BlobDB implementation.
      Whenever a blob reference is encountered during iteration, the corresponding
      blob is retrieved by calling `Version::GetBlob`, assuming the `expose_blob_index`
      (formerly `allow_blob`) flag is *not* set. (Note: the flag is set by the old stacked
      BlobDB implementation, which has its own blob file handling/blob retrieval logic.)
      
      In addition, `DBIter` now uniformly returns `Status::NotSupported` with the error
      message `"BlobDB does not support merge operator."` when encountering a
      blob reference while performing a merge (instead of potentially returning a
      message that implies the database should be opened using the stacked BlobDB's
      `Open`.)
      
      TODO: We can implement support for lazily retrieving the blob value (or in other
      words, bypassing the retrieval of blob values based on key) by extending the `Iterator`
      API with a new `PrepareValue` method (similarly to `InternalIterator`, which already
      supports lazy values).
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7731
      
      Test Plan: `make check`
      
      Reviewed By: riversand963
      
      Differential Revision: D25256293
      
      Pulled By: ltamasi
      
      fbshipit-source-id: c39cd782011495a526cdff99c16f5fca400c4811
      61932cdf
    • Z
      Fix assert(cfd->imm()->NumNotFlushed() > 0) in FlushMemtable (#7744) · e102de73
      Zhichao Cao 提交于
      Summary:
      In current code base, in FlushMemtable, when `(Flush_reason == FlushReason::kErrorRecoveryRetryFlush && (!cfd->mem()->IsEmpty() || !cached_recoverable_state_empty_.load()))`, we assert that cfd->imm()->NumNotFlushed() > 0. However, there are some corner cases that can fail this assert: 1) if there are multiple CFs, some CF has immutable memtable, some CFs don't. In ResumeImpl, all CFs will call FlushMemtable, which will hit the assert. 2) Regular flush is scheduled and running, the resume thread is waiting. New KVs are inserted and SchedulePendingFlush is called. Regular flush will continue call MaybeScheduleFlushAndCompaction until all the immutable memtables are flushed. When regular flush ends and auto resume thread starts to schedule new flushes, cfd->imm()->NumNotFlushed() can be 0.
      
      Remove the assert and added the comments.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7744
      
      Test Plan: make check and pass the stress test
      
      Reviewed By: riversand963
      
      Differential Revision: D25340573
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: eac357bdace660247c197f01a9ff6857e3c97672
      e102de73
    • A
      Fix compilation on Apple Silicon (#7714) · ee4bd478
      Adam Retter 提交于
      Summary:
      Closes - https://github.com/facebook/rocksdb/issues/7710
      
      I tested this on an Apple DTK (Developer Transition Kit) with an Apple A12Z Bionic CPU and macOS Big Sur (11.0.1).
      
      Previously the arm64 specific CRC optimisations were limited to Linux only OS... Well now Apple Silicon is also arm64 but runs macOS ;-)
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7714
      
      Reviewed By: ltamasi
      
      Differential Revision: D25287349
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 639b168bf0ac2652907531e9604936ac4974b577
      ee4bd478
    • Z
      Fix the thread wait case in error_handler (#7700) · eb5a8c06
      Zhichao Cao 提交于
      Summary:
      In error_handler auto recovery case, if recovery_in_prog_ is false, the recover is finished or failed. In this case, the auto recovery thread should finish its execution so recovery_thread_ should be null. However, in some cases, it is not null, the caller should not directly returned. Instead, it should wait for a while and create a new thread to execute the new recovery.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7700
      
      Test Plan: make check, error_handler_fs_test
      
      Reviewed By: anand1976
      
      Differential Revision: D25098233
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: 5a1cba234ca18f6dd5d1be88e02d66e1d5ce931b
      eb5a8c06
  8. 04 12月, 2020 2 次提交
  9. 03 12月, 2020 4 次提交
    • Z
      Add kManifestWriteNoWAL to BackgroundErrorReason to handle Flush IO Error when... · 29e8f6a6
      Zhichao Cao 提交于
      Add kManifestWriteNoWAL to BackgroundErrorReason to handle Flush IO Error when WAL is disabled (#7693)
      
      Summary:
      In the current code base, all the manifest writes with IO error will be set with reason: BackgroundErrorReason::kManifestWrite, which will be mapped to the kHardError if the IO Error is retryable. However, if the system does not use the WAL, all the retryable IO error should be mapped to kSoftError. Create this PR to handle is special case by adding kManifestWriteNoWAL to BackgroundErrorReason.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7693
      
      Test Plan: make check, add new testing cases to error_handler_fs_test
      
      Reviewed By: anand1976
      
      Differential Revision: D25066204
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: d59553896c2eac3fb37c05238544d2b265379462
      29e8f6a6
    • P
      Skip minimum rate check in Sandcastle (#7728) · 3b9bfe8f
      Peter Dillinger 提交于
      Summary:
      The minimum rate check in RateLimiterTest.Rate can fail in
      Facebook's CI system Sandcastle, presumably due to heavily loaded
      machines. This change disables the minimum rate check for Sandcastle
      runs, and cleans up the code disabling it on other CI environments. (The
      amount of conditionally compiled code shall be minimized.)
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7728
      
      Test Plan: try new test with and without setting envvar SANDCASTLE=1
      
      Reviewed By: ltamasi
      
      Differential Revision: D25247642
      
      Pulled By: pdillinger
      
      fbshipit-source-id: d786233af37af9a874adbb3a9e2707ec52c27a5a
      3b9bfe8f
    • J
      Make CompactRange and GetApproximateSizes work with timestamp (#7684) · 7fec715d
      Jay Zhuang 提交于
      Summary:
      Add timestamp to the `CompactRange()` and `GetApproximateSizes` range keys if needed.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7684
      
      Test Plan: make check
      
      Reviewed By: riversand963
      
      Differential Revision: D25015421
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: 51ca0756087eb053a3b11801e5c7ce1c6e2d38a9
      7fec715d
    • Y
      Fix assertion failure in bg flush (#7362) · e062a719
      Yanqin Jin 提交于
      Summary:
      https://github.com/facebook/rocksdb/issues/7340 reports and reproduces an assertion failure caused by a combination of the following:
      - atomic flush is disabled.
      - a column family can appear multiple times in the flush queue at the same time. This behavior was introduced in release 5.17.
      
      Consequently, it is possible that two flushes race with each other. One bg flush thread flushes all memtables. The other thread calls `FlushMemTableToOutputFile()` afterwards, and hits the assertion error below.
      
      ```
        assert(cfd->imm()->NumNotFlushed() != 0);
        assert(cfd->imm()->IsFlushPending());
      ```
      
      Fix this by reverting the behavior. In non-atomic-flush case, a column family can appear in the flush queue at most once at the same time.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7362
      
      Test Plan:
      make check
      Also run stress test successfully for 10 times.
      ```
      make crash_test
      ```
      
      Reviewed By: ajkr
      
      Differential Revision: D25172996
      
      Pulled By: riversand963
      
      fbshipit-source-id: f1559b6366cc609e961e3fc83fae548f1fad08ce
      e062a719
  10. 02 12月, 2020 3 次提交