Madan Jampani
Committed by Gerrit Code Review

Fixes NPE in map event listener

Minor logging improvements in IntentPartitionManager

Change-Id: I7b41428c5b56fcb7f98850f50a804468743b984a
...@@ -72,6 +72,7 @@ public class IntentPartitionManager implements IntentPartitionService { ...@@ -72,6 +72,7 @@ public class IntentPartitionManager implements IntentPartitionService {
72 72
73 private static final String ELECTION_PREFIX = "intent-partition-"; 73 private static final String ELECTION_PREFIX = "intent-partition-";
74 74
75 + protected NodeId localNodeId;
75 private ListenerRegistry<IntentPartitionEvent, IntentPartitionEventListener> listenerRegistry; 76 private ListenerRegistry<IntentPartitionEvent, IntentPartitionEventListener> listenerRegistry;
76 private LeadershipEventListener leaderListener = new InternalLeadershipListener(); 77 private LeadershipEventListener leaderListener = new InternalLeadershipListener();
77 78
...@@ -80,6 +81,7 @@ public class IntentPartitionManager implements IntentPartitionService { ...@@ -80,6 +81,7 @@ public class IntentPartitionManager implements IntentPartitionService {
80 81
81 @Activate 82 @Activate
82 public void activate() { 83 public void activate() {
84 + localNodeId = clusterService.getLocalNode().id();
83 leadershipService.addListener(leaderListener); 85 leadershipService.addListener(leaderListener);
84 86
85 listenerRegistry = new ListenerRegistry<>(); 87 listenerRegistry = new ListenerRegistry<>();
...@@ -87,10 +89,12 @@ public class IntentPartitionManager implements IntentPartitionService { ...@@ -87,10 +89,12 @@ public class IntentPartitionManager implements IntentPartitionService {
87 89
88 for (int i = 0; i < NUM_PARTITIONS; i++) { 90 for (int i = 0; i < NUM_PARTITIONS; i++) {
89 leadershipService.runForLeadership(getPartitionPath(i)); 91 leadershipService.runForLeadership(getPartitionPath(i));
92 + log.debug("Registered to run for {}", getPartitionPath(i));
90 } 93 }
91 94
92 executor.scheduleAtFixedRate(() -> scheduleRebalance(0), 0, 95 executor.scheduleAtFixedRate(() -> scheduleRebalance(0), 0,
93 CHECK_PARTITION_BALANCE_PERIOD_SEC, TimeUnit.SECONDS); 96 CHECK_PARTITION_BALANCE_PERIOD_SEC, TimeUnit.SECONDS);
97 + log.info("Started");
94 } 98 }
95 99
96 @Deactivate 100 @Deactivate
...@@ -99,6 +103,7 @@ public class IntentPartitionManager implements IntentPartitionService { ...@@ -99,6 +103,7 @@ public class IntentPartitionManager implements IntentPartitionService {
99 103
100 eventDispatcher.removeSink(IntentPartitionEvent.class); 104 eventDispatcher.removeSink(IntentPartitionEvent.class);
101 leadershipService.removeListener(leaderListener); 105 leadershipService.removeListener(leaderListener);
106 + log.info("Stopped");
102 } 107 }
103 108
104 /** 109 /**
...@@ -132,7 +137,7 @@ public class IntentPartitionManager implements IntentPartitionService { ...@@ -132,7 +137,7 @@ public class IntentPartitionManager implements IntentPartitionService {
132 @Override 137 @Override
133 public boolean isMine(Key intentKey) { 138 public boolean isMine(Key intentKey) {
134 return Objects.equals(leadershipService.getLeader(getPartitionPath(getPartitionForKey(intentKey))), 139 return Objects.equals(leadershipService.getLeader(getPartitionPath(getPartitionForKey(intentKey))),
135 - clusterService.getLocalNode().id()); 140 + localNodeId);
136 } 141 }
137 142
138 @Override 143 @Override
...@@ -175,7 +180,7 @@ public class IntentPartitionManager implements IntentPartitionService { ...@@ -175,7 +180,7 @@ public class IntentPartitionManager implements IntentPartitionService {
175 180
176 List<Leadership> myPartitions = leadershipService.getLeaderBoard().values() 181 List<Leadership> myPartitions = leadershipService.getLeaderBoard().values()
177 .stream() 182 .stream()
178 - .filter(l -> clusterService.getLocalNode().id().equals(l.leaderNodeId())) 183 + .filter(l -> localNodeId.equals(l.leaderNodeId()))
179 .filter(l -> l.topic().startsWith(ELECTION_PREFIX)) 184 .filter(l -> l.topic().startsWith(ELECTION_PREFIX))
180 .collect(Collectors.toList()); 185 .collect(Collectors.toList());
181 186
...@@ -215,7 +220,7 @@ public class IntentPartitionManager implements IntentPartitionService { ...@@ -215,7 +220,7 @@ public class IntentPartitionManager implements IntentPartitionService {
215 public void event(LeadershipEvent event) { 220 public void event(LeadershipEvent event) {
216 Leadership leadership = event.subject(); 221 Leadership leadership = event.subject();
217 222
218 - if (Objects.equals(leadership.leaderNodeId(), clusterService.getLocalNode().id()) && 223 + if (Objects.equals(leadership.leaderNodeId(), localNodeId) &&
219 leadership.topic().startsWith(ELECTION_PREFIX)) { 224 leadership.topic().startsWith(ELECTION_PREFIX)) {
220 225
221 eventDispatcher.post(new IntentPartitionEvent(IntentPartitionEvent.Type.LEADER_CHANGED, 226 eventDispatcher.post(new IntentPartitionEvent(IntentPartitionEvent.Type.LEADER_CHANGED,
......
...@@ -87,6 +87,7 @@ public class IntentPartitionManagerTest { ...@@ -87,6 +87,7 @@ public class IntentPartitionManagerTest {
87 .withScheduledExecutor(new NullScheduledExecutor()); 87 .withScheduledExecutor(new NullScheduledExecutor());
88 88
89 partitionManager.clusterService = new TestClusterService(); 89 partitionManager.clusterService = new TestClusterService();
90 + partitionManager.localNodeId = MY_NODE_ID;
90 partitionManager.leadershipService = leadershipService; 91 partitionManager.leadershipService = leadershipService;
91 partitionManager.eventDispatcher = new TestEventDispatcher(); 92 partitionManager.eventDispatcher = new TestEventDispatcher();
92 } 93 }
......
...@@ -208,8 +208,8 @@ public class TranscodingAsyncConsistentMap<K1, V1, K2, V2> implements AsyncConsi ...@@ -208,8 +208,8 @@ public class TranscodingAsyncConsistentMap<K1, V1, K2, V2> implements AsyncConsi
208 public void event(MapEvent<K2, V2> event) { 208 public void event(MapEvent<K2, V2> event) {
209 listener.event(new MapEvent<K1, V1>(event.name(), 209 listener.event(new MapEvent<K1, V1>(event.name(),
210 keyDecoder.apply(event.key()), 210 keyDecoder.apply(event.key()),
211 - event.newValue().map(valueDecoder), 211 + event.newValue() != null ? event.newValue().map(valueDecoder) : null,
212 - event.oldValue().map(valueDecoder))); 212 + event.oldValue() != null ? event.oldValue().map(valueDecoder) : null));
213 } 213 }
214 } 214 }
215 } 215 }
......