-
Notifications
You must be signed in to change notification settings - Fork 242
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
Plain old NPE.
Depending on the order of the controllers in the set of existing controllers, and especially depending on the position of the "leader" controller in the collection, some controllers prior to the "leader" one may still have their _helixMapper field set to null, resulting with an NPE while filtering for leader.
To Reproduce
Happens from time to time, depending on the ordering of the retrieved controllers in the collection.
Expected behavior
controllers without _helixMapper set cannot be leaders, so we could expect them to be filtered out during the search.
Here is the code I propose to change (in GenericHelixController.java):
public static GenericHelixController getLeaderController(String clusterName) {
if (clusterName != null) {
ImmutableSet<GenericHelixController> controllers = _helixControllerFactory.get(clusterName);
if (controllers != null) {
return controllers.stream().filter(controller -> controller._helixManager.isLeader())
.findAny().orElse(null);
}
}
return null;
}
to
public static GenericHelixController getLeaderController(String clusterName) {
if (clusterName != null) {
ImmutableSet<GenericHelixController> controllers = _helixControllerFactory.get(clusterName);
if (controllers != null) {
return controllers.stream().filter(controller -> controller._helixManager != null && controller._helixManager.isLeader())
.findAny().orElse(null);
}
}
return null;
}
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working