code: public static Mono<Void> waitForCompletion(CloudFoundryClient cloudFoundryClient, Duration completionTimeout, String jobId) {
          return requestJobV3(cloudFoundryClient, jobId)
              .filter(job -> JobState.PROCESSING != job.getState())
              .repeatWhenEmpty(exponentialBackOff(Duration.ofSeconds(1), Duration.ofSeconds(15), completionTimeout))
              .filter(job -> JobState.FAILED == job.getState())
              .flatMap(JobUtils::getError);
      }
docs: Waits for a job V3 to complete
  
  @param cloudFoundryClient the client to use to request job status
  @param completionTimeout  the amount of time to wait for the job to complete.
  @param jobId              the id of the job
  @return {@code onComplete} once job has completed