MB-19204: hash_table_test: Fix TSan issues 05/62905/2
authorDave Rigby <daver@couchbase.com>
Tue, 6 Oct 2015 10:53:21 +0000 (10:53 +0000)
committerChiyoung Seo <chiyoung@couchbase.com>
Fri, 22 Apr 2016 06:59:51 +0000 (06:59 +0000)
Fix issues with hash_table_test on 3.x:

* The default number of HashTable locks (193) causes problems for
  ThreadSanitizer as it exceeds the maximum number of acquired locks
  it can track. Given that the tests where we do not already set the
  lock count are single-threaded, change these to have 1 lock.

* Remove alarm() calls - the tests take longer when run under TSan,
  and given that CTest already enforeces a test-level timeout these
  are redundent inside the test functions.

* Fix data race on AccessGenerator::size test harness.

Change-Id: Ib30b36bbd6517f1326660ae578a12d93e4d828c7
Reviewed-on: http://review.couchbase.org/62905
Tested-by: buildbot <build@couchbase.com>
Well-Formed: buildbot <build@couchbase.com>
Reviewed-by: Chiyoung Seo <chiyoung@couchbase.com>
tests/module_tests/hash_table_test.cc

index 8a65e28..fe4313e 100644 (file)
 
 #include "threadtests.h"
 
-#ifdef _MSC_VER
-#define alarm(a)
-#endif
-
 time_t time_offset;
 
 extern "C" {
@@ -152,7 +148,7 @@ static std::vector<std::string> generateKeys(int num, int start=0) {
 // ----------------------------------------------------------------------
 
 static void testHashSize() {
-    HashTable h(global_stats);
+    HashTable h(global_stats, /*size*/0, /*locks*/1);
     cb_assert(count(h) == 0);
 
     std::string k = "testkey";
@@ -162,7 +158,7 @@ static void testHashSize() {
 }
 
 static void testHashSizeTwo() {
-    HashTable h(global_stats);
+    HashTable h(global_stats, /*size*/0, /*locks*/1);
     cb_assert(count(h) == 0);
 
     std::vector<std::string> keys = generateKeys(5);
@@ -174,7 +170,6 @@ static void testHashSizeTwo() {
 }
 
 static void testReverseDeletions() {
-    alarm(10);
     size_t initialSize = global_stats.currentSize.load();
     HashTable h(global_stats, 5, 1);
     cb_assert(count(h) == 0);
@@ -197,7 +192,6 @@ static void testReverseDeletions() {
 }
 
 static void testForwardDeletions() {
-    alarm(10);
     size_t initialSize = global_stats.currentSize.load();
     HashTable h(global_stats, 5, 1);
     cb_assert(h.getSize() == 5);
@@ -317,7 +311,7 @@ private:
 
     std::vector<std::string>  keys;
     HashTable                &ht;
-    size_t                    size;
+    AtomicValue<size_t>       size;
 };
 
 static void testConcurrentAccessResize() {
@@ -573,7 +567,6 @@ int main() {
     putenv(strdup("ALLOW_NO_STATS_UPDATE=yeah"));
     global_stats.setMaxDataSize(64*1024*1024);
     HashTable::setDefaultNumBuckets(3);
-    alarm(60);
     testHashSize();
     testHashSizeTwo();
     testReverseDeletions();