docs: public CompletableFuture<Void> scheduleForExecution(
  			SlotProvider slotProvider,
  			boolean queued,
  			LocationPreferenceConstraint locationPreferenceConstraint,
  			@Nonnull Set<AllocationID> allPreviousExecutionGraphAllocationIds) {
  
  		assertRunningInJobMasterMainThread();
  		final ExecutionGraph executionGraph = vertex.getExecutionGraph();
  		final Time allocationTimeout = executionGraph.getAllocationTimeout();
  		try {
  			final CompletableFuture<Execution> allocationFuture = allocateAndAssignSlotForExecution(
  				slotProvider,
  				queued,
  				locationPreferenceConstraint,
  				allPreviousExecutionGraphAllocationIds,
  				allocationTimeout);
  
  			final CompletableFuture<Void> deploymentFuture;
  
  			if (allocationFuture.isDone() || queued) {
  				deploymentFuture = allocationFuture.thenRun(ThrowingRunnable.unchecked(this::deploy));
  			} else {
  				deploymentFuture = FutureUtils.completedExceptionally(
  					new IllegalArgumentException("The slot allocation future has not been completed yet."));
  			}
  
  			deploymentFuture.whenComplete(
  				(Void ignored, Throwable failure) -> {
  					if (failure != null) {
  						final Throwable stripCompletionException = ExceptionUtils.stripCompletionException(failure);
  						final Throwable schedulingFailureCause;
  
  						if (stripCompletionException instanceof TimeoutException) {
  							schedulingFailureCause = new NoResourceAvailableException(
  								"Could not allocate enough slots within timeout of " + allocationTimeout + " to run the job. " +
  									"Please make sure that the cluster has enough resources.");
  						} else {
  							schedulingFailureCause = stripCompletionException;
  						}
  						markFailed(schedulingFailureCause);
  					}
  				});
  
  			return deploymentFuture;
  		} catch (IllegalExecutionStateException e) {
  			return FutureUtils.completedExceptionally(e);
  		}
  	}