mirror of https://github.com/apache/druid.git
Check type of segment spec before using for time ordering
This commit is contained in:
parent
b822fc73df
commit
da4fc66403
|
@ -92,15 +92,6 @@ public class ScanQueryRunnerFactory implements QueryRunnerFactory<ScanResultValu
|
||||||
return (queryPlus, responseContext) -> {
|
return (queryPlus, responseContext) -> {
|
||||||
ScanQuery query = (ScanQuery) queryPlus.getQuery();
|
ScanQuery query = (ScanQuery) queryPlus.getQuery();
|
||||||
|
|
||||||
List<SegmentDescriptor> descriptorsOrdered =
|
|
||||||
((MultipleSpecificSegmentSpec) query.getQuerySegmentSpec()).getDescriptors(); // Ascending time order
|
|
||||||
List<QueryRunner<ScanResultValue>> queryRunnersOrdered = Lists.newArrayList(queryRunners); // Ascending time order by default
|
|
||||||
|
|
||||||
if (query.getOrder().equals(ScanQuery.Order.DESCENDING)) {
|
|
||||||
descriptorsOrdered = Lists.reverse(descriptorsOrdered);
|
|
||||||
queryRunnersOrdered = Lists.reverse(queryRunnersOrdered);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note: this variable is effective only when queryContext has a timeout.
|
// Note: this variable is effective only when queryContext has a timeout.
|
||||||
// See the comment of CTX_TIMEOUT_AT.
|
// See the comment of CTX_TIMEOUT_AT.
|
||||||
final long timeoutAt = System.currentTimeMillis() + QueryContexts.getTimeout(queryPlus.getQuery());
|
final long timeoutAt = System.currentTimeMillis() + QueryContexts.getTimeout(queryPlus.getQuery());
|
||||||
|
@ -119,7 +110,21 @@ public class ScanQueryRunnerFactory implements QueryRunnerFactory<ScanResultValu
|
||||||
} else {
|
} else {
|
||||||
return returnedRows;
|
return returnedRows;
|
||||||
}
|
}
|
||||||
} else if (query.getLimit() <= scanQueryConfig.getMaxRowsQueuedForOrdering()) {
|
} else {
|
||||||
|
if (!(query.getQuerySegmentSpec() instanceof MultipleSpecificSegmentSpec)) {
|
||||||
|
throw new UOE("Time-ordering on scan queries is only supported for queries with segment specs"
|
||||||
|
+ "of type MultipleSpecificSegmentSpec");
|
||||||
|
}
|
||||||
|
List<SegmentDescriptor> descriptorsOrdered =
|
||||||
|
((MultipleSpecificSegmentSpec) query.getQuerySegmentSpec()).getDescriptors(); // Ascending time order
|
||||||
|
List<QueryRunner<ScanResultValue>> queryRunnersOrdered = Lists.newArrayList(queryRunners); // Ascending time order by default
|
||||||
|
|
||||||
|
if (query.getOrder().equals(ScanQuery.Order.DESCENDING)) {
|
||||||
|
descriptorsOrdered = Lists.reverse(descriptorsOrdered);
|
||||||
|
queryRunnersOrdered = Lists.reverse(queryRunnersOrdered);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.getLimit() <= scanQueryConfig.getMaxRowsQueuedForOrdering()) {
|
||||||
// Use priority queue strategy
|
// Use priority queue strategy
|
||||||
return sortAndLimitScanResultValuesPriorityQueue(
|
return sortAndLimitScanResultValuesPriorityQueue(
|
||||||
Sequences.concat(Sequences.map(
|
Sequences.concat(Sequences.map(
|
||||||
|
@ -217,6 +222,7 @@ public class ScanQueryRunnerFactory implements QueryRunnerFactory<ScanResultValu
|
||||||
scanQueryConfig.getMaxRowsQueuedForOrdering()
|
scanQueryConfig.getMaxRowsQueuedForOrdering()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue