private void markReadMessage(Message message, NotificationContext context, HelixManager manager) { message.setMsgState(MessageState.READ); message.setReadTimeStamp(new Date().getTime()); message.setExecuteSessionId(context.getManager().getSessionId()); _statusUpdateUtil.logInfo(message, HelixStateMachineEngine.class, "New Message", manager); }
private void markReadMessage(Message message, NotificationContext context, HelixManager manager) { message.setMsgState(MessageState.READ); message.setReadTimeStamp(new Date().getTime()); message.setExecuteSessionId(context.getManager().getSessionId()); _statusUpdateUtil.logInfo(message, HelixStateMachineEngine.class, "New Message", manager); }
public void logError(ErrorType errorType, Class classInfo, String additionalInfo, HelixManager helixManager) { if (helixManager != null) { logError(errorType, "ErrorInfo", helixManager.getInstanceName(), helixManager.getSessionId(), additionalInfo, classInfo, helixManager.getHelixDataAccessor(), helixManager.getInstanceType().equals(InstanceType.CONTROLLER) || helixManager.getInstanceType() .equals(InstanceType.CONTROLLER_PARTICIPANT)); } else { _logger.error("Exception while logging error. HelixManager is null."); } }
public void logError(ErrorType errorType, Class classInfo, String additionalInfo, HelixManager helixManager) { if (helixManager != null) { logError(errorType, "ErrorInfo", helixManager.getInstanceName(), helixManager.getSessionId(), additionalInfo, classInfo, helixManager.getHelixDataAccessor(), helixManager.getInstanceType().equals(InstanceType.CONTROLLER) || helixManager.getInstanceType() .equals(InstanceType.CONTROLLER_PARTICIPANT)); } else { _logger.error("Exception while logging error. HelixManager is null."); } }
private void callParticipantCode(NotificationContext context) { // since ZkClient.unsubscribe() does not immediately remove listeners // from zk, it is possible that two listeners exist when leadership transfers // therefore, double check to make sure only one participant invokes the code if (context.getType() == Type.CALLBACK) { HelixManager manager = context.getManager(); // DataAccessor accessor = manager.getDataAccessor(); HelixDataAccessor accessor = manager.getHelixDataAccessor(); Builder keyBuilder = accessor.keyBuilder(); String instance = manager.getInstanceName(); String sessionId = manager.getSessionId(); // get resource name from partition key: "PARTICIPANT_LEADER_XXX_0" String resourceName = _partitionKey.substring(0, _partitionKey.lastIndexOf('_')); CurrentState curState = accessor.getProperty(keyBuilder.currentState(instance, sessionId, resourceName)); if (curState == null) { return; } String state = curState.getState(_partitionKey); if (state == null || !state.equalsIgnoreCase("LEADER")) { return; } } try { _callback.onCallback(context); } catch (Exception e) { LOG.error("Error invoking callback:" + _callback, e); } }
private void callParticipantCode(NotificationContext context) { // since ZkClient.unsubscribe() does not immediately remove listeners // from zk, it is possible that two listeners exist when leadership transfers // therefore, double check to make sure only one participant invokes the code if (context.getType() == Type.CALLBACK) { HelixManager manager = context.getManager(); // DataAccessor accessor = manager.getDataAccessor(); HelixDataAccessor accessor = manager.getHelixDataAccessor(); Builder keyBuilder = accessor.keyBuilder(); String instance = manager.getInstanceName(); String sessionId = manager.getSessionId(); // get resource name from partition key: "PARTICIPANT_LEADER_XXX_0" String resourceName = _partitionKey.substring(0, _partitionKey.lastIndexOf('_')); CurrentState curState = accessor.getProperty(keyBuilder.currentState(instance, sessionId, resourceName)); if (curState == null) { return; } String state = curState.getState(_partitionKey); if (state == null || !state.equalsIgnoreCase("LEADER")) { return; } } try { _callback.onCallback(context); } catch (Exception e) { LOG.error("Error invoking callback:" + _callback, e); } }
private boolean tryUpdateController(HelixManager manager) { HelixDataAccessor accessor = manager.getHelixDataAccessor(); Builder keyBuilder = accessor.keyBuilder(); LiveInstance leader = new LiveInstance(manager.getInstanceName()); try { leader.setLiveInstance(ManagementFactory.getRuntimeMXBean().getName()); leader.setSessionId(manager.getSessionId()); leader.setHelixVersion(manager.getVersion()); boolean success = accessor.createControllerLeader(leader); if (success) { return true; } else { LOG.info("Unable to become leader probably because some other controller becames the leader"); } } catch (Exception e) { LOG.error( "Exception when trying to updating leader record in cluster:" + manager.getClusterName() + ". Need to check again whether leader node has been created or not", e); } leader = accessor.getProperty(keyBuilder.controllerLeader()); if (leader != null) { String leaderSessionId = leader.getSessionId(); LOG.info("Leader exists for cluster: " + manager.getClusterName() + ", currentLeader: " + leader.getInstanceName() + ", leaderSessionId: " + leaderSessionId); if (leaderSessionId != null && leaderSessionId.equals(manager.getSessionId())) { return true; } } return false; }
if (!_manager.getSessionId().equals(message.getTgtSessionId())) { logger.info( "Session id has been changed, ignore all relay messages attached with " + message
if (!_manager.getSessionId().equals(message.getTgtSessionId())) { logger.info( "Session id has been changed, ignore all relay messages attached with " + message
newLeader.setSessionId(manager.getSessionId()); newLeader.setHelixVersion(manager.getVersion()); try {
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(); } } }
public ParticipantManager(HelixManager manager, ZkClient zkclient, int sessionTimeout, LiveInstanceInfoProvider liveInstanceInfoProvider, List<PreConnectCallback> preConnectCallbacks) { _zkclient = zkclient; _manager = manager; _clusterName = manager.getClusterName(); _instanceName = manager.getInstanceName(); _keyBuilder = new PropertyKey.Builder(_clusterName); _sessionId = manager.getSessionId(); _sessionTimeout = sessionTimeout; _configAccessor = manager.getConfigAccessor(); _instanceType = manager.getInstanceType(); _helixAdmin = manager.getClusterManagmentTool(); _dataAccessor = (ZKHelixDataAccessor) manager.getHelixDataAccessor(); _messagingService = (DefaultMessagingService) manager.getMessagingService(); _stateMachineEngine = manager.getStateMachineEngine(); _liveInstanceInfoProvider = liveInstanceInfoProvider; _preConnectCallbacks = preConnectCallbacks; }
public ParticipantManager(HelixManager manager, HelixZkClient zkclient, int sessionTimeout, LiveInstanceInfoProvider liveInstanceInfoProvider, List<PreConnectCallback> preConnectCallbacks) { _zkclient = zkclient; _manager = manager; _clusterName = manager.getClusterName(); _instanceName = manager.getInstanceName(); _keyBuilder = new PropertyKey.Builder(_clusterName); _sessionId = manager.getSessionId(); _sessionTimeout = sessionTimeout; _configAccessor = manager.getConfigAccessor(); _instanceType = manager.getInstanceType(); _helixAdmin = manager.getClusterManagmentTool(); _dataAccessor = (ZKHelixDataAccessor) manager.getHelixDataAccessor(); _messagingService = (DefaultMessagingService) manager.getMessagingService(); _stateMachineEngine = manager.getStateMachineEngine(); _liveInstanceInfoProvider = liveInstanceInfoProvider; _preConnectCallbacks = preConnectCallbacks; }
private void setLeader(HelixManager manager) throws Exception { System.out.println("Setting controller " + manager.getInstanceName() + " as leader"); HelixDataAccessor accessor = manager.getHelixDataAccessor(); final LiveInstance leader = new LiveInstance(manager.getInstanceName()); leader.setLiveInstance(ManagementFactory.getRuntimeMXBean().getName()); leader.setSessionId(manager.getSessionId()); leader.setHelixVersion(manager.getVersion()); // Delete the current controller leader node so it will trigger leader election while (!manager.isLeader()) { accessor.getBaseDataAccessor() .remove(PropertyPathBuilder.controllerLeader(manager.getClusterName()), AccessOption.EPHEMERAL); Thread.sleep(50); } }
for (int i = 0; i < nMsgs1; i++) { Message msg = new Message(factory.getMessageTypes().get(0), UUID.randomUUID().toString()); msg.setTgtSessionId(manager.getSessionId()); msg.setTgtName("Localhost_1123"); msg.setSrcName("127.101.1.23_2234");
private Message createStateTransitionCancellationMessage(HelixManager manager, Resource resource, String partitionName, String instanceName, String sessionId, String stateModelDefName, String fromState, String toState, String nextState, Message cancellationMessage, boolean isCancellationEnabled, String currentState) { if (isCancellationEnabled && cancellationMessage == null) { LogUtil.logInfo(logger, _eventId, "Send cancellation message of the state transition for " + resource.getResourceName() + "." + partitionName + " on " + instanceName + ", currentState: " + currentState + ", nextState: " + (nextState == null ? "N/A" : nextState)); String uuid = UUID.randomUUID().toString(); Message message = new Message(MessageType.STATE_TRANSITION_CANCELLATION, uuid); message.setSrcName(manager.getInstanceName()); message.setTgtName(instanceName); message.setMsgState(MessageState.NEW); message.setPartitionName(partitionName); message.setResourceName(resource.getResourceName()); message.setFromState(fromState); message.setToState(toState); message.setTgtSessionId(sessionId); message.setSrcSessionId(manager.getSessionId()); message.setStateModelDef(stateModelDefName); message.setStateModelFactoryName(resource.getStateModelFactoryname()); message.setBucketSize(resource.getBucketSize()); return message; } return null; }
private Message createStateTransitionCancellationMessage(HelixManager manager, Resource resource, String partitionName, String instanceName, String sessionId, String stateModelDefName, String fromState, String toState, String nextState, Message cancellationMessage, boolean isCancellationEnabled, String currentState) { if (isCancellationEnabled && cancellationMessage == null) { LogUtil.logInfo(logger, _eventId, "Send cancellation message of the state transition for " + resource.getResourceName() + "." + partitionName + " on " + instanceName + ", currentState: " + currentState + ", nextState: " + (nextState == null ? "N/A" : nextState)); String uuid = UUID.randomUUID().toString(); Message message = new Message(MessageType.STATE_TRANSITION_CANCELLATION, uuid); message.setSrcName(manager.getInstanceName()); message.setTgtName(instanceName); message.setMsgState(MessageState.NEW); message.setPartitionName(partitionName); message.setResourceName(resource.getResourceName()); message.setFromState(fromState); message.setToState(toState); message.setTgtSessionId(sessionId); message.setSrcSessionId(manager.getSessionId()); message.setStateModelDef(stateModelDefName); message.setStateModelFactoryName(resource.getStateModelFactoryname()); message.setBucketSize(resource.getBucketSize()); return message; } return null; }
private Message createStateTransitionMessage(HelixManager manager, Resource resource, String partitionName, String instanceName, String currentState, String nextState, String sessionId, String stateModelDefName) { String uuid = UUID.randomUUID().toString(); Message message = new Message(MessageType.STATE_TRANSITION, uuid); message.setSrcName(manager.getInstanceName()); message.setTgtName(instanceName); message.setMsgState(MessageState.NEW); message.setPartitionName(partitionName); message.setResourceName(resource.getResourceName()); message.setFromState(currentState); message.setToState(nextState); message.setTgtSessionId(sessionId); message.setSrcSessionId(manager.getSessionId()); message.setStateModelDef(stateModelDefName); message.setStateModelFactoryName(resource.getStateModelFactoryname()); message.setBucketSize(resource.getBucketSize()); if (resource.getResourceGroupName() != null) { message.setResourceGroupName(resource.getResourceGroupName()); } if (resource.getResourceTag() != null) { message.setResourceTag(resource.getResourceTag()); } return message; }
private Message createStateTransitionMessage(HelixManager manager, Resource resource, String partitionName, String instanceName, String currentState, String nextState, String sessionId, String stateModelDefName) { String uuid = UUID.randomUUID().toString(); Message message = new Message(MessageType.STATE_TRANSITION, uuid); message.setSrcName(manager.getInstanceName()); message.setTgtName(instanceName); message.setMsgState(MessageState.NEW); message.setPartitionName(partitionName); message.setResourceName(resource.getResourceName()); message.setFromState(currentState); message.setToState(nextState); message.setTgtSessionId(sessionId); message.setSrcSessionId(manager.getSessionId()); message.setStateModelDef(stateModelDefName); message.setStateModelFactoryName(resource.getStateModelFactoryname()); message.setBucketSize(resource.getBucketSize()); if (resource.getResourceGroupName() != null) { message.setResourceGroupName(resource.getResourceGroupName()); } if (resource.getResourceTag() != null) { message.setResourceTag(resource.getResourceTag()); } return message; }
private Message generateMessage(String from, String to) { String uuid = UUID.randomUUID().toString(); Message message = new Message(Message.MessageType.STATE_TRANSITION, uuid); message.setSrcName("ADMIN"); message.setTgtName(_participant.getInstanceName()); message.setMsgState(Message.MessageState.NEW); message.setPartitionName("P"); message.setResourceName(WorkflowGenerator.DEFAULT_TGT_DB); message.setFromState(from); message.setToState(to); message.setTgtSessionId(_participant.getSessionId()); message.setSrcSessionId(_manager.getSessionId()); message.setStateModelDef("OnlineOffline"); message.setStateModelFactoryName("DEFAULT"); return message; }