Repository: incubator-ratis
Updated Branches:
  refs/heads/master aa3816089 -> 2272086a5


RATIS-368. TestRaftSnapshotWithSimulatedRpc.testRestartPeer is failing.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/2272086a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/2272086a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/2272086a

Branch: refs/heads/master
Commit: 2272086a5aebb65a7b0bfe1de59087641b96609f
Parents: aa38160
Author: Tsz Wo Nicholas Sze <[email protected]>
Authored: Wed Oct 24 12:10:47 2018 +0800
Committer: Tsz Wo Nicholas Sze <[email protected]>
Committed: Wed Oct 24 12:10:47 2018 +0800

----------------------------------------------------------------------
 .../ratis/server/impl/ConfigurationManager.java   | 12 ++++++++++--
 .../ratis/server/impl/PeerConfiguration.java      | 16 ++++++++++++++++
 .../ratis/server/impl/RaftConfiguration.java      | 18 ++++++++++++++++++
 3 files changed, 44 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/2272086a/ratis-server/src/main/java/org/apache/ratis/server/impl/ConfigurationManager.java
----------------------------------------------------------------------
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/ConfigurationManager.java
 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/ConfigurationManager.java
index f8e5e57..a95683b 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/ConfigurationManager.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/ConfigurationManager.java
@@ -44,8 +44,16 @@ public class ConfigurationManager {
   }
 
   synchronized void addConfiguration(long logIndex, RaftConfiguration conf) {
-    Preconditions.assertTrue(configurations.isEmpty() ||
-        configurations.lastEntry().getKey() < logIndex);
+    final RaftConfiguration found = configurations.get(logIndex);
+    if (found != null) {
+      Preconditions.assertTrue(found.equals(conf));
+      return;
+    }
+    if (!configurations.isEmpty()) {
+      final Map.Entry<Long, RaftConfiguration> lastEntry = 
configurations.lastEntry();
+      Preconditions.assertTrue(lastEntry.getKey() < logIndex,
+          () -> "lastEntry = " + lastEntry + ", lastEntry.index >= logIndex = 
" + logIndex);
+    }
     configurations.put(logIndex, conf);
     this.currentConf = conf;
   }

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/2272086a/ratis-server/src/main/java/org/apache/ratis/server/impl/PeerConfiguration.java
----------------------------------------------------------------------
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/PeerConfiguration.java
 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/PeerConfiguration.java
index 06aeb62..6d92b92 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/PeerConfiguration.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/PeerConfiguration.java
@@ -87,4 +87,20 @@ class PeerConfiguration {
     }
     return false;
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    } else if (obj == null || obj.getClass() != this.getClass()) {
+      return false;
+    }
+    final PeerConfiguration that = (PeerConfiguration)obj;
+    return this.peers.equals(that.peers);
+  }
+
+  @Override
+  public int hashCode() {
+    return peers.keySet().hashCode(); // hashCode of a set is well defined in 
Java.
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/2272086a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftConfiguration.java
----------------------------------------------------------------------
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftConfiguration.java
 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftConfiguration.java
index eac0f58..e3d16ff 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftConfiguration.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftConfiguration.java
@@ -261,4 +261,22 @@ public class RaftConfiguration {
   Collection<RaftPeer> getPeersInConf() {
     return conf.getPeers();
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    } else if (obj == null || obj.getClass() != this.getClass()) {
+      return false;
+    }
+    final RaftConfiguration that = (RaftConfiguration)obj;
+    return this.logEntryIndex == that.logEntryIndex
+        && Objects.equals(this.conf,  that.conf)
+        && Objects.equals(this.oldConf,  that.oldConf);
+  }
+
+  @Override
+  public int hashCode() {
+    return Long.hashCode(logEntryIndex);
+  }
 }

Reply via email to