@Override
public CompletableFuture<StreamSegments> getCurrentSegments(final String scope, final String stream) {
Exceptions.checkNotClosed(closed.get(), this);
Exceptions.checkNotNullOrEmpty(scope, "scope");
Exceptions.checkNotNullOrEmpty(stream, "stream");
long traceId = LoggerHelpers.traceEnter(log, "getCurrentSegments", scope, stream);
final CompletableFuture<SegmentRanges> result = this.retryConfig.runAsync(() -> {
RPCAsyncCallback<SegmentRanges> callback = new RPCAsyncCallback<>(traceId, "getCurrentSegments");
client.getCurrentSegments(ModelHelper.createStreamInfo(scope, stream), callback);
return callback.getFuture();
}, this.executor);
return result.thenApply(ranges -> {
log.debug("Received the following data from the controller {}", ranges.getSegmentRangesList());
NavigableMap<Double, SegmentWithRange> rangeMap = new TreeMap<>();
for (SegmentRange r : ranges.getSegmentRangesList()) {
Preconditions.checkState(r.getMinKey() <= r.getMaxKey(),
"Min keyrange %s was not less than maximum keyRange %s for segment %s",
r.getMinKey(), r.getMaxKey(), r.getSegmentId());
rangeMap.put(r.getMaxKey(), new SegmentWithRange(ModelHelper.encode(r.getSegmentId()), r.getMinKey(), r.getMaxKey()));
}
return new StreamSegments(rangeMap, ranges.getDelegationToken());
}).whenComplete((x, e) -> {
if (e != null) {
log.warn("getCurrentSegments failed: ", e);
}
LoggerHelpers.traceLeave(log, "getCurrentSegments", traceId);
});
}