@Override
            public DataList<D> get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
            DataList<D> result = null;
            long timeLeft = unit.toMillis(timeout);
            long currentCallStart = SystemTimer.INSTANCE.milliTime();
            for (CompletableFuture<DataList<D>> future : futures) {
                if (result == null)
                    result = future.get(timeLeft, TimeUnit.MILLISECONDS);
                else
                    future.get(timeLeft, TimeUnit.MILLISECONDS);
                long currentCallEnd = SystemTimer.INSTANCE.milliTime();
                timeLeft -= (currentCallEnd - currentCallStart);
                if (timeLeft <= 0) break;
                currentCallStart = currentCallEnd;
            }
            complete(result);
            return result;
        }
A future which on get calls get on all its given futures and sets the value returned from the
first given future as its result.
container-core/src/main/java/com/yahoo/processing/Response.java