Alexey Serbin has uploaded this change for review. ( 
http://gerrit.cloudera.org:8080/17151


Change subject: WIP [client] add test scenario to expose bug in meta-cache
......................................................................

WIP [client] add test scenario to expose bug in meta-cache

WIP:
  * fix the issue
  * enable the scenario to catch any regressions

This patch add a scenario reproducing a SIGSEGV crash in Kudu client
when working with scan tokens which contain information about
tablet locations.

The scenario is disabled for now, because is simply crashes otherwise.
The bug doesn't manifest itself in a crash in Kudu 1.14 and current
HEAD version in upstream because the crash culprit (FindOrDie() call)
was changed into FindOrNull() with changelist
https://github.com/apache/kudu/commit/2a558768f8aa00068e72ccd1327081f07ba46b03

I haven't yet checked whether there are any other issues due to stale
scan tokens in Kudu 1.14, but at least Kudu client doesn't crash with
this scenario.

The crash stack is the following on macOS:

  * frame #0: 0x00007fff7035833a libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007fff70414e60 libsystem_pthread.dylib`pthread_kill + 430
    frame #2: 0x00007fff702df808 libsystem_c.dylib`abort + 120
    frame #3: 0x000000010ca1a259 libglog.0.dylib`google::logging_fail() at 
logging.cc:1474:3
    frame #4: 0x000000010ca19121 
libglog.0.dylib`google::LogMessage::SendToLog() [inlined] 
google::LogMessage::Fail() at logging.cc:1488:3
    frame #5: 0x000000010ca1911b 
libglog.0.dylib`google::LogMessage::SendToLog() at logging.cc:1442
    frame #6: 0x000000010ca19815 libglog.0.dylib`google::LogMessage::Flush() at 
logging.cc:1311:5
    frame #7: 0x000000010ca1d76f 
libglog.0.dylib`google::LogMessageFatal::~LogMessageFatal() at logging.cc:2023:5
    frame #8: 0x000000010ca1a5f9 
libglog.0.dylib`google::LogMessageFatal::~LogMessageFatal() at 
logging.cc:2022:37
    frame #9: 0x0000000103e365e3 
libkudu_client.dylib`std::__1::map<std::__1::basic_string<char, 
std::__1::char_traits<char>, std::__1::allocator<char> >, 
kudu::client::internal::MetaCacheEntry, 
std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, 
std::__1::allocator<char> > >, 
std::__1::allocator<std::__1::pair<std::__1::basic_string<char, 
std::__1::char_traits<char>, std::__1::allocator<char> > const, 
kudu::client::internal::MetaCacheEntry> > >::mapped_type& 
FindOrDie<std::__1::map<std::__1::basic_string<char, 
std::__1::char_traits<char>, std::__1::allocator<char> >, 
kudu::client::internal::MetaCacheEntry, 
std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, 
std::__1::allocator<char> > >, 
std::__1::allocator<std::__1::pair<std::__1::basic_string<char, 
std::__1::char_traits<char>, std::__1::allocator<char> > const, 
kudu::client::internal::MetaCacheEntry> > > >() at map-util.h:109:3
    frame #10: 0x0000000103e34cbb 
libkudu_client.dylib`kudu::client::internal::MetaCache::ProcessGetTableLocationsResponse()
 at meta_cache.cc:943:23
    frame #11: 0x0000000103e86166 
libkudu_client.dylib`kudu::client::KuduScanToken::Data::PBIntoScanner() at 
scan_token-internal.cc:192:35
    frame #12: 0x0000000103e88051 
libkudu_client.dylib`kudu::client::KuduScanToken::Data::DeserializeIntoScanner()
 at scan_token-internal.cc:111:10
    frame #13: 0x0000000103d55d3c 
libkudu_client.dylib`kudu::client::KuduScanToken::DeserializeIntoScanner() at 
client.cc:1879:10

Change-Id: Id1359a4b3e48ef99a786116bf92d60158ba7974d
---
M src/kudu/client/scan_token-test.cc
1 file changed, 129 insertions(+), 14 deletions(-)



  git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/51/17151/1
--
To view, visit http://gerrit.cloudera.org:8080/17151
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id1359a4b3e48ef99a786116bf92d60158ba7974d
Gerrit-Change-Number: 17151
Gerrit-PatchSet: 1
Gerrit-Owner: Alexey Serbin <[email protected]>

Reply via email to