@Override public T await(long timeout) { if (realCallback instanceof IPromise == false) return null; else return ((IPromise<T>)realCallback).await(timeout); }
/** * called when a valid result of a future becomes available. * forwards to (new) "then" variant. * @return */ default public IPromise<T> onResult( Consumer<T> resultHandler ) { return then(resultHandler); }
@Override public T get() { if (realCallback instanceof IPromise == false) return null; else return (T) ((IPromise)realCallback).get(); }
results.add(p); final int finalI = i; table.then((r, e) -> { if (e == null) Log.Info(this, "table creation: "+desc.getName()+" "+ finalI); }); List<IPromise<RealLiveTable>> tables = Actors.all(results).await(); if ( tables.get(i).get() == null ) { res.reject(tables.get(i).getError()); errors = true; break; break; tableShards[sno] = tables.get(i).get();
@Override public IPromise<T> onTimeout(Consumer timeoutHandler) { if (realCallback instanceof IPromise == false) throw new RuntimeException("this is an error."); else return ((IPromise)realCallback).onTimeout(timeoutHandler); }
@Override public void complete(Object result, Object error) { fut.complete(result, error); } }));
@Override public Object getError() { if (realCallback instanceof IPromise == false) return null; else return (T) ((IPromise)realCallback).getError(); }
@Override public IPromise timeoutIn(long millis) { if (realCallback instanceof IPromise == false) throw new RuntimeException( "currently supported for futures only" ); ((IPromise)realCallback).timeoutIn(millis); return this; }
/** * called when an error is set as the result * forwards to (new) "catchError" variant. * @return */ default public IPromise<T> onError( Consumer<Object> errorHandler ) { return catchError(errorHandler); }
@Override public IPromise<T> awaitPromise(long timeout) { if (realCallback instanceof IPromise == false) return null; else return ((IPromise<T>)realCallback).awaitPromise(timeout); }
private static <T> void awaitSettle(final IPromise<T> futures[], final IPromise result) { PromiseLatch latch = new PromiseLatch(futures.length); latch.getPromise().then( () -> result.complete(futures, null) ); for (int i = 0; i < futures.length; i++) { futures[i].then( () -> latch.countDown() ); } }
@Override public IPromise<StorageStats> getStats() { Promise res = new Promise(); try { Actors.all(shards.stream().map( shard -> shard.getStats() ).collect(Collectors.toList())) .then( (shardStats,err) -> { if (shardStats!=null) { StorageStats stats = new StorageStats(); shardStats.stream().map( fut -> fut.get() ).forEach( nodeStats -> nodeStats.addTo(stats)); res.resolve(stats); } else { res.reject(err); } }); } catch (Exception e) { Log.Warn(this,e); res.reject(e); } return res; }
@Override public IPromise<T> onTimeout(Consumer timeoutHandler) { if (realCallback instanceof IPromise == false) throw new RuntimeException("this is an error."); else return ((IPromise)realCallback).onTimeout(timeoutHandler); }