Skip to content

Commit 5ee568f

Browse files
Address data race with replicationThrottle parameters
12:23:35 WARNING: ThreadSanitizer: data race (pid=31345) 12:23:35 Read of size 8 at 0x7d08000066c0 by thread T12: 12:23:35 #0 ReplicationThrottle::adjustWriteQueueCap(unsigned long) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/replicationthrottle.cc:49 (ep.so+0x000000114c7f) 12:23:35 couchbase#1 EventuallyPersistentEngine::doEngineStats(void const*, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/ep_engine.cc:3100 (ep.so+0x0000000bb424) 12:23:35 couchbase#2 EventuallyPersistentEngine::getStats(void const*, char const*, int, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/ep_engine.cc:4597 (ep.so+0x0000000c54d5) 12:23:35 couchbase#3 EventuallyPersistentStore::snapshotStats() /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/ep.cc:1744 (ep.so+0x000000090f2e) 12:23:35 couchbase#4 StatSnap::run() /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/tasks.cc:100 (ep.so+0x000000136dd6) 12:23:35 couchbase#5 ExecutorThread::run() /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/executorthread.cc:115 (ep.so+0x0000000f6966) 12:23:35 #6 launch_executor_thread(void*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/executorthread.cc:33 (ep.so+0x0000000f6515) 12:23:35 #7 platform_thread_wrap(void*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/platform/src/cb_pthreads.cc:54 (libplatform.so.0.1.0+0x00000000551b) 12:23:35 12:23:35 Previous write of size 8 at 0x7d08000066c0 by main thread (mutexes: write M2287262534014660504): 12:23:35 #0 EPStoreValueChangeListener::sizeValueChanged(std::string const&, unsigned long) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/replicationthrottle.h:42 (ep.so+0x0000000b35ee) 12:23:35 couchbase#1 Configuration::setParameter(std::string const&, long) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/configuration.cc:225 (ep.so+0x000000197ac5) 12:23:35 couchbase#2 Configuration::setReplicationThrottleQueueCap(long const&) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/build/ep-engine/src/generated_configuration.cc:459 (ep.so+0x0000001a6fa8) 12:23:35 couchbase#3 setTapParam(EventuallyPersistentEngine*, char const*, char const*, std::string&) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/ep_engine.cc:323 (ep.so+0x0000000d7f3f) 12:23:35 couchbase#4 EvpUnknownCommand(engine_interface*, void const*, protocol_binary_request_header*, bool (*)(void const*, unsigned short, void const*, unsigned char, void const*, unsigned int, unsigned char, unsigned short, unsigned long, void const*)) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/src/ep_engine.cc:1365 (ep.so+0x0000000b4f68) 12:23:35 couchbase#5 mock_unknown_command(engine_interface*, void const*, protocol_binary_request_header*, bool (*)(void const*, unsigned short, void const*, unsigned char, void const*, unsigned int, unsigned char, unsigned short, unsigned long, void const*)) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/memcached/programs/engine_testapp/engine_testapp.cc:382 (engine_testapp+0x0000004ce149) 12:23:35 #6 set_param(engine_interface*, engine_interface_v1*, protocol_binary_engine_param_t, char const*, char const*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/tests/ep_test_apis.cc:597 (ep_testsuite_dcp.so+0x000000038e17) 12:23:35 #7 test_consumer_backoff_stat(engine_interface*, engine_interface_v1*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/ep-engine/tests/ep_testsuite_dcp.cc:2184 (ep_testsuite_dcp.so+0x000000017411) 12:23:35 #8 execute_test(test, char const*, char const*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-master/memcached/programs/engine_testapp/engine_testapp.cc:1131 (engine_testapp+0x0000004cc600) 12:23:35 #9 __libc_start_main /build/buildd/eglibc-2.15/csu/libc-start.c:226 (libc.so.6+0x00000002176c) Change-Id: Ie4ff039603f2ddfc5b44d5d7f217544307655d31 Reviewed-on: http://review.couchbase.org/59215 Reviewed-by: Chiyoung Seo <chiyoung@couchbase.com> Tested-by: buildbot <build@couchbase.com>
1 parent c2b0ab7 commit 5ee568f

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

src/replicationthrottle.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
#include "config.h"
2222

23+
#include <relaxed_atomic.h>
24+
2325
#include "stats.h"
2426

2527
class Configuration;
@@ -47,8 +49,8 @@ class ReplicationThrottle {
4749
bool persistenceQueueSmallEnough() const;
4850
bool hasSomeMemory() const;
4951

50-
ssize_t queueCap;
51-
size_t capPercent;
52+
Couchbase::RelaxedAtomic<ssize_t> queueCap;
53+
Couchbase::RelaxedAtomic<size_t> capPercent;
5254
EPStats &stats;
5355
};
5456

0 commit comments

Comments
 (0)