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() {}