Committed by
Gerrit Code Review
added equality functions that do a deep content check
Change-Id: Ibc64373587622fa6911d18e21d1695577cc36301
Showing
3 changed files
with
66 additions
and
5 deletions
... | @@ -15,6 +15,7 @@ | ... | @@ -15,6 +15,7 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.cluster; | 16 | package org.onosproject.cluster; |
17 | 17 | ||
18 | +import java.util.Arrays; | ||
18 | import java.util.Collection; | 19 | import java.util.Collection; |
19 | import java.util.Set; | 20 | import java.util.Set; |
20 | import java.util.stream.Collectors; | 21 | import java.util.stream.Collectors; |
... | @@ -26,6 +27,7 @@ import static com.google.common.base.Verify.verify; | ... | @@ -26,6 +27,7 @@ import static com.google.common.base.Verify.verify; |
26 | import com.google.common.base.MoreObjects; | 27 | import com.google.common.base.MoreObjects; |
27 | import com.google.common.collect.Collections2; | 28 | import com.google.common.collect.Collections2; |
28 | import com.google.common.collect.ImmutableSet; | 29 | import com.google.common.collect.ImmutableSet; |
30 | +import com.google.common.collect.Sets; | ||
29 | 31 | ||
30 | /** | 32 | /** |
31 | * Cluster metadata. | 33 | * Cluster metadata. |
... | @@ -82,6 +84,33 @@ public final class ClusterMetadata { | ... | @@ -82,6 +84,33 @@ public final class ClusterMetadata { |
82 | .toString(); | 84 | .toString(); |
83 | } | 85 | } |
84 | 86 | ||
87 | + @Override | ||
88 | + public int hashCode() { | ||
89 | + return Arrays.deepHashCode(new Object[] {name, nodes, partitions}); | ||
90 | + } | ||
91 | + | ||
92 | + /* | ||
93 | + * Provide a deep quality check of the meta data (non-Javadoc) | ||
94 | + * | ||
95 | + * @see java.lang.Object#equals(java.lang.Object) | ||
96 | + */ | ||
97 | + @Override | ||
98 | + public boolean equals(Object object) { | ||
99 | + | ||
100 | + if (!ClusterMetadata.class.isInstance(object)) { | ||
101 | + return false; | ||
102 | + } | ||
103 | + ClusterMetadata that = (ClusterMetadata) object; | ||
104 | + | ||
105 | + if (!this.name.equals(that.name) || this.nodes.size() != that.nodes.size() | ||
106 | + || this.partitions.size() != that.partitions.size()) { | ||
107 | + return false; | ||
108 | + } | ||
109 | + | ||
110 | + return Sets.symmetricDifference(this.nodes, that.nodes).isEmpty() | ||
111 | + && Sets.symmetricDifference(this.partitions, that.partitions).isEmpty(); | ||
112 | + } | ||
113 | + | ||
85 | /** | 114 | /** |
86 | * Builder for a {@link ClusterMetadata} instance. | 115 | * Builder for a {@link ClusterMetadata} instance. |
87 | */ | 116 | */ |
... | @@ -146,10 +175,10 @@ public final class ClusterMetadata { | ... | @@ -146,10 +175,10 @@ public final class ClusterMetadata { |
146 | 175 | ||
147 | // verify that partitions are constituted from valid cluster nodes. | 176 | // verify that partitions are constituted from valid cluster nodes. |
148 | boolean validPartitions = Collections2.transform(metadata.getNodes(), ControllerNode::id) | 177 | boolean validPartitions = Collections2.transform(metadata.getNodes(), ControllerNode::id) |
149 | - .containsAll(metadata.getPartitions() | 178 | + .containsAll(metadata.getPartitions() |
150 | - .stream() | 179 | + .stream() |
151 | - .flatMap(r -> r.getMembers().stream()) | 180 | + .flatMap(r -> r.getMembers().stream()) |
152 | - .collect(Collectors.toSet())); | 181 | + .collect(Collectors.toSet())); |
153 | verify(validPartitions, "Partition locations must be valid cluster nodes"); | 182 | verify(validPartitions, "Partition locations must be valid cluster nodes"); |
154 | } | 183 | } |
155 | } | 184 | } | ... | ... |
... | @@ -20,7 +20,7 @@ import java.util.Objects; | ... | @@ -20,7 +20,7 @@ import java.util.Objects; |
20 | /** | 20 | /** |
21 | * Controller cluster identity. | 21 | * Controller cluster identity. |
22 | */ | 22 | */ |
23 | -public class NodeId { | 23 | +public class NodeId implements Comparable<NodeId> { |
24 | 24 | ||
25 | private final String id; | 25 | private final String id; |
26 | 26 | ||
... | @@ -55,4 +55,9 @@ public class NodeId { | ... | @@ -55,4 +55,9 @@ public class NodeId { |
55 | return id; | 55 | return id; |
56 | } | 56 | } |
57 | 57 | ||
58 | + @Override | ||
59 | + public int compareTo(NodeId that) { | ||
60 | + return this.id.compareTo(that.id); | ||
61 | + } | ||
62 | + | ||
58 | } | 63 | } | ... | ... |
... | @@ -15,10 +15,12 @@ | ... | @@ -15,10 +15,12 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.cluster; | 16 | package org.onosproject.cluster; |
17 | 17 | ||
18 | +import java.util.Arrays; | ||
18 | import java.util.Collection; | 19 | import java.util.Collection; |
19 | import java.util.Set; | 20 | import java.util.Set; |
20 | 21 | ||
21 | import com.google.common.collect.ImmutableSet; | 22 | import com.google.common.collect.ImmutableSet; |
23 | +import com.google.common.collect.Sets; | ||
22 | 24 | ||
23 | import static com.google.common.base.Preconditions.checkNotNull; | 25 | import static com.google.common.base.Preconditions.checkNotNull; |
24 | 26 | ||
... | @@ -61,4 +63,29 @@ public class Partition { | ... | @@ -61,4 +63,29 @@ public class Partition { |
61 | public Collection<NodeId> getMembers() { | 63 | public Collection<NodeId> getMembers() { |
62 | return this.members; | 64 | return this.members; |
63 | } | 65 | } |
66 | + | ||
67 | + @Override | ||
68 | + public int hashCode() { | ||
69 | + return Arrays.deepHashCode(new Object[] {name, members}); | ||
70 | + } | ||
71 | + | ||
72 | + @Override | ||
73 | + public boolean equals(Object other) { | ||
74 | + if (this == other) { | ||
75 | + return true; | ||
76 | + } | ||
77 | + | ||
78 | + if (other == null || !Partition.class.isInstance(other)) { | ||
79 | + return false; | ||
80 | + } | ||
81 | + | ||
82 | + Partition that = (Partition) other; | ||
83 | + | ||
84 | + if (!this.name.equals(that.name) || (this.members == null && that.members != null) | ||
85 | + || (this.members != null && that.members == null) || this.members.size() != that.members.size()) { | ||
86 | + return false; | ||
87 | + } | ||
88 | + | ||
89 | + return Sets.symmetricDifference(this.members, that.members).isEmpty(); | ||
90 | + } | ||
64 | } | 91 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment