@Override public void processResponse(JsonNode json, DruidAggregationQuery<?> druidQuery, LoggingContext metadata) { if (failed.get()) { return; } AtomicInteger sharedIndex; Interval interval = druidQuery.getIntervals().get(0); if (interval == null || (sharedIndex = expectedIntervals.get(interval)) == null) { fail(UNEXPECTED_INTERVAL_FORMAT, druidQuery, interval); return; } int index; if ((index = sharedIndex.getAndSet(-1)) < 0 || completedIntervals.get(index) != null) { fail(EXTRA_RETURN_FORMAT, druidQuery, interval); return; } completedIntervals.set(index, new Pair<>(json, metadata)); if (completed.decrementAndGet() == 0) { Pair<JsonNode, LoggingContext> mergedResponse = mergeResponses(completedIntervals); RequestLog.restore(mergedResponse.getValue().getRequestLog()); next.processResponse(mergedResponse.getKey(), queryBeforeSplit, mergedResponse.getValue()); } }