Fix FindBugs warnings in sal-akk-raft
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / messages / InstallSnapshot.java
index 5958cfdedf9d7460001cf93cbeda28436da6c383..b64e902f3ff9f93e782c4114e6e690bbef971b0a 100644 (file)
@@ -9,12 +9,16 @@
 package org.opendaylight.controller.cluster.raft.messages;
 
 import com.google.common.base.Optional;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload;
 
+/**
+ * Message sent from a leader to install a snapshot chunk on a follower.
+ */
 public class InstallSnapshot extends AbstractRaftRPC {
     private static final long serialVersionUID = 1L;
 
@@ -27,8 +31,12 @@ public class InstallSnapshot extends AbstractRaftRPC {
     private final Optional<Integer> lastChunkHashCode;
     private final Optional<ServerConfigurationPayload> serverConfig;
 
+    @SuppressFBWarnings(value = "EI_EXPOSE_REP2", justification = "Stores a reference to an externally mutable byte[] "
+            + "object but this is OK since this class is merely a DTO and does not process byte[] internally. "
+            + "Also it would be inefficient to create a copy as the byte[] could be large.")
     public InstallSnapshot(long term, String leaderId, long lastIncludedIndex, long lastIncludedTerm, byte[] data,
-            int chunkIndex, int totalChunks, Optional<Integer> lastChunkHashCode, Optional<ServerConfigurationPayload> serverConfig) {
+            int chunkIndex, int totalChunks, Optional<Integer> lastChunkHashCode,
+            Optional<ServerConfigurationPayload> serverConfig) {
         super(term);
         this.leaderId = leaderId;
         this.lastIncludedIndex = lastIncludedIndex;
@@ -58,6 +66,9 @@ public class InstallSnapshot extends AbstractRaftRPC {
         return lastIncludedTerm;
     }
 
+    @SuppressFBWarnings(value = "EI_EXPOSE_REP", justification = "Exposes a mutable object stored in a field but "
+            + "this is OK since this class is merely a DTO and does not process the byte[] internally. "
+            + "Also it would be inefficient to create a return copy as the byte[] could be large.")
     public byte[] getData() {
         return data;
     }
@@ -100,6 +111,9 @@ public class InstallSnapshot extends AbstractRaftRPC {
 
         private InstallSnapshot installSnapshot;
 
+        // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't
+        // redundant. It is explicitly needed for Java serialization to be able to create instances via reflection.
+        @SuppressWarnings("checkstyle:RedundantModifier")
         public Proxy() {
         }
 
@@ -117,12 +131,12 @@ public class InstallSnapshot extends AbstractRaftRPC {
             out.writeInt(installSnapshot.totalChunks);
 
             out.writeByte(installSnapshot.lastChunkHashCode.isPresent() ? 1 : 0);
-            if(installSnapshot.lastChunkHashCode.isPresent()) {
+            if (installSnapshot.lastChunkHashCode.isPresent()) {
                 out.writeInt(installSnapshot.lastChunkHashCode.get().intValue());
             }
 
             out.writeByte(installSnapshot.serverConfig.isPresent() ? 1 : 0);
-            if(installSnapshot.serverConfig.isPresent()) {
+            if (installSnapshot.serverConfig.isPresent()) {
                 out.writeObject(installSnapshot.serverConfig.get());
             }
 
@@ -140,13 +154,13 @@ public class InstallSnapshot extends AbstractRaftRPC {
 
             Optional<Integer> lastChunkHashCode = Optional.absent();
             boolean chunkHashCodePresent = in.readByte() == 1;
-            if(chunkHashCodePresent) {
+            if (chunkHashCodePresent) {
                 lastChunkHashCode = Optional.of(in.readInt());
             }
 
             Optional<ServerConfigurationPayload> serverConfig = Optional.absent();
             boolean serverConfigPresent = in.readByte() == 1;
-            if(serverConfigPresent) {
+            if (serverConfigPresent) {
                 serverConfig = Optional.of((ServerConfigurationPayload)in.readObject());
             }