void handleNewSessionAsController() { if (_leaderElectionHandler != null) { _leaderElectionHandler.init(); } else { _leaderElectionHandler = new CallbackHandler(this, _zkclient, _keyBuilder.controller(), new DistributedLeaderElection(this, _controller, _controllerTimerTasks), new EventType[] { EventType.NodeChildrenChanged, EventType.NodeDeleted, EventType.NodeCreated }, ChangeType.CONTROLLER, _callbackMonitors.get(ChangeType.CONTROLLER)); } }
@Override public synchronized void onControllerChange(NotificationContext changeContext) { ControllerManagerHelper controllerHelper = new ControllerManagerHelper(_manager, _controllerTimerTasks); try { switch (changeContext.getType()) { case INIT: case CALLBACK: acquireLeadership(_manager, controllerHelper); break; case FINALIZE: relinquishLeadership(_manager, controllerHelper); break; default: LOG.info("Ignore controller change event {}. Type {}.", changeContext.getEventName(), changeContext.getType().name()); } } catch (Exception e) { LOG.error("Exception when trying to become leader", e); } }
new DistributedLeaderElection(manager, controller0, timerTasks); NotificationContext context = new NotificationContext(manager); context.setType(NotificationContext.Type.INIT); election.onControllerChange(context); new MockZKHelixManager(clusterName, "controller_1", InstanceType.CONTROLLER, _gZkClient); GenericHelixController controller1 = new GenericHelixController(); election = new DistributedLeaderElection(manager, controller1, timerTasks); context = new NotificationContext(manager); context.setType(NotificationContext.Type.INIT); election.onControllerChange(context);
private void acquireLeadership(final HelixManager manager, ControllerManagerHelper controllerHelper) { LOG.info(manager.getInstanceName() + " is trying to acquire leadership for cluster: " + manager .getClusterName()); HelixDataAccessor accessor = manager.getHelixDataAccessor(); Builder keyBuilder = accessor.keyBuilder(); while (accessor.getProperty(keyBuilder.controllerLeader()) == null) { if (tryCreateController(manager)) { LOG.info("{} with session {} acquired leadership for cluster: {}", manager.getInstanceName(), manager.getSessionId(), manager.getClusterName()); updateHistory(manager); manager.getHelixDataAccessor().getBaseDataAccessor().reset(); controllerHelper.addListenersToController(_controller); controllerHelper.startControllerTimerTasks(); } } }
boolean success = tryUpdateController(manager); if (success) { LOG.info(_manager.getInstanceName() + " acquired leadership for cluster: " + _manager.getClusterName()); updateHistory(manager); _manager.getHelixDataAccessor().getBaseDataAccessor().reset(); controllerHelper.addListenersToController(_controller);
new DistributedLeaderElection(manager, controller0, timerTasks); NotificationContext context = new NotificationContext(manager); context.setType(NotificationContext.Type.CALLBACK); election.onControllerChange(context); _gZkClient); GenericHelixController controller1 = new GenericHelixController(); election = new DistributedLeaderElection(manager, controller1, timerTasks); context = new NotificationContext(manager); context.setType(NotificationContext.Type.CALLBACK); election.onControllerChange(context);
void handleNewSessionAsController() { if (_leaderElectionHandler != null) { _leaderElectionHandler.init(); } else { _leaderElectionHandler = new CallbackHandler(this, _zkclient, _keyBuilder.controller(), new DistributedLeaderElection(this, _controller, _controllerTimerTasks), new EventType[] { EventType.NodeChildrenChanged, EventType.NodeDeleted, EventType.NodeCreated }, ChangeType.CONTROLLER, _callbackMonitors.get(ChangeType.CONTROLLER)); } }
@Test() public void testParticipant() throws Exception { String className = getShortClassName(); LOG.info("RUN " + className + " at " + new Date(System.currentTimeMillis())); final String clusterName = CLUSTER_PREFIX + "_" + className + "_" + "testParticipant"; TestHelper.setupEmptyCluster(_gZkClient, clusterName); final String controllerName = "participant_0"; HelixManager manager = new MockZKHelixManager(clusterName, controllerName, InstanceType.PARTICIPANT, _gZkClient); GenericHelixController participant0 = new GenericHelixController(); List<HelixTimerTask> timerTasks = Collections.emptyList(); try { DistributedLeaderElection election = new DistributedLeaderElection(manager, participant0, timerTasks); Assert.fail( "Should not be able construct DistributedLeaderElection object using participant manager."); } catch (HelixException ex) { // expected } TestHelper.dropCluster(clusterName, _gZkClient); }
GenericHelixController controller0 = new GenericHelixController(); DistributedLeaderElection election = new DistributedLeaderElection(manager, controller0, Collections.EMPTY_LIST); manager.connect(); managerList.put(manager.getInstanceName(), manager);
GenericHelixController controller0 = new GenericHelixController(); DistributedLeaderElection election = new DistributedLeaderElection(manager, controller0, Collections.EMPTY_LIST); manager.connect();