Package com.alibaba.otter.node.common.config.model

Examples of com.alibaba.otter.node.common.config.model.NodeTask


        // 处理当前最新的状态
        for (Pipeline pipeline : pipelines) {
            List<Node> sNodes = pipeline.getSelectNodes();
            for (Node node : sNodes) {
                if (nid.equals(node.getId())) {// 判断是否为当前的nid
                    NodeTask task = new NodeTask();
                    task.setPipeline(pipeline);
                    NodeTask matchTask = getMatchTask(tasks, task);
                    if (matchTask == null) {
                        matchTask = task;
                        tasks.add(task);
                    }

                    matchTask.setPipeline(pipeline);
                    matchTask.getStage().add(StageType.SELECT);
                    matchTask.getEvent().add(taksEvent);
                }
            }

            List<Node> eNodes = pipeline.getExtractNodes();
            for (Node node : eNodes) {
                if (nid.equals(node.getId())) {// 判断是否为当前的nid
                    NodeTask task = new NodeTask();
                    task.setPipeline(pipeline);
                    NodeTask matchTask = getMatchTask(tasks, task);
                    if (matchTask == null) {
                        matchTask = task;
                        tasks.add(task);
                    }

                    matchTask.getStage().add(StageType.EXTRACT);
                    matchTask.getEvent().add(taksEvent);
                }
            }

            List<Node> tlNodes = pipeline.getLoadNodes();
            for (Node node : tlNodes) {
                if (nid.equals(node.getId())) {// 判断是否为当前的nid
                    NodeTask task = new NodeTask();
                    task.setPipeline(pipeline);
                    NodeTask matchTask = getMatchTask(tasks, task);
                    if (matchTask == null) {
                        matchTask = task;
                        tasks.add(task);
                    }
                    matchTask.getStage().add(StageType.TRANSFORM);
                    matchTask.getEvent().add(taksEvent);
                    matchTask.getStage().add(StageType.LOAD);
                    matchTask.getEvent().add(taksEvent);
                }
            }
        }

        List<Long> pipelineIds = Lists.transform(channel.getPipelines(), new Function<Pipeline, Long>() {

            public Long apply(Pipeline input) {
                return input.getId();
            }
        });
        // 合并一下target中特有的记录,取一下反操作,表示要关闭
        for (NodeTask task : allTasks) {
            Pipeline pipeline = task.getPipeline();
            if (pipeline.getChannelId().equals(channel.getId()) && !pipelineIds.contains(pipeline.getId())) {
                // /是同一个channel,但对应的pipeline不在列表里
                // 处理pipeline删除
                NodeTask deletePipelineTask = new NodeTask();
                deletePipelineTask.setPipeline(pipeline);

                List<StageType> stages = task.getStage();
                List<TaskEvent> events = task.getEvent();
                for (int i = 0; i < stages.size(); i++) {
                    StageType stage = stages.get(i);
                    TaskEvent event = events.get(i);
                    if (event.isCreate()) {
                        deletePipelineTask.getStage().add(stage);
                        deletePipelineTask.getEvent().add(TaskEvent.DELETE);// 添加为关闭
                    }
                }

                tasks.add(deletePipelineTask);
            }

            if (pipelineIds.contains(pipeline.getId())) {// 在当前的channel列表中
                boolean needAdd = false;
                NodeTask matchTask = getMatchTask(tasks, task);// 找到对应的匹配
                if (matchTask == null) {
                    matchTask = new NodeTask();
                    matchTask.setPipeline(pipeline);
                    needAdd = true;
                }
                List<StageType> stages = task.getStage();
                List<TaskEvent> events = task.getEvent();
                for (int i = 0; i < stages.size(); i++) {
                    StageType stage = stages.get(i);
                    TaskEvent event = events.get(i);
                    TaskEvent matchEvent = getMatchStage(matchTask, stage);
                    if (matchEvent == null && event.isCreate()) {// 对应的stage已经被移除,触发一个DELETE操作
                        matchTask.getStage().add(stage);
                        matchTask.getEvent().add(TaskEvent.DELETE);
                    }
                }

                if (needAdd && matchTask.getStage().size() > 0) {
                    tasks.add(matchTask);
                }

            }
        }
View Full Code Here


    private List<NodeTask> retain(List<NodeTask> targetTasks, List<NodeTask> sourceTasks) {
        List<NodeTask> result = new ArrayList<NodeTask>();
        for (NodeTask task : targetTasks) {
            // 找到有对应的交集task
            NodeTask sourceTask = getMatchTask(sourceTasks, task);
            if (sourceTask != null) {
                // 做一下交集排它处理
                NodeTask resultTask = retain(task, sourceTask);
                if (resultTask != null) {
                    result.add(resultTask);
                }
            } else {
                result.add(task);
View Full Code Here

                mergeEvents.add(event);
            }
        }

        if (mergeStates.size() > 0) {
            NodeTask result = new NodeTask();
            result.setPipeline(targetTask.getPipeline());
            result.setEvent(mergeEvents);
            result.setStage(mergeStates);
            result.setShutdown(targetTask.isShutdown());
            return result;
        } else {
            return null;
        }
View Full Code Here

    // 合并两个task列表
    private void merge(List<NodeTask> targetTasks, List<NodeTask> sourceTasks) {
        for (NodeTask task : sourceTasks) {
            // 找到对应的
            NodeTask targetTask = getMatchTask(targetTasks, task);
            if (targetTask != null) {
                // 针对已存在的进行合并
                merge(targetTask, task);
            } else {
                // 添加新的节点
View Full Code Here

TOP

Related Classes of com.alibaba.otter.node.common.config.model.NodeTask

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.