Jackie-Jiang commented on code in PR #15591:
URL: https://github.com/apache/pinot/pull/15591#discussion_r2096596015


##########
pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/metadata/ColumnMetadataImpl.java:
##########
@@ -355,7 +415,9 @@ public static class Builder {
     private PartitionFunction _partitionFunction;
     private Set<Integer> _partitions;
     private boolean _autoGenerated;
-    private Map<IndexType<?, ?, ?>, Long> _indexSizeMap = new HashMap<>();
+
+    // use non-default size to save space for most columns
+    LongArrayList _indexSizeList = new LongArrayList(2);

Review Comment:
   (minor) Make it `private`



##########
pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/ColumnMetadata.java:
##########
@@ -90,7 +92,40 @@ default boolean isMinMaxValueInvalid() {
   @Nullable
   Set<Integer> getPartitions();
 
-  Map<IndexType<?, ?, ?>, Long> getIndexSizeMap();
+  /**
+   * If exists, returns size of index for given index type; otherwise returns 
-1.
+   * @param type index type
+   */
+  default long getIndexSizeFor(IndexType type) {

Review Comment:
   If this is just for testing purpose, consider annotating it with 
`@VisibleForTesting` and add javadoc warning future developers to not use it 
because of the overhead



##########
pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/ColumnMetadata.java:
##########
@@ -90,7 +90,23 @@ default boolean isMinMaxValueInvalid() {
   @Nullable
   Set<Integer> getPartitions();
 
-  Map<IndexType<?, ?, ?>, Long> getIndexSizeMap();
+  long getIndexSizeFor(IndexType type);
+
+  default void addIndexSize(short indexType, long size) {

Review Comment:
   This is an interface, and all the APIs are read only.
   Consider adding it only to `ColumnMetadataImpl.Builder`



##########
pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/metadata/ColumnMetadataImpl.java:
##########
@@ -355,7 +415,9 @@ public static class Builder {
     private PartitionFunction _partitionFunction;
     private Set<Integer> _partitions;
     private boolean _autoGenerated;
-    private Map<IndexType<?, ?, ?>, Long> _indexSizeMap = new HashMap<>();
+
+    // use non-default size to save space for most columns
+    LongArrayList _indexSizeList = new LongArrayList(2);

Review Comment:
   With builder pattern, we want to initialize everything in the builder, and 
not modify the class once `build()` is invoked. Right now the update happens in 
the main class, instead of the builder



##########
pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/metadata/ColumnMetadataImpl.java:
##########
@@ -164,10 +176,58 @@ public Set<Integer> getPartitions() {
     return _partitions;
   }
 
-  @Nullable
   @Override
-  public Map<IndexType<?, ?, ?>, Long> getIndexSizeMap() {
-    return _indexSizeMap;
+  public long getIndexSizeFor(IndexType type) {
+    short indexId = IndexService.getInstance().getNumericId(type);
+    for (int i = 0, n = getNumIndexes(); i < n; i++) {

Review Comment:
   (minor) Can be improved by directly looping over `_indexTypeSizeList`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to