This is an automated email from the ASF dual-hosted git repository.

samarth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 83fcab1  Improve performance of queries against SYSTEM.SEGMENT table. 
(#11008)
83fcab1 is described below

commit 83fcab1d0f81081b5a307042ec1bdcbfa3f7d9cf
Author: Samarth Jain <[email protected]>
AuthorDate: Wed Mar 17 22:24:02 2021 -0700

    Improve performance of queries against SYSTEM.SEGMENT table. (#11008)
    
    Size HashMap and HashSet appropriately. Perf analysis of the queries
    revealed that over 25% of the query time was spent in resizing HashMap and 
HashSet
    collections. Also, prevent the need to examine and authorize all resources 
when
    AllowAllAuthorizer is the configured authorizer.
---
 .../java/org/apache/druid/server/security/AuthorizationUtils.java    | 4 ++++
 .../main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java   | 5 +++--
 .../main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java  | 4 ++--
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git 
a/server/src/main/java/org/apache/druid/server/security/AuthorizationUtils.java 
b/server/src/main/java/org/apache/druid/server/security/AuthorizationUtils.java
index 64c6330..7017ac7 100644
--- 
a/server/src/main/java/org/apache/druid/server/security/AuthorizationUtils.java
+++ 
b/server/src/main/java/org/apache/druid/server/security/AuthorizationUtils.java
@@ -263,6 +263,10 @@ public class AuthorizationUtils
       throw new ISE("No authorizer found with name: [%s].", 
authenticationResult.getAuthorizerName());
     }
 
+    if (authorizer instanceof AllowAllAuthorizer) {
+      return resources;
+    }
+
     final Map<ResourceAction, Access> resultCache = new HashMap<>();
     final Iterable<ResType> filteredResources = Iterables.filter(
         resources,
diff --git 
a/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java 
b/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java
index 20138a4..30a1576 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java
@@ -702,13 +702,14 @@ public class DruidSchema extends AbstractSchema
 
   Map<SegmentId, AvailableSegmentMetadata> getSegmentMetadataSnapshot()
   {
-    final Map<SegmentId, AvailableSegmentMetadata> segmentMetadata = new 
HashMap<>();
     synchronized (lock) {
+      final Map<SegmentId, AvailableSegmentMetadata> segmentMetadata = 
Maps.newHashMapWithExpectedSize(
+          segmentMetadataInfo.values().stream().mapToInt(v -> v.size()).sum());
       for (TreeMap<SegmentId, AvailableSegmentMetadata> val : 
segmentMetadataInfo.values()) {
         segmentMetadata.putAll(val);
       }
+      return segmentMetadata;
     }
-    return segmentMetadata;
   }
 
   int getTotalSegments()
diff --git 
a/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java 
b/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
index 40352eb..0562e33 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
@@ -29,6 +29,7 @@ import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import com.google.common.net.HostAndPort;
 import com.google.common.util.concurrent.Futures;
 import com.google.inject.Inject;
@@ -90,7 +91,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -287,7 +287,7 @@ public class SystemSchema extends AbstractSchema
       // Coordinator.
       final Iterator<SegmentWithOvershadowedStatus> metadataStoreSegments = 
metadataView.getPublishedSegments();
 
-      final Set<SegmentId> segmentsAlreadySeen = new HashSet<>();
+      final Set<SegmentId> segmentsAlreadySeen = 
Sets.newHashSetWithExpectedSize(druidSchema.getTotalSegments());
 
       final FluentIterable<Object[]> publishedSegments = FluentIterable
           .from(() -> getAuthorizedPublishedSegments(metadataStoreSegments, 
root))


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to