private static Sequence<SegmentAnalysis> runSegmentMetadataQuery( final QueryLifecycleFactory queryLifecycleFactory, final Iterable<DataSegment> segments, final AuthenticationResult authenticationResult ) { // Sanity check: getOnlyElement of a set, to ensure all segments have the same dataSource. final String dataSource = Iterables.getOnlyElement( StreamSupport.stream(segments.spliterator(), false) .map(DataSegment::getDataSource).collect(Collectors.toSet()) ); final MultipleSpecificSegmentSpec querySegmentSpec = new MultipleSpecificSegmentSpec( StreamSupport.stream(segments.spliterator(), false) .map(DataSegment::toDescriptor).collect(Collectors.toList()) ); final SegmentMetadataQuery segmentMetadataQuery = new SegmentMetadataQuery( new TableDataSource(dataSource), querySegmentSpec, new AllColumnIncluderator(), false, ImmutableMap.of(), EnumSet.noneOf(SegmentMetadataQuery.AnalysisType.class), false, false ); return queryLifecycleFactory.factorize().runSimple(segmentMetadataQuery, authenticationResult, null); }
new MultipleSpecificSegmentSpec( missingSegments
private void addSequencesFromServer( final List<Sequence<T>> listOfSequences, final SortedMap<DruidServer, List<SegmentDescriptor>> segmentsByServer ) { segmentsByServer.forEach((server, segmentsOfServer) -> { final QueryRunner serverRunner = serverView.getQueryRunner(server); if (serverRunner == null) { log.error("Server[%s] doesn't have a query runner", server); return; } final MultipleSpecificSegmentSpec segmentsOfServerSpec = new MultipleSpecificSegmentSpec(segmentsOfServer); // Divide user-provided maxQueuedBytes by the number of servers, and limit each server to that much. final long maxQueuedBytes = QueryContexts.getMaxQueuedBytes(query, httpClientConfig.getMaxQueuedBytes()); final long maxQueuedBytesPerServer = maxQueuedBytes / segmentsByServer.size(); final Sequence<T> serverResults; if (isBySegment) { serverResults = getBySegmentServerResults(serverRunner, segmentsOfServerSpec, maxQueuedBytesPerServer); } else if (!server.segmentReplicatable() || !populateCache) { serverResults = getSimpleServerResults(serverRunner, segmentsOfServerSpec, maxQueuedBytesPerServer); } else { serverResults = getAndCacheServerResults(serverRunner, segmentsOfServerSpec, maxQueuedBytesPerServer); } listOfSequences.add(serverResults); }); }
new MultipleSpecificSegmentSpec( ImmutableList.of( new SegmentDescriptor( new MultipleSpecificSegmentSpec( ImmutableList.of( new SegmentDescriptor( new MultipleSpecificSegmentSpec( ImmutableList.of( new SegmentDescriptor(
descriptors.add(new SegmentDescriptor(interval2, "v", 5)); descriptors.add(new SegmentDescriptor(interval3, "v", 6)); MultipleSpecificSegmentSpec expected = new MultipleSpecificSegmentSpec(descriptors);
.setDataSource(QueryRunnerTestHelper.dataSource) .setQuerySegmentSpec( new MultipleSpecificSegmentSpec( ImmutableList.of( descriptor_26_28_0,
private static Sequence<SegmentAnalysis> runSegmentMetadataQuery( final QueryLifecycleFactory queryLifecycleFactory, final Iterable<DataSegment> segments, final AuthenticationResult authenticationResult ) { // Sanity check: getOnlyElement of a set, to ensure all segments have the same dataSource. final String dataSource = Iterables.getOnlyElement( StreamSupport.stream(segments.spliterator(), false) .map(DataSegment::getDataSource).collect(Collectors.toSet()) ); final MultipleSpecificSegmentSpec querySegmentSpec = new MultipleSpecificSegmentSpec( StreamSupport.stream(segments.spliterator(), false) .map(DataSegment::toDescriptor).collect(Collectors.toList()) ); final SegmentMetadataQuery segmentMetadataQuery = new SegmentMetadataQuery( new TableDataSource(dataSource), querySegmentSpec, new AllColumnIncluderator(), false, ImmutableMap.of(), EnumSet.noneOf(SegmentMetadataQuery.AnalysisType.class), false, false ); return queryLifecycleFactory.factorize().runSimple(segmentMetadataQuery, authenticationResult, null); }
new MultipleSpecificSegmentSpec( missingSegments
private void addSequencesFromServer( final List<Sequence<T>> listOfSequences, final SortedMap<DruidServer, List<SegmentDescriptor>> segmentsByServer ) { segmentsByServer.forEach((server, segmentsOfServer) -> { final QueryRunner serverRunner = serverView.getQueryRunner(server); if (serverRunner == null) { log.error("Server[%s] doesn't have a query runner", server); return; } final MultipleSpecificSegmentSpec segmentsOfServerSpec = new MultipleSpecificSegmentSpec(segmentsOfServer); // Divide user-provided maxQueuedBytes by the number of servers, and limit each server to that much. final long maxQueuedBytes = QueryContexts.getMaxQueuedBytes(query, httpClientConfig.getMaxQueuedBytes()); final long maxQueuedBytesPerServer = maxQueuedBytes / segmentsByServer.size(); final Sequence<T> serverResults; if (isBySegment) { serverResults = getBySegmentServerResults(serverRunner, segmentsOfServerSpec, maxQueuedBytesPerServer); } else if (!server.segmentReplicatable() || !populateCache) { serverResults = getSimpleServerResults(serverRunner, segmentsOfServerSpec, maxQueuedBytesPerServer); } else { serverResults = getAndCacheServerResults(serverRunner, segmentsOfServerSpec, maxQueuedBytesPerServer); } listOfSequences.add(serverResults); }); }