1. 31 10月, 2020 1 次提交
  2. 30 10月, 2020 3 次提交
  3. 29 10月, 2020 8 次提交
    • Y
      Remove unused includes (#7604) · 394210f2
      Yanqin Jin 提交于
      Summary:
      This is a PR generated **semi-automatically** by an internal tool to remove unused includes and `using` statements.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7604
      
      Test Plan: make check
      
      Reviewed By: ajkr
      
      Differential Revision: D24579392
      
      Pulled By: riversand963
      
      fbshipit-source-id: c4bfa6c6b08da1de186690d37eb73d8fff45aecd
      394210f2
    • J
      java: correct method name RocksDB.GetColumnFamilyMetaData() (#7606) · 99a0305b
      Jermy Li 提交于
      Summary:
      update GetColumnFamilyMetaData() to getColumnFamilyMetaData()
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7606
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D24610298
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: d24f9b65478da1456f50747637dc95688af874de
      99a0305b
    • Z
      Updated GenerateOneFileChecksum to use requested_checksum_func_name (#7586) · ea347d80
      Zhichao Cao 提交于
      Summary:
      CreateFileChecksumGenerator may uses requested_checksum_func_name in generator context to decide which generator will be used. GenerateOneFileChecksum has not being updated to use it, which will always get the generator when the name is empty. Fix it.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7586
      
      Test Plan: make check
      
      Reviewed By: riversand963
      
      Differential Revision: D24491989
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: d9fdfdd431240f0a9a2e781ddbd48a7d6c609aad
      ea347d80
    • J
      slightly improve jemalloc allocator API header (#7592) · 2404f8b9
      jsteemann 提交于
      Summary:
      Fix a few typos and avoid a potential nullptr dereference.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7592
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D24582111
      
      Pulled By: riversand963
      
      fbshipit-source-id: 51e9260e8cad1fcdedd310c889f0faeec6efd937
      2404f8b9
    • V
      Fix typo in arena.cc (#7593) · 248d10fb
      vdimir 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/7593
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D24576218
      
      Pulled By: riversand963
      
      fbshipit-source-id: a3d77191362ca696ae9df643f97f4ab5b7ecff12
      248d10fb
    • shadowlux's avatar
      Remove duplicate close (#7594) · 793e9b7f
      shadowlux 提交于
      Summary:
      Because `Close()` have called in `Destroy()`
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7594
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D24576407
      
      Pulled By: riversand963
      
      fbshipit-source-id: eba70d73375fd47dd78ca64c6a1fab3628448276
      793e9b7f
    • R
      In ParseInternalKey(), include corrupt key info in Status (#7515) · 9a690a74
      Ramkumar Vadivelu 提交于
      Summary:
      Fixes Issue https://github.com/facebook/rocksdb/issues/7497
      
      When allow_data_in_errors db_options is set, log error key details in `ParseInternalKey()`
      
      Have fixed most of the calls. Have few TODOs still pending - because have to make more deeper changes to pass in the allow_data_in_errors flag. Will do those in a separate PR later.
      
      Tests:
      - make check
      - some of the existing tests that exercise the "internal key too small" condition are: dbformat_test, cuckoo_table_builder_test
      - some of the existing tests that exercise the corrupted key path are: corruption_test, merge_helper_test, compaction_iterator_test
      
      Example of new status returns:
      - Key too small - `Corrupted Key: Internal Key too small. Size=5`
      - Corrupt key with allow_data_in_errors option set to false: `Corrupted Key: '<redacted>' seq:3, type:3`
      - Corrupt key with allow_data_in_errors option set to true: `Corrupted Key: '61' seq:3, type:3`
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7515
      
      Reviewed By: ajkr
      
      Differential Revision: D24240264
      
      Pulled By: ramvadiv
      
      fbshipit-source-id: bc48f5d4475ac19d7713e16df37505b31aac42e7
      9a690a74
    • A
      Require only one `Logger::Logv()` implementation (#7605) · 6c2c0635
      Andrew Kryczka 提交于
      Summary:
      A user who extended `Logger` recently pointed out it is unusual to
      require they implement the two-argument `Logv()` overload when they've
      already implemented the three-argument `Logv()` overload. I agree with
      that and think we can fix it by only calling the two-argument overload
      from the default implementation of the three-argument overload. Then
      when the three-argument overload is overridden, RocksDB would not
      rely on the two-argument overload. Only `Logger::LogHeader()` needed
      adjustment to achieve this.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7605
      
      Reviewed By: riversand963
      
      Differential Revision: D24584749
      
      Pulled By: ajkr
      
      fbshipit-source-id: 9aabe040ac761c4c0dbebc4be046967403ecaf21
      6c2c0635
  4. 28 10月, 2020 2 次提交
    • P
      Give instructions instead of broken 2to3 for clang-format-diff.py (#7603) · 0e2e6756
      Peter Dillinger 提交于
      Summary:
      My previous change to use lib2to3 to migrate clang-format-diff.py
      for Python 2 only works if there's nothing to reformat. Instead, give
      instructions to download to REPO_ROOT.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7603
      
      Test Plan: Try the instructions on a fresh CentOS 8 devserver
      
      Reviewed By: riversand963
      
      Differential Revision: D24569608
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 1410ba163e016b226e883dec93fae3df9ed0eab2
      0e2e6756
    • M
      Fix many tests to run with MEM_ENV and ENCRYPTED_ENV; Introduce a MemoryFileSystem class (#7566) · f35f7f27
      mrambacher 提交于
      Summary:
      This PR does a few things:
      
      1.  The MockFileSystem class was split out from the MockEnv.  This change would theoretically allow a MockFileSystem to be used by other Environments as well (if we created a means of constructing one).  The MockFileSystem implements a FileSystem in its entirety and does not rely on any Wrapper implementation.
      
      2.  Make the RocksDB test suite work when MOCK_ENV=1 and ENCRYPTED_ENV=1 are set.  To accomplish this, a few things were needed:
      - The tests that tried to use the "wrong" environment (Env::Default() instead of env_) were updated
      - The MockFileSystem was changed to support the features it was missing or mishandled (such as recursively deleting files in a directory or supporting renaming of a directory).
      
      3.  Updated the test framework to have a ROCKSDB_GTEST_SKIP macro.  This can be used to flag tests that are skipped.  Currently, this defaults to doing nothing (marks the test as SUCCESS) but will mark the tests as SKIPPED when RocksDB is upgraded to a version of gtest that supports this (gtest-1.10).
      
      I have run a full "make check" with MEM_ENV, ENCRYPTED_ENV,  both, and neither under both MacOS and RedHat.  A few tests were disabled/skipped for the MEM/ENCRYPTED cases.  The error_handler_fs_test fails/hangs for MEM_ENV (presumably a timing problem) and I will introduce another PR/issue to track that problem.  (I will also push a change to disable those tests soon).  There is one more test in DBTest2 that also fails which I need to investigate or skip before this PR is merged.
      
      Theoretically, this PR should also allow the test suite to run against an Env loaded from the registry, though I do not have one to try it with currently.
      
      Finally, once this is accepted, it would be nice if there was a CircleCI job to run these tests on a checkin so this effort does not become stale.  I do not know how to do that, so if someone could write that job, it would be appreciated :)
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7566
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D24408980
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: 911b1554a4d0da06fd51feca0c090a4abdcb4a5f
      f35f7f27
  5. 27 10月, 2020 2 次提交
    • Y
      Perform post-flush updates of memtable list in a callback (#6069) · 6134ce64
      Yanqin Jin 提交于
      Summary:
      Currently, the following interleaving of events can lead to SuperVersion containing both immutable memtables as well as the resulting L0. This can cause Get to return incorrect result if there are merge operands. This may also affect other operations such as single deletes.
      
      ```
        time  main_thr  bg_flush_thr  bg_compact_thr  compact_thr  set_opts_thr
      0  |                                                         WriteManifest:0
      1  |                                           issue compact
      2  |                                 wait
      3  |   Merge(counter)
      4  |   issue flush
      5  |                   wait
      6  |                                                         WriteManifest:1
      7  |                                 wake up
      8  |                                 write manifest
      9  |                  wake up
      10 |  Get(counter)
      11 |                  remove imm
         V
      ```
      
      The reason behind is that: one bg flush thread's installing new `Version` can be batched and performed by another thread that is the "leader" MANIFEST writer. This bg thread removes the memtables from current super version only after `LogAndApply` returns. After the leader MANIFEST writer signals (releasing mutex) this bg flush thread, it is possible that another thread sees this cf with both memtables (whose data have been flushed to the newest L0) and the L0 before this bg flush thread removes the memtables.
      
      To address this issue, each bg flush thread can pass a callback function to `LogAndApply`. The callback is responsible for removing the memtables. Therefore, the leader MANIFEST writer can call this callback and remove the memtables before releasing the mutex.
      
      Test plan (devserver)
      ```
      $make merge_test
      $./merge_test --gtest_filter=MergeTest.MergeWithCompactionAndFlush
      $make check
      ```
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6069
      
      Reviewed By: cheng-chang
      
      Differential Revision: D18790894
      
      Pulled By: riversand963
      
      fbshipit-source-id: e41bd600c0448b4f4b2deb3f7677f95e3076b4ed
      6134ce64
    • L
      Integrate BlobFileBuilder into the compaction process (#7573) · a7a04b68
      Levi Tamasi 提交于
      Summary:
      Similarly to how https://github.com/facebook/rocksdb/issues/7345
      integrated blob file writing into the flush process,
      the patch adds support for writing blob files to the compaction logic.
      Namely, if `enable_blob_files` is set, large values encountered during
      compaction are extracted to blob files and replaced with blob indexes.
      The resulting blob files are then logged to the MANIFEST as part of the
      compaction job's `VersionEdit` and added to the `Version` alongside any
      table files written by the compaction. Any errors during blob file building fail
      the compaction job.
      
      There will be a separate follow-up patch to perform blob garbage collection
      during compactions.
      
      In addition, the patch continues to chip away at the mess around computing
      various compaction related statistics by eliminating some code duplication
      and by making the `num_output_files` and `bytes_written` stats more consistent
      for flushes, compactions, and recovery.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7573
      
      Test Plan: `make check`
      
      Reviewed By: riversand963
      
      Differential Revision: D24404696
      
      Pulled By: ltamasi
      
      fbshipit-source-id: 21216af3a172ad3ce8f85d11cd30923784ae426c
      a7a04b68
  6. 26 10月, 2020 1 次提交
    • P
      Ribbon: initial (general) algorithms and basic unit test (#7491) · 25d54c79
      Peter Dillinger 提交于
      Summary:
      This is intended as the first commit toward a near-optimal alternative to static Bloom filters for SSTs. Stephan Walzer and I have agreed upon the name "Ribbon" for a PHSF based on his linear system construction in "Efficient Gauss Elimination for Near-Quadratic Matrices with One Short Random Block per Row, with Applications" ("SGauss") and my much faster "on the fly" algorithm for gaussian elimination (or for this linear system, "banding"), which can be faster than peeling while also more compact and flexible. See util/ribbon_alg.h for more detailed introduction and background. RIBBON = Rapid Incremental Boolean Banding ON-the-fly
      
      This commit just adds generic (templatized) core algorithms and a basic unit test showing some features, including the ability to construct structures within 2.5% space overhead vs. information theoretic lower bound. (Compare to cache-local Bloom filter's ~50% space overhead -> ~30% reduction anticipated.) This commit does not include the storage scheme necessary to make queries fast, especially for filter queries, nor fractional "result bits", but there is some description already and those implementations will come soon. Nor does this commit add FilterPolicy support, for use in SST files, but that will also come soon.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7491
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D24517954
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 0119ee597e250d7e0edd38ada2ba50d755606fa7
      25d54c79
  7. 24 10月, 2020 3 次提交
    • Y
      Allow compaction iterator to perform garbage collection (#7556) · 65952679
      Yanqin Jin 提交于
      Summary:
      Add a threshold timestamp, full_history_ts_low_ of type `std::string*` to
      `CompactionIterator`, so that RocksDB can also perform garbage collection during
      compaction.
      * If full_history_ts_low_ is nullptr, then compaction iterator does not perform
        GC, preserving all timestamp history for all keys. Compaction iterator will
      treat user key with different timestamps as different user keys.
      * If full_history_ts_low_ is not nullptr, then compaction iterator performs
        GC. GC will look at keys older than `*full_history_ts_low_` and determine their
        eligibility based on factors including snapshots.
      
      Current rules of GC:
       * If an internal key is in the same snapshot as a previous counterpart
          with the same user key, and this key is eligible for GC, and the key is
          not single-delete or merge operand, then this key can be dropped. Note
          that the previous internal key cannot be a merge operand either.
       * If a tombstone is the most recent one in the earliest snapshot and it
          is eligible for GC, and keyNotExistsBeyondLevel() is true, then this
          tombstone can be dropped.
       * If a tombstone is the most recent one in a snapshot and it is eligible
          for GC, and the compaction is at bottommost level, then all other older
          internal keys of the same user key must also be eligible for GC, thus
          can be dropped
      * Single-delete, delete-range and merge are not currently supported.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7556
      
      Test Plan: make check
      
      Reviewed By: ltamasi
      
      Differential Revision: D24507728
      
      Pulled By: riversand963
      
      fbshipit-source-id: 3c09c7301f41eed76dfcf4d1527e68cf6e0a8bb3
      65952679
    • C
      Track WAL in MANIFEST: persist WALs to and recover WALs from MANIFEST (#7256) · 1b224324
      Cheng Chang 提交于
      Summary:
      This PR makes it able to `LogAndApply` `VersionEdit`s related to WALs, and also be able to `Recover` from MANIFEST with WAL related `VersionEdit`s.
      
      The `VersionEdit`s related to WAL are treated similarly as those related to column family operations, they are not applied to versions, but can be in a commit group. Mixing WAL related `VersionEdit`s with other types of edits will make logic in `ProcessManifestWrite` more complicated, so `VersionEdit`s related to WAL can either be WAL additions or deletions, like column family add and drop.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7256
      
      Test Plan: a set of unit tests are added in `version_set_test.cc`
      
      Reviewed By: riversand963
      
      Differential Revision: D23123238
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: 246be2ed4744fd03fa2738aba408aaa611d0379c
      1b224324
    • P
      Add Encode/DecodeFixedGeneric, coding_lean.h (#7587) · a16d1b2f
      Peter Dillinger 提交于
      Summary:
      To minimize dependencies for Ribbon filter code in progress,
      core part of coding.h for fixed sizes has been moved to coding_lean.h.
      Also, generic versions of these functions have been added to math128.h
      (since the generic versions are likely only to be used along with
      Unsigned128).
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7587
      
      Test Plan: Unit tests added for new functions
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D24486718
      
      Pulled By: pdillinger
      
      fbshipit-source-id: a69768f742379689442135fa52237c01dfe2647e
      a16d1b2f
  8. 23 10月, 2020 3 次提交
    • J
      add StartTrace and EndTrace to stackable_db (#7585) · b1cdb8cc
      jmn 提交于
      Summary:
      In addition to trace block cache access, we want to support trace queries on MySQL. To achieve that StartTrace and EndTrace need to be added to the stackable_db.h
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7585
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D24482306
      
      Pulled By: nmjnmjnmj
      
      fbshipit-source-id: de641b4837c64cd33b44b5bebaeae5d1527c8c31
      b1cdb8cc
    • Z
      Make FileType Public and Replace kLogFile with kWalFile (#7580) · d8ec0a76
      Zhichao Cao 提交于
      Summary:
      As suggested by pdillinger ,The name of kLogFile is misleading, in some tests, kLogFile is defined as info log. Replace it with kWalFile and move it to public, which will be used in https://github.com/facebook/rocksdb/issues/7523
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7580
      
      Test Plan: make check
      
      Reviewed By: riversand963
      
      Differential Revision: D24485420
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: 955e3dacc1021bb590fde93b0a568ffe9ad80799
      d8ec0a76
    • Z
      Make parallel compression optimization code tidier (#6888) · 1c78e4b2
      Ziyue Yang 提交于
      Summary:
      This commit makes https://github.com/facebook/rocksdb/issues/6262's code change tidier and easier to understand by:
      
      1. Wrapping parallel compression initialization and termination into
         common methods;
      2. Wrapping BlockRep initialization, push/pop into common methods;
      3. Wrapping file size estimation into common methods;
      4. Fixing function declarations that use non-const reference;
      5. Fixing some uninitialized variables;
      6. Fixing first_block data race;
      7. Making BlockRep::status check in BlockBasedTableBuilder::Finish only present
      if ok();
      8. Making assert(ok()) in BlockBasedTableBuilder::CompressAndVerifyBlock only
      present in non-parallel compression mode. In parallel compression mode,
      compression will abort if status is not OK;
      9. Eliminating potential data race caused by BlockBasedTableBuilder::GetStatus()
      and BlockBasedTableBuilder::GetIOStatus() by returning status copy instead of
      unprotected reference.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6888
      
      Reviewed By: ajkr
      
      Differential Revision: D21957110
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: 3a29892f249209513f030349756cecd7736eae80
      1c78e4b2
  9. 22 10月, 2020 2 次提交
  10. 21 10月, 2020 4 次提交
  11. 20 10月, 2020 2 次提交
    • A
      Add a host location property to TableProperties (#7479) · 00751e42
      anand76 提交于
      Summary:
      This PR adds support for writing a location identifier of the DB host to SST files as a table property. By default, the hostname is used, but can be overridden by the user. There have been some recent corruptions in files written by ```SstFileWriter``` before checksumming, so this property can be used to trace it back to the writing host and checking the host for hardware isues.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7479
      
      Test Plan: Add new unit tests
      
      Reviewed By: pdillinger
      
      Differential Revision: D24340671
      
      Pulled By: anand1976
      
      fbshipit-source-id: 2038949fd8d160c0633ccb4f9da77740f19fa2a2
      00751e42
    • C
      Abstract out LockManager interface (#7532) · 0ea7db76
      Cheng Chang 提交于
      Summary:
      In order to be able to introduce more locking protocols, we need to abstract out the locking subsystem in TransactionDB into a set of interfaces.
      
      PR https://github.com/facebook/rocksdb/pull/7013 introduces interface `LockTracker`. This PR is a follow up to take the first step to abstract out a `LockManager` interface.
      
      Further modifications to the interface may be needed when introducing the first implementation of range lock. But the idea here is to put the range lock implementation based on range tree under the `utilities/transactions/lock/range/range_tree`.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7532
      
      Test Plan: point_lock_manager_test
      
      Reviewed By: ajkr
      
      Differential Revision: D24238731
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: 2a9458cd8b3fb008d9529dbc4d3b28c24631f463
      0ea7db76
  12. 17 10月, 2020 2 次提交
  13. 16 10月, 2020 1 次提交
    • L
      Introduce BlobFileCache and add support for blob files to Get() (#7540) · e8cb32ed
      Levi Tamasi 提交于
      Summary:
      The patch adds blob file support to the `Get` API by extending `Version` so that
      whenever a blob reference is read from a file, the blob is retrieved from the corresponding
      blob file and passed back to the caller. (This is assuming the blob reference is valid
      and the blob file is actually part of the given `Version`.) It also introduces a cache
      of `BlobFileReader`s called `BlobFileCache` that enables sharing `BlobFileReader`s
      between callers. `BlobFileCache` uses the same backing cache as `TableCache`, so
      `max_open_files` (if specified) limits the total number of open (table + blob) files.
      
      TODO: proactively open/cache blob files and pin the cache handles of the readers in the
      metadata objects similarly to what `VersionBuilder::LoadTableHandlers` does for
      table files.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7540
      
      Test Plan: `make check`
      
      Reviewed By: riversand963
      
      Differential Revision: D24260219
      
      Pulled By: ltamasi
      
      fbshipit-source-id: a8a2a4f11d3d04d6082201b52184bc4d7b0857ba
      e8cb32ed
  14. 15 10月, 2020 6 次提交
    • A
      Update zstd dependency to 1.4.5 (#7560) · fa2a8cda
      Adam Retter 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/7560
      
      Reviewed By: akankshamahajan15
      
      Differential Revision: D24323048
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: 2094ef089c37f570d4ea30d28d2f46f9fa1ce0f1
      fa2a8cda
    • M
      Test for LoadLatestOptions (#7554) · a8c89cc9
      mrambacher 提交于
      Summary:
      Make LoadLatestOptions return PathNotFound if the options file does not exist.  Added tests for the LoadOptions related methods.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7554
      
      Reviewed By: akankshamahajan15
      
      Differential Revision: D24298985
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: c9ae3cb12fc4a5bbef07743e1c1300f98a2441b3
      a8c89cc9
    • A
      Small JNI improvements (#7371) · ccbf468c
      Adam Retter 提交于
      Summary:
      * Avoid some unnecessary array copy operations on read/write
      * Remove some duplicated code
      * Don't leak arrays on some exceptions
      * Fixed some doc comments
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7371
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D24312932
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 422fe6b98bbdb922a148922ac0d2d965c715176e
      ccbf468c
    • S
      Expose BackupableDBOptions in the C API (#7550) · 1a83f5a8
      Stanislav Tkach 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/7550
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D24315343
      
      Pulled By: ajkr
      
      fbshipit-source-id: fc7855b630a50c00dcb940241942295932732f39
      1a83f5a8
    • T
      Make RocksDB instance responsible for closing associated ColumnFamilyHandle instances (#7428) · 05fba969
      Tomasz Posluszny 提交于
      Summary:
      - Takes the burden off developer to close ColumnFamilyHandle instances before closing RocksDB instance
      - The change is backward-compatible
      
      ----
      Previously the pattern for working with Column Families was:
      
      ```java
      try (final ColumnFamilyOptions cfOpts = new ColumnFamilyOptions().optimizeUniversalStyleCompaction()) {
      
        // list of column family descriptors, first entry must always be default column family
        final List<ColumnFamilyDescriptor> cfDescriptors = Arrays.asList(
            new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY, cfOpts),
            new ColumnFamilyDescriptor("my-first-columnfamily".getBytes(), cfOpts)
        );
      
        // a list which will hold the handles for the column families once the db is opened
        final List<ColumnFamilyHandle> columnFamilyHandleList =
            new ArrayList<>();
      
        try (final DBOptions options = new DBOptions()
            .setCreateIfMissing(true)
            .setCreateMissingColumnFamilies(true);
             final RocksDB db = RocksDB.open(options,
                 "path/to/do", cfDescriptors,
                 columnFamilyHandleList)) {
      
          try {
      
            // do something
      
          } finally {
      
            // NOTE user must explicitly frees the column family handles before freeing the db
            for (final ColumnFamilyHandle columnFamilyHandle :
                columnFamilyHandleList) {
              columnFamilyHandle.close();
            }
          } // frees the column family options
        }
      } // frees the db and the db options
      ```
      
      With the changes in this PR, the Java user no longer has to worry about manually closing the Column Families, which allows them to write simpler symmetrical create/free oriented code like this:
      
      ```java
      try (final ColumnFamilyOptions cfOpts = new ColumnFamilyOptions().optimizeUniversalStyleCompaction()) {
      
        // list of column family descriptors, first entry must always be default column family
        final List<ColumnFamilyDescriptor> cfDescriptors = Arrays.asList(
            new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY, cfOpts),
            new ColumnFamilyDescriptor("my-first-columnfamily".getBytes(), cfOpts)
        );
      
        // a list which will hold the handles for the column families once the db is opened
        final List<ColumnFamilyHandle> columnFamilyHandleList =
            new ArrayList<>();
      
        try (final DBOptions options = new DBOptions()
            .setCreateIfMissing(true)
            .setCreateMissingColumnFamilies(true);
             final RocksDB db = RocksDB.open(options,
                 "path/to/do", cfDescriptors,
                 columnFamilyHandleList)) {
      
              // do something
      
          } // frees the column family options, then frees the db and the db options
        }
      }
      ```
      
      **NOTE**: The changes in this PR are backwards API compatible, which means existing code using the original approach will also continue to function correctly.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7428
      
      Reviewed By: cheng-chang
      
      Differential Revision: D24063348
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: 648d7526669923128c863ead94516bf4d50ac658
      05fba969
    • A
      Fix for clang_analyzer build failure in table_test (#7553) · 850cc0db
      Akanksha Mahajan 提交于
      Summary:
      fix for clang_analyzer build failure in table_test because of
      potential memory leak of memtable in case of ASSERT failure.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7553
      
      Test Plan:
      USE_CLANG=1 make analyze;
                 make check -j64
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D24295042
      
      Pulled By: akankshamahajan15
      
      fbshipit-source-id: e9ea184367970fff3b520e33f3ceebf28d66ac8d
      850cc0db