Todd Lipcon has uploaded a new change for review.
http://gerrit.cloudera.org:8080/1981
Change subject: Fix a TSAN race on Webserver::path_handlers_
......................................................................
Fix a TSAN race on Webserver::path_handlers_
This fixes a race that showed up on the flaky dashboard.
BootstrapPageHeader accesses path_handlers_ without a lock,
whereas RegisterPathHandler() mutates it with a lock.
LinkedListTest.TestLoadAndVerify: WARNING: ThreadSanitizer: data race
(pid=20150) Write of size 8 at 0x7d480000bca0 by main thread:
#0 std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*,
std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) <null>
(libstdc++.so.6+0x0000000b072e)
#1 std::_Rb_tree_iterator<std::pair<std::string const,
kudu::Webserver::PathHandler*> > std::_Rb_tree<std::string,
std::pair<std::string const, kudu::Webserver::PathHandler*>,
std::_Select1st<std::pair<std::string const, kudu::Webserver::PathHandler*> >,
std::less<std::string>, std::allocator<std::pair<std::string const,
kudu::Webserver::PathHandler*> > >::_M_insert_<std::pair<std::string,
kudu::Webserver::PathHandler*> >(std::_Rb_tree_node_base*,
std::_Rb_tree_node_base*, std::pair<std::string,
kudu::Webserver::PathHandler*>&&)
/data1/jenkins-workspace/kudu-workspace/thirdparty/installed-deps-tsan/gcc/include/c++/4.9.3/bits/stl_tree.h:1145:7
(libserver_process.so+0x000000091dcb)
#2 std::pair<std::_Rb_tree_iterator<std::pair<std::string const,
kudu::Webserver::PathHandler*> >, bool> std::_Rb_tree<std::string,
std::pair<std::string const, kudu::Webserver::PathHandler*>,
std::_Select1st<std::pair<std::string const, kudu::Webserver::PathHandler*> >,
std::less<std::string>, std::allocator<std::pair<std::string const,
kudu::Webserver::PathHandler*> > >::_M_insert_unique<std::pair<std::string,
kudu::Webserver::PathHandler*> >(std::pair<std::string,
kudu::Webserver::PathHandler*>&&)
/data1/jenkins-workspace/kudu-workspace/thirdparty/installed-deps-tsan/gcc/include/c++/4.9.3/bits/stl_tree.h:1501:14
(libserver_process.so+0x000000091ae8)
#3 std::pair<std::_Rb_tree_iterator<std::pair<std::string const,
kudu::Webserver::PathHandler*> >, bool> std::map<std::string,
kudu::Webserver::PathHandler*, std::less<std::string>,
std::allocator<std::pair<std::string const, kudu::Webserver::PathHandler*> >
>::insert<std::pair<std::string, kudu::Webserver::PathHandler*>,
void>(std::pair<std::string, kudu::Webserver::PathHandler*>&&)
/data1/jenkins-workspace/kudu-workspace/thirdparty/installed-deps-tsan/gcc/include/c++/4.9.3/bits/stl_map.h:638:18
(libserver_process.so+0x00000008a3d8)
#4 kudu::Webserver::RegisterPathHandler(std::string const&, std::string
const&, boost::function<void ()(kudu::WebCallbackRegistry::WebRequest const&,
std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >*)>
const&, bool, bool)
/data1/jenkins-workspace/kudu-workspace/src/kudu/server/webserver.cc:384:10
(libserver_process.so+0x000000088eff)
#5 kudu::Webserver::Start()
/data1/jenkins-workspace/kudu-workspace/src/kudu/server/webserver.cc:217:3
(libserver_process.so+0x000000087c47)
#6 kudu::server::ServerBase::Start()
/data1/jenkins-workspace/kudu-workspace/src/kudu/server/server_base.cc:313:3
(libserver_process.so+0x000000075478)
#7 kudu::tserver::TabletServer::Start()
/data1/jenkins-workspace/kudu-workspace/src/kudu/tserver/tablet_server.cc:123:3
(libtserver.so+0x00000012cb4a)
#8 kudu::tserver::TabletServerMain(int, char**)
/data1/jenkins-workspace/kudu-workspace/src/kudu/tserver/tablet_server_main.cc:58:3
(kudu-tserver+0x0000004abcec)
#9 main
/data1/jenkins-workspace/kudu-workspace/src/kudu/tserver/tablet_server_main.cc:72:10
(kudu-tserver+0x0000004abace)
Previous read of size 8 at 0x7d480000bca0 by thread T118:
#0 std::_Rb_tree<std::string, std::pair<std::string const,
kudu::Webserver::PathHandler*>, std::_Select1st<std::pair<std::string const,
kudu::Webserver::PathHandler*> >, std::less<std::string>,
std::allocator<std::pair<std::string const, kudu::Webserver::PathHandler*> >
>::begin()
/data1/jenkins-workspace/kudu-workspace/thirdparty/installed-deps-tsan/gcc/include/c++/4.9.3/bits/stl_tree.h:729:29
(libserver_process.so+0x00000008d14a)
#1 std::map<std::string, kudu::Webserver::PathHandler*,
std::less<std::string>, std::allocator<std::pair<std::string const,
kudu::Webserver::PathHandler*> > >::begin()
/data1/jenkins-workspace/kudu-workspace/thirdparty/installed-deps-tsan/gcc/include/c++/4.9.3/bits/stl_map.h:356:16
(libserver_process.so+0x000000089569)
#2 kudu::Webserver::BootstrapPageHeader(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> >*)
/data1/jenkins-workspace/kudu-workspace/src/kudu/server/webserver.cc:419:50
(libserver_process.so+0x000000088c44)
#3 kudu::Webserver::RunPathHandler(kudu::Webserver::PathHandler const&,
sq_connection*, sq_request_info*)
/data1/jenkins-workspace/kudu-workspace/src/kudu/server/webserver.cc:354:18
(libserver_process.so+0x000000088967)
#4 kudu::Webserver::BeginRequestCallback(sq_connection*, sq_request_info*)
/data1/jenkins-workspace/kudu-workspace/src/kudu/server/webserver.cc:300:10
(libserver_process.so+0x00000008863b)
#5 kudu::Webserver::BeginRequestCallbackStatic(sq_connection*)
/data1/jenkins-workspace/kudu-workspace/src/kudu/server/webserver.cc:275:10
(libserver_process.so+0x0000000881f5)
#6 handle_request
/data1/jenkins-workspace/kudu-workspace/thirdparty/squeasel-8ac777a122fccf0358cb8562e900f8e9edd9ed11/squeasel.c:3994
(libserver_process.so+0x00000009c3ad)
Change-Id: Ie0381d2cbb90761491a57df16b6db7dc37ca4ba0
---
M src/kudu/server/webserver.cc
1 file changed, 7 insertions(+), 4 deletions(-)
git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/81/1981/1
--
To view, visit http://gerrit.cloudera.org:8080/1981
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie0381d2cbb90761491a57df16b6db7dc37ca4ba0
Gerrit-PatchSet: 1
Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-Owner: Todd Lipcon <[email protected]>