private long getDeleteTaskTime(List<ClusterTask> deleteTasks, ClusterTask createTask) { ClusterTask result = null; for (ClusterTask deleteTask : deleteTasks) { if (createTask.getClusterId().equals(deleteTask.getClusterId()) && createTask.getNodeId().equals(deleteTask.getNodeId())) { if (result == null) { result = deleteTask; } else if (deleteTask.getStatusTime() < result.getStatusTime()) { result = deleteTask; } } } if (result == null) { return System.currentTimeMillis(); } return result.getStatusTime(); }
@Override public PreparedStatement createUpdateStatement(Connection conn) throws SQLException { PreparedStatement statement = conn.prepareStatement( "UPDATE tasks SET task=?, status=?, submit_time=?, status_time=?, type=?, " + "cluster_template_name=?, user_id=?, tenant_id=?" + " WHERE task_num=? AND job_num=? AND cluster_id=?"); statement.setBytes(1, dbQueryExecutor.toBytes(clusterTask, ClusterTask.class)); statement.setString(2, clusterTask.getStatus().name()); statement.setTimestamp(3, DBHelper.getTimestamp(clusterTask.getSubmitTime())); statement.setTimestamp(4, DBHelper.getTimestamp(clusterTask.getStatusTime())); statement.setString(5, clusterTask.getTaskName().name()); statement.setString(6, clusterTask.getClusterTemplateName()); statement.setString(7, clusterTask.getAccount().getUserId()); statement.setString(8, clusterTask.getAccount().getTenantId()); statement.setLong(9, taskId.getTaskNum()); statement.setLong(10, taskId.getJobNum()); statement.setLong(11, clusterId); return statement; }
List<ClusterTask> deleteTasks = getTasksByName(tasks, ProvisionerAction.DELETE); long startDate = start != null ? TimeUnit.SECONDS.toMillis(start) : createTasks.isEmpty() ? 0 : createTasks.get(0).getStatusTime(); long endDate = end != null ? TimeUnit.SECONDS.toMillis(end) : deleteTasks.isEmpty() ? System.currentTimeMillis() : deleteTasks.get(deleteTasks.size() - 1).getStatusTime(); Periodicity periodicity = filter.getPeriodicity(); long period; for (ClusterTask createTask : createTasks) { long deleteTaskTime = getDeleteTaskTime(deleteTasks, createTask); long localStart = Math.max(createTask.getStatusTime(), startDate); long localEnd = Math.min(deleteTaskTime, endDate); int currentIndex = getNearestIndex(intervals, localStart);