RATIS-2049. Suppress Sonar warning for volatile objects (#1057)

diff --git a/ratis-client/src/main/java/org/apache/ratis/client/impl/RaftClientImpl.java b/ratis-client/src/main/java/org/apache/ratis/client/impl/RaftClientImpl.java
index 1b82709..db789ae 100644
--- a/ratis-client/src/main/java/org/apache/ratis/client/impl/RaftClientImpl.java
+++ b/ratis-client/src/main/java/org/apache/ratis/client/impl/RaftClientImpl.java
@@ -172,6 +172,7 @@
   private final RaftGroupId groupId;
   private final RetryPolicy retryPolicy;
 
+  @SuppressWarnings({"squid:S3077"}) // Suppress volatile for generic type
   private volatile RaftPeerId leaderId;
   /** The callIds of the replied requests. */
   private final RepliedCallIds repliedCallIds;
diff --git a/ratis-common/src/main/java/org/apache/ratis/util/MemoizedCheckedSupplier.java b/ratis-common/src/main/java/org/apache/ratis/util/MemoizedCheckedSupplier.java
index cf2d060..0e9ae44 100644
--- a/ratis-common/src/main/java/org/apache/ratis/util/MemoizedCheckedSupplier.java
+++ b/ratis-common/src/main/java/org/apache/ratis/util/MemoizedCheckedSupplier.java
@@ -44,6 +44,8 @@
   }
 
   private final CheckedSupplier<RETURN, THROW> initializer;
+
+  @SuppressWarnings({"squid:S3077"}) // Suppress volatile for generic type
   private volatile RETURN value = null;
 
   /**
diff --git a/ratis-common/src/main/java/org/apache/ratis/util/MemoizedSupplier.java b/ratis-common/src/main/java/org/apache/ratis/util/MemoizedSupplier.java
index f179d2d..5c2754a 100644
--- a/ratis-common/src/main/java/org/apache/ratis/util/MemoizedSupplier.java
+++ b/ratis-common/src/main/java/org/apache/ratis/util/MemoizedSupplier.java
@@ -40,6 +40,7 @@
   }
 
   private final Supplier<T> initializer;
+  @SuppressWarnings({"squid:S3077"}) // Suppress volatile for generic type
   private volatile T value = null;
 
   /**
diff --git a/ratis-examples/src/main/java/org/apache/ratis/examples/debug/server/Server.java b/ratis-examples/src/main/java/org/apache/ratis/examples/debug/server/Server.java
index 4377a14..07f7b20 100644
--- a/ratis-examples/src/main/java/org/apache/ratis/examples/debug/server/Server.java
+++ b/ratis-examples/src/main/java/org/apache/ratis/examples/debug/server/Server.java
@@ -34,6 +34,7 @@
   private Server(){
   }
 
+  @SuppressWarnings({"squid:S2095"}) // Suppress closeable  warning
   public static void main(String[] args) throws IOException {
     if (args.length < 1) {
       System.err.println("The arguments should be <ip:port>");
diff --git a/ratis-examples/src/main/java/org/apache/ratis/examples/filestore/cli/Client.java b/ratis-examples/src/main/java/org/apache/ratis/examples/filestore/cli/Client.java
index 1856fc9..caf2aa5 100644
--- a/ratis-examples/src/main/java/org/apache/ratis/examples/filestore/cli/Client.java
+++ b/ratis-examples/src/main/java/org/apache/ratis/examples/filestore/cli/Client.java
@@ -159,6 +159,9 @@
       Process pro = Runtime.getRuntime().exec(cmds);
       pro.waitFor();
     } catch (Throwable t) {
+      if (t instanceof InterruptedException) {
+        Thread.currentThread().interrupt();
+      }
       System.err.println("Failed to run command:" + Arrays.toString(cmds) + ":" + t.getMessage());
     }
   }
diff --git a/ratis-examples/src/main/java/org/apache/ratis/examples/membership/server/CServer.java b/ratis-examples/src/main/java/org/apache/ratis/examples/membership/server/CServer.java
index a846cd1..2145412 100644
--- a/ratis-examples/src/main/java/org/apache/ratis/examples/membership/server/CServer.java
+++ b/ratis-examples/src/main/java/org/apache/ratis/examples/membership/server/CServer.java
@@ -32,7 +32,6 @@
 import org.apache.ratis.thirdparty.com.google.common.base.MoreObjects;
 import org.apache.ratis.util.FileUtils;
 
-import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
 import java.util.Collections;
@@ -40,7 +39,7 @@
 /**
  * A simple raft server using {@link CounterStateMachine}.
  */
-public class CServer implements Closeable {
+public class CServer {
   public static final RaftGroupId GROUP_ID = RaftGroupId.randomId();
   public static final String LOCAL_ADDR = "0.0.0.0";
 
@@ -78,7 +77,6 @@
     return server.getPeer();
   }
 
-  @Override
   public void close() throws IOException {
     server.close();
     FileUtils.deleteFully(storageDir);
diff --git a/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcLogAppender.java b/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcLogAppender.java
index ec44d8c..5f9c94e 100644
--- a/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcLogAppender.java
+++ b/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcLogAppender.java
@@ -156,7 +156,6 @@
   private final TimeDuration logMessageBatchDuration;
   private final int maxOutstandingInstallSnapshots;
   private final TimeoutExecutor scheduler = TimeoutExecutor.getInstance();
-
   private volatile StreamObservers appendLogRequestObserver;
   private final boolean useSeparateHBChannel;
 
@@ -863,6 +862,7 @@
 
   static class AppendEntriesRequest {
     private final Timekeeper timer;
+    @SuppressWarnings({"squid:S3077"}) // Suppress volatile for generic type
     private volatile Timekeeper.Context timerContext;
 
     private final long callId;
@@ -871,7 +871,7 @@
 
     private final TermIndex firstEntry;
     private final TermIndex lastEntry;
-
+    @SuppressWarnings({"squid:S3077"}) // Suppress volatile for generic type
     private volatile Timestamp sendTime;
 
     AppendEntriesRequest(AppendEntriesRequestProto proto, RaftPeerId followerId, GrpcServerMetrics grpcServerMetrics) {
diff --git a/ratis-server-api/src/main/java/org/apache/ratis/server/leader/LogAppender.java b/ratis-server-api/src/main/java/org/apache/ratis/server/leader/LogAppender.java
index 020a352..36331e3 100644
--- a/ratis-server-api/src/main/java/org/apache/ratis/server/leader/LogAppender.java
+++ b/ratis-server-api/src/main/java/org/apache/ratis/server/leader/LogAppender.java
@@ -87,10 +87,11 @@
   default CompletableFuture<?> stopAsync() {
     stop();
     return CompletableFuture.supplyAsync(() -> {
-      for (; isRunning(); ) {
+      while (isRunning()) {
         try {
           Thread.sleep(10);
         } catch (InterruptedException e) {
+          Thread.currentThread().interrupt();
           throw new CompletionException("stopAsync interrupted", e);
         }
       }
diff --git a/ratis-test/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java b/ratis-test/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
index eb65f34..12cd771 100644
--- a/ratis-test/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
+++ b/ratis-test/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
@@ -87,6 +87,7 @@
     return impl;
   }
 
+  @SuppressWarnings({"squid:S5783"}) // Suppress same exception warning
   @Test
   public void testNotExistent() throws IOException {
     FileUtils.deleteFully(storageDir);