Alexey Serbin has submitted this change and it was merged. (
http://gerrit.cloudera.org:8080/21779 )
Change subject: [tablet] fix race in RowSetMetadata::id()
......................................................................
[tablet] fix race in RowSetMetadata::id()
This patch fixes a race in access to the RowSetMetadata::id_ field
in the rollback scenario in the MajorCompactDeltaStoresWithColumnIds()
method of the DiskRowSet class.
Before this patch, TSAN would report warnings like below when running
the MultiThreadedHybridClockTabletTest.UpdateNoMergeCompaction scenario:
of the mt-tablet-test:
Read of size 8 at 0x7b3400014780 by thread T30 (mutexes: write
M76293278759445
9152, write M7098002):
#0 kudu::tablet::RowSetMetadata::id() const
src/kudu/tablet/rowset_metadata.h:100:31 (libtablet.so+0x346faa)
#1 kudu::tablet::RowSetTree::Reset(...)
src/kudu/tablet/rowset_tree.cc:190:48 (libtablet.so+0x4bf666)
#2 kudu::tablet::Tablet::ModifyRowSetTree(...)
src/kudu/tablet/tablet.cc:1490:3 (libtablet.so+0x323755)
#3 kudu::tablet::Tablet::AtomicSwapRowSetsUnlocked(...)
src/kudu/tablet/tablet.cc:1504:3 (libtablet.so+0x3239bc)
#4 kudu::tablet::Tablet::AtomicSwapRowSets(...)
src/kudu/tablet/tablet.cc:1496:3 (libtablet.so+0x3238f9)
...
Previous write of size 8 at 0x7b3400014780 by thread T12 (mutexes: write
M625572878699880144, write M530715863088620288, write M525367769810683784):
#0 kudu::tablet::RowSetMetadata::LoadFromPB(...)
src/kudu/tablet/rowset_metadata.cc:77:7 (libtablet.so+0x4f9f03)
#1
kudu::tablet::DiskRowSet::MajorCompactDeltaStoresWithColumnIds(...)::$_0::operator()()
const src/kudu/tablet/diskrowset.cc:603:23 (libtablet.so+0x46eddf)
#2
kudu::ScopedCleanup<kudu::tablet::DiskRowSet::MajorCompactDeltaStoresWithColumnIds(...)::$_0>::~ScopedCleanup()
src/kudu/util/scoped_cleanup.h:51:7 (libtablet.so+0x46cc5a)
#3 kudu::tablet::DiskRowSet::MajorCompactDeltaStoresWithColumnIds(...)
src/kudu/tablet/diskrowset.cc:636:1 (libtablet.so+0x46c5c9)
#4 kudu::tablet::DiskRowSet::MajorCompactDeltaStores(...)
src/kudu/tablet/diskrowset.cc:570:10 (libtablet.so+0x46c013)
...
SUMMARY: ThreadSanitizer: data race src/kudu/tablet/rowset_metadata.h:100:31
in kudu::tablet::RowSetMetadata::id() const
Change-Id: I4b09575616e754b7dbb24586293f128e361b9360
Reviewed-on: http://gerrit.cloudera.org:8080/21779
Reviewed-by: Mahesh Reddy <[email protected]>
Tested-by: Alexey Serbin <[email protected]>
Reviewed-by: Yingchun Lai <[email protected]>
---
M src/kudu/tablet/cfile_set.cc
M src/kudu/tablet/rowset_metadata.cc
M src/kudu/tablet/rowset_metadata.h
3 files changed, 20 insertions(+), 12 deletions(-)
Approvals:
Mahesh Reddy: Looks good to me, but someone else must approve
Alexey Serbin: Verified
Yingchun Lai: Looks good to me, approved
--
To view, visit http://gerrit.cloudera.org:8080/21779
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings
Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I4b09575616e754b7dbb24586293f128e361b9360
Gerrit-Change-Number: 21779
Gerrit-PatchSet: 4
Gerrit-Owner: Alexey Serbin <[email protected]>
Gerrit-Reviewer: Abhishek Chennaka <[email protected]>
Gerrit-Reviewer: Alexey Serbin <[email protected]>
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mahesh Reddy <[email protected]>
Gerrit-Reviewer: Yifan Zhang <[email protected]>
Gerrit-Reviewer: Yingchun Lai <[email protected]>