1. 22 10月, 2016 3 次提交
  2. 21 10月, 2016 2 次提交
    • I
      Support IngestExternalFile (remove AddFile restrictions) · 869ae5d7
      Islam AbdelRahman 提交于
      Summary:
      Changes in the diff
      
      API changes:
      - Introduce IngestExternalFile to replace AddFile (I think this make the API more clear)
      - Introduce IngestExternalFileOptions (This struct will encapsulate the options for ingesting the external file)
      - Deprecate AddFile() API
      
      Logic changes:
      - If our file overlap with the memtable we will flush the memtable
      - We will find the first level in the LSM tree that our file key range overlap with the keys in it
      - We will find the lowest level in the LSM tree above the the level we found in step 2 that our file can fit in and ingest our file in it
      - We will assign a global sequence number to our new file
      - Remove AddFile restrictions by using global sequence numbers
      
      Other changes:
      - Refactor all AddFile logic to be encapsulated in ExternalSstFileIngestionJob
      
      Test Plan:
      unit tests (still need to add more)
      addfile_stress (https://reviews.facebook.net/D65037)
      
      Reviewers: yiwu, andrewkr, lightmark, yhchiang, sdong
      
      Reviewed By: sdong
      
      Subscribers: jkedgar, hcz, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D65061
      869ae5d7
    • S
      Restrict running condition of UniversalCompactionTrivialMoveTest2 · 1d9dbef6
      sdong 提交于
      Summary: DBTestUniversalCompaction.UniversalCompactionTrivialMoveTest2 verifies non-trivial move is not triggered if we load data in sequential order. However, if there are multiple compaction threads, this conditon may not hold. Restrict the running condition to 1 compaction thread to make the test more robust.
      
      Test Plan: Run the test and make sure at least it doesn't regress normally.
      
      Reviewers: yhchiang, andrewkr, IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: leveldb, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D65277
      1d9dbef6
  3. 20 10月, 2016 6 次提交
  4. 19 10月, 2016 8 次提交
    • I
      Support SST files with Global sequence numbers [reland] · b88f8e87
      Islam AbdelRahman 提交于
      Summary:
      reland https://reviews.facebook.net/D62523
      
      - Update SstFileWriter to include a property for a global sequence number in the SST file `rocksdb.external_sst_file.global_seqno`
      - Update TableProperties to be aware of the offset of each property in the file
      - Update BlockBasedTableReader and Block to be able to honor the sequence number in `rocksdb.external_sst_file.global_seqno` property and use it to overwrite all sequence number in the file
      
      Something worth mentioning is that we don't update the seqno in the index block since and when doing a binary search, the reason for that is that it's guaranteed that SST files with global seqno will have only one user_key and each key will have seqno=0 encoded in it, This mean that this key is greater than any other key with seqno> 0. That mean that we can actually keep the current logic for these blocks
      
      Test Plan: unit tests
      
      Reviewers: sdong, yhchiang
      
      Subscribers: andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D65211
      b88f8e87
    • A
      [db_bench] add filldeterministic (Universal+level compaction) · 08616b49
      Aaron Gao 提交于
      Summary:
      in db_bench, we can dynamically create a rocksdb database that guarantees the shape of its LSM.
      universal + level compaction
      no fifo compaction
      no multi db support
      
      Test Plan:
      ./db_bench -benchmarks=fillseqdeterministic -compaction_style=1 -num_levels=3 --disable_auto_compactions -num=1000000 -value_size=1000
      ```
      ---------------------- LSM ---------------------
      Level[0]: /000480.sst(size: 35060275 bytes)
      Level[0]: /000479.sst(size: 70443197 bytes)
      Level[0]: /000478.sst(size: 141600383 bytes)
      Level[1]: /000341.sst - /000475.sst(total size: 284726629 bytes)
      Level[2]: /000071.sst - /000340.sst(total size: 568649806 bytes)
      fillseqdeterministic :      60.447 micros/op 16543 ops/sec;   16.0 MB/s
      ```
      
      Reviewers: sdong, andrewkr, IslamAbdelRahman, yhchiang
      
      Reviewed By: yhchiang
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D63111
      08616b49
    • A
      not split file in compaciton on level 0 · 52c9808c
      Aaron Gao 提交于
      Summary: we should not split file on level 0 in compaction because it will fail the following verification of seqno order on level 0
      
      Test Plan: check with filldeterministic in db_bench
      
      Reviewers: yhchiang, andrewkr
      
      Reviewed By: andrewkr
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D65193
      52c9808c
    • A
      fix db_stress assertion failure · 5e0d6b4c
      Aaron Gao 提交于
      Summary: in rocksdb::DBIter::FindValueForCurrentKey(), last_not_merge_type could also be SingleDelete() which is omitted
      
      Test Plan: db_iter_test
      
      Reviewers: yhchiang, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D65187
      5e0d6b4c
    • Y
      Bump RocksDB version to 4.13 (#1405) · ab539983
      Yueh-Hsuan Chiang 提交于
      Summary:
      Bump RocksDB version to 4.13
      
      Test Plan:
      unit tests
      
      Reviewers: sdong, IslamAbdelRahman, andrewkr, lightmark
      
      Subscribers: leveldb
      ab539983
    • S
      SamePrefixTest.InDomainTest to clear the test directory before testing · b4d07123
      sdong 提交于
      Summary: SamePrefixTest.InDomainTest may fail if the previous run of some test cases in prefix_test fail.
      
      Test Plan: Run the test
      
      Reviewers: lightmark, yhchiang, IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: leveldb, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D65163
      b4d07123
    • I
      Avoid calling GetDBOptions() inside GetFromBatchAndDB() · aa09d033
      Islam AbdelRahman 提交于
      Summary:
      MyRocks hit a regression, @mung generated perf reports showing that the reason is the cost of calling `GetDBOptions()` inside `GetFromBatchAndDB()`
      This diff avoid calling `GetDBOptions` and use the `ImmutableDBOptions` instead
      
      Test Plan: make check -j64
      
      Reviewers: sdong, yiwu
      
      Reviewed By: yiwu
      
      Subscribers: andrewkr, dhruba, mung
      
      Differential Revision: https://reviews.facebook.net/D65151
      aa09d033
    • A
      Compaction Support for Range Deletion · 6fbe96ba
      Andrew Kryczka 提交于
      Summary:
      This diff introduces RangeDelAggregator, which takes ownership of iterators
      provided to it via AddTombstones(). The tombstones are organized in a two-level
      map (snapshot stripe -> begin key -> tombstone). Tombstone creation avoids data
      copy by holding Slices returned by the iterator, which remain valid thanks to pinning.
      
      For compaction, we create a hierarchical range tombstone iterator with structure
      matching the iterator over compaction input data. An aggregator based on that
      iterator is used by CompactionIterator to determine which keys are covered by
      range tombstones. In case of merge operand, the same aggregator is used by
      MergeHelper. Upon finishing each file in the compaction, relevant range tombstones
      are added to the output file's range tombstone metablock and file boundaries are
      updated accordingly.
      
      To check whether a key is covered by range tombstone, RangeDelAggregator::ShouldDelete()
      considers tombstones in the key's snapshot stripe. When this function is used outside of
      compaction, it also checks newer stripes, which can contain covering tombstones. Currently
      the intra-stripe check involves a linear scan; however, in the future we plan to collapse ranges
      within a stripe such that binary search can be used.
      
      RangeDelAggregator::AddToBuilder() adds all range tombstones in the table's key-range
      to a new table's range tombstone meta-block. Since range tombstones may fall in the gap
      between files, we may need to extend some files' key-ranges. The strategy is (1) first file
      extends as far left as possible and other files do not extend left, (2) all files extend right
      until either the start of the next file or the end of the last range tombstone in the gap,
      whichever comes first.
      
      One other notable change is adding release/move semantics to ScopedArenaIterator
      such that it can be used to transfer ownership of an arena-allocated iterator, similar to
      how unique_ptr is used for malloc'd data.
      
      Depends on D61473
      
      Test Plan: compaction_iterator_test, mock_table, end-to-end tests in D63927
      
      Reviewers: sdong, IslamAbdelRahman, wanning, yhchiang, lightmark
      
      Reviewed By: lightmark
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D62205
      6fbe96ba
  5. 18 10月, 2016 3 次提交
  6. 15 10月, 2016 4 次提交
  7. 14 10月, 2016 7 次提交
    • A
      fix assertion failure in Prev() · 21e8dace
      Aaron Gao 提交于
      Summary:
      fix assertion failure in db_stress.
      It happens because of prefix seek key is larger than merge iterator key when they have the same user key
      
      Test Plan: ./db_stress --max_background_compactions=1 --max_write_buffer_number=3 --sync=0 --reopen=20 --write_buffer_size=33554432 --delpercent=5 --log2_keys_per_lock=10 --block_size=16384 --allow_concurrent_memtable_write=0 --test_batches_snapshots=0 --max_bytes_for_level_base=67108864 --progress_reports=0 --mmap_read=0 --writepercent=35 --disable_data_sync=0 --readpercent=50 --subcompactions=4 --ops_per_thread=20000000 --memtablerep=skip_list --prefix_size=0 --target_file_size_multiplier=1 --column_families=1 --threads=32 --disable_wal=0 --open_files=500000 --destroy_db_initially=0 --target_file_size_base=16777216 --nooverwritepercent=1 --iterpercent=10 --max_key=100000000 --prefixpercent=0 --use_clock_cache=false --kill_random_test=888887 --cache_size=1048576 --verify_checksum=1
      
      Reviewers: sdong, andrewkr, yiwu, yhchiang
      
      Reviewed By: yhchiang
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D65025
      21e8dace
    • D
      b9311aa6
    • S
      check_format_compatible.sh to use some branch which allows to run with GCC 4.8 (#1393) · a249a0b7
      Siying Dong 提交于
      Summary:
      Some older tags don't run GCC 4.8 with FB internal setting. Fixed them and created branches. Change the format compatible script accordingly.
      
      Also add more releases to check format compatibility.
      a249a0b7
    • Y
      Remove an assertion for single-delete in MergeHelper::MergeUntil · 040328a3
      Yueh-Hsuan Chiang 提交于
      Summary:
      Previously we have an assertion which triggers when we issue Merges
      after a single delete.  However, merges after a single delete are
      unrelated to that single delete.  Thus this behavior should be
      allowed.
      
      This will address a flakyness of db_stress.
      
      Test Plan: db_stress
      
      Reviewers: IslamAbdelRahman, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D64923
      040328a3
    • Y
      Relax the acceptable bias RateLimiterTest::Rate test be 25% · 8cbe3e10
      Yueh-Hsuan Chiang 提交于
      Summary:
      In the current implementation of RateLimiter, the difference
      between the configured rate and the actual rate might be more
      than 20%, while our test only allows 15% difference.  This diff
      relaxes the acceptable bias RateLimiterTest::Rate test be 25%
      to make the test less flaky.
      
      Test Plan: rate_limiter_test
      
      Reviewers: IslamAbdelRahman, andrewkr, yiwu, lightmark, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D64941
      8cbe3e10
    • I
      Log successful AddFile · f26a139d
      Islam AbdelRahman 提交于
      Summary: Log successful AddFile
      
      Test Plan: visually check LOG file
      
      Reviewers: yiwu, andrewkr, lightmark, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, jkedgar, dhruba
      
      Differential Revision: https://reviews.facebook.net/D65019
      f26a139d
    • I
      Fix compaction conflict with running compaction · 5691a1d8
      Islam AbdelRahman 提交于
      Summary:
      Issue scenario:
      (1) We have 3 files in L1 and we issue a compaction that will compact them into 1 file in L2
      (2) While compaction (1) is running, we flush a file into L0 and trigger another compaction that decide to move this file to L1 and then move it again to L2 (this file don't overlap with any other files)
      (3) compaction (1) finishes and install the file it generated in L2, but this file overlap with the file we generated in (2) so we break the LSM consistency
      
      Looks like this issue can be triggered by using non-exclusive manual compaction or AddFile()
      
      Test Plan: unit tests
      
      Reviewers: sdong
      
      Reviewed By: sdong
      
      Subscribers: hermanlee4, jkedgar, andrewkr, dhruba, yoshinorim
      
      Differential Revision: https://reviews.facebook.net/D64947
      5691a1d8
  8. 13 10月, 2016 7 次提交