1. 12 12月, 2018 6 次提交
    • S
      Direct I/O Close() shouldn't rewrite the last block (#4771) · ae25546a
      Siying Dong 提交于
      Summary:
      In Direct I/O case, WritableFileWriter::Close() rewrites the last block again, even if there is nothing new. The reason is that, Close() flushes the buffer. For non-direct I/O case, the buffer is empty in this case so it is a no-op. However, in direct I/O case, the partial data in the last block is kept in the buffer because it needs to be rewritten for the next write. This piece of data is flushed again. This commit fixes it by skipping this write out if `pending_sync_` flag shows that there isn't new data sync last sync.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4771
      
      Differential Revision: D13420426
      
      Pulled By: siying
      
      fbshipit-source-id: 9d39ec9a215b1425d4ed40d85e0eba1f5daa75c6
      ae25546a
    • T
      Fix swallowing of exception in Java RocksDB when loading native library (#4728) · 49666d76
      Tathagata Das 提交于
      Summary:
      This PR fixes #4721. When an exception is caught and thrown as a different exception, then the original exception should be  inserted as a cause of the new exception. This bug in RocksDB was swallowing the underlying exception from `NativeLibraryLoader` and throwing the following exception
      ```
      ...
      Caused by: java.lang.RuntimeException: Unable to load the RocksDB shared libraryjava.nio.channels.ClosedByInterruptException
        at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:67)
        at org.rocksdb.RocksDB.<clinit>(RocksDB.java:35)
        ... 73 more
      ```
      
      The fix is simple and self-explanatory.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4728
      
      Differential Revision: D13418371
      
      Pulled By: sagar0
      
      fbshipit-source-id: d76c25af2a83a0f8ba62cc8d7b721bfddc85fdf1
      49666d76
    • A
      Prepare FragmentedRangeTombstoneIterator for use in compaction (#4740) · cad248f5
      Abhishek Madan 提交于
      Summary:
      To support the flush/compaction use cases of RangeDelAggregator
      in v2, FragmentedRangeTombstoneIterator now supports dropping tombstones
      that cannot be read in the compaction output file. Furthermore,
      FragmentedRangeTombstoneIterator supports the "snapshot striping" use
      case by allowing an iterator to be split by a list of snapshots.
      RangeDelAggregatorV2 will use these changes in a follow-up change.
      
      In the process of making these changes, other miscellaneous cleanups
      were also done in these files.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4740
      
      Differential Revision: D13287382
      
      Pulled By: abhimadan
      
      fbshipit-source-id: f5aeb03e1b3058049b80c02a558ee48f723fa48c
      cad248f5
    • A
      RocksJava must compile on JDK7 (#4768) · d3daa0db
      Adam Retter 提交于
      Summary:
      Fixes some RocksJava regressions recently introduced, whereby RocksJava would not build on JDK 7.
      These should have been visible on Travis-CI!
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4768
      
      Differential Revision: D13418173
      
      Pulled By: sagar0
      
      fbshipit-source-id: 57bf223188887f84d9e072031af2e0d2c8a69c30
      d3daa0db
    • S
      Change directory where ExternalSSTFileBasicTest runs (#4766) · dde3ef11
      Sagar Vemuri 提交于
      Summary:
      Change the directory where ExternalSSTFileBasicTest* tests run.
      
      **Problem:**
      Without this change, I spent considerable time chasing around a non-existent issue as ExternalSSTFileTest.* and ExternalSSTFileBasicTest.* create similar directories.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4766
      
      Differential Revision: D13409384
      
      Pulled By: sagar0
      
      fbshipit-source-id: c33e1f4d505dfa6efbc788d6c57cdb680053ded3
      dde3ef11
    • A
      Fix issues with RocksJava dropColumnFamily (#4770) · f8943ec0
      Adam Retter 提交于
      Summary:
      Closes https://github.com/facebook/rocksdb/issues/4409
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4770
      
      Differential Revision: D13416802
      
      Pulled By: ajkr
      
      fbshipit-source-id: 8a351e9b80dc9eeb6073467fbc67cd2f544917b0
      f8943ec0
  2. 11 12月, 2018 4 次提交
    • B
      Promote CompactionFilter* accessors to ColumnFamilyOptionsInterface (#3461) · 8261e002
      Ben Clay 提交于
      Summary:
      When adding CompactionFilter and CompactionFilterFactory settings to the Java layer, ColumnFamilyOptions was modified directly instead of ColumnFamilyOptionsInterface. This meant that the old-stye Options monolith was left behind.
      
      This patch fixes that, by:
      - promoting the CompactionFilter + CompactionFilterFactory setters from ColumnFamilyOptions -> ColumnFamilyOptionsInterface
      - adding getters in ColumnFamilyOptionsInterface
      - implementing setters in Options
      - implementing getters in both ColumnFamilyOptions and Options
      - adding testcases
      - reusing a test CompactionFilterFactory by moving it to a common location
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/3461
      
      Differential Revision: D13278788
      
      Pulled By: sagar0
      
      fbshipit-source-id: 72602c6eb97dc80734e718abb5e2e9958d3c753b
      8261e002
    • A
      Properly set smallest key of subcompaction output (#4723) · 64aabc91
      Abhishek Madan 提交于
      Summary:
      It is possible to see a situation like the following when
      subcompactions are enabled:
      1. A subcompaction boundary is set to `[b, e)`.
      2. The first output file in a subcompaction has `c@20` as its smallest key
      3. The range tombstone `[a, d)30` is encountered.
      4. The tombstone is written to the range-del meta block and the new
         smallest key is set to `b@0` (since no keys in this subcompaction's
         output can be smaller than `b`).
      5. A key `b@10` in a lower level will now reappear, since it is not
         covered by the truncated start key `b@0`.
      
      In general, unless the smallest data key in a file has a seqnum of 0, it
      is not safe to truncate a tombstone at the start key to have a seqnum of
      0, since it can expose keys with a seqnum greater than 0 but less than
      the tombstone's actual seqnum.
      
      To fix this, when the lower bound of a file is from the subcompaction
      boundaries, we now set the seqnum of an artificially extended smallest
      key to the tombstone's seqnum. This is safe because subcompactions
      operate over disjoint sets of keys, and the subcompactions that can
      experience this problem are not the first subcompaction (which is
      unbounded on the left).
      
      Furthermore, there is now an assertion to detect the described anomalous
      case.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4723
      
      Differential Revision: D13236188
      
      Pulled By: abhimadan
      
      fbshipit-source-id: a6da6a113f2de1e2ff307ca72e055300c8fe5692
      64aabc91
    • A
      Reduce javadoc warnings (#4764) · 10e7de77
      Adam Singer 提交于
      Summary:
      Compile logs have a bit of noise due to missing javadoc annotations. Updating docs to reduce.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4764
      
      Differential Revision: D13400193
      
      Pulled By: sagar0
      
      fbshipit-source-id: 65c7efb70747cc3bb35a336a6881ea6536ae5ff4
      10e7de77
    • M
      Fix inline comments for assumed_tracked (#4762) · 21fca397
      Maysam Yabandeh 提交于
      Summary:
      Fix the definition of assumed_tracked in Transaction that was introduced in #4680
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4762
      
      Differential Revision: D13399150
      
      Pulled By: maysamyabandeh
      
      fbshipit-source-id: 2a30fe49e3c44adacd7e45cd48eae95023ca9dca
      21fca397
  3. 08 12月, 2018 5 次提交
  4. 07 12月, 2018 1 次提交
    • M
      Extend Transaction::GetForUpdate with do_validate (#4680) · b878f93c
      Maysam Yabandeh 提交于
      Summary:
      Transaction::GetForUpdate is extended with a do_validate parameter with default value of true. If false it skips validating the snapshot (if there is any) before doing the read. After the read it also returns the latest value (expects the ReadOptions::snapshot to be nullptr). This allows RocksDB applications to use GetForUpdate similarly to how InnoDB does. Similarly ::Merge, ::Put, ::Delete, and ::SingleDelete are extended with assume_exclusive_tracked with default value of false. It true it indicates that call is assumed to be after a ::GetForUpdate(do_validate=false).
      The Java APIs are accordingly updated.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4680
      
      Differential Revision: D13068508
      
      Pulled By: maysamyabandeh
      
      fbshipit-source-id: f0b59db28f7f6a078b60844d902057140765e67d
      b878f93c
  5. 06 12月, 2018 4 次提交
    • Y
      Update HISTORY.md (#4753) · 1d679e35
      Yanqin Jin 提交于
      Summary:
      As titled. Update history to include a recent bug fix in
      9be3e6b4.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4753
      
      Differential Revision: D13350286
      
      Pulled By: riversand963
      
      fbshipit-source-id: b6324780dee4cb1757bc2209403a08531c150c08
      1d679e35
    • Y
      Allow file-ingest-triggered flush to skip waiting for write-stall clear (#4751) · 9be3e6b4
      Yanqin Jin 提交于
      Summary:
      When write stall has already been triggered due to number of L0 files reaching
      threshold, file ingestion must proceed with its flush without waiting for the
      write stall condition to cleared by the compaction because compaction can wait
      for ingestion to finish (circular wait).
      
      In order to avoid this wait, we can set `FlushOptions.allow_write_stall` to be
      true (default is false). Setting it to false can cause deadlock.
      
      This can happen when the number of compaction threads is low.
      
      Considere the following
      ```
      Time  compaction_thread                        ingestion_thread
       |                                             num_running_ingest_file_++
       |    while(num_running_ingest_file_>0){wait}
       |                                             flush
       V
      ```
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4751
      
      Differential Revision: D13343037
      
      Pulled By: riversand963
      
      fbshipit-source-id: d3b95938814af46ec4c463feff0b50c70bd8b23f
      9be3e6b4
    • Y
      Move a function to critical section (#4752) · b96fccb1
      Yanqin Jin 提交于
      Summary:
      Test plan
      ```
      $make clean && make -j32 all check
      ```
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4752
      
      Differential Revision: D13344705
      
      Pulled By: riversand963
      
      fbshipit-source-id: fc3a43174d09d70ccc2b09decd78e1da1b6ba9d1
      b96fccb1
    • A
      Fix buck dev mode fbcode builds (#4747) · e58d7695
      anand76 提交于
      Summary:
      Don't enable ROCKSDB_JEMALLOC unless the build mode is opt and default
      allocator is jemalloc. In dev mode, this is causing compile/link errors such as -
      ```
      stderr: buck-out/dev/gen/rocksdb/src/rocksdb_lib#compile-pic-malloc_stats.cc.o4768b59e,gcc-5-glibc-2.23-clang/db/malloc_stats.cc.o:malloc_stats.cc:function rocksdb::DumpMallocStats(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*): error: undefined reference to 'malloc_stats_print'
      clang-7.0: error: linker command failed with exit code 1
      ```
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4747
      
      Differential Revision: D13324840
      
      Pulled By: anand1976
      
      fbshipit-source-id: 45ffbd4f63fe4d9e8a0473d8f066155e4ef64a14
      e58d7695
  6. 04 12月, 2018 1 次提交
  7. 01 12月, 2018 4 次提交
  8. 30 11月, 2018 6 次提交
    • M
      WritePrepared: followup fix for snapshot double release issue (#4734) · f1b0841f
      Maysam Yabandeh 提交于
      Summary:
      The fix in #4727 for double snapshot release was incomplete since it does not properly remove the duplicate entires in the snapshot list after finding that a snapshot is still valid. The patch does that and also improves the unit test to show the issue.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4734
      
      Differential Revision: D13266260
      
      Pulled By: maysamyabandeh
      
      fbshipit-source-id: 351e2c40cca45a87b757774c11af74182314911e
      f1b0841f
    • Y
      JemallocNodumpAllocator: option to limit tcache memory usage (#4736) · cf1df5d3
      Yi Wu 提交于
      Summary:
      Add option to limit tcache usage by allocation size. This is to reduce total tcache size in case there are many user threads accessing the allocator and incur non-trivial memory usage.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4736
      
      Differential Revision: D13269305
      
      Pulled By: yiwu-arbug
      
      fbshipit-source-id: 95a9b7fc67facd66837c849137e30e137112e19d
      cf1df5d3
    • S
      Move FIFOCompactionPicker to a separate file (#4724) · 70645355
      Sagar Vemuri 提交于
      Summary:
      **Summary:**
      Simplified the code layout by moving FIFOCompactionPicker to a separate file.
      **Why?:**
      While trying to add ttl functionality to universal compaction, I found that `FIFOCompactionPicker` class and its impl methods to be interspersed between `LevelCompactionPicker` methods which kind-of made the code a little hard to traverse. So I moved `FIFOCompactionPicker` to a separate compaction_picker_fifo.h/cc file, similar to `UniversalCompactionPicker`.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4724
      
      Differential Revision: D13227914
      
      Pulled By: sagar0
      
      fbshipit-source-id: 89471766ea67fa4d87664a41c057dd7df4b3d4e3
      70645355
    • Y
      Fix a flaky test DBFlushTest.SyncFail (#4633) · 8d7bc76f
      Yanqin Jin 提交于
      Summary:
      There is a race condition in DBFlushTest.SyncFail, as illustrated below.
      ```
      time         thread1                             bg_flush_thread
        |     Flush(wait=false, cfd)
        |     refs_before=cfd->current()->TEST_refs()   PickMemtable calls cfd->current()->Ref()
        V
      ```
      The race condition between thread1 getting the ref count of cfd's current
      version and bg_flush_thread incrementing the cfd's current version makes it
      possible for later assertion on refs_before to fail. Therefore, we add test
      sync points to enforce the order and assert on the ref count before and after
      PickMemtable is called in bg_flush_thread.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4633
      
      Differential Revision: D12967131
      
      Pulled By: riversand963
      
      fbshipit-source-id: a99d2bacb7869ec5d8d03b24ef2babc0e6ae1a3b
      8d7bc76f
    • K
      db/repair: reset Repair::db_lock_ in ctor (#4683) · 7dbee387
      Kefu Chai 提交于
      Summary:
      there is chance that
      
      * the caller tries to repair the db when holding the db_lock, in
        that case the env implementation might not set the `lock`
        parameter of Repairer::Run().
      * the caller somehow never calls Repairer::Run().
      
      either way, the desctructor of Repair will compare the uninitialized
      db_lock_ with nullptr, and tries to unlock it. there is good chance
      that the db_lock_ is not nullptr, then boom.
      Signed-off-by: NKefu Chai <tchaikov@gmail.com>
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4683
      
      Differential Revision: D13260287
      
      Pulled By: riversand963
      
      fbshipit-source-id: 878a119d2e9f10a0fa17ee62cf3fb24b33d49fa5
      7dbee387
    • A
      Fix failure of sst_file_reader_test in LITE mode regression test (#4725) · 8d9b4d97
      anand76 提交于
      Summary:
      Add a dummy main() in sst_file_reader_test for ROCKSDB_LITE to fix link failure in regression
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4725
      
      Differential Revision: D13252885
      
      Pulled By: anand1976
      
      fbshipit-source-id: 0e22b964815e2bf01aff7d03ed4ae59d44fa86f1
      8d9b4d97
  9. 29 11月, 2018 3 次提交
    • M
      WritePrepared: Fix double snapshot release issue (#4727) · 1a5a93ff
      Maysam Yabandeh 提交于
      Summary:
      Currently the garbage collection of items in old_commit_map_ was done upon ::ReleaseSnapshot. The assumption behind this method was that the sequence number of snapshots are unique, which is incorrect. In the very rare cases that two consecutive snapshot have the same sequence number this could lead the release of the first snapshot affect the old_commit_map_ that is necessary to service the reads of the second snapshot. The bug would be triggered only if i) two snapshot have the same seq, ii) both of them are very old (older than the last ~4m transactions), and iii) there is commit entry overlapping with the snapshot seq number.
      It is fixed by doing the cleanup of old_commit_map_ in UpdateSnapshot: the new list of snapshots are compared with the old one and the missing sequence numbers are concluded released. If two snapshots have the same seq number, after the release of one of them, the seq number still appears in the snapshot least and thus not cleaned up prematurely.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4727
      
      Differential Revision: D13246495
      
      Pulled By: maysamyabandeh
      
      fbshipit-source-id: 93b87a5042afd8060889df245526d3f5d29de9fe
      1a5a93ff
    • Y
      Fix BlockBasedTable not always using memory allocator if available (#4678) · 512a5e3e
      Yi Wu 提交于
      Summary:
      Fix block based table reader not using memory_allocator when allocating index blocks and compression dictionary blocks.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4678
      
      Differential Revision: D13054594
      
      Pulled By: yiwu-arbug
      
      fbshipit-source-id: 379f25bcc665395662511c4f873f4b7b55104ce2
      512a5e3e
    • A
      Clean up FragmentedRangeTombstoneList (#4692) · 8fe1e06c
      Abhishek Madan 提交于
      Summary:
      Removed `one_time_use` flag, which removed the need for some
      tests, and changed all `NewRangeTombstoneIterator` methods to return
      `FragmentedRangeTombstoneIterators`.
      
      These changes also led to removing `RangeDelAggregatorV2::AddUnfragmentedTombstones`
      and one of the `MemTableListVersion::AddRangeTombstoneIterators` methods.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4692
      
      Differential Revision: D13106570
      
      Pulled By: abhimadan
      
      fbshipit-source-id: cbab5432d7fc2d9cdfd8d9d40361a1bffaa8f845
      8fe1e06c
  10. 28 11月, 2018 6 次提交
    • Z
      Add the max trace file size limitation option to Tracing (#4610) · 7125e246
      Zhichao Cao 提交于
      Summary:
      If user do not end the trace manually, the tracing will continue which can potential use up all the storage space and cause problem. In this PR, the max trace file size is added to the TraceOptions and user can set the value if they need or the default is 64GB.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4610
      
      Differential Revision: D12893400
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: acf4b5a6076bb691778bdfbac4864e1006758953
      7125e246
    • S
      Fix Mac build break in casting (#4722) · c94f073e
      Sagar Vemuri 提交于
      Summary:
      Mac build is failing with the below error:
      ```
      $ make db_bench -j8
      ...
      ...
      tools/db_bench_tool.cc:4583:25: error: no matching function for call to 'max'
                    (uint64_t)std::max(0l, seek_pos - FLAGS_max_scan_distance),
                              ^~~~~~~~
      /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:2717:1: note: candidate template ignored: deduced conflicting types for parameter '_Tp' ('long' vs. 'long long')
      max(const _Tp& __a, const _Tp& __b)
      ^
      /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:2727:1: note: candidate template ignored: could not match 'initializer_list<type-parameter-0-0>' against 'long'
      max(initializer_list<_Tp> __t, _Compare __comp)
      ^
      /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:2709:1: note: candidate function template not viable: requires 3 arguments, but 2 were provided
      max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      ^
      /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:2735:1: note: candidate function template not viable: requires single argument '__t', but 2 arguments were provided
      max(initializer_list<_Tp> __t)
      ^
      1 error generated.
      make: *** [tools/db_bench_tool.o] Error 1
      ```
      
      My compiler version:
      Mac OS X Mojave
      ```
      $ clang++ --version
      Apple LLVM version 10.0.0 (clang-1000.11.45.5)
      Target: x86_64-apple-darwin18.2.0
      Thread model: posix
      InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
      ```
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4722
      
      Differential Revision: D13220196
      
      Pulled By: sagar0
      
      fbshipit-source-id: 01e5e928288a5613027c83a26ad8aedf04438b14
      c94f073e
    • H
      Add SstFileReader to read sst files (#4717) · 5e72bc11
      Huachao Huang 提交于
      Summary:
      A user friendly sst file reader is useful when we want to access sst
      files outside of RocksDB. For example, we can generate an sst file
      with SstFileWriter and send it to other places, then use SstFileReader
      to read the file and process the entries in other ways.
      
      Also rename the original SstFileReader to SstFileDumper because of
      name conflict, and seems SstFileDumper is more appropriate for tools.
      
      TODO: there is only a very simple test now, because I want to get some feedback first.
      If the changes look good, I will add more tests soon.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4717
      
      Differential Revision: D13212686
      
      Pulled By: ajkr
      
      fbshipit-source-id: 737593383264c954b79e63edaf44aaae0d947e56
      5e72bc11
    • A
      Remove enable_internal_stats (#4714) · 3fa80f0e
      Adam Singer 提交于
      Summary:
      Simple patch to address comments in [statistics.h#L65](https://github.com/facebook/rocksdb/blob/master/monitoring/statistics.h#L65|statistics.h#L65)  `TODO(ajkr): clean this up since there are no internal stats anymore`
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4714
      
      Differential Revision: D13208093
      
      Pulled By: ajkr
      
      fbshipit-source-id: 4468badb850592411147539f859082644f5296f6
      3fa80f0e
    • A
      Remove DeleteRange experimental comment (#4709) · e7644818
      Abhishek Madan 提交于
      Summary:
      DeleteRange is now ready for production use. Change the header comment to reflect this, and update HISTORY.md with the feature's status.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4709
      
      Differential Revision: D13209055
      
      Pulled By: abhimadan
      
      fbshipit-source-id: 65423eb1a4927cf593c38254cd87c322f73ae137
      e7644818
    • A
      Test mapping of Histograms and HistogramsNameMap (#4720) · 1db4a096
      Adam Singer 提交于
      Summary:
      Adding sanity check test for mapping of `Histograms` and `HistogramsNameMap`
      
      ```
      [==========] Running 2 tests from 1 test case.
      [----------] Global test environment set-up.
      [----------] 2 tests from StatisticsTest
      [ RUN      ] StatisticsTest.SanityTickers
      [       OK ] StatisticsTest.SanityTickers (0 ms)
      [ RUN      ] StatisticsTest.SanityHistograms
      [       OK ] StatisticsTest.SanityHistograms (0 ms)
      [----------] 2 tests from StatisticsTest (0 ms total)
      
      [----------] Global test environment tear-down
      [==========] 2 tests from 1 test case ran. (0 ms total)
      [  PASSED  ] 2 tests.
      ```
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/4720
      
      Differential Revision: D13217061
      
      Pulled By: ajkr
      
      fbshipit-source-id: 6427f4e684c36b2f3c3440808b74fee86a364683
      1db4a096