]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
Improve DBTest.GroupCommitTest: artificially slowdown log writing to trigger group...
authorsdong <siying.d@fb.com>
Thu, 6 Nov 2014 18:14:47 +0000 (10:14 -0800)
committersdong <siying.d@fb.com>
Thu, 6 Nov 2014 18:48:06 +0000 (10:48 -0800)
Summary: In order to avoid random failure of DBTest.GroupCommitTest, artificially sleep 100 microseconds in each log writing.

Test Plan: Run the test in a machine where valgrind version of the test always fails multiple times and see it always succeed.

Reviewers: igor, yhchiang, rven, ljin

Reviewed By: ljin

Subscribers: leveldb, dhruba

Differential Revision: https://reviews.facebook.net/D28401

db/db_test.cc

index b81b7c08e3b4000e918d4b6e00098aefa39481e3..8352975f06405a1106e342911d0bd5ab23ed9689 100644 (file)
@@ -144,6 +144,9 @@ class SpecialEnv : public EnvWrapper {
   // Force write to log files to fail while this pointer is non-nullptr
   std::atomic<bool> log_write_error_;
 
+  // Slow down every log write, in micro-seconds.
+  std::atomic<int> log_write_slowdown_;
+
   bool count_random_reads_;
   anon::AtomicCounter random_read_counter_;
 
@@ -172,6 +175,7 @@ class SpecialEnv : public EnvWrapper {
     manifest_sync_error_.store(false, std::memory_order_release);
     manifest_write_error_.store(false, std::memory_order_release);
     log_write_error_.store(false, std::memory_order_release);
+    log_write_slowdown_ = 0;
     bytes_written_ = 0;
     sync_counter_ = 0;
     non_writeable_rate_ = 0;
@@ -254,6 +258,11 @@ class SpecialEnv : public EnvWrapper {
         if (env_->log_write_error_.load(std::memory_order_acquire)) {
           return Status::IOError("simulated writer error");
         } else {
+          int slowdown =
+              env_->log_write_slowdown_.load(std::memory_order_acquire);
+          if (slowdown > 0) {
+            env_->SleepForMicroseconds(slowdown);
+          }
           return base_->Append(data);
         }
       }
@@ -7060,6 +7069,8 @@ static void GCThreadBody(void* arg) {
 TEST(DBTest, GroupCommitTest) {
   do {
     Options options = CurrentOptions();
+    options.env = env_;
+    env_->log_write_slowdown_.store(100);
     options.statistics = rocksdb::CreateDBStatistics();
     Reopen(options);
 
@@ -7077,6 +7088,8 @@ TEST(DBTest, GroupCommitTest) {
         env_->SleepForMicroseconds(100000);
       }
     }
+    env_->log_write_slowdown_.store(0);
+
     ASSERT_GT(TestGetTickerCount(options, WRITE_DONE_BY_OTHER), 0);
 
     std::vector<std::string> expected_db;