/** * Updates current ZK node data. * * @param currentNodeInfo the current node info * @throws IOException Signals that an I/O exception has occurred. */ public void updateNodeData(OperationsNodeInfo currentNodeInfo) throws IOException { this.nodeInfo = currentNodeInfo; doZkClientAction(new ZkClientAction() { @Override public void doWithZkClient(CuratorFramework client) throws Exception { client.setData().forPath(nodePath, operationsNodeAvroConverter.get().toByteArray(nodeInfo)); } }); }
/** * Stop zk node. */ private void stopZk() { try { operationsNode.close(); } catch (IOException ex) { LOG.warn("Error closing ZK node", ex); } }
@Override public void onTransportsStarted(List<TransportMetaData> mdList) { if (operationsNode != null) { OperationsNodeInfo info = operationsNode.getNodeInfo(); info.setTransports(mdList); try { operationsNode.updateNodeData(info); } catch (IOException ex) { LOG.error("Failed to update bootstrap node info", ex); } } }
nodeInfo.setLoadInfo(new LoadInfo(DEFAULT_LOAD_INDEX, 1.0)); nodeInfo.setTransports(new ArrayList<TransportMetaData>()); operationsNode = new OperationsNode(nodeInfo, zkClient); try { operationsNode.start(); eventService.setZkNode(operationsNode); eventService.setResolver(new ConsistentHashResolver( operationsNode.getCurrentOperationServerNodes(), getOperationsConfig() .getUserHashPartitions())); clusterService.setZkNode(operationsNode); clusterService.setResolver(new ConsistentHashResolver( operationsNode.getCurrentOperationServerNodes(), getOperationsConfig() .getUserHashPartitions())); } catch (Exception ex) {
private void updateResolver(final OperationsServerResolver resolver) { operationsNode.addListener(new OperationsNodeListener() { @Override public void onNodeUpdated(OperationsNodeInfo node) { LOG.debug("Update of node {} is pushed to resolver {}", node, resolver); resolver.onNodeUpdated(node); } @Override public void onNodeRemoved(OperationsNodeInfo node) { LOG.debug("Remove of node {} is pushed to resolver {}", node, resolver); resolver.onNodeRemoved(node); } @Override public void onNodeAdded(OperationsNodeInfo node) { LOG.debug("Add of node {} is pushed to resolver {}", node, resolver); resolver.onNodeAdded(node); } }); for (OperationsNodeInfo info : operationsNode.getCurrentOperationServerNodes()) { resolver.onNodeUpdated(info); } }
@Override public void setZkNode(OperationsNode operationsNode) { this.operationsNode = operationsNode; this.id = Neighbors.getServerId(this.operationsNode.getNodeInfo().getConnectionInfo()); neighbors.setZkNode( KaaThriftService.OPERATIONS_SERVICE, this.operationsNode.getNodeInfo().getConnectionInfo(), operationsNode); if (resolver != null) { updateResolver(this.resolver); } }
/** * Operations Node added. * * @param data the data */ protected void endpointAdded(ChildData data) { OperationsNodeInfo nodeInfo = extractOperationServerInfo(data); String endpointAddress = constructEndpointAddress(nodeInfo); operationNodesStartTimes.put(endpointAddress, nodeInfo.getTimeStarted()); for (OperationsNodeListener listener : endpointListeners) { listener.onNodeAdded(nodeInfo); } }
/** * Operations Node updated. * * @param data the data */ protected void endpointUpdated(ChildData data) { OperationsNodeInfo nodeInfo = extractOperationServerInfo(data); String endpointAddress = constructEndpointAddress(nodeInfo); operationNodesStartTimes.put(endpointAddress, nodeInfo.getTimeStarted()); for (OperationsNodeListener listener : endpointListeners) { listener.onNodeUpdated(nodeInfo); } }
/** * Operations Node removed. * * @param data the data */ protected void endpointRemoved(ChildData data) { OperationsNodeInfo nodeInfo = extractOperationServerInfo(data); String endpointAddress = constructEndpointAddress(nodeInfo); Long removeTime = nodeInfo.getTimeStarted(); Long updateTime = operationNodesStartTimes.get(endpointAddress); if (updateTime == null || removeTime >= updateTime) { operationNodesStartTimes.remove(endpointAddress); for (OperationsNodeListener listener : endpointListeners) { listener.onNodeRemoved(nodeInfo); } } else { LOG.debug("Ignoring [{}] endpoint removal, as it was before add/update", endpointAddress); } }
@Override public void onStatusUpdate(AkkaServiceStatus status) { try { OperationsNodeInfo nodeInfo = operationsNode.getNodeInfo(); OperatingSystemMXBean operatingSystemMxBean = ManagementFactory.getOperatingSystemMXBean(); nodeInfo.setLoadInfo(new LoadInfo( status.getEndpointCount(), operatingSystemMxBean.getSystemLoadAverage())); operationsNode.updateNodeData(nodeInfo); LOG.info("Updated load info: {}", nodeInfo.getLoadInfo()); } catch (Exception ex) { LOG.error("Failed to report status update to control service", ex); } } }
private void updateResolver(final OperationsServerResolver resolver) { operationsNode.addListener(new OperationsNodeListener() { @Override public void onNodeUpdated(OperationsNodeInfo node) { for (OperationsNodeInfo info : operationsNode.getCurrentOperationServerNodes()) { resolver.onNodeUpdated(info);
@Override public boolean createZkNode() throws IOException { return doZkClientAction(new ZkClientAction() { @Override public void doWithZkClient(CuratorFramework client) throws Exception { nodeInfo.setTimeStarted(System.currentTimeMillis()); nodePath = client .create() .creatingParentsIfNeeded() .withMode(CreateMode.EPHEMERAL_SEQUENTIAL) .forPath(OPERATIONS_SERVER_NODE_PATH + OPERATIONS_SERVER_NODE_PATH, operationsNodeAvroConverter.get().toByteArray(nodeInfo)); LOG.info("Created node with path: " + nodePath); } }); }
@Override public void setZkNode(OperationsNode operationsNode) { this.operationsNode = operationsNode; this.id = Neighbors.getServerId( KaaThriftService.OPERATIONS_SERVICE, this.operationsNode.getNodeInfo().getConnectionInfo()); neighbors.setZkNode( KaaThriftService.OPERATIONS_SERVICE, this.operationsNode.getNodeInfo().getConnectionInfo(), operationsNode); if (resolver != null) { updateResolver(this.resolver); } }