From 2fa90eb73389c821467682b23654ba3a7ab499df Mon Sep 17 00:00:00 2001 From: Surekha Saharan Date: Tue, 26 Mar 2019 17:36:49 -0700 Subject: [PATCH 1/5] Collect in list instead of Set --- .../java/org/apache/druid/server/http/MetadataResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java index c7e270214ff4..a7568b4c2526 100644 --- a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java +++ b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java @@ -158,7 +158,7 @@ public Response getDatabaseSegments( if (datasources != null && !datasources.isEmpty()) { druidDataSources = druidDataSources.stream() .filter(src -> datasources.contains(src.getName())) - .collect(Collectors.toSet()); + .collect(Collectors.toList()); } final Stream metadataSegments = druidDataSources .stream() From 7b696aaf49ddb9382904b65cb28584a2ad39af05 Mon Sep 17 00:00:00 2001 From: Surekha Saharan Date: Fri, 29 Mar 2019 18:08:00 -0700 Subject: [PATCH 2/5] Add comment --- .../java/org/apache/druid/server/http/MetadataResource.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java index a7568b4c2526..2be495bb3919 100644 --- a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java +++ b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java @@ -158,6 +158,10 @@ public Response getDatabaseSegments( if (datasources != null && !datasources.isEmpty()) { druidDataSources = druidDataSources.stream() .filter(src -> datasources.contains(src.getName())) + // collecting to List here instead of Set because + // ImmutableDruidDataSource.hashCode() is currently expensive + // and metadataSegmentManager.getDataSources() already + // returns unique data sources .collect(Collectors.toList()); } final Stream metadataSegments = druidDataSources From dad167630ce77f79e5703d771299d1e9f5e3df8d Mon Sep 17 00:00:00 2001 From: Surekha Saharan Date: Mon, 1 Apr 2019 17:14:38 -0700 Subject: [PATCH 3/5] Get rid of collection and filter in the stream itself Also get rid of StreamingOutput and JsonFactory --- .../druid/server/http/MetadataResource.java | 36 +++---------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java index 2be495bb3919..11bc64f21f44 100644 --- a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java +++ b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java @@ -19,8 +19,6 @@ package org.apache.druid.server.http; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Function; import com.google.common.collect.Collections2; @@ -51,13 +49,11 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.TreeSet; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -67,9 +63,7 @@ public class MetadataResource { private final MetadataSegmentManager metadataSegmentManager; private final IndexerMetadataStorageCoordinator metadataStorageCoordinator; - private final AuthConfig authConfig; private final AuthorizerMapper authorizerMapper; - private final ObjectMapper jsonMapper; @Inject public MetadataResource( @@ -82,9 +76,7 @@ public MetadataResource( { this.metadataSegmentManager = metadataSegmentManager; this.metadataStorageCoordinator = metadataStorageCoordinator; - this.authConfig = authConfig; this.authorizerMapper = authorizerMapper; - this.jsonMapper = jsonMapper; } @GET @@ -155,17 +147,11 @@ public Response getDatabaseSegments( ) { Collection druidDataSources = metadataSegmentManager.getDataSources(); - if (datasources != null && !datasources.isEmpty()) { - druidDataSources = druidDataSources.stream() - .filter(src -> datasources.contains(src.getName())) - // collecting to List here instead of Set because - // ImmutableDruidDataSource.hashCode() is currently expensive - // and metadataSegmentManager.getDataSources() already - // returns unique data sources - .collect(Collectors.toList()); - } final Stream metadataSegments = druidDataSources .stream() + .filter((datasources != null && !datasources.isEmpty()) + ? src -> datasources.contains(src.getName()) + : src -> true) .flatMap(t -> t.getSegments().stream()); final Function> raGenerator = segment -> Collections.singletonList( @@ -174,20 +160,8 @@ public Response getDatabaseSegments( final Iterable authorizedSegments = AuthorizationUtils.filterAuthorizedResources(req, metadataSegments::iterator, raGenerator, authorizerMapper); - final StreamingOutput stream = outputStream -> { - final JsonFactory jsonFactory = jsonMapper.getFactory(); - try (final JsonGenerator jsonGenerator = jsonFactory.createGenerator(outputStream)) { - jsonGenerator.writeStartArray(); - for (DataSegment ds : authorizedSegments) { - jsonGenerator.writeObject(ds); - jsonGenerator.flush(); - } - jsonGenerator.writeEndArray(); - } - }; - - Response.ResponseBuilder builder = Response.status(Response.Status.OK); - return builder.entity(stream).build(); + final Response.ResponseBuilder builder = Response.status(Response.Status.OK); + return builder.entity(authorizedSegments).build(); } @GET From 9ad90165f786f7f247191e081eb55ccd63988553 Mon Sep 17 00:00:00 2001 From: Surekha Saharan Date: Fri, 12 Apr 2019 11:37:30 -0700 Subject: [PATCH 4/5] PR comment --- .../apache/druid/server/http/MetadataResource.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java index 3321747bef31..b4ecabb72582 100644 --- a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java +++ b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java @@ -153,12 +153,11 @@ public Response getDatabaseSegments( // If we haven't polled the metadata store yet, use an empty list of datasources. Collection druidDataSources = Optional.ofNullable(metadataSegmentManager.getDataSources()) .orElse(Collections.emptyList()); - final Stream metadataSegments = druidDataSources - .stream() - .filter((datasources != null && !datasources.isEmpty()) - ? src -> datasources.contains(src.getName()) - : src -> true) - .flatMap(t -> t.getSegments().stream()); + final Stream dataSourceStream = druidDataSources.stream(); + if (datasources != null && !datasources.isEmpty()) { + dataSourceStream.filter(src -> datasources.contains(src.getName())); + } + final Stream metadataSegments = dataSourceStream.flatMap(t -> t.getSegments().stream()); final Function> raGenerator = segment -> Collections.singletonList( AuthorizationUtils.DATASOURCE_READ_RA_GENERATOR.apply(segment.getDataSource())); From 72a74f1b2924da9c02c1d6bc96477a08200478a8 Mon Sep 17 00:00:00 2001 From: Surekha Saharan Date: Fri, 12 Apr 2019 12:52:42 -0700 Subject: [PATCH 5/5] fix travis --- .../java/org/apache/druid/server/http/MetadataResource.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java index b4ecabb72582..da0abe79aeab 100644 --- a/server/src/main/java/org/apache/druid/server/http/MetadataResource.java +++ b/server/src/main/java/org/apache/druid/server/http/MetadataResource.java @@ -153,9 +153,9 @@ public Response getDatabaseSegments( // If we haven't polled the metadata store yet, use an empty list of datasources. Collection druidDataSources = Optional.ofNullable(metadataSegmentManager.getDataSources()) .orElse(Collections.emptyList()); - final Stream dataSourceStream = druidDataSources.stream(); + Stream dataSourceStream = druidDataSources.stream(); if (datasources != null && !datasources.isEmpty()) { - dataSourceStream.filter(src -> datasources.contains(src.getName())); + dataSourceStream = dataSourceStream.filter(src -> datasources.contains(src.getName())); } final Stream metadataSegments = dataSourceStream.flatMap(t -> t.getSegments().stream());