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

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


The following commit(s) were added to refs/heads/master by this push:
     new 038b8c1  [txn_system_client] MonoDelta by value in 
CoordinateTransactionAsync()
038b8c1 is described below

commit 038b8c15b43e6071ca1fbd8f91202168ef492dc7
Author: Alexey Serbin <[email protected]>
AuthorDate: Mon Jun 21 13:04:07 2021 -0700

    [txn_system_client] MonoDelta by value in CoordinateTransactionAsync()
    
    This patch updates the signature of the
    TxnSystemClient::CoordinateTransactionAsync() method to pass MonoDelta
    by value.  In addition, I added an extra DCHECK() into
    MonoTime::AddDelta().
    
    The motivation for this change was seeing the following UBSAN warning
    in one of the pre-commit builds [1]:
    
      #0 0x7f48d11e8f3c in kudu::MonoTime::AddDelta(kudu::MonoDelta const&) 
src/kudu/util/monotime.cc:218:10
      #1 0x7f48d11e9eee in kudu::operator+(kudu::MonoTime const&, 
kudu::MonoDelta const&) src/kudu/util/monotime.cc:333:7
      #2 0x7f48e0d846c1 in 
kudu::transactions::TxnSystemClient::CoordinateTransactionAsync(kudu::tserver::CoordinatorOpPB,
 kudu::MonoDelta const&, std::function<void (kudu::Status const&)> const&, 
kudu::tserver::CoordinatorOpResultPB*) 
src/kudu/transactions/txn_system_client.cc:331:45
      #3 0x7f48e0d86f76 in 
kudu::transactions::TxnSystemClient::KeepTransactionAlive(long, 
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 
const&, kudu::MonoDelta) src/kudu/transactions/txn_system_client.cc:320:3
      #4 0x7f48e24c62b9 in 
kudu::transactions::TxnManager::KeepTransactionAlive(long, 
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 
const&, kudu::MonoTime const&) src/kudu/master/txn_manager.cc:238:27
      #5 0x7f48e24ca36f in 
kudu::transactions::TxnManagerServiceImpl::KeepTransactionAlive(kudu::transactions::KeepTransactionAliveRequestPB
 const*, kudu::transactions::KeepTransactionAliveResponsePB*, 
kudu::rpc::RpcContext*) src/kudu/master/txn_manager_service.cc:159:42
      #6 0x7f48d7224b0e in std::function<void (google::protobuf::Message 
const*, google::protobuf::Message*, 
kudu::rpc::RpcContext*)>::operator()(google::protobuf::Message const*, 
google::protobuf::Message*, kudu::rpc::RpcContext*) const 
../../../include/c++/7.5.0/bits/std_function.h:706:14
      #7 0x7f48d7223afc in 
kudu::rpc::GeneratedServiceIf::Handle(kudu::rpc::InboundCall*) 
src/kudu/rpc/service_if.cc:137:3
      #8 0x7f48d7229a9d in kudu::rpc::ServicePool::RunThread() 
src/kudu/rpc/service_pool.cc:232:15
      #9 0x7f48d1290c3a in kudu::Thread::SuperviseThread(void*) 
src/kudu/util/thread.cc:674:3
      #10 0x7f48d3a046da in start_thread 
(/lib/x86_64-linux-gnu/libpthread.so.0+0x76da)
      #11 0x7f48cd55771e in clone (/lib/x86_64-linux-gnu/libc.so.6+0x12171e)
    
    SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior 
src/kudu/util/monotime.cc:218:10
    
    [1] 
http://dist-test.cloudera.org/job?job_id=jenkins-slave.1623914260.1110749
    
    Change-Id: I36ba521a3bb7a4ca42a5dc8d383f5d8b6309154d
    Reviewed-on: http://gerrit.cloudera.org:8080/17611
    Tested-by: Kudu Jenkins
    Reviewed-by: Abhishek Chennaka <[email protected]>
    Reviewed-by: Andrew Wong <[email protected]>
---
 src/kudu/transactions/txn_system_client.cc | 2 +-
 src/kudu/transactions/txn_system_client.h  | 2 +-
 src/kudu/util/monotime.cc                  | 1 +
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/kudu/transactions/txn_system_client.cc 
b/src/kudu/transactions/txn_system_client.cc
index 232cfb9..d8d2f07 100644
--- a/src/kudu/transactions/txn_system_client.cc
+++ b/src/kudu/transactions/txn_system_client.cc
@@ -324,7 +324,7 @@ Status TxnSystemClient::KeepTransactionAlive(int64_t txn_id,
 }
 
 Status TxnSystemClient::CoordinateTransactionAsync(CoordinatorOpPB 
coordinate_txn_op,
-                                                   const MonoDelta& timeout,
+                                                   MonoDelta timeout,
                                                    const StatusCallback& cb,
                                                    CoordinatorOpResultPB* 
result) {
   DCHECK(txn_status_table_);
diff --git a/src/kudu/transactions/txn_system_client.h 
b/src/kudu/transactions/txn_system_client.h
index a40384d..4669e85 100644
--- a/src/kudu/transactions/txn_system_client.h
+++ b/src/kudu/transactions/txn_system_client.h
@@ -179,7 +179,7 @@ class TxnSystemClient {
                                                  client::KuduClient* client);
 
   Status CoordinateTransactionAsync(tserver::CoordinatorOpPB coordinate_txn_op,
-                                    const MonoDelta& timeout,
+                                    MonoDelta timeout,
                                     const StatusCallback& cb,
                                     tserver::CoordinatorOpResultPB* result = 
nullptr);
 
diff --git a/src/kudu/util/monotime.cc b/src/kudu/util/monotime.cc
index efc54c2..743f824 100644
--- a/src/kudu/util/monotime.cc
+++ b/src/kudu/util/monotime.cc
@@ -215,6 +215,7 @@ MonoDelta MonoTime::GetDeltaSince(const MonoTime &rhs) 
const {
 
 void MonoTime::AddDelta(const MonoDelta &delta) {
   DCHECK(Initialized());
+  DCHECK(delta.Initialized());
   nanos_ += delta.nano_delta_;
 }
 

Reply via email to