private void processRunException(CommandProcessorException cpe) {
    SessionState ss = SessionState.get();
    if (ss == null) {
      return;
    }

    MetaDataFormatter mdf = MetaDataFormatUtils.getFormatter(ss.getConf());
    if (!(mdf instanceof JsonMetaDataFormatter)) {
      return;
    }

    /* Here we want to encode the error in machine readable way (e.g. JSON). Ideally, errorCode would always be set
     * to a canonical error defined in ErrorMsg. In practice that is rarely the case, so the messy logic below tries
     * to tease out canonical error code if it can.  Exclude stack trace from output when the error is a
     * specific/expected one. It's written to stdout for backward compatibility (WebHCat consumes it).*/
    try {
      if (cpe.getCause() == null) {
        mdf.error(ss.out, cpe.getMessage(), cpe.getResponseCode(), cpe.getSqlState());
        return;
      }
      ErrorMsg canonicalErr = ErrorMsg.getErrorMsg(cpe.getResponseCode());
      if (canonicalErr != null && canonicalErr != ErrorMsg.GENERIC_ERROR) {
        /* Some HiveExceptions (e.g. SemanticException) don't set canonical ErrorMsg explicitly, but there is logic
         * (e.g. #compile()) to find an appropriate canonical error and return its code as error code. In this case
         * we want to preserve it for downstream code to interpret */
        mdf.error(ss.out, cpe.getMessage(), cpe.getResponseCode(), cpe.getSqlState(), null);
        return;
      }
      if (cpe.getCause() instanceof HiveException) {
        HiveException rc = (HiveException)cpe.getCause();
        mdf.error(ss.out, cpe.getMessage(), rc.getCanonicalErrorMsg().getErrorCode(), cpe.getSqlState(),
            rc.getCanonicalErrorMsg() == ErrorMsg.GENERIC_ERROR ? StringUtils.stringifyException(rc) : null);
      } else {
        ErrorMsg canonicalMsg = ErrorMsg.getErrorMsg(cpe.getCause().getMessage());
        mdf.error(ss.out, cpe.getMessage(), canonicalMsg.getErrorCode(), cpe.getSqlState(),
            StringUtils.stringifyException(cpe.getCause()));
      }
    } catch (HiveException ex) {
      CONSOLE.printError("Unable to JSON-encode the error", StringUtils.stringifyException(ex));
    }
    return;
  }
Checks if the recorded snapshot is up-to-date
ql/src/java/org/apache/hadoop/hive/ql/Driver.java