You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by xi...@apache.org on 2021/05/25 04:15:19 UTC
[incubator-pinot] branch master updated: Fixing comparison and
hashcode for Schema, FieldSpec and ColumnMetadata (#6965)
This is an automated email from the ASF dual-hosted git repository.
xiangfu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 1efde00 Fixing comparison and hashcode for Schema, FieldSpec and ColumnMetadata (#6965)
1efde00 is described below
commit 1efde00c91655a361dc1c5fb2868a2693dbe3a52
Author: Xiang Fu <xi...@gmail.com>
AuthorDate: Mon May 24 21:15:06 2021 -0700
Fixing comparison and hashcode for Schema, FieldSpec and ColumnMetadata (#6965)
---
.../segment/spi/index/metadata/ColumnMetadata.java | 29 ++++++++++++----------
.../java/org/apache/pinot/spi/data/FieldSpec.java | 4 ++-
.../java/org/apache/pinot/spi/data/Schema.java | 4 +++
.../org/apache/pinot/spi/utils/EqualityUtils.java | 27 ++++++++++++++++++++
4 files changed, 50 insertions(+), 14 deletions(-)
diff --git a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/metadata/ColumnMetadata.java b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/metadata/ColumnMetadata.java
index b8859f4..0b1a61e0 100644
--- a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/metadata/ColumnMetadata.java
+++ b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/metadata/ColumnMetadata.java
@@ -24,6 +24,7 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.pinot.segment.spi.V1Constants;
import org.apache.pinot.segment.spi.index.creator.TextIndexType;
import org.apache.pinot.segment.spi.partition.PartitionFunction;
@@ -38,6 +39,7 @@ import org.apache.pinot.spi.data.MetricFieldSpec;
import org.apache.pinot.spi.data.TimeFieldSpec;
import org.apache.pinot.spi.data.TimeGranularitySpec;
import org.apache.pinot.spi.utils.BytesUtils;
+import org.apache.pinot.spi.utils.EqualityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -597,23 +599,24 @@ public class ColumnMetadata {
}
if (object instanceof ColumnMetadata) {
ColumnMetadata columnMetadata = (ColumnMetadata) object;
- return getColumnName() == columnMetadata.getColumnName() && getCardinality() == columnMetadata.getCardinality()
- && getTotalDocs() == columnMetadata.getTotalDocs() && getDataType().equals(columnMetadata.getDataType())
- && getBitsPerElement() == columnMetadata.getBitsPerElement() && getFieldSpec()
- .equals(columnMetadata.getFieldSpec()) && isSorted() == columnMetadata.isSorted()
+ return StringUtils.equals(getColumnName(), columnMetadata.getColumnName()) && getCardinality() == columnMetadata
+ .getCardinality() && getTotalDocs() == columnMetadata.getTotalDocs() && getDataType()
+ .equals(columnMetadata.getDataType()) && getBitsPerElement() == columnMetadata.getBitsPerElement()
+ && getFieldSpec().equals(columnMetadata.getFieldSpec()) && isSorted() == columnMetadata.isSorted()
&& hasNulls() == columnMetadata.hasNulls() && hasDictionary() == columnMetadata.hasDictionary()
&& hasInvertedIndex() == columnMetadata.hasInvertedIndex() && isSingleValue() == columnMetadata
.isSingleValue() && isVirtual() == columnMetadata.isVirtual() && getMaxNumberOfMultiValues() == columnMetadata
.getMaxNumberOfMultiValues() && getTotalNumberOfEntries() == columnMetadata.getTotalNumberOfEntries()
- && isAutoGenerated() == columnMetadata.isAutoGenerated() && getDefaultNullValueString() == columnMetadata
- .getDefaultNullValueString() && getTimeUnit() == (columnMetadata.getTimeUnit())
- && getPaddingCharacter() == columnMetadata.getPaddingCharacter() && minValue == (columnMetadata.getMinValue())
- && maxValue == (columnMetadata.getMaxValue()) && getPartitionFunction() == (columnMetadata
- .getPartitionFunction()) && getNumPartitions() == columnMetadata.getNumPartitions()
- && getPartitions() == (columnMetadata.getPartitions()) && getDateTimeFormat() == (columnMetadata
- .getDateTimeFormat()) && getDateTimeGranularity() == (columnMetadata.getDateTimeGranularity())
- && hasFSTIndex() == columnMetadata.hasFSTIndex() && getTextIndexType()
- .equals(columnMetadata.getTextIndexType());
+ && isAutoGenerated() == columnMetadata.isAutoGenerated() && StringUtils
+ .equals(getDefaultNullValueString(), columnMetadata.getDefaultNullValueString())
+ && getTimeUnit() == (columnMetadata.getTimeUnit()) && getPaddingCharacter() == columnMetadata
+ .getPaddingCharacter() && EqualityUtils.isEqual(getMinValue(), columnMetadata.getMinValue()) && EqualityUtils
+ .isEqual(getMaxValue(), columnMetadata.getMaxValue()) && getPartitionFunction() == (columnMetadata
+ .getPartitionFunction()) && getNumPartitions() == columnMetadata.getNumPartitions() && EqualityUtils
+ .isEqualSet(getPartitions(), columnMetadata.getPartitions()) && StringUtils
+ .equals(getDateTimeFormat(), columnMetadata.getDateTimeFormat()) && StringUtils
+ .equals(getDateTimeGranularity(), columnMetadata.getDateTimeGranularity()) && hasFSTIndex() == columnMetadata
+ .hasFSTIndex() && getTextIndexType().equals(columnMetadata.getTextIndexType());
}
return false;
}
diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/data/FieldSpec.java b/pinot-spi/src/main/java/org/apache/pinot/spi/data/FieldSpec.java
index f77facb..f966f9b 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/data/FieldSpec.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/data/FieldSpec.java
@@ -339,7 +339,8 @@ public abstract class FieldSpec implements Comparable<FieldSpec>, Serializable {
return EqualityUtils.isEqual(_name, that._name) && EqualityUtils.isEqual(_dataType, that._dataType) && EqualityUtils
.isEqual(_isSingleValueField, that._isSingleValueField) && EqualityUtils
.isEqual(getStringValue(_defaultNullValue), getStringValue(that._defaultNullValue)) && EqualityUtils
- .isEqual(_maxLength, that._maxLength) && EqualityUtils.isEqual(_transformFunction, that._transformFunction);
+ .isEqual(_maxLength, that._maxLength) && EqualityUtils.isEqual(_transformFunction, that._transformFunction)
+ && EqualityUtils.isEqual(_virtualColumnProvider, that._virtualColumnProvider);
}
@Override
@@ -350,6 +351,7 @@ public abstract class FieldSpec implements Comparable<FieldSpec>, Serializable {
result = EqualityUtils.hashCodeOf(result, getStringValue(_defaultNullValue));
result = EqualityUtils.hashCodeOf(result, _maxLength);
result = EqualityUtils.hashCodeOf(result, _transformFunction);
+ result = EqualityUtils.hashCodeOf(result, _virtualColumnProvider);
return result;
}
diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/data/Schema.java b/pinot-spi/src/main/java/org/apache/pinot/spi/data/Schema.java
index 40b55d1..25b29ad 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/data/Schema.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/data/Schema.java
@@ -641,6 +641,8 @@ public final class Schema implements Serializable {
.isEqualIgnoreOrder(_metricFieldSpecs, that._metricFieldSpecs) && EqualityUtils
.isEqual(_timeFieldSpec, that._timeFieldSpec) && EqualityUtils
.isEqualIgnoreOrder(_dateTimeFieldSpecs, that._dateTimeFieldSpecs) && EqualityUtils
+ .isEqualIgnoreOrder(_complexFieldSpecs, that._complexFieldSpecs) && EqualityUtils
+ .isEqualMap(_fieldSpecMap, that._fieldSpecMap) && EqualityUtils
.isEqual(_primaryKeyColumns, that._primaryKeyColumns);
}
@@ -673,6 +675,8 @@ public final class Schema implements Serializable {
result = EqualityUtils.hashCodeOf(result, _metricFieldSpecs);
result = EqualityUtils.hashCodeOf(result, _timeFieldSpec);
result = EqualityUtils.hashCodeOf(result, _dateTimeFieldSpecs);
+ result = EqualityUtils.hashCodeOf(result, _complexFieldSpecs);
+ result = EqualityUtils.hashCodeOf(result, _fieldSpecMap);
result = EqualityUtils.hashCodeOf(result, _primaryKeyColumns);
return result;
}
diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/EqualityUtils.java b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/EqualityUtils.java
index 8839975..13796e0 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/EqualityUtils.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/EqualityUtils.java
@@ -22,6 +22,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -74,6 +76,9 @@ public class EqualityUtils {
public static boolean isEqual(@Nullable Object left, @Nullable Object right) {
if (left != null && right != null) {
+ if ((left instanceof Map) && (right instanceof Map)) {
+ return EqualityUtils.isEqualMap((Map)left, (Map)right);
+ }
return left.equals(right);
} else {
return left == right;
@@ -84,6 +89,21 @@ public class EqualityUtils {
return Arrays.deepEquals(left, right);
}
+ public static boolean isEqualMap(@Nullable Map left, @Nullable Map right) {
+ if (left != null && right != null) {
+ if (left.size() != right.size()) {
+ return false;
+ }
+ for (Object key : left.keySet()) {
+ if ((!right.containsKey(key)) || (!EqualityUtils.isEqual(left.get(key), right.get(key)))) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return left == right;
+ }
+
@SuppressWarnings("unchecked")
public static boolean isEqualIgnoreOrder(@Nullable List left, @Nullable List right) {
if (left != null && right != null) {
@@ -97,6 +117,13 @@ public class EqualityUtils {
}
}
+ public static boolean isEqualSet(@Nullable Set left, @Nullable Set right) {
+ if (left != null && right != null) {
+ return isEqualIgnoreOrder(Arrays.asList(left.toArray()), Arrays.asList(right.toArray()));
+ }
+ return left == right;
+ }
+
public static boolean isNullOrNotSameClass(@Nonnull Object left, @Nullable Object right) {
return right == null || left.getClass() != right.getClass();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org