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);
  • 相关阅读:
    codeforces 764 C. Timofey and a tree(dfs+思维)
    codeforces 161 D. Distance in Tree(树形dp)
    codeforces 761 D. Dasha and Very Difficult Problem(二分+贪心)
    codeforces 761 C. Dasha and Password(多维dp)
    codeforces 264 B. Good Sequences(dp+数学的一点思想)
    HTML5 总结-画布-4
    HTML5 总结-拖放-3
    HTML5 总结-音频-2
    HTML5 总结-视频-1
    CSS3 总结-2
  • 原文地址:https://www.cnblogs.com/itxuexiwang/p/6292585.html
Copyright © 2011-2022 走看看