Description
Currently the `kudu table scan` tool crashes if it hits an error in any of its scan threads. It'd be nicer usability-wise to instead collect the errors and display them at the end.
$ kudu table scan awong-1.vpc.cloudera.com:7051 --table-name=default.loadgen_auto
F0425 20:07:08.283156 22044 table_scanner.cc:475] Check failed: _s.ok() Bad status: Remote error: Not authorized: not authorized to Scan
*** Check failure stack trace: ***
{{ @ 0x108a38d google::LogMessage::Fail()}}
F0425 20:07:08.285526 22043 table_scanner.cc:475] Check failed: _s.ok() Bad status: Remote error: Not authorized: not authorized to Scan
*** Check failure stack trace: ***
{{ @ 0x108c2e3 google::LogMessage::SendToLog()}}
{{ @ 0x108a38d google::LogMessage::Fail()}}
{{ @ 0x108c2e3 google::LogMessage::SendToLog()}}
{{ @ 0x1089ee9 google::LogMessage::Flush()}}
{{ @ 0x1089ee9 google::LogMessage::Flush()}}
{{ @ 0x108cc6f google::LogMessageFatal::~LogMessageFatal()}}
{{ @ 0x108cc6f google::LogMessageFatal::~LogMessageFatal()}}
{{ @ 0x10d7807 kudu::tools::TableScanner::ScanData()}}
{{ @ 0x10d7807 kudu::tools::TableScanner::ScanData()}}
{{ @ 0x10d79c9 kudu::tools::TableScanner::ScanTask()}}
{{ @ 0x10d79c9 kudu::tools::TableScanner::ScanTask()}}
{{ @ 0xe754cd kudu::FunctionRunnable::Run()}}
{{ @ 0xe754cd kudu::FunctionRunnable::Run()}}
{{ @ 0xe724bf kudu::ThreadPool::DispatchThread()}}
{{ @ 0xe724bf kudu::ThreadPool::DispatchThread()}}
{{ @ 0xe69134 kudu::Thread::SuperviseThread()}}
{{ @ 0x7ff76335add5 start_thread}}
{{ @ 0x7ff761630ead __clone}}
Aborted