zoukankan      html  css  js  c++  java
  • Driver

    aa

    @Override
    public CommandProcessorResponse run(String command)
    throws CommandNeedRetryException {
    return run(command, false);
    }

    然后调用下面方法 

    最核心

        CommandProcessorResponse cpr = runInternal(command, alreadyCompiled);
      public CommandProcessorResponse run(String command, boolean alreadyCompiled)
            throws CommandNeedRetryException {
        CommandProcessorResponse cpr = runInternal(command, alreadyCompiled);
    
        if(cpr.getResponseCode() == 0) {
          return cpr;
        }
        SessionState ss = SessionState.get();
        if(ss == null) {
          return cpr;
        }
        MetaDataFormatter mdf = MetaDataFormatUtils.getFormatter(ss.getConf());
        if(!(mdf instanceof JsonMetaDataFormatter)) {
          return cpr;
        }

    调用

    compileInternal这句到达核心位置
      private CommandProcessorResponse runInternal(String command, boolean alreadyCompiled)
    
        int ret;
          if (!alreadyCompiled) {
            // compile internal will automatically reset the perf logger
            ret = compileInternal(command, true);
            // then we continue to use this perf logger
            perfLogger = SessionState.getPerfLogger();
            if (ret != 0) {
              return createProcessorResponse(ret);

    到达 

    compile
      private int compileInternal(String command, boolean deferClose) {
        int ret;
    
        Metrics metrics = MetricsFactory.getInstance();
        if (metrics != null) {
          metrics.incrementCounter(MetricsConstant.WAITING_COMPILE_OPS, 1);
        }
    
        final ReentrantLock compileLock = tryAcquireCompileLock(isParallelEnabled,
          command);
        if (compileLock == null) {
          return ErrorMsg.COMPILE_LOCK_TIMED_OUT.getErrorCode();
        }
    
        try {
          if (metrics != null) {
            metrics.decrementCounter(MetricsConstant.WAITING_COMPILE_OPS, 1);
          }
          ret = compile(command, true, deferClose);
        } finally {
          compileLock.unlock();
        }
    
        if (ret != 0) {
          try {
            releaseLocksAndCommitOrRollback(false, null);
          } catch (LockException e) {
            LOG.warn("Exception in releasing locks. "
                + org.apache.hadoop.util.StringUtils.stringifyException(e));
          }
        }

    dd\

    ParseDriver创建解析器 解析命令
    并且ASTNode 在parse 做了词法分析 和语法分析。
       perfLogger.PerfLogBegin(CLASS_NAME, PerfLogger.PARSE);
          ParseDriver pd = new ParseDriver();
          ASTNode tree = pd.parse(command, ctx);
          tree = ParseUtils.findRootNonNullToken(tree);
          perfLogger.PerfLogEnd(CLASS_NAME, PerfLogger.PARSE);
  • 相关阅读:
    bootstrap class sr-only 什么意思?
    PHP 中的文本截取分析之效率
    FastAdmin 升级后出现 is already in use
    FastAdmin 环境变量 env 配置
    Nginx 服务器伪静态配置不当造成 Access denied
    笔记:明确认识
    进程通信(socket)
    进程间通信(了解)
    c++ 继承,组合
    c++ 类初始化
  • 原文地址:https://www.cnblogs.com/itxuexiwang/p/6292585.html
Copyright © 2011-2022 走看看