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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9568967840b [IOTDB-5995] Fix SonerLint bugs in consensus module 
(#10314)
9568967840b is described below

commit 9568967840b126123db3c368add656a360b59428
Author: William Song <[email protected]>
AuthorDate: Mon Jun 26 16:20:41 2023 +0800

    [IOTDB-5995] Fix SonerLint bugs in consensus module (#10314)
---
 .../org/apache/iotdb/consensus/ratis/RatisConsensus.java   |  8 ++++++++
 .../org/apache/iotdb/consensus/ratis/RequestMessage.java   | 14 ++++++++------
 .../org/apache/iotdb/consensus/ratis/ResponseMessage.java  | 14 ++++++++------
 .../java/org/apache/iotdb/consensus/ratis/utils/Utils.java |  2 +-
 4 files changed, 25 insertions(+), 13 deletions(-)

diff --git 
a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java 
b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
index d8fb18e1aae..af71ef99f2e 100644
--- 
a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
+++ 
b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
@@ -71,6 +71,7 @@ import org.apache.ratis.protocol.RaftPeer;
 import org.apache.ratis.protocol.RaftPeerId;
 import org.apache.ratis.protocol.SnapshotManagementRequest;
 import org.apache.ratis.protocol.exceptions.NotLeaderException;
+import org.apache.ratis.protocol.exceptions.RaftException;
 import org.apache.ratis.protocol.exceptions.ResourceUnavailableException;
 import org.apache.ratis.server.DivisionInfo;
 import org.apache.ratis.server.RaftServer;
@@ -220,6 +221,13 @@ class RatisConsensus implements IConsensus {
         Thread.currentThread().interrupt();
       }
     }
+    if (reply == null) {
+      return RaftClientReply.newBuilder()
+          .setSuccess(false)
+          .setException(
+              new RaftException("null reply received in writeWithRetry for 
request " + caller))
+          .build();
+    }
     return reply;
   }
 
diff --git 
a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RequestMessage.java 
b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RequestMessage.java
index 9eed308a914..5d5a338d038 100644
--- 
a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RequestMessage.java
+++ 
b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RequestMessage.java
@@ -24,14 +24,15 @@ import org.apache.ratis.protocol.Message;
 import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
 import org.apache.ratis.thirdparty.com.google.protobuf.UnsafeByteOperations;
 
+import java.util.concurrent.atomic.AtomicReference;
+
 class RequestMessage implements Message {
 
   private final IConsensusRequest actualRequest;
-  private volatile ByteString serializedContent;
+  private AtomicReference<ByteString> serializedContent = new 
AtomicReference<>();
 
   RequestMessage(IConsensusRequest request) {
     this.actualRequest = request;
-    serializedContent = null;
   }
 
   IConsensusRequest getActualRequest() {
@@ -40,14 +41,15 @@ class RequestMessage implements Message {
 
   @Override
   public ByteString getContent() {
-    if (serializedContent == null) {
+    if (serializedContent.get() == null) {
       synchronized (this) {
-        if (serializedContent == null) {
+        if (serializedContent.get() == null) {
           serializedContent =
-              
UnsafeByteOperations.unsafeWrap(actualRequest.serializeToByteBuffer());
+              new AtomicReference<>(
+                  
UnsafeByteOperations.unsafeWrap(actualRequest.serializeToByteBuffer()));
         }
       }
     }
-    return serializedContent;
+    return serializedContent.get();
   }
 }
diff --git 
a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ResponseMessage.java 
b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ResponseMessage.java
index 7a2e30dae80..fa746b7b519 100644
--- 
a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ResponseMessage.java
+++ 
b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ResponseMessage.java
@@ -27,6 +27,8 @@ import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.concurrent.atomic.AtomicReference;
+
 class ResponseMessage implements Message {
 
   /**
@@ -35,12 +37,11 @@ class ResponseMessage implements Message {
    */
   private final Object contentHolder;
 
-  private volatile ByteString serializedData;
+  private AtomicReference<ByteString> serializedData = new AtomicReference<>();
   private final Logger logger = LoggerFactory.getLogger(ResponseMessage.class);
 
   ResponseMessage(Object content) {
     this.contentHolder = content;
-    this.serializedData = null;
   }
 
   Object getContentHolder() {
@@ -49,19 +50,20 @@ class ResponseMessage implements Message {
 
   @Override
   public ByteString getContent() {
-    if (serializedData == null) {
+    if (serializedData.get() == null) {
       synchronized (this) {
-        if (serializedData == null) {
+        if (serializedData.get() == null) {
           assert contentHolder instanceof TSStatus;
           TSStatus status = (TSStatus) contentHolder;
           try {
-            serializedData = 
ByteString.copyFrom(Utils.serializeTSStatus(status));
+            serializedData =
+                new 
AtomicReference<>(ByteString.copyFrom(Utils.serializeTSStatus(status)));
           } catch (TException e) {
             logger.warn("serialize TSStatus failed {}", status);
           }
         }
       }
     }
-    return serializedData;
+    return serializedData.get();
   }
 }
diff --git 
a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/utils/Utils.java 
b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/utils/Utils.java
index 507824a8e59..48975189eff 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/utils/Utils.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/utils/Utils.java
@@ -52,7 +52,7 @@ public class Utils {
   private static final byte PADDING_MAGIC = 0x47;
   private static final String DATA_REGION_GROUP = "group-0001";
   private static final String SCHEMA_REGION_GROUP = "group-0002";
-  private static volatile CommonConfig config = 
CommonDescriptor.getInstance().getConfig();
+  private static final CommonConfig config = 
CommonDescriptor.getInstance().getConfig();
 
   private Utils() {}
 

Reply via email to