public String getResult() throws OdpsException { if (result == null) { result = getInstance().getTaskResults().get(getTaskStatus().getName()); } return result; }
public Instance.TaskStatus getTaskStatus() throws OdpsException { if (taskStatus == null) { Map<String, Instance.TaskStatus> taskStatuses = getInstance().getTaskStatus(); // 当前task名称 String cTaskName = null; for (String taskName : taskStatuses.keySet()) { Instance.TaskStatus tStatus = taskStatuses.get(taskName); if (Instance.TaskStatus.Status.FAILED.equals(tStatus.getStatus())) { cTaskName = taskName; } else if (Instance.TaskStatus.Status.RUNNING.equals(tStatus.getStatus())) { cTaskName = taskName; } } if (cTaskName == null) { cTaskName = getTasks().get(getTasks().size() - 1).getName(); } taskStatus = taskStatuses.get(cTaskName); if (taskStatus == null) { throw new OdpsException("task status unknown. taskname=" + cTaskName); } } return taskStatus; }
private void polling(InstanceStateContext context) { while (true) { ODPSConsoleUtils.checkThreadInterrupted(); lastUpdate = System.currentTimeMillis(); Instance.Status status = null; try { status = context.getInstance().getStatus(true); // cost time firstFailed = -1; } catch (ReloadException e) { if (firstFailed != -1 && (System.currentTimeMillis() - firstFailed >= STATUS_QUERY_TIMEOUT)) { throw e; } context.getExecutionContext().getOutputWriter() .writeDebug("Get instance status error: " + e.getMessage()); if (firstFailed == -1) { firstFailed = System.currentTimeMillis(); } } if (status == Instance.Status.TERMINATED) { context.setInstanceTerminate(); break; } sleep(); } }
@Override public State run(InstanceStateContext context) throws OdpsException { // 检查状态,若失败:直接抛异常 try { checkTaskStatus(context); } catch (OdpsException e) { if (context.getInstance().isSync()) { // 同步任务,生成 logview 输出 context.printLogview(); } throw e; } // 若是同步 instance, 则结束状态机 if (context.getInstance().isSync()) { return State.END; } // 若进度打印没有完成,则强行刷新进度至 100% 状态 if (!context.isProgressReportFinish()) { InstanceProgressReporter reporter = new InstanceProgressReporter(context); reporter.printProgress(true); } return new InstanceSuccess(); }
@Override public State run(InstanceStateContext context) throws OdpsException { try { Instance.TaskSummary taskSummary = getTaskSummaryV1(context.getOdps(), context.getInstance(), context.getTaskStatus().getName()); context.setSummary(taskSummary); reportSummary(taskSummary, context.getExecutionContext().getOutputWriter()); } catch (Exception ignore) { } return State.END; }
public void report() { reportWarnings(); printQueueingMessage(); while (!context.isInstanceTerminate()) { try { taskName = context.getRunningTaskName(); if (!StringUtils.isNullOrEmpty(taskName)) { stages = context.getInstance().getTaskProgress(taskName); if (queueing) { reportQueueing(); } if (stages != null && !stages.isEmpty()) { context.setTaskProgress(stages); reportProgress(); } } } catch (Exception ignore) { // 如果拿进度出错,重复拿 } ODPSConsoleUtils.checkThreadInterrupted(); } }
private void checkTaskStatus(InstanceStateContext context) throws OdpsException { Instance.TaskStatus taskStatus = context.getTaskStatus(); if (Instance.TaskStatus.Status.FAILED.equals(taskStatus.getStatus())) { // 如果不是跨集群,直接抛出异常 throw new OdpsException(context.getInstance().getTaskResults().get(taskStatus.getName())); } else if (Instance.TaskStatus.Status.CANCELLED.equals(taskStatus.getStatus())) { throw new OdpsException("Task got cancelled"); } else if (!Instance.TaskStatus.Status.SUCCESS.equals(taskStatus.getStatus())) { // #ODPS-43495 throw new OdpsException( "Task not successfully terminated: status[" + taskStatus.getStatus() + "]"); } } }
private void printSqlWarnings(String taskName) throws OdpsException { List<String> warnings = SQLTask.getSqlWarning(context.getInstance(), taskName); if (warnings != null && !warnings.isEmpty()) { if (InPlaceUpdates.isUnixTerminal() && context.getRepositionLines() > 0) { InPlaceUpdates.rePositionCursor(out, context.getRepositionLines()); InPlaceUpdates.reprintLine(out, "SQL Warnings:"); } else { context.getExecutionContext().getOutputWriter().writeError("SQL Warnings:"); } for (String warning : warnings) { context.getExecutionContext().getOutputWriter().writeError(warning); } context.setRepositionLines(0); } }