Committed by
Gerrit Code Review
Fixes some issues that were preventing intent tests from running
- LeadershipStore to support serving getAllLeaderships from cache. - Removed a changed to KryoNamespaces that was causing serialization issues. Instead moved that type registration to McastStore. Change-Id: I06acf1a397b6a982c0dfd0ebc0830b2161cf23a4
Showing
4 changed files
with
15 additions
and
8 deletions
... | @@ -71,6 +71,8 @@ public class DistributedLeadershipStore | ... | @@ -71,6 +71,8 @@ public class DistributedLeadershipStore |
71 | 71 | ||
72 | protected NodeId localNodeId; | 72 | protected NodeId localNodeId; |
73 | protected ConsistentMap<String, InternalLeadership> leadershipMap; | 73 | protected ConsistentMap<String, InternalLeadership> leadershipMap; |
74 | + protected Map<String, Versioned<InternalLeadership>> leadershipCache = Maps.newConcurrentMap(); | ||
75 | + | ||
74 | private final MapEventListener<String, InternalLeadership> leadershipChangeListener = | 76 | private final MapEventListener<String, InternalLeadership> leadershipChangeListener = |
75 | event -> { | 77 | event -> { |
76 | Leadership oldValue = InternalLeadership.toLeadership(Versioned.valueOrNull(event.oldValue())); | 78 | Leadership oldValue = InternalLeadership.toLeadership(Versioned.valueOrNull(event.oldValue())); |
... | @@ -91,6 +93,12 @@ public class DistributedLeadershipStore | ... | @@ -91,6 +93,12 @@ public class DistributedLeadershipStore |
91 | if (!leaderChanged && candidatesChanged) { | 93 | if (!leaderChanged && candidatesChanged) { |
92 | eventType = LeadershipEvent.Type.CANDIDATES_CHANGED; | 94 | eventType = LeadershipEvent.Type.CANDIDATES_CHANGED; |
93 | } | 95 | } |
96 | + leadershipCache.compute(event.key(), (k, v) -> { | ||
97 | + if (v == null || v.version() < event.newValue().version()) { | ||
98 | + return event.newValue(); | ||
99 | + } | ||
100 | + return v; | ||
101 | + }); | ||
94 | notifyDelegate(new LeadershipEvent(eventType, newValue)); | 102 | notifyDelegate(new LeadershipEvent(eventType, newValue)); |
95 | }; | 103 | }; |
96 | 104 | ||
... | @@ -103,6 +111,7 @@ public class DistributedLeadershipStore | ... | @@ -103,6 +111,7 @@ public class DistributedLeadershipStore |
103 | .withRelaxedReadConsistency() | 111 | .withRelaxedReadConsistency() |
104 | .withSerializer(Serializer.using(KryoNamespaces.API, InternalLeadership.class)) | 112 | .withSerializer(Serializer.using(KryoNamespaces.API, InternalLeadership.class)) |
105 | .build(); | 113 | .build(); |
114 | + leadershipMap.entrySet().forEach(e -> leadershipCache.put(e.getKey(), e.getValue())); | ||
106 | leadershipMap.addListener(leadershipChangeListener); | 115 | leadershipMap.addListener(leadershipChangeListener); |
107 | log.info("Started"); | 116 | log.info("Started"); |
108 | } | 117 | } |
... | @@ -210,16 +219,13 @@ public class DistributedLeadershipStore | ... | @@ -210,16 +219,13 @@ public class DistributedLeadershipStore |
210 | 219 | ||
211 | @Override | 220 | @Override |
212 | public Leadership getLeadership(String topic) { | 221 | public Leadership getLeadership(String topic) { |
213 | - return InternalLeadership.toLeadership(Versioned.valueOrNull(leadershipMap.get(topic))); | 222 | + InternalLeadership internalLeadership = Versioned.valueOrNull(leadershipCache.get(topic)); |
223 | + return internalLeadership == null ? null : internalLeadership.asLeadership(); | ||
214 | } | 224 | } |
215 | 225 | ||
216 | @Override | 226 | @Override |
217 | public Map<String, Leadership> getLeaderships() { | 227 | public Map<String, Leadership> getLeaderships() { |
218 | - Map<String, Leadership> leaderships = Maps.newHashMap(); | 228 | + return ImmutableMap.copyOf(Maps.transformValues(leadershipCache, v -> v.value().asLeadership())); |
219 | - leadershipMap.entrySet().forEach(e -> { | ||
220 | - leaderships.put(e.getKey(), e.getValue().value().asLeadership()); | ||
221 | - }); | ||
222 | - return ImmutableMap.copyOf(leaderships); | ||
223 | } | 229 | } |
224 | 230 | ||
225 | private static class InternalLeadership { | 231 | private static class InternalLeadership { | ... | ... |
... | @@ -225,7 +225,6 @@ import java.util.concurrent.CopyOnWriteArraySet; | ... | @@ -225,7 +225,6 @@ import java.util.concurrent.CopyOnWriteArraySet; |
225 | import java.util.concurrent.atomic.AtomicBoolean; | 225 | import java.util.concurrent.atomic.AtomicBoolean; |
226 | import java.util.concurrent.atomic.AtomicInteger; | 226 | import java.util.concurrent.atomic.AtomicInteger; |
227 | import java.util.concurrent.atomic.AtomicLong; | 227 | import java.util.concurrent.atomic.AtomicLong; |
228 | -import java.util.concurrent.atomic.AtomicReference; | ||
229 | 228 | ||
230 | public final class KryoNamespaces { | 229 | public final class KryoNamespaces { |
231 | 230 | ||
... | @@ -235,7 +234,6 @@ public final class KryoNamespaces { | ... | @@ -235,7 +234,6 @@ public final class KryoNamespaces { |
235 | .register(AtomicBoolean.class) | 234 | .register(AtomicBoolean.class) |
236 | .register(AtomicInteger.class) | 235 | .register(AtomicInteger.class) |
237 | .register(AtomicLong.class) | 236 | .register(AtomicLong.class) |
238 | - .register(AtomicReference.class) | ||
239 | .register(new ImmutableListSerializer(), | 237 | .register(new ImmutableListSerializer(), |
240 | ImmutableList.class, | 238 | ImmutableList.class, |
241 | ImmutableList.of(1).getClass(), | 239 | ImmutableList.of(1).getClass(), | ... | ... |
... | @@ -22,6 +22,7 @@ import org.slf4j.Logger; | ... | @@ -22,6 +22,7 @@ import org.slf4j.Logger; |
22 | 22 | ||
23 | import java.util.Map; | 23 | import java.util.Map; |
24 | import java.util.Set; | 24 | import java.util.Set; |
25 | +import java.util.concurrent.atomic.AtomicReference; | ||
25 | 26 | ||
26 | import static org.slf4j.LoggerFactory.getLogger; | 27 | import static org.slf4j.LoggerFactory.getLogger; |
27 | 28 | ||
... | @@ -56,6 +57,7 @@ public class DistributedMcastStore extends AbstractStore<McastEvent, McastStoreD | ... | @@ -56,6 +57,7 @@ public class DistributedMcastStore extends AbstractStore<McastEvent, McastStoreD |
56 | .withSerializer(Serializer.using(KryoNamespace.newBuilder() | 57 | .withSerializer(Serializer.using(KryoNamespace.newBuilder() |
57 | .register(KryoNamespaces.API) | 58 | .register(KryoNamespaces.API) |
58 | .register( | 59 | .register( |
60 | + AtomicReference.class, | ||
59 | MulticastData.class, | 61 | MulticastData.class, |
60 | McastRoute.class, | 62 | McastRoute.class, |
61 | McastRoute.Type.class | 63 | McastRoute.Type.class | ... | ... |
... | @@ -57,6 +57,7 @@ public final class MulticastData { | ... | @@ -57,6 +57,7 @@ public final class MulticastData { |
57 | } | 57 | } |
58 | 58 | ||
59 | public void setSource(ConnectPoint source) { | 59 | public void setSource(ConnectPoint source) { |
60 | + // FIXME: violates immutability | ||
60 | isEmpty.set(false); | 61 | isEmpty.set(false); |
61 | this.source.set(source); | 62 | this.source.set(source); |
62 | } | 63 | } | ... | ... |
-
Please register or login to post a comment