Package com.alipay.bluewhale.core.work

Source Code of com.alipay.bluewhale.core.work.WorkerShutdown

package com.alipay.bluewhale.core.work;

import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;

import org.apache.log4j.Logger;

import backtype.storm.daemon.Shutdownable;

import com.alipay.bluewhale.core.cluster.ClusterState;
import com.alipay.bluewhale.core.cluster.StormClusterState;
import com.alipay.bluewhale.core.daemon.NodePort;
import com.alipay.bluewhale.core.messaging.IConnection;
import com.alipay.bluewhale.core.messaging.IContext;
import com.alipay.bluewhale.core.task.common.ShutdownableDameon;
import com.alipay.bluewhale.core.task.common.TaskShutdownDameon;
import com.alipay.bluewhale.core.utils.AsyncLoopThread;

/**
* ���ڹر�������worker
*
* @author yannian
*
*/
public class WorkerShutdown implements ShutdownableDameon {
  private static Logger LOG = Logger.getLogger(WorkerShutdown.class);

  private List<TaskShutdownDameon> shutdowntasks;
  private AtomicBoolean active;
  private ConcurrentHashMap<NodePort, IConnection> nodeportSocket;
  private Shutdownable virtualPortShutdown;
  private IContext mq_context;
  private AsyncLoopThread[] threads;
  private StormClusterState zkCluster;
  private ClusterState cluster_state;

  public WorkerShutdown(List<TaskShutdownDameon> _shutdowntasks,
      AtomicBoolean _active,
      ConcurrentHashMap<NodePort, IConnection> _node_port__socket,
      Shutdownable _virtual_port_shutdown, IContext _mq_context,
      AsyncLoopThread[] _threads, StormClusterState _storm_cluster_state,
      ClusterState _cluster_state

  ) {
    this.shutdowntasks = _shutdowntasks;
    this.active = _active;
    this.nodeportSocket = _node_port__socket;
    this.virtualPortShutdown = _virtual_port_shutdown;
    this.mq_context = _mq_context;
    this.threads = _threads;
    this.zkCluster = _storm_cluster_state;
    this.cluster_state = _cluster_state;
  }

  @Override
  public void shutdown() {
    active.set(false);

    // �ر�tasks�߳�
    for (ShutdownableDameon task : shutdowntasks) {
      task.shutdown();
    }

    // �رշ���tuple��socket����
    for (NodePort k : nodeportSocket.keySet()) {
      IConnection value = nodeportSocket.get(k);
      value.close();
    }

    virtualPortShutdown.shutdown();
    mq_context.term();

    // �ر�worker�����������߳� ���� ˢ�����ӣ�����tuple
    for (AsyncLoopThread t : threads) {
      t.interrupt();
      try {
        t.join();
      } catch (InterruptedException e) {
        LOG.error("join thread", e);
      }
    }

    // �ر���zk������
    zkCluster.disconnect();
    cluster_state.close();

  }

  public void join() throws InterruptedException {
    for (TaskShutdownDameon task : shutdowntasks) {
      task.join();
    }
    for (AsyncLoopThread t : threads) {
      t.join();
    }

  }

  public boolean waiting() {
    Boolean isExistsWait = false;
    for (ShutdownableDameon task : shutdowntasks) {
      if (task.waiting()) {
        isExistsWait = true;
        break;
      }
    }
    for (AsyncLoopThread thr : threads) {
      if (thr.isSleeping()) {
        isExistsWait = true;
        break;
      }
    }
    return isExistsWait;
  }

}
TOP

Related Classes of com.alipay.bluewhale.core.work.WorkerShutdown

TOP
Copyright © 2018 www.massapi.com. 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.