Search in sources :

Example 1 with ActiveServerNodeCmdletMetrics

use of org.smartdata.server.cluster.ActiveServerNodeCmdletMetrics in project SSM by Intel-bigdata.

the class CmdletDispatcher method getNodeCmdletMetrics.

public Collection<NodeCmdletMetrics> getNodeCmdletMetrics() {
    ActiveServerNodeCmdletMetrics metrics = (ActiveServerNodeCmdletMetrics) regNodeInfos.get(ActiveServerInfo.getInstance().getId());
    if (metrics != null) {
        metrics.setNumPendingDispatch(pendingCmdlets.size());
        metrics.setMaxPendingDispatch(getTotalSlotsLeft() + (int) (getTotalSlots() * 0.2));
        metrics.setMaxInExecution(getTotalSlots());
        metrics.setNumInExecution(getTotalSlots() - getTotalSlotsLeft());
        cmdletManager.updateNodeCmdletMetrics(metrics);
    }
    // TODO: temp implementation
    List<NodeCmdletMetrics> ret = new LinkedList<>();
    ret.addAll(regNodeInfos.values());
    Collections.sort(ret, new Comparator<NodeCmdletMetrics>() {

        @Override
        public int compare(NodeCmdletMetrics a, NodeCmdletMetrics b) {
            int tp = a.getNodeInfo().getExecutorType().ordinal() - b.getNodeInfo().getExecutorType().ordinal();
            return tp == 0 ? a.getNodeInfo().getId().compareToIgnoreCase(b.getNodeInfo().getId()) : tp;
        }
    });
    return ret;
}
Also used : ActiveServerNodeCmdletMetrics(org.smartdata.server.cluster.ActiveServerNodeCmdletMetrics) NodeCmdletMetrics(org.smartdata.server.cluster.NodeCmdletMetrics) ActiveServerNodeCmdletMetrics(org.smartdata.server.cluster.ActiveServerNodeCmdletMetrics) LinkedList(java.util.LinkedList)

Example 2 with ActiveServerNodeCmdletMetrics

use of org.smartdata.server.cluster.ActiveServerNodeCmdletMetrics in project SSM by Intel-bigdata.

the class CmdletDispatcher method onNodeMessage.

/**
 * Maintain SSM cluster nodes. Add the node if {@code isAdd} is true.
 * Otherwise, remove the node.
 * If local executor is disabled, we will not tackle the node message
 * for active server. And the metrics for it will be set at {@link
 * #start start}
 */
public void onNodeMessage(NodeMessage msg, boolean isAdd) {
    // executing start-standby-server.sh.
    if (msg.getNodeInfo().getExecutorType() == ExecutorType.REMOTE_SSM) {
        conf.addServerHosts(msg.getNodeInfo().getHost());
    }
    // start-agent.sh.
    if (msg.getNodeInfo().getExecutorType() == ExecutorType.AGENT) {
        conf.addAgentHost(msg.getNodeInfo().getHost());
    }
    synchronized (cmdExecSrvInsts) {
        String nodeId = msg.getNodeInfo().getId();
        if (isAdd) {
            if (regNodes.containsKey(nodeId)) {
                LOG.warn("Skip duplicate add node for {}", msg.getNodeInfo());
                return;
            }
            regNodes.put(nodeId, new AtomicInteger(defaultSlots));
            NodeCmdletMetrics metrics = msg.getNodeInfo().getExecutorType() == ExecutorType.LOCAL ? new ActiveServerNodeCmdletMetrics() : new NodeCmdletMetrics();
            // Here, we consider all nodes have same configuration for executorsNum.
            int actualExecutorsNum = metrics instanceof ActiveServerNodeCmdletMetrics && disableLocalExec ? 0 : executorsNum;
            metrics.setNumExecutors(actualExecutorsNum);
            metrics.setRegistTime(System.currentTimeMillis());
            metrics.setNodeInfo(msg.getNodeInfo());
            regNodeInfos.put(nodeId, metrics);
        } else {
            if (!regNodes.containsKey(nodeId)) {
                LOG.warn("Skip duplicate remove node for {}", msg.getNodeInfo());
                return;
            }
            regNodes.remove(nodeId);
            regNodeInfos.remove(nodeId);
        }
        // Ignore local executor if it is disabled.
        if (disableLocalExec && msg.getNodeInfo().getExecutorType() == ExecutorType.LOCAL) {
            return;
        }
        // Maintain executor service in the below code.
        if (isAdd) {
            cmdExecSrvNodeIds.get(msg.getNodeInfo().getExecutorType().ordinal()).add(nodeId);
        } else {
            cmdExecSrvNodeIds.get(msg.getNodeInfo().getExecutorType().ordinal()).remove(nodeId);
        }
        int v = isAdd ? 1 : -1;
        int idx = msg.getNodeInfo().getExecutorType().ordinal();
        cmdExecSrvInsts[idx] += v;
        cmdExecSrvTotalInsts += v;
        updateSlotsLeft(idx, v * defaultSlots);
    }
    LOG.info(String.format("Node " + msg.getNodeInfo() + (isAdd ? " added." : " removed.")));
}
Also used : ActiveServerNodeCmdletMetrics(org.smartdata.server.cluster.ActiveServerNodeCmdletMetrics) NodeCmdletMetrics(org.smartdata.server.cluster.NodeCmdletMetrics) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ActiveServerNodeCmdletMetrics(org.smartdata.server.cluster.ActiveServerNodeCmdletMetrics)

Aggregations

ActiveServerNodeCmdletMetrics (org.smartdata.server.cluster.ActiveServerNodeCmdletMetrics)2 NodeCmdletMetrics (org.smartdata.server.cluster.NodeCmdletMetrics)2 LinkedList (java.util.LinkedList)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1