This is an automated email from the ASF dual-hosted git repository. xiangfu pushed a commit to branch fixing_no_time_converter in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
commit 10278aace45712cd2c2c562bdcf0ac49991bd162 Author: Xiang Fu <fx19880...@gmail.com> AuthorDate: Sat Oct 5 02:07:35 2019 -0700 Ensure segment converter not fail for schemas without time fieldSpec --- .../realtime/converter/RealtimeSegmentConverter.java | 17 ++++++++++------- .../converter/RealtimeSegmentConverterTest.java | 16 ++++++++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/pinot-core/src/main/java/org/apache/pinot/core/realtime/converter/RealtimeSegmentConverter.java b/pinot-core/src/main/java/org/apache/pinot/core/realtime/converter/RealtimeSegmentConverter.java index 94fede8..d94f096 100644 --- a/pinot-core/src/main/java/org/apache/pinot/core/realtime/converter/RealtimeSegmentConverter.java +++ b/pinot-core/src/main/java/org/apache/pinot/core/realtime/converter/RealtimeSegmentConverter.java @@ -156,16 +156,19 @@ public class RealtimeSegmentConverter { */ @VisibleForTesting public Schema getUpdatedSchema(Schema original) { - - TimeFieldSpec tfs = original.getTimeFieldSpec(); - // Use outgoing granularity for creating segment - TimeGranularitySpec outgoing = tfs.getOutgoingGranularitySpec(); - TimeFieldSpec newTimeSpec = new TimeFieldSpec(outgoing); Schema newSchema = new Schema(); - newSchema.addField(newTimeSpec); + TimeFieldSpec tfs = original.getTimeFieldSpec(); + if (tfs != null) { + // Use outgoing granularity for creating segment + TimeGranularitySpec outgoing = tfs.getOutgoingGranularitySpec(); + if (outgoing != null) { + TimeFieldSpec newTimeSpec = new TimeFieldSpec(outgoing); + newSchema.addField(newTimeSpec); + } + } for (String col : original.getPhysicalColumnNames()) { - if (!col.equals(tfs.getName())) { + if ((tfs == null) || (!col.equals(tfs.getName()))) { newSchema.addField(original.getFieldSpecFor(col)); } } diff --git a/pinot-core/src/test/java/org/apache/pinot/realtime/converter/RealtimeSegmentConverterTest.java b/pinot-core/src/test/java/org/apache/pinot/realtime/converter/RealtimeSegmentConverterTest.java index 7236dfe..1e494cb 100644 --- a/pinot-core/src/test/java/org/apache/pinot/realtime/converter/RealtimeSegmentConverterTest.java +++ b/pinot-core/src/test/java/org/apache/pinot/realtime/converter/RealtimeSegmentConverterTest.java @@ -21,6 +21,7 @@ package org.apache.pinot.realtime.converter; import java.util.concurrent.TimeUnit; import org.apache.pinot.common.data.DimensionFieldSpec; import org.apache.pinot.common.data.FieldSpec; +import org.apache.pinot.common.data.MetricFieldSpec; import org.apache.pinot.common.data.Schema; import org.apache.pinot.common.data.TimeFieldSpec; import org.apache.pinot.core.realtime.converter.RealtimeSegmentConverter; @@ -51,4 +52,19 @@ public class RealtimeSegmentConverterTest { Assert.assertEquals(newSchema.getColumnNames().size(), 2); Assert.assertEquals(newSchema.getTimeFieldSpec().getIncomingGranularitySpec().getTimeType(), TimeUnit.DAYS); } + + @Test + public void testNoTimeColumnsInSchema() { + Schema schema = new Schema(); + schema.addField(new DimensionFieldSpec("col1", FieldSpec.DataType.STRING, true)); + schema.addField(new DimensionFieldSpec("col2", FieldSpec.DataType.STRING, true)); + schema.addField(new DimensionFieldSpec("col3", FieldSpec.DataType.STRING, true)); + schema.addField(new MetricFieldSpec("met1", FieldSpec.DataType.DOUBLE, 0)); + schema.addField(new MetricFieldSpec("met2", FieldSpec.DataType.LONG, 0)); + Assert.assertEquals(schema.getColumnNames().size(), 5); + RealtimeSegmentConverter converter = + new RealtimeSegmentConverter(null, "", schema, "testTable", "col1", "segment1", "col1"); + Schema newSchema = converter.getUpdatedSchema(schema); + Assert.assertEquals(newSchema.getColumnNames().size(), 5); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org