Package com.alibaba.otter.shared.arbitrate.impl.setl.monitor

Examples of com.alibaba.otter.shared.arbitrate.impl.setl.monitor.TerminMonitor


     * 1. 开始阻塞获取符合条件的processId,获取对应的data数据直接返回
     * </pre>
     */
    public TerminEventData await(Long pipelineId) throws InterruptedException {
        Assert.notNull(pipelineId);
        TerminMonitor terminMonitor = ArbitrateFactory.getInstance(pipelineId, TerminMonitor.class);
        Long processId = terminMonitor.waitForProcess(); // 符合条件的processId
        if (logger.isDebugEnabled()) {
            logger.debug("## await pipeline[{}] processId[{}] is termin", pipelineId, processId);
        }

        // 根据pipelineId+processId构造对应的path
        String path = StagePathUtils.getTermin(pipelineId, processId);

        try {
            byte[] data = zookeeper.readData(path);
            return JsonUtils.unmarshalFromByte(data, TerminEventData.class);
        } catch (ZkNoNodeException e) {
            logger.error("pipeline[{}] processId[{}] is process", pipelineId, processId);
            terminMonitor.ack(processId); // modify for 2012-09-08, 发生主备切换时,await会进入死循环,针对NoNode后直接从内存队列中移除
            return await(pipelineId); // 再取下一个节点
        } catch (ZkException e) {
            throw new ArbitrateException("Termin_await", e);
        }
    }
View Full Code Here


    /**
     * 消耗掉所有的termin信号
     */
    public void exhaust(Long pipelineId) {
        Assert.notNull(pipelineId);
        TerminMonitor terminMonitor = ArbitrateFactory.getInstance(pipelineId, TerminMonitor.class);
        int size = terminMonitor.size();
        try {
            for (int i = 0; i < size; i++) {
                Long processId;
                processId = terminMonitor.waitForProcess();
                TerminEventData data = new TerminEventData();
                data.setPipelineId(pipelineId);
                data.setProcessId(processId);
                ack(data);
            }
View Full Code Here

            // ignore,说明节点已经被删除
        } catch (ZkException e) {
            throw new ArbitrateException("Termin_ack", e);
        }

        TerminMonitor terminMonitor = ArbitrateFactory.getInstance(data.getPipelineId(), TerminMonitor.class);
        terminMonitor.ack(data.getProcessId());
    }
View Full Code Here

     * 查询当前待处理的termin信号的总数
     */
    public int size(Long pipelineId) {
        Assert.notNull(pipelineId);

        TerminMonitor terminMonitor = ArbitrateFactory.getInstance(pipelineId, TerminMonitor.class);
        return terminMonitor.size();
    }
View Full Code Here

    @Test
    public void test_init() {
        initTermin(1L);
        initTermin(2L);
        try {
            terminMonitor = new TerminMonitor(pipelineId);
            Long p1 = terminMonitor.waitForProcess();
            terminMonitor.ack(p1);
            Long p2 = terminMonitor.waitForProcess();
            terminMonitor.ack(p2);
View Full Code Here

    @Test
    public void test_dynamic() {
        initTermin(1L);
        initTermin(2L);
        try {
            terminMonitor = new TerminMonitor(pipelineId);
            // 开始变化
            destoryTermin(1L);
            initTermin(3L);
            initTermin(1L);
            sleep();
View Full Code Here

TOP

Related Classes of com.alibaba.otter.shared.arbitrate.impl.setl.monitor.TerminMonitor

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.