1. 25 10月, 2016 5 次提交
    • S
      OptionChangeMigration() to support FIFO compaction · f41df304
      sdong 提交于
      Summary: OptionChangeMigration() to support FIFO compaction. If the DB before migration is using FIFO compaction, nothing should be done. If the desitnation option is FIFO options, compact to one single L0 file if the source has more than one levels.
      
      Test Plan: Run option_change_migration_test
      
      Reviewers: andrewkr, IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: leveldb, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D65289
      f41df304
    • A
      Changing the legocastle run to use valgrind_test instead of _check · 2e8004e6
      Anirban Rahut 提交于
      Summary:
      valgrind_test is the correct way to run valgrind tests.
      this is becasue we need to force DISABLE_JEMALLOC
      
      Test Plan: Running sandcastle and contrun
      
      Reviewers: IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D65451
      2e8004e6
    • A
      revert Prev() in MergingIterator to use previous code in non-prefix-seek mode · 9de2f752
      Aaron Gao 提交于
      Summary: Siying suggested to keep old code for normal mode prev() for safety
      
      Test Plan: make check -j64
      
      Reviewers: yiwu, andrewkr, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D65439
      9de2f752
    • S
      DBSSTTest.RateLimitedDelete: not to use real clock · 24495186
      sdong 提交于
      Summary: Using real clock causes failures of DBSSTTest.RateLimitedDelete in some cases. Turn away from the real time. Use fake time instead.
      
      Test Plan: Run the tests and all existing tests.
      
      Reviewers: yiwu, IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: leveldb, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D65145
      24495186
    • S
      Fix a bug that may cause a deleted row to appear again · 1168cb81
      sdong 提交于
      Summary:
      The previous fix of reappearing of a deleted row 0ce258f9 missed a corner case, which can be reproduced using test CompactionPickerTest.OverlappingUserKeys7. Consider such an example:
      
      input level file: 1[B E] 2[F H]
      output level file: 3[A C] 4[D I] 5[I K]
      
      First file 2 is picked, which overlaps to file 4. 4 expands to 5. Now the all range is [D K] with 2 output level files. When we try to expand that, [D K] overlaps with file 1 and 2 in the input level, and 1 and 2 overlaps with 3 and 4 in the output level. So we end up with picking 3 and 4 in the output level. Without expanding, it also has 2 files, so we determine the output level doesn't change, although they are the different two files.
      
      The fix is to expand the output level files after we picked 3 and 4. In that case, there will be three output level files so we will abort the expanding.
      
      I also added two unit tests related to marked_for_compaction and being_compacted. They have been passing though.
      
      Test Plan: Run the new unit test, as well as all other tests.
      
      Reviewers: andrewkr, IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: yoshinorim, leveldb, andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D65373
      1168cb81
  2. 24 10月, 2016 1 次提交
  3. 22 10月, 2016 4 次提交
  4. 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
  5. 20 10月, 2016 6 次提交
  6. 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
  7. 18 10月, 2016 3 次提交
  8. 15 10月, 2016 4 次提交
  9. 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