You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ja...@apache.org on 2020/08/06 19:16:33 UTC
[incubator-pinot] branch master updated: Avoid variable
substitution in metadata (#5822)
This is an automated email from the ASF dual-hosted git repository.
jackie 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 ae2bd2f Avoid variable substitution in metadata (#5822)
ae2bd2f is described below
commit ae2bd2f82f0cd8c19532a0c72944acb7f3d19b61
Author: Xiaotian (Jackie) Jiang <17...@users.noreply.github.com>
AuthorDate: Thu Aug 6 12:16:21 2020 -0700
Avoid variable substitution in metadata (#5822)
In the segment metadata and column metadata, we always store the actual value in the property file and never use variable substitution (`${anotherKey}`). Using variable substitution can cause problem for special values such as `$${` where the first `$` is identified as escape character and removed.
Replace `getString()` with `getProperty()` for column min/max value to avoid variable substitution.
---
.../pinot/core/segment/index/metadata/ColumnMetadata.java | 9 ++++++---
.../creator/impl/SegmentColumnarIndexCreatorTest.java | 12 ++++++++++--
2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/segment/index/metadata/ColumnMetadata.java b/pinot-core/src/main/java/org/apache/pinot/core/segment/index/metadata/ColumnMetadata.java
index 43ea2a2..d8bf349 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/segment/index/metadata/ColumnMetadata.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/segment/index/metadata/ColumnMetadata.java
@@ -122,9 +122,12 @@ public class ColumnMetadata {
builder.setDateTimeGranularity(dateTimeGranularity);
}
- // Set min/max value if available.
- String minString = config.getString(getKeyFor(column, MIN_VALUE), null);
- String maxString = config.getString(getKeyFor(column, MAX_VALUE), null);
+ // Set min/max value if available
+ // NOTE: Use getProperty() instead of getString() to avoid variable substitution ('${anotherKey}'), which can cause
+ // problem for special values such as '$${' where the first '$' is identified as escape character.
+ // TODO: Use getProperty() for other properties as well to avoid the overhead of variable substitution
+ String minString = (String) config.getProperty(getKeyFor(column, MIN_VALUE));
+ String maxString = (String) config.getProperty(getKeyFor(column, MAX_VALUE));
if (minString != null && maxString != null) {
switch (dataType) {
case INT:
diff --git a/pinot-core/src/test/java/org/apache/pinot/core/segment/creator/impl/SegmentColumnarIndexCreatorTest.java b/pinot-core/src/test/java/org/apache/pinot/core/segment/creator/impl/SegmentColumnarIndexCreatorTest.java
index eb6da38..b29886f 100644
--- a/pinot-core/src/test/java/org/apache/pinot/core/segment/creator/impl/SegmentColumnarIndexCreatorTest.java
+++ b/pinot-core/src/test/java/org/apache/pinot/core/segment/creator/impl/SegmentColumnarIndexCreatorTest.java
@@ -69,6 +69,14 @@ public class SegmentColumnarIndexCreatorTest {
assertTrue(SegmentColumnarIndexCreator.isValidPropertyValue(""));
testPropertyValueWithSpecialCharacters("");
+ // Variable substitution (should be disabled)
+ assertTrue(SegmentColumnarIndexCreator.isValidPropertyValue("$${testKey}"));
+ testPropertyValueWithSpecialCharacters("$${testKey}");
+
+ // Escape character for variable substitution
+ assertTrue(SegmentColumnarIndexCreator.isValidPropertyValue("$${"));
+ testPropertyValueWithSpecialCharacters("$${");
+
for (int i = 0; i < NUM_ROUNDS; i++) {
testPropertyValueWithSpecialCharacters(RandomStringUtils.randomAscii(5));
testPropertyValueWithSpecialCharacters(RandomStringUtils.random(5));
@@ -80,11 +88,11 @@ public class SegmentColumnarIndexCreatorTest {
if (SegmentColumnarIndexCreator.isValidPropertyValue(value)) {
PropertiesConfiguration configuration = new PropertiesConfiguration(CONFIG_FILE);
configuration.setProperty(PROPERTY_KEY, value);
- assertEquals(configuration.getString(PROPERTY_KEY), value);
+ assertEquals(configuration.getProperty(PROPERTY_KEY), value);
configuration.save();
configuration = new PropertiesConfiguration(CONFIG_FILE);
- assertEquals(configuration.getString(PROPERTY_KEY), value);
+ assertEquals(configuration.getProperty(PROPERTY_KEY), value);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org