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); + } }
