You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2022/08/05 11:55:36 UTC

[iotdb] branch ml_0729_test_exp1_no_write updated: fix the issue for deadlock

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

xingtanzjr pushed a commit to branch ml_0729_test_exp1_no_write
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/ml_0729_test_exp1_no_write by this push:
     new 238c3598c7 fix the issue for deadlock
238c3598c7 is described below

commit 238c3598c78fdf9fb90636d62bf788393ab34fb8
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Fri Aug 5 19:55:23 2022 +0800

    fix the issue for deadlock
---
 .../iotdb/consensus/multileader/logdispatcher/LogDispatcher.java  | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcher.java b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcher.java
index ef72907d35..8bd70ae18c 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcher.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcher.java
@@ -118,9 +118,12 @@ public class LogDispatcher {
               thread.getPendingRequest().size());
           long putToQueueStartTime = System.nanoTime();
           try {
-            thread
+            while (!thread
                 .getPendingRequest()
-                .put(new IndexedConsensusRequest(serializedRequests, request.getSearchIndex()));
+                .offer(new IndexedConsensusRequest(serializedRequests, request.getSearchIndex()))) {
+              impl.getIndexObject().wait();
+            }
+            ;
           } catch (InterruptedException e) {
             e.printStackTrace();
           } finally {
@@ -281,6 +284,7 @@ public class LogDispatcher {
                 bufferedRequest,
                 config.getReplication().getMaxRequestPerBatch() - bufferedRequest.size());
             maxIndexWhenBufferedRequestEmpty = impl.getIndex() + 1;
+            impl.getIndexObject().notifyAll();
           }
           // remove all request that searchIndex < startIndex
           Iterator<IndexedConsensusRequest> iterator = bufferedRequest.iterator();