You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ca...@apache.org on 2021/03/30 11:51:22 UTC

[incubator-doris] branch master updated: [Bug] Fix bug that call frontend service failed when rpc_timeout is equal with publish_timeout (#5564)

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

caiconghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 0490b15  [Bug] Fix bug that call frontend service failed when rpc_timeout is equal with publish_timeout (#5564)
0490b15 is described below

commit 0490b156c862963bb1dfb05ba5e976ac59b31132
Author: caiconghui <55...@users.noreply.github.com>
AuthorDate: Tue Mar 30 19:50:42 2021 +0800

    [Bug] Fix bug that call frontend service failed when rpc_timeout is equal with publish_timeout (#5564)
    
    * [Bug] Fix bug that call frontend service failed when rpc_timeout is equal with publish_timeout
    
    *This PR is to fix bug that call frontend service failed when rpc_timeout is equal with publish_timeout and fix some small issues with log
    
    Co-authored-by: caiconghui [蔡聪辉] <ca...@xiaomi.com>
---
 .../src/main/java/org/apache/doris/master/MasterImpl.java    |  9 ++++++---
 .../src/main/java/org/apache/doris/mysql/MysqlProto.java     |  2 +-
 .../main/java/org/apache/doris/mysql/nio/NMysqlChannel.java  |  2 +-
 .../java/org/apache/doris/service/FrontendServiceImpl.java   |  2 +-
 .../org/apache/doris/transaction/GlobalTransactionMgr.java   | 12 +++++++++++-
 5 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java b/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java
index 3a8d131..2b3217f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java
@@ -94,9 +94,12 @@ public class MasterImpl {
         // check task status
         // retry task by report process
         TStatus taskStatus = request.getTaskStatus();
-        LOG.debug("get task report: {}", request.toString());
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("get task report: {}", request);
+        }
+
         if (taskStatus.getStatusCode() != TStatusCode.OK) {
-            LOG.warn("finish task reports bad. request: {}", request.toString());
+            LOG.warn("finish task reports bad. request: {}", request);
         }
 
         // get backend
@@ -109,7 +112,7 @@ public class MasterImpl {
             List<String> errorMsgs = new ArrayList<>();
             errorMsgs.add("backend not exist.");
             tStatus.setErrorMsgs(errorMsgs);
-            LOG.warn("backend does not found. host: {}, be port: {}. task: {}", host, bePort, request.toString());
+            LOG.warn("backend does not found. host: {}, be port: {}. task: {}", host, bePort, request);
             return result;
         }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java
index c608948..3120eab 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java
@@ -141,7 +141,7 @@ public class MysqlProto {
         try {
             channel.sendAndFlush(serializer.toByteBuffer());
         } catch (IOException e) {
-            LOG.warn("Send and flush channel exception, ignore. Exception: " + e.toString());
+            LOG.debug("Send and flush channel exception, ignore.", e);
             return false;
         }
         // Server receive authenticate packet from client.
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/nio/NMysqlChannel.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/nio/NMysqlChannel.java
index 799a005..4260c0b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/nio/NMysqlChannel.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/nio/NMysqlChannel.java
@@ -68,7 +68,7 @@ public class NMysqlChannel extends MysqlChannel {
                 readLen += ret;
             }
         } catch (IOException e) {
-            LOG.warn("Read channel exception, ignore. Exception: " + e.toString());
+            LOG.debug("Read channel exception, ignore.", e);
             return 0;
         }
         return readLen;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index 739c762..260a641 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -822,7 +822,7 @@ public class FrontendServiceImpl implements FrontendService.Iface {
             throw new UserException("unknown database, database=" + dbName);
         }
 
-        long timeoutMs = request.isSetThriftRpcTimeoutMs() ? request.getThriftRpcTimeoutMs() : 5000;
+        long timeoutMs = request.isSetThriftRpcTimeoutMs() ? request.getThriftRpcTimeoutMs() / 2 : 5000;
         Table table = db.getTableOrThrowException(request.getTbl(), TableType.OLAP);
         boolean ret = Catalog.getCurrentGlobalTransactionMgr().commitAndPublishTransaction(
                         db, Lists.newArrayList(table), request.getTxnId(),
diff --git a/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java b/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
index ca2313c..7dbc0d3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
@@ -18,6 +18,7 @@
 package org.apache.doris.transaction;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.StopWatch;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.Table;
@@ -189,6 +190,8 @@ public class GlobalTransactionMgr implements Writable {
             List<TabletCommitInfo> tabletCommitInfos, long timeoutMillis,
             TxnCommitAttachment txnCommitAttachment)
             throws UserException {
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start();
         if (!MetaLockUtils.tryWriteLockTables(tableList, timeoutMillis, TimeUnit.MILLISECONDS)) {
             throw new UserException("get tableList write lock timeout, tableList=(" + StringUtils.join(tableList, ",") + ")");
         }
@@ -197,8 +200,15 @@ public class GlobalTransactionMgr implements Writable {
         } finally {
            MetaLockUtils.writeUnlockTables(tableList);
         }
+        stopWatch.stop();
+        long publishTimeoutMillis = timeoutMillis - stopWatch.getTime();
         DatabaseTransactionMgr dbTransactionMgr = getDatabaseTransactionMgr(db.getId());
-        return dbTransactionMgr.publishTransaction(db, transactionId, timeoutMillis);
+        if (publishTimeoutMillis < 0) {
+            // here commit transaction successfully cost too much time to cause publisTimeoutMillis is less than zero,
+            // so we just return false to indicate publish timeout
+            return false;
+        }
+        return dbTransactionMgr.publishTransaction(db, transactionId, publishTimeoutMillis);
    }
 
     public void abortTransaction(long dbId, long transactionId, String reason) throws UserException {

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org