private void allVerticesInTerminalState(long globalModVersionOfFailover) { while (true) { JobStatus curStatus = this.state; if (curStatus.equals(JobStatus.CANCELLING)) { if (transitionState(curStatus, JobStatus.CANCELED)) { reset(globalModVersionOfFailover); break; } } else { LOG.info("FailoverRegion {} is {} when allVerticesInTerminalState.", id, state); break; } } }
private void allVerticesInTerminalState(long globalModVersionOfFailover) { while (true) { JobStatus curStatus = this.state; if (curStatus.equals(JobStatus.CANCELLING)) { if (transitionState(curStatus, JobStatus.CANCELED)) { reset(globalModVersionOfFailover); break; } } else { LOG.info("FailoverRegion {} is {} when allVerticesInTerminalState.", id, state); break; } } }
private void allVerticesInTerminalState(long globalModVersionOfFailover) { while (true) { JobStatus curStatus = this.state; if (curStatus.equals(JobStatus.CANCELLING)) { if (transitionState(curStatus, JobStatus.CANCELED)) { reset(globalModVersionOfFailover); break; } } else { LOG.info("FailoverRegion {} is {} when allVerticesInTerminalState.", id, state); break; } } }
private void allVerticesInTerminalState(long globalModVersionOfFailover) { while (true) { JobStatus curStatus = this.state; if (curStatus.equals(JobStatus.CANCELLING)) { if (transitionState(curStatus, JobStatus.CANCELED)) { reset(globalModVersionOfFailover); break; } } else { LOG.info("FailoverRegion {} is {} when allVerticesInTerminalState.", id, state); break; } } }
private void cancel(final long globalModVersionOfFailover) { while (true) { JobStatus curStatus = this.state; if (curStatus.equals(JobStatus.RUNNING)) { if (transitionState(curStatus, JobStatus.CANCELLING)) { // we build a future that is complete once all vertices have reached a terminal state final ArrayList<Future<?>> futures = new ArrayList<>(connectedExecutionVertexes.size()); // cancel all tasks (that still need cancelling) for (ExecutionVertex vertex : connectedExecutionVertexes) { futures.add(vertex.cancel()); } final FutureUtils.ConjunctFuture<Void> allTerminal = FutureUtils.waitForAll(futures); allTerminal.thenAcceptAsync(new AcceptFunction<Void>() { @Override public void accept(Void value) { allVerticesInTerminalState(globalModVersionOfFailover); } }, executor); break; } } else { LOG.info("FailoverRegion {} is {} when cancel.", id, state); break; } } }
private void cancel(final long globalModVersionOfFailover) { while (true) { JobStatus curStatus = this.state; if (curStatus.equals(JobStatus.RUNNING)) { if (transitionState(curStatus, JobStatus.CANCELLING)) { // we build a future that is complete once all vertices have reached a terminal state final ArrayList<CompletableFuture<?>> futures = new ArrayList<>(connectedExecutionVertexes.size()); // cancel all tasks (that still need cancelling) for (ExecutionVertex vertex : connectedExecutionVertexes) { futures.add(vertex.cancel()); } final FutureUtils.ConjunctFuture<Void> allTerminal = FutureUtils.waitForAll(futures); allTerminal.thenAcceptAsync( (Void value) -> allVerticesInTerminalState(globalModVersionOfFailover), executor); break; } } else { LOG.info("FailoverRegion {} is {} when cancel.", id, state); break; } } }
private void cancel(final long globalModVersionOfFailover) { while (true) { JobStatus curStatus = this.state; if (curStatus.equals(JobStatus.RUNNING)) { if (transitionState(curStatus, JobStatus.CANCELLING)) { // we build a future that is complete once all vertices have reached a terminal state final ArrayList<CompletableFuture<?>> futures = new ArrayList<>(connectedExecutionVertexes.size()); // cancel all tasks (that still need cancelling) for (ExecutionVertex vertex : connectedExecutionVertexes) { futures.add(vertex.cancel()); } final FutureUtils.ConjunctFuture<Void> allTerminal = FutureUtils.waitForAll(futures); allTerminal.thenAcceptAsync( (Void value) -> allVerticesInTerminalState(globalModVersionOfFailover), executor); break; } } else { LOG.info("FailoverRegion {} is {} when cancel.", id, state); break; } } }
private void reset(long globalModVersionOfFailover) { if (transitionState(JobStatus.CANCELED, JobStatus.CREATED)) { // reset all connected ExecutionVertexes final Collection<CoLocationGroup> colGroups = new HashSet<>(); for (ExecutionVertex ev : connectedExecutionVertices) { CoLocationGroup cgroup = ev.getJobVertex().getCoLocationGroup(); if (cgroup != null && !colGroups.contains(cgroup)){ cgroup.resetConstraints(); colGroups.add(cgroup); } } restart(globalModVersionOfFailover); } else { failover(globalModVersionOfFailover, new FlinkException("FailoverRegion " + id + " switch from CANCELLED to CREATED fail.")); } }
if (transitionState(JobStatus.CANCELED, JobStatus.CREATED)) { restart(globalModVersionOfFailover);
if (transitionState(JobStatus.CANCELED, JobStatus.CREATED)) { restart(globalModVersionOfFailover);
if (transitionState(JobStatus.CANCELED, JobStatus.CREATED)) { restart(globalModVersionOfFailover);
private void restart(long globalModVersionOfFailover) { try { if (transitionState(JobStatus.CREATED, JobStatus.RUNNING)) {
JobStatus curStatus = this.state; if (curStatus.equals(JobStatus.RUNNING)) { if (transitionState(curStatus, JobStatus.CANCELLING)) {
private void restart(long globalModVersionOfFailover) { try { if (transitionState(JobStatus.CREATED, JobStatus.RUNNING)) {
private void restart(long globalModVersionOfFailover) { try { if (transitionState(JobStatus.CREATED, JobStatus.RUNNING)) {
/** * Restart the region by notify the schedule plugin. */ private void restart(long globalModVersionOfFailover) { try { if (transitionState(JobStatus.CREATED, JobStatus.RUNNING)) { // Let the scheduler event to reschedule connected ExecutionVertices executionGraph.resetExecutionVerticesAndNotify(globalModVersionOfFailover, connectedExecutionVertices); } else { failover(globalModVersionOfFailover, new FlinkException("FailoverRegion " + id + " witch from CREATED to RUNNING fail.")); } } catch (GlobalModVersionMismatch e) { // happens when a global recovery happens concurrently to the regional recovery // should do nothing } catch (Exception e) { failover(globalModVersionOfFailover, new FlinkException("FailoverRegion " + id + " restart failed.", e)); } }