@Override public void mergeSegments(MergeSegments mergeSegments) { final String operation = "mergeSegments"; if (!verifyToken(mergeSegments.getSource(), mergeSegments.getRequestId(), mergeSegments.getDelegationToken(), operation)) { return; } log.info(mergeSegments.getRequestId(), "Merging Segments {} ", mergeSegments); segmentStore.mergeStreamSegment(mergeSegments.getTarget(), mergeSegments.getSource(), TIMEOUT) .thenAccept(txnProp -> { recordStatForTransaction(txnProp, mergeSegments.getTarget()); connection.send(new WireCommands.SegmentsMerged(mergeSegments.getRequestId(), mergeSegments.getTarget(), mergeSegments.getSource())); }) .exceptionally(e -> { if (Exceptions.unwrap(e) instanceof StreamSegmentMergedException) { log.info(mergeSegments.getRequestId(), "Stream segment is already merged '{}'.", mergeSegments.getSource()); connection.send(new WireCommands.SegmentsMerged(mergeSegments.getRequestId(), mergeSegments.getTarget(), mergeSegments.getSource())); return null; } else { return handleException(mergeSegments.getRequestId(), mergeSegments.getSource(), operation, e); } }); }