This is an automated email from the ASF dual-hosted git repository.

granthenke pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git

commit 6325c4edcc389aa2ee1d8f028f367978047b8be6
Author: Todd Lipcon <[email protected]>
AuthorDate: Wed Jan 15 15:23:00 2020 -0800

    tools: avoid extra 100ms sleep at end of table scan
    
    Prior to this patch, the table scan tool printed a status output every
    5 seconds by starting a separate monitor thread. This thread's main loop
    would only check for the scan completion every 100ms, so after the scans
    completed, the process could hang for up to an extra 100ms before
    exiting.
    
    This changes the printing to happen from the main thread instead, with
    the waiting based on the actual scan completion. Now the tool exits
    immediately when the scan completes.
    
    Example output:
    
    Before:
    todd@turbo:~/kudu$ time ./build/latest/bin/kudu table scan localhost 
sequences  | wc -l
      79
    
      real  0m0.180s
      user  0m0.041s
      sys   0m0.021s
    
    After:
      todd@turbo:~/kudu$ time ./build/latest/bin/kudu table scan localhost 
sequences  | wc -l
      79
    
      real  0m0.078s
      user  0m0.055s
      sys   0m0.005s
    
    Change-Id: Ic7dcd8408b1dbd5322a2f5e8f4889f5f5660ece0
    Reviewed-on: http://gerrit.cloudera.org:8080/15040
    Reviewed-by: Bankim Bhavsar <[email protected]>
    Reviewed-by: Grant Henke <[email protected]>
    Tested-by: Grant Henke <[email protected]>
    Reviewed-by: Alexey Serbin <[email protected]>
---
 src/kudu/tools/table_scanner.cc | 20 ++++++--------------
 src/kudu/tools/table_scanner.h  |  1 -
 2 files changed, 6 insertions(+), 15 deletions(-)

diff --git a/src/kudu/tools/table_scanner.cc b/src/kudu/tools/table_scanner.cc
index 4924f30..f50b93a 100644
--- a/src/kudu/tools/table_scanner.cc
+++ b/src/kudu/tools/table_scanner.cc
@@ -502,8 +502,9 @@ void TableScanner::ScanTask(const vector<KuduScanToken *>& 
tokens, Status* threa
     if (out_ && FLAGS_show_values) {
       MutexLock l(output_lock_);
       for (const auto& row : batch) {
-        *out_ << row.ToString() << endl;
+        *out_ << row.ToString() << "\n";
       }
+      out_->flush();
     }
   });
 }
@@ -530,16 +531,6 @@ void TableScanner::CopyTask(const vector<KuduScanToken*>& 
tokens, Status* thread
   });
 }
 
-void TableScanner::MonitorTask() {
-  MonoTime last_log_time = MonoTime::Now();
-  while (thread_pool_->num_threads() > 1) {    // Some other table scan thread 
is running.
-    if (MonoTime::Now() - last_log_time >= MonoDelta::FromSeconds(5)) {
-      LOG(INFO) << "Scanned count: " << total_count_.Load();
-      last_log_time = MonoTime::Now();
-    }
-    SleepFor(MonoDelta::FromMilliseconds(100));
-  }
-}
 
 void TableScanner::SetOutput(ostream* out) {
   out_ = out;
@@ -600,7 +591,7 @@ Status TableScanner::StartWork(WorkType type) {
   vector<Status> thread_statuses(FLAGS_num_threads);
 
   RETURN_NOT_OK(ThreadPoolBuilder("table_scan_pool")
-                  .set_max_threads(FLAGS_num_threads + 1)  // add extra 1 
thread for MonitorTask
+                  .set_max_threads(FLAGS_num_threads)
                   .set_idle_timeout(MonoDelta::FromMilliseconds(1))
                   .Build(&thread_pool_));
 
@@ -617,8 +608,9 @@ Status TableScanner::StartWork(WorkType type) {
         boost::bind(&TableScanner::CopyTask, this, thread_tokens[i], 
&thread_statuses[i])));
     }
   }
-  
RETURN_NOT_OK(thread_pool_->SubmitFunc(boost::bind(&TableScanner::MonitorTask, 
this)));
-  thread_pool_->Wait();
+  while (!thread_pool_->WaitFor(MonoDelta::FromSeconds(5))) {
+    LOG(INFO) << "Scanned count: " << total_count_.Load();
+  }
   thread_pool_->Shutdown();
 
   sw.stop();
diff --git a/src/kudu/tools/table_scanner.h b/src/kudu/tools/table_scanner.h
index b784835..ff6b81b 100644
--- a/src/kudu/tools/table_scanner.h
+++ b/src/kudu/tools/table_scanner.h
@@ -83,7 +83,6 @@ class TableScanner {
                   const std::function<void(const kudu::client::KuduScanBatch& 
batch)>& cb);
   void ScanTask(const std::vector<kudu::client::KuduScanToken*>& tokens, 
Status* thread_status);
   void CopyTask(const std::vector<kudu::client::KuduScanToken*>& tokens, 
Status* thread_status);
-  void MonitorTask();
 
   Status AddRow(const client::sp::shared_ptr<kudu::client::KuduTable>& table,
                 const kudu::client::KuduSchema& table_schema,

Reply via email to