1. 15 3月, 2014 3 次提交
  2. 13 3月, 2014 1 次提交
    • K
      A heuristic way to check if a memtable is full · 11da8bc5
      Kai Liu 提交于
      Summary:
      This is is based on https://reviews.facebook.net/D15027. It's not finished but I would like to give a prototype to avoid arena over-allocation while making better use of the already allocated memory blocks.
      
      Instead of check approximate memtable size, we will take a deeper look at the arena, which incorporate essential idea that @sdong suggests: flush when arena has allocated its last and the last is "almost full"
      
      Test Plan: N/A
      
      Reviewers: haobo, sdong
      
      Reviewed By: sdong
      
      CC: leveldb, sdong
      
      Differential Revision: https://reviews.facebook.net/D15051
      11da8bc5
  3. 12 3月, 2014 2 次提交
    • S
      Fix data race against logging data structure because of LogBuffer · bd45633b
      sdong 提交于
      Summary:
      @igor pointed out that there is a potential data race because of the way we use the newly introduced LogBuffer. After "bg_compaction_scheduled_--" or "bg_flush_scheduled_--", they can both become 0. As soon as the lock is released after that, DBImpl's deconstructor can go ahead and deconstruct all the states inside DB, including the info_log object hold in a shared pointer of the options object it keeps. At that point it is not safe anymore to continue using the info logger to write the delayed logs.
      
      With the patch, lock is released temporarily for log buffer to be flushed before "bg_compaction_scheduled_--" or "bg_flush_scheduled_--". In order to make sure we don't miss any pending flush or compaction, a new flag bg_schedule_needed_ is added, which is set to be true if there is a pending flush or compaction but not scheduled because of the max thread limit. If the flag is set to be true, the scheduling function will be called before compaction or flush thread finishes.
      
      Thanks @igor for this finding!
      
      Test Plan: make all check
      
      Reviewers: haobo, igor
      
      Reviewed By: haobo
      
      CC: dhruba, ljin, yhchiang, igor, leveldb
      
      Differential Revision: https://reviews.facebook.net/D16767
      bd45633b
    • S
      Env to add a function to allow users to query waiting queue length · 01dcef11
      sdong 提交于
      Summary: Add a function to Env so that users can query the waiting queue length of each thread pool
      
      Test Plan: add a test in env_test
      
      Reviewers: haobo
      
      Reviewed By: haobo
      
      CC: dhruba, igor, yhchiang, ljin, nkg-, leveldb
      
      Differential Revision: https://reviews.facebook.net/D16755
      01dcef11
  4. 11 3月, 2014 3 次提交
    • L
      Consolidate SliceTransform object ownership · 8d007b4a
      Lei Jin 提交于
      Summary:
      (1) Fix SanitizeOptions() to also check HashLinkList. The current
      dynamic case just happens to work because the 2 classes have the same
      layout.
      (2) Do not delete SliceTransform object in HashSkipListFactory and
      HashLinkListFactory destructor. Reason: SanitizeOptions() enforces
      prefix_extractor and SliceTransform to be the same object when
      Hash**Factory is used. This makes the behavior strange: when
      Hash**Factory is used, prefix_extractor will be released by RocksDB. If
      other memtable factory is used, prefix_extractor should be released by
      user.
      
      Test Plan: db_bench && make asan_check
      
      Reviewers: haobo, igor, sdong
      
      Reviewed By: igor
      
      CC: leveldb, dhruba
      
      Differential Revision: https://reviews.facebook.net/D16587
      8d007b4a
    • H
      [RocksDB] LogBuffer Cleanup · 66da4679
      Haobo Xu 提交于
      Summary: Moved LogBuffer class to an internal header. Removed some unneccesary indirection. Enabled log buffer for BackgroundCallFlush. Forced log buffer flush right after Unlock to improve time ordering of info log.
      
      Test Plan: make check; db_bench compare LOG output
      
      Reviewers: sdong
      
      Reviewed By: sdong
      
      CC: leveldb, igor
      
      Differential Revision: https://reviews.facebook.net/D16707
      66da4679
    • I
      Add option verify_checksums_in_compaction · 04d2c26e
      Igor Canadi 提交于
      Summary:
      If verify_checksums_in_compaction is true, compaction will verify checksums. This is default.
      If it's false, compaction doesn't verify checksums. This is useful for in-memory workloads.
      
      Test Plan: corruption_test
      
      Reviewers: dhruba
      
      Reviewed By: dhruba
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D16695
      04d2c26e
  5. 08 3月, 2014 2 次提交
  6. 07 3月, 2014 2 次提交
  7. 06 3月, 2014 4 次提交
    • K
      Make sure GetUniqueID releated tests run on "regular" storage · abeee9f2
      Kai Liu 提交于
      Summary:
      With the use of tmpfs or ramfs, unit tests related to GetUniqueID()
      failed because of the failure from ioctl, which doesn't work with these
      fancy file systems at all.
      
      I fixed this issue and make sure all related tests run on the "regular"
      storage (disk or flash).
      
      Test Plan: TEST_TMPDIR=/dev/shm make check -j32
      
      Reviewers: igor, dhruba
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D16593
      abeee9f2
    • S
      Buffer info logs when picking compactions and write them out after releasing the mutex · ecb1ffa2
      sdong 提交于
      Summary: Now while the background thread is picking compactions, it writes out multiple info_logs, especially for universal compaction, which introduces a chance of waiting log writing in mutex, which is bad. To remove this risk, write all those info logs to a buffer and flush it after releasing the mutex.
      
      Test Plan:
      make all check
      check the log lines while running some tests that trigger compactions.
      
      Reviewers: haobo, igor, dhruba
      
      Reviewed By: dhruba
      
      CC: i.am.jin.lei, dhruba, yhchiang, leveldb, nkg-
      
      Differential Revision: https://reviews.facebook.net/D16515
      ecb1ffa2
    • S
      Allow user to specify log level for info_log · 4405f3a0
      sdong 提交于
      Summary:
      Currently, there is no easy way for user to change log level of info log. Add a parameter in options to specify that.
      Also make the default level to INFO level. Removing the [INFO] tag if it is INFO level as I don't want to cause performance regression. (add [LOG] means another mem-copy and string formatting).
      
      Test Plan:
      make all check
      manual check the levels work as expected.
      
      Reviewers: dhruba, yhchiang
      
      Reviewed By: yhchiang
      
      CC: dhruba, igor, i.am.jin.lei, ljin, haobo, leveldb
      
      Differential Revision: https://reviews.facebook.net/D16563
      4405f3a0
    • L
      output perf_context in db_bench readrandom · 04298f8c
      Lei Jin 提交于
      Summary:
      Add helper function to print perf context data in db_bench if enabled.
      I didn't find any code that actually exports perf context data. Not sure
      if I missed anything
      
      Test Plan: ran db_bench
      
      Reviewers: haobo, sdong, igor
      
      Reviewed By: igor
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D16575
      04298f8c
  8. 04 3月, 2014 1 次提交
  9. 01 3月, 2014 1 次提交
    • I
      Make Log::Reader more robust · 58ca641d
      Igor Canadi 提交于
      Summary:
      This diff does two things:
      (1) Log::Reader does not report a corruption when the last record in a log or manifest file is truncated (meaning that log writer died in the middle of the write). Inherited the code from LevelDB: https://code.google.com/p/leveldb/source/detail?r=269fc6ca9416129248db5ca57050cd5d39d177c8#
      (2) Turn off mmap writes for all writes to log and manifest files
      
      (2) is necessary because if we use mmap writes, the last record is not truncated, but is actually filled with zeros, making checksum fail. It is hard to recover from checksum failing.
      
      Test Plan:
      Added unit tests from LevelDB
      Actually recovered a "corrupted" MANIFEST file.
      
      Reviewers: dhruba, haobo
      
      Reviewed By: haobo
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D16119
      58ca641d
  10. 28 2月, 2014 4 次提交
  11. 27 2月, 2014 2 次提交
    • K
      Make sure logger is safely released in `InfoLogLevel` · e41c060a
      kailiu 提交于
      Summary: fix the memory leak that was captured by jenkin build.
      
      Test Plan: ran the valgrind test locally
      
      Reviewers: yhchiang
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D16389
      e41c060a
    • Y
      Enable log info with different levels. · ccaedd16
      Yueh-Hsuan Chiang 提交于
      Summary:
      * Now each Log related function has a variant that takes an additional
        argument indicating its log level, which is one of the following:
       - DEBUG, INFO, WARN, ERROR, FATAL.
      
      * To ensure backward-compatibility, old version Log functions are kept
        unchanged.
      
      * Logger now has a member variable indicating its log level.  Any incoming
        Log request which log level is lower than Logger's log level will not
        be output.
      
      * The output of the newer version Log will be prefixed by its log level.
      
      Test Plan:
      Add a LogType test in auto_roll_logger_test.cc
      
       = Sample log output =
          2014/02/11-00:03:07.683895 7feded179840 [DEBUG] this is the message to be written to the log file!!
          2014/02/11-00:03:07.683898 7feded179840 [INFO] this is the message to be written to the log file!!
          2014/02/11-00:03:07.683900 7feded179840 [WARN] this is the message to be written to the log file!!
          2014/02/11-00:03:07.683903 7feded179840 [ERROR] this is the message to be written to the log file!!
          2014/02/11-00:03:07.683906 7feded179840 [FATAL] this is the message to be written to the log file!!
      
      Reviewers: dhruba, xjin, kailiu
      
      Reviewed By: kailiu
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D16071
      ccaedd16
  12. 26 2月, 2014 1 次提交
    • L
      thread local pointer storage · b2795b79
      Lei Jin 提交于
      Summary:
      This is not a generic thread local implementation in the sense that it
      only takes pointer. But it does support multiple instances per thread
      and lets user plugin function to perform cleanup when thread exits or an
      instance gets destroyed.
      
      Test Plan: unit test for now
      
      Reviewers: haobo, igor, sdong, dhruba
      
      Reviewed By: igor
      
      CC: leveldb, kailiu
      
      Differential Revision: https://reviews.facebook.net/D16131
      b2795b79
  13. 25 2月, 2014 1 次提交
  14. 13 2月, 2014 1 次提交
    • L
      IOError cleanup · 994c327b
      Lei Jin 提交于
      Summary: Clean up IOErrors so that it only indicates errors talking to device.
      
      Test Plan: make all check
      
      Reviewers: igor, haobo, dhruba, emayanke
      
      Reviewed By: igor
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D15831
      994c327b
  15. 12 2月, 2014 1 次提交
    • S
      Reduce malloc of iterators in Get() code paths · 33042669
      Siying Dong 提交于
      Summary:
      This patch optimized Get() code paths by avoiding malloc of iterators. Iterator creation is moved to mem table rep implementations, where a callback is called when any key is found. This is the same practice as what we do in (SST) table readers.
      
      db_bench result for readrandom following a writeseq, with no compression, single thread and tmpfs, we see throughput improved to 144958 from 139027, about 3%.
      
      Test Plan: make all check
      
      Reviewers: dhruba, haobo, igor
      
      Reviewed By: haobo
      
      CC: leveldb, yhchiang
      
      Differential Revision: https://reviews.facebook.net/D14685
      33042669
  16. 09 2月, 2014 1 次提交
  17. 07 2月, 2014 1 次提交
  18. 05 2月, 2014 1 次提交
  19. 04 2月, 2014 3 次提交
  20. 03 2月, 2014 1 次提交
  21. 31 1月, 2014 1 次提交
    • K
      Clean up arena API · 4e0298f2
      kailiu 提交于
      Summary:
      Easy thing goes first. This patch moves arena to internal dir; based
      on which, the coming patch will deal with memtable_rep.
      
      Test Plan: make check
      
      Reviewers: haobo, sdong, dhruba
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D15615
      4e0298f2
  22. 30 1月, 2014 1 次提交
    • L
      convert Tickers back to array with padding and alignment · fb84c49a
      Lei Jin 提交于
      Summary:
      Pad each Ticker structure to be 64 bytes and make them align on 64 bytes
      boundary to avoid cache line false sharing issue.
      Please refer to task 3615553 for more details
      
      Test Plan:
      db_bench
      
      LevelDB:    version 2.0s
      Date:       Wed Jan 29 12:23:17 2014
      CPU:        32 * Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz
      CPUCache:   20480 KB
      rocksdb.build.overwrite.qps 49638
      rocksdb.build.overwrite.p50_micros 58.73
      rocksdb.build.overwrite.p75_micros 210.56
      rocksdb.build.overwrite.p99_micros 733.28
      rocksdb.build.fillseq.qps 366729
      rocksdb.build.fillseq.p50_micros 1.00
      rocksdb.build.fillseq.p75_micros 1.00
      rocksdb.build.fillseq.p99_micros 2.65
      rocksdb.build.readrandom.qps 1152995
      rocksdb.build.readrandom.p50_micros 11.27
      rocksdb.build.readrandom.p75_micros 15.69
      rocksdb.build.readrandom.p99_micros 33.59
      rocksdb.build.readrandom_smallblockcache.qps 956047
      rocksdb.build.readrandom_smallblockcache.p50_micros 15.23
      rocksdb.build.readrandom_smallblockcache.p75_micros 17.31
      rocksdb.build.readrandom_smallblockcache.p99_micros 31.49
      rocksdb.build.readrandom_memtable_sst.qps 1105183
      rocksdb.build.readrandom_memtable_sst.p50_micros 12.04
      rocksdb.build.readrandom_memtable_sst.p75_micros 15.78
      rocksdb.build.readrandom_memtable_sst.p99_micros 32.49
      rocksdb.build.readrandom_fillunique_random.qps 487856
      rocksdb.build.readrandom_fillunique_random.p50_micros 29.65
      rocksdb.build.readrandom_fillunique_random.p75_micros 40.93
      rocksdb.build.readrandom_fillunique_random.p99_micros 78.68
      rocksdb.build.memtablefillrandom.qps 91304
      rocksdb.build.memtablefillrandom.p50_micros 171.05
      rocksdb.build.memtablefillrandom.p75_micros 196.12
      rocksdb.build.memtablefillrandom.p99_micros 291.73
      rocksdb.build.memtablereadrandom.qps 1340411
      rocksdb.build.memtablereadrandom.p50_micros 9.48
      rocksdb.build.memtablereadrandom.p75_micros 13.95
      rocksdb.build.memtablereadrandom.p99_micros 30.36
      rocksdb.build.readwhilewriting.qps 491004
      rocksdb.build.readwhilewriting.p50_micros 29.58
      rocksdb.build.readwhilewriting.p75_micros 40.34
      rocksdb.build.readwhilewriting.p99_micros 76.78
      
      Reviewers: igor, haobo
      
      Reviewed By: igor
      
      CC: leveldb
      
      Differential Revision: https://reviews.facebook.net/D15573
      fb84c49a
  23. 28 1月, 2014 2 次提交