/** * {@inheritDoc} */ @Override public String toString() { return String.format("Ensured{%s}", getDeferredClass(), getDeferred()); } }
/** * Obtains an {@link Ensured} of the specified {@link Deferred}. * * @param deferred the {@link Deferred} to ensure * @param totalRetryDurationMS the maximum duration (in milliseconds) to retry * * @return an {@link Ensured} of the {@link Deferred} */ public static <T> Deferred<T> ensured(Deferred<T> deferred, long totalRetryDurationMS) { return deferred instanceof Ensured ? (Ensured<T>) deferred : new Ensured<T>(deferred, getDefaultEnsuredRetryDurationsMS(), totalRetryDurationMS); }
/** * Construct an {@link Ensured} adapting the specified {@link Deferred}. * * @param deferred the {@link Deferred} to adapt * @param retryDurationsMS an {@link Iterator} providing individual retry * durations (in milliseconds) for each time the * {@link Ensured} needs to wait * @param totalDurationMS the maximum duration (in milliseconds) to wait * for the {@link Deferred} to become available */ public Ensured(Deferred<T> deferred, Iterator<Long> retryDurationsMS, long totalDurationMS) { // when we're ensuring an ensured, use the adapted deferred // (this is to ensure that we don't attempt to ensure another ensured) m_deferred = deferred instanceof Ensured ? ((Ensured<T>) deferred).getDeferred() : deferred; m_retryDurationsMS = retryDurationsMS; m_totalDurationMS = totalDurationMS < 0 ? 0 : totalDurationMS; }
/** * Obtains an ensured of the specified {@link Deferred}. * * @param deferred the {@link Deferred} to ensure * @param totalRetryDuration the maximum duration for retrying * @param totalRetryDurationUnits the {@link TimeUnit}s for the duration * * @return an {@link Ensured} of the {@link Deferred} */ public static <T> Deferred<T> ensured(Deferred<T> deferred, long totalRetryDuration, TimeUnit totalRetryDurationUnits) { return deferred instanceof Ensured ? deferred : new Ensured<T>(deferred, getDefaultEnsuredRetryDurationsMS(), totalRetryDurationUnits .toMillis(totalRetryDuration)); }
/** * Obtains an ensured of the specified {@link Deferred}. * * @param deferred the {@link Deferred} to ensure * @param retryDelayDuration the time to wait between retrying * @param retryDelayDurationUnits the {@link TimeUnit}s for the retry delay duration * @param totalRetryDuration the maximum duration for retrying * @param totalRetryDurationUnits the {@link TimeUnit}s for the duration * * @return an {@link Ensured} of the {@link Deferred} */ public static <T> Deferred<T> ensured(Deferred<T> deferred, long retryDelayDuration, TimeUnit retryDelayDurationUnits, long totalRetryDuration, TimeUnit totalRetryDurationUnits) { Iterator<Long> retryDurationsMS = new PerpetualIterator<Long>(retryDelayDurationUnits.toMillis(retryDelayDuration < 0 ? 0 : retryDelayDuration)); return deferred instanceof Ensured ? deferred : new Ensured<T>(deferred, retryDurationsMS, totalRetryDurationUnits .toMillis(totalRetryDuration)); }
/** * Obtains an ensured of the specified {@link Deferred} * (configured using default {@link Ensured} timeouts) * * @param deferred the {@link Deferred} to ensure * * @return an {@link Ensured} of the {@link Deferred} */ public static <T> Deferred<T> ensured(Deferred<T> deferred) { return deferred instanceof Ensured ? deferred : new Ensured<T>(deferred, getDefaultEnsuredRetryDurationsMS(), getDefaultEnsuredTimeoutMS()); }