@Override public long expireAfterRead(K key, CompletableFuture<V> future, long currentTime, long currentDuration) { if (isReady(future)) { long duration = delegate.expireAfterRead(key, future.join(), currentTime, currentDuration); return Math.min(duration, MAXIMUM_EXPIRY); } return ASYNC_EXPIRY; }
@Override public long expireAfterCreate(K key, CompletableFuture<V> future, long currentTime) { if (isReady(future)) { long duration = delegate.expireAfterCreate(key, future.join(), currentTime); return Math.min(duration, MAXIMUM_EXPIRY); } return ASYNC_EXPIRY; }
/** Returns if the node's value is currently being computed, asynchronously. */ final boolean isComputingAsync(Node<?, ?> node) { return isAsync && !Async.isReady((CompletableFuture<?>) node.getValue()); }
@Override public int weigh(K key, CompletableFuture<V> future) { return isReady(future) ? delegate.weigh(key, future.join()) : 0; }
@Override public long expireAfterUpdate(K key, CompletableFuture<V> future, long currentTime, long currentDuration) { if (isReady(future)) { long duration = (currentDuration > MAXIMUM_EXPIRY) ? delegate.expireAfterCreate(key, future.join(), currentTime) : delegate.expireAfterUpdate(key, future.join(), currentTime, currentDuration); return Math.min(duration, MAXIMUM_EXPIRY); } return ASYNC_EXPIRY; }
/** Returns the current value or null if either not done or failed. */ @SuppressWarnings("NullAway") static @Nullable <V> V getIfReady(@Nullable CompletableFuture<V> future) { return isReady(future) ? future.join() : null; }
@Test(dataProvider = "unsuccessful") public void isReady_fails(CompletableFuture<?> future) { assertThat(Async.isReady(future), is(false)); }
@Test(dataProvider = "successful") public void isReady_success(CompletableFuture<?> future) { assertThat(Async.isReady(future), is(true)); }
@SuppressWarnings("unchecked") CompletableFuture<V> future = (CompletableFuture<V>) oldValue; if (Async.isReady(future)) { @SuppressWarnings("NullAway") CompletableFuture<V> refresh = future.thenCompose(value ->
/** Returns the current value or null if either not done or failed. */ @SuppressWarnings("NullAway") static @Nullable <V> V getIfReady(@Nullable CompletableFuture<V> future) { return isReady(future) ? future.join() : null; }
@Override public long expireAfterCreate(K key, CompletableFuture<V> future, long currentTime) { if (isReady(future)) { long duration = delegate.expireAfterCreate(key, future.join(), currentTime); return Math.min(duration, MAXIMUM_EXPIRY); } return ASYNC_EXPIRY; }
@Override public long expireAfterRead(K key, CompletableFuture<V> future, long currentTime, long currentDuration) { if (isReady(future)) { long duration = delegate.expireAfterRead(key, future.join(), currentTime, currentDuration); return Math.min(duration, MAXIMUM_EXPIRY); } return ASYNC_EXPIRY; }
@Override public int weigh(K key, CompletableFuture<V> future) { return isReady(future) ? delegate.weigh(key, future.join()) : 0; }
/** Returns if the node's value is currently being computed, asynchronously. */ final boolean isComputingAsync(Node<?, ?> node) { return isAsync && !Async.isReady((CompletableFuture<?>) node.getValue()); }
@Override public long expireAfterUpdate(K key, CompletableFuture<V> future, long currentTime, long currentDuration) { if (isReady(future)) { long duration = (currentDuration > MAXIMUM_EXPIRY) ? delegate.expireAfterCreate(key, future.join(), currentTime) : delegate.expireAfterUpdate(key, future.join(), currentTime, currentDuration); return Math.min(duration, MAXIMUM_EXPIRY); } return ASYNC_EXPIRY; }
@SuppressWarnings("unchecked") CompletableFuture<V> future = (CompletableFuture<V>) oldValue; if (Async.isReady(future)) { @SuppressWarnings("NullAway") CompletableFuture<V> refresh = future.thenCompose(value ->