Package org.apache.tajo.master.querymaster

Source Code of org.apache.tajo.master.querymaster.QueryMasterRunner$ShutdownHook

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.tajo.master.querymaster;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.yarn.service.AbstractService;
import org.apache.hadoop.yarn.util.RackResolver;
import org.apache.tajo.QueryId;
import org.apache.tajo.TajoConstants;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.util.TajoIdUtils;

import java.io.PrintWriter;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

@Deprecated
public class QueryMasterRunner extends AbstractService {
  private static final Log LOG = LogFactory.getLog(QueryMasterRunner.class);
  private TajoConf systemConf;
  private QueryMaster queryMaster;
  private QueryId queryId;
  private String queryMasterManagerAddress;

  public QueryMasterRunner(QueryId queryId, String queryMasterManagerAddress) {
    super(QueryMasterRunner.class.getName());
    this.queryId = queryId;
    this.queryMasterManagerAddress = queryMasterManagerAddress;
  }

  private class ShutdownHook implements Runnable {
    @Override
    public void run() {
      LOG.info("============================================");
      LOG.info("QueryMaster received SIGINT Signal");
      LOG.info("============================================");
      stop();
    }
  }

  @Override
  public void init(Configuration conf) {
    this.systemConf = (TajoConf)conf;
    RackResolver.init(systemConf);
    Runtime.getRuntime().addShutdownHook(new Thread(new ShutdownHook()));
    super.init(conf);
  }

  @Override
  public void start() {
    //create QueryMaster
    QueryMaster query = new QueryMaster(null);

    query.init(systemConf);
    query.start();
  }

  @Override
  public void stop() {
  }

  public static void main(String[] args) throws Exception {
    LOG.info("QueryMasterRunner started");

    final TajoConf conf = new TajoConf();
    conf.addResource(new Path(TajoConstants.SYSTEM_CONF_FILENAME));

    UserGroupInformation.setConfiguration(conf);

    final QueryId queryId = TajoIdUtils.parseQueryId(args[0]);
    final String queryMasterManagerAddr = args[1];

    LOG.info("Received QueryId:" + queryId);

    QueryMasterRunner queryMasterRunner = new QueryMasterRunner(queryId, queryMasterManagerAddr);
    queryMasterRunner.init(conf);
    queryMasterRunner.start();

    synchronized(queryId) {
      queryId.wait();
    }

    System.exit(0);
  }

  public static void printThreadInfo(PrintWriter stream, String title) {
    ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
    final int STACK_DEPTH = 60;
    boolean contention = threadBean.isThreadContentionMonitoringEnabled();
    long[] threadIds = threadBean.getAllThreadIds();
    stream.println("Process Thread Dump: " + title);
    stream.println(threadIds.length + " active threads");
    for (long tid : threadIds) {
      ThreadInfo info = threadBean.getThreadInfo(tid, STACK_DEPTH);
      if (info == null) {
        stream.println("  Inactive");
        continue;
      }
      stream.println("Thread " + getTaskName(info.getThreadId(), info.getThreadName()) + ":");
      Thread.State state = info.getThreadState();
      stream.println("  State: " + state);
      stream.println("  Blocked count: " + info.getBlockedCount());
      stream.println("  Waited count: " + info.getWaitedCount());
      if (contention) {
        stream.println("  Blocked time: " + info.getBlockedTime());
        stream.println("  Waited time: " + info.getWaitedTime());
      }
      if (state == Thread.State.WAITING) {
        stream.println("  Waiting on " + info.getLockName());
      } else if (state == Thread.State.BLOCKED) {
        stream.println("  Blocked on " + info.getLockName());
        stream.println("  Blocked by " + getTaskName(info.getLockOwnerId(), info.getLockOwnerName()));
      }
      stream.println("  Stack:");
      for (StackTraceElement frame : info.getStackTrace()) {
        stream.println("    " + frame.toString());
      }
    }
    stream.flush();
  }

  private static String getTaskName(long id, String name) {
    if (name == null) {
      return Long.toString(id);
    }
    return id + " (" + name + ")";
  }
}
TOP

Related Classes of org.apache.tajo.master.querymaster.QueryMasterRunner$ShutdownHook

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.