This is an automated email from the ASF dual-hosted git repository.
kfaraz 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 26b568d8b83 Return null segment ID for Segment objects that are not
backed by a table (#17960)
26b568d8b83 is described below
commit 26b568d8b83d75821944c23e23037f8ac95096b4
Author: Cece Mei <[email protected]>
AuthorDate: Fri May 2 21:29:10 2025 -0700
Return null segment ID for Segment objects that are not backed by a table
(#17960)
Changes
---------
- Update `Segment.getId()` with `@Nullable` annotation.
- Return null id for `RowBasedSegment` (used by external/lookup/inline
segment)
- Return null id for `FrameSegment`, `LookupSegment`
- Update tests
This patch is a follow-up to #17774
---
.../frame/FrameChannelMergerBenchmark.java | 6 +-
.../druid/benchmark/query/SqlBaseBenchmark.java | 6 +-
.../druid/msq/input/ParseExceptionUtils.java | 11 +-
.../druid/msq/input/external/ExternalSegment.java | 3 -
.../groupby/GroupByPreShuffleFrameProcessor.java | 3 +-
.../results/ExportResultsFrameProcessor.java | 3 +-
.../msq/querykit/scan/ScanQueryFrameProcessor.java | 3 +-
.../WindowOperatorQueryFrameProcessorTest.java | 2 -
.../common/SortMergeJoinFrameProcessorTest.java | 2 -
.../apache/druid/frame/segment/FrameSegment.java | 9 +-
.../apache/druid/query/lookup/LookupSegment.java | 10 +-
.../apache/druid/query/scan/ScanQueryEngine.java | 10 +-
.../org/apache/druid/segment/ArrayListSegment.java | 5 +-
.../apache/druid/segment/NoopQueryableIndex.java | 98 ++++++++++++++++++
.../druid/segment/ReferenceCountingSegment.java | 5 +-
.../org/apache/druid/segment/RowBasedSegment.java | 7 +-
.../java/org/apache/druid/segment/Segment.java | 4 +
.../loading/TombstoneSegmentizerFactory.java | 83 ++-------------
.../frame/key/FrameComparisonWidgetImplTest.java | 3 -
.../apache/druid/frame/testutil/FrameTestUtil.java | 18 +---
.../apache/druid/frame/write/FrameWriterTest.java | 4 +-
.../groupby/ComplexDimensionGroupByQueryTest.java | 2 -
.../druid/query/lookup/LookupSegmentTest.java | 9 +-
.../SegmentToRowsAndColumnsOperatorTest.java | 1 -
.../semantic/RowsAndColumnsDecoratorTest.java | 2 -
.../query/scan/ScanQueryResultOrderingTest.java | 12 +--
.../timeboundary/TimeBoundaryQueryRunnerTest.java | 1 -
.../org/apache/druid/segment/IndexBuilder.java | 6 +-
.../org/apache/druid/segment/TestSegmentUtils.java | 111 ++++++++-------------
.../segment/FrameBasedInlineSegmentWrangler.java | 4 +-
.../druid/segment/InlineSegmentWrangler.java | 5 +-
.../druid/segment/realtime/sink/SinkTest.java | 1 -
.../druid/server/ClientQuerySegmentWalkerTest.java | 2 -
.../server/TestClusterQuerySegmentWalker.java | 21 +++-
34 files changed, 219 insertions(+), 253 deletions(-)
diff --git
a/benchmarks/src/test/java/org/apache/druid/benchmark/frame/FrameChannelMergerBenchmark.java
b/benchmarks/src/test/java/org/apache/druid/benchmark/frame/FrameChannelMergerBenchmark.java
index 161de8a217d..8739f03ccea 100644
---
a/benchmarks/src/test/java/org/apache/druid/benchmark/frame/FrameChannelMergerBenchmark.java
+++
b/benchmarks/src/test/java/org/apache/druid/benchmark/frame/FrameChannelMergerBenchmark.java
@@ -50,7 +50,6 @@ import org.apache.druid.segment.column.ColumnHolder;
import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.segment.nested.StructuredData;
-import org.apache.druid.timeline.SegmentId;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
@@ -210,7 +209,7 @@ public class FrameChannelMergerBenchmark
* Create {@link #numChannels} channels in {@link #channels}, with {@link
#numRows} total rows split across the
* channels according to {@link ChannelDistribution}. Each channel is
individually sorted, as required
* by {@link FrameChannelMerger}.
- *
+ * <p>
* Rows are fixed-length at {@link #rowLength} with fixed-length keys at
{@link #keyLength}. Keys are generated
* by {@link KeyGenerator}.
*/
@@ -268,7 +267,6 @@ public class FrameChannelMergerBenchmark
final List<NonnullPair<Comparable, String>> rows =
channelRows.get(channelNumber);
final RowBasedSegment<NonnullPair<Comparable, String>> segment =
new RowBasedSegment<>(
- SegmentId.dummy("__dummy"),
Sequences.simple(rows),
columnName -> {
if (KEY.equals(columnName)) {
@@ -298,7 +296,7 @@ public class FrameChannelMergerBenchmark
* Create {@link #numChannels} channels in {@link #channels}, with {@link
#numRows} total rows split across the
* channels according to {@link ChannelDistribution}. Each channel is
individually sorted, as required
* by {@link FrameChannelMerger}.
- *
+ * <p>
* Rows are fixed-length at {@link #rowLength} with fixed-length keys at
{@link #keyLength}. Keys are generated
* by {@link KeyGenerator}.
*/
diff --git
a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBaseBenchmark.java
b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBaseBenchmark.java
index 7ab942ff6f7..241a0086c1f 100644
---
a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBaseBenchmark.java
+++
b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBaseBenchmark.java
@@ -475,8 +475,7 @@ public class SqlBaseBenchmark
descriptor,
new FrameSegment(
FrameTestUtil.cursorFactoryToFrame(cursorFactory,
FrameType.ROW_BASED),
- FrameReader.create(cursorFactory.getRowSignature()),
- descriptor.getId()
+ FrameReader.create(cursorFactory.getRowSignature())
)
{
@Nullable
@@ -497,8 +496,7 @@ public class SqlBaseBenchmark
descriptor,
new FrameSegment(
FrameTestUtil.cursorFactoryToFrame(cursorFactory,
FrameType.COLUMNAR),
- FrameReader.create(cursorFactory.getRowSignature()),
- descriptor.getId()
+ FrameReader.create(cursorFactory.getRowSignature())
)
{
@Nullable
diff --git
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/ParseExceptionUtils.java
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/ParseExceptionUtils.java
index 0911059b364..a8ea3d44b46 100644
---
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/ParseExceptionUtils.java
+++
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/ParseExceptionUtils.java
@@ -21,9 +21,7 @@ package org.apache.druid.msq.input;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.msq.input.external.ExternalSegment;
-import org.apache.druid.msq.input.inline.InlineInputSliceReader;
import org.apache.druid.query.lookup.LookupSegment;
-import org.apache.druid.segment.QueryableIndexSegment;
import org.apache.druid.segment.Segment;
import javax.annotation.Nullable;
@@ -47,14 +45,11 @@ public class ParseExceptionUtils
"external input source: %s",
((ExternalSegment) segment).externalInputSource().toString()
);
- } else if (segment instanceof LookupSegment) {
- return StringUtils.format("lookup input source: %s",
segment.getId().getDataSource());
- } else if (segment instanceof QueryableIndexSegment) {
+ } else if (segment.getId() != null) {
return StringUtils.format("table input source: %s",
segment.getId().getDataSource());
- } else if
(InlineInputSliceReader.SEGMENT_ID.equals(segment.getId().getDataSource())) {
- return "inline input source";
+ } else if (segment instanceof LookupSegment) {
+ return StringUtils.format("lookup input source: %s", segment.asString());
}
-
return null;
}
}
diff --git
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalSegment.java
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalSegment.java
index 3aae435b8d9..a38ea92f039 100644
---
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalSegment.java
+++
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalSegment.java
@@ -31,7 +31,6 @@ import org.apache.druid.msq.counters.WarningCounters;
import org.apache.druid.msq.indexing.error.CannotParseExternalDataFault;
import org.apache.druid.segment.RowBasedSegment;
import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
import java.io.IOException;
import java.util.NoSuchElementException;
@@ -45,7 +44,6 @@ public class ExternalSegment extends RowBasedSegment<InputRow>
private final InputSource inputSource;
private final RowSignature signature;
- public static final String SEGMENT_ID = "__external";
/**
* @param inputSource {@link InputSource} that the segment is a
representation of
@@ -67,7 +65,6 @@ public class ExternalSegment extends RowBasedSegment<InputRow>
)
{
super(
- SegmentId.dummy(SEGMENT_ID),
new BaseSequence<>(
new BaseSequence.IteratorMaker<InputRow,
CloseableIterator<InputRow>>()
{
diff --git
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java
index ad456a45f5b..a02e6e6988d 100644
---
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java
+++
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java
@@ -58,7 +58,6 @@ import org.apache.druid.segment.CompleteSegment;
import org.apache.druid.segment.SegmentReference;
import org.apache.druid.segment.TimeBoundaryInspector;
import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
import java.io.IOException;
import java.nio.ByteBuffer;
@@ -187,7 +186,7 @@ public class GroupByPreShuffleFrameProcessor extends
BaseLeafFrameProcessor
if (inputChannel.canRead()) {
final Frame frame = inputChannel.read();
- final FrameSegment frameSegment = new FrameSegment(frame,
inputFrameReader, SegmentId.dummy("x"));
+ final FrameSegment frameSegment = new FrameSegment(frame,
inputFrameReader);
final SegmentReference mappedSegment = mapSegment(frameSegment);
final Sequence<ResultRow> rowSequence =
diff --git
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/results/ExportResultsFrameProcessor.java
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/results/ExportResultsFrameProcessor.java
index 2c4a92efef6..e57134bc3d3 100644
---
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/results/ExportResultsFrameProcessor.java
+++
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/results/ExportResultsFrameProcessor.java
@@ -46,7 +46,6 @@ import org.apache.druid.sql.calcite.planner.ColumnMappings;
import org.apache.druid.sql.calcite.run.SqlResults;
import org.apache.druid.sql.http.ResultFormat;
import org.apache.druid.storage.StorageConnector;
-import org.apache.druid.timeline.SegmentId;
import java.io.IOException;
import java.io.OutputStream;
@@ -151,7 +150,7 @@ public class ExportResultsFrameProcessor implements
FrameProcessor<Object>
private void exportFrame(final Frame frame)
{
- final Segment segment = new FrameSegment(frame, frameReader,
SegmentId.dummy("test"));
+ final Segment segment = new FrameSegment(frame, frameReader);
try (final CursorHolder cursorHolder =
segment.asCursorFactory().makeCursorHolder(CursorBuildSpec.FULL_SCAN)) {
final Cursor cursor = cursorHolder.asCursor();
if (cursor == null) {
diff --git
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java
index 3f42e6c8e5f..ef453badab8 100644
---
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java
+++
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java
@@ -78,7 +78,6 @@ import org.apache.druid.segment.SimpleSettableOffset;
import org.apache.druid.segment.VirtualColumn;
import org.apache.druid.segment.VirtualColumns;
import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
import org.apache.druid.utils.CloseableUtils;
import javax.annotation.Nullable;
@@ -313,7 +312,7 @@ public class ScanQueryFrameProcessor extends
BaseLeafFrameProcessor
if (cursor == null || cursor.isDone()) {
if (inputChannel.canRead()) {
final Frame frame = inputChannel.read();
- final FrameSegment frameSegment = new FrameSegment(frame,
inputFrameReader, SegmentId.dummy("scan"));
+ final FrameSegment frameSegment = new FrameSegment(frame,
inputFrameReader);
final Segment mappedSegment = mapSegment(frameSegment);
final CursorFactory cursorFactory = mappedSegment.asCursorFactory();
diff --git
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/WindowOperatorQueryFrameProcessorTest.java
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/WindowOperatorQueryFrameProcessorTest.java
index e9484ec76e6..cabb8f25c1a 100644
---
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/WindowOperatorQueryFrameProcessorTest.java
+++
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/WindowOperatorQueryFrameProcessorTest.java
@@ -51,7 +51,6 @@ import org.apache.druid.segment.CursorFactory;
import org.apache.druid.segment.RowBasedSegment;
import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.junit.Assert;
@@ -357,7 +356,6 @@ public class WindowOperatorQueryFrameProcessorTest extends
FrameProcessorTestBas
) throws IOException
{
RowBasedSegment<Map<String, Object>> segment = new RowBasedSegment<>(
- SegmentId.dummy("test"),
Sequences.simple(rows),
columnName -> m -> m.get(columnName),
signature
diff --git
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessorTest.java
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessorTest.java
index 7e941e047ed..dcbf52e0d73 100644
---
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessorTest.java
+++
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessorTest.java
@@ -50,7 +50,6 @@ import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.segment.join.JoinTestHelper;
import org.apache.druid.segment.join.JoinType;
-import org.apache.druid.timeline.SegmentId;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
@@ -1458,7 +1457,6 @@ public class SortMergeJoinFrameProcessorTest extends
FrameProcessorTestBase
try (final RowBasedSegment<Map<String, Object>> segment =
JoinTestHelper.withRowsFromResource(
resource,
rows -> new RowBasedSegment<>(
- SegmentId.dummy(resource),
limit < 0 ? Sequences.simple(rows) :
Sequences.simple(rows).limit(limit),
columnName -> m -> m.get(columnName),
signature
diff --git
a/processing/src/main/java/org/apache/druid/frame/segment/FrameSegment.java
b/processing/src/main/java/org/apache/druid/frame/segment/FrameSegment.java
index 3df54bc184d..4e0c560c0e0 100644
--- a/processing/src/main/java/org/apache/druid/frame/segment/FrameSegment.java
+++ b/processing/src/main/java/org/apache/druid/frame/segment/FrameSegment.java
@@ -21,6 +21,7 @@ package org.apache.druid.frame.segment;
import org.apache.druid.frame.Frame;
import org.apache.druid.frame.read.FrameReader;
+import org.apache.druid.java.util.common.Intervals;
import
org.apache.druid.query.rowsandcols.concrete.ColumnBasedFrameRowsAndColumns;
import org.apache.druid.segment.CloseableShapeshifter;
import org.apache.druid.segment.CursorFactory;
@@ -41,25 +42,23 @@ public class FrameSegment implements Segment
{
private final Frame frame;
private final FrameReader frameReader;
- private final SegmentId segmentId;
- public FrameSegment(Frame frame, FrameReader frameReader, SegmentId
segmentId)
+ public FrameSegment(Frame frame, FrameReader frameReader)
{
this.frame = frame;
this.frameReader = frameReader;
- this.segmentId = segmentId;
}
@Override
public SegmentId getId()
{
- return segmentId;
+ return null;
}
@Override
public Interval getDataInterval()
{
- return segmentId.getInterval();
+ return Intervals.ETERNITY;
}
@Nullable
diff --git
a/processing/src/main/java/org/apache/druid/query/lookup/LookupSegment.java
b/processing/src/main/java/org/apache/druid/query/lookup/LookupSegment.java
index 58c64c47239..af63dc6986d 100644
--- a/processing/src/main/java/org/apache/druid/query/lookup/LookupSegment.java
+++ b/processing/src/main/java/org/apache/druid/query/lookup/LookupSegment.java
@@ -26,7 +26,6 @@ import org.apache.druid.segment.RowBasedSegment;
import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.segment.join.lookup.LookupColumnSelectorFactory;
-import org.apache.druid.timeline.SegmentId;
import java.util.Map;
import java.util.function.Function;
@@ -43,11 +42,11 @@ public class LookupSegment extends
RowBasedSegment<Map.Entry<String, String>>
.add(LookupColumnSelectorFactory.KEY_COLUMN,
ColumnType.STRING)
.add(LookupColumnSelectorFactory.VALUE_COLUMN,
ColumnType.STRING)
.build();
+ private final String lookupName;
public LookupSegment(final String lookupName, final LookupExtractorFactory
lookupExtractorFactory)
{
super(
- SegmentId.dummy(lookupName),
Sequences.simple(() -> {
final LookupExtractor extractor = lookupExtractorFactory.get();
@@ -80,5 +79,12 @@ public class LookupSegment extends
RowBasedSegment<Map.Entry<String, String>>
},
ROW_SIGNATURE
);
+ this.lookupName = lookupName;
+ }
+
+ @Override
+ public String asString()
+ {
+ return getClass().getSimpleName() + ":" + lookupName;
}
}
diff --git
a/processing/src/main/java/org/apache/druid/query/scan/ScanQueryEngine.java
b/processing/src/main/java/org/apache/druid/query/scan/ScanQueryEngine.java
index 7d314e972c6..301014282ab 100644
--- a/processing/src/main/java/org/apache/druid/query/scan/ScanQueryEngine.java
+++ b/processing/src/main/java/org/apache/druid/query/scan/ScanQueryEngine.java
@@ -48,7 +48,6 @@ import org.apache.druid.segment.column.ColumnHolder;
import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.segment.filter.Filters;
-import org.apache.druid.timeline.SegmentId;
import org.joda.time.Interval;
import javax.annotation.Nullable;
@@ -113,8 +112,6 @@ public class ScanQueryEngine
final List<Interval> intervals =
query.getQuerySegmentSpec().getIntervals();
Preconditions.checkArgument(intervals.size() == 1, "Can only handle a
single interval, got[%s]", intervals);
- final SegmentId segmentId = segment.getId();
-
// If the row count is not set, set it to 0, else do nothing.
responseContext.addRowScanCount(0);
final long limit = calculateRemainingScanRowsLimit(query, responseContext);
@@ -186,7 +183,12 @@ public class ScanQueryEngine
throw new UOE("resultFormat[%s] is not supported",
resultFormat.toString());
}
responseContext.addRowScanCount(offset - lastOffset);
- return new ScanResultValue(segmentId.toString(), allColumns,
events, rowSignatureBuilder.build());
+ return new ScanResultValue(
+ segment.getId() == null ? segment.asString() :
segment.getId().toString(),
+ allColumns,
+ events,
+ rowSignatureBuilder.build()
+ );
}
@Override
diff --git
a/processing/src/main/java/org/apache/druid/segment/ArrayListSegment.java
b/processing/src/main/java/org/apache/druid/segment/ArrayListSegment.java
index 19491403522..eefccb0d0ff 100644
--- a/processing/src/main/java/org/apache/druid/segment/ArrayListSegment.java
+++ b/processing/src/main/java/org/apache/druid/segment/ArrayListSegment.java
@@ -23,7 +23,6 @@ import org.apache.druid.java.util.common.guava.Sequences;
import org.apache.druid.query.rowsandcols.ArrayListRowsAndColumns;
import org.apache.druid.query.rowsandcols.RowsAndColumns;
import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
import javax.annotation.Nullable;
import java.util.ArrayList;
@@ -49,20 +48,18 @@ public class ArrayListSegment<RowType> extends
RowBasedSegment<RowType>
* cursor factory will allow creation of selectors on any field, using the
{@link RowAdapter#columnFunction} for that
* field, even if it doesn't appear in "rowSignature".
*
- * @param segmentId segment identifier; will be returned by {@link
#getId()}
* @param rows objects that comprise this segment. Must be
re-iterable if support for {@link Cursor#reset()}
* is required. Otherwise, does not need to be
re-iterable.
* @param rowAdapter adapter used for reading these objects
* @param rowSignature signature of the columns in these objects
*/
public ArrayListSegment(
- final SegmentId segmentId,
final ArrayList<RowType> rows,
final RowAdapter<RowType> rowAdapter,
final RowSignature rowSignature
)
{
- super(segmentId, Sequences.simple(rows), rowAdapter, rowSignature);
+ super(Sequences.simple(rows), rowAdapter, rowSignature);
this.rows = rows;
this.adapter = rowAdapter;
this.rowSignature = rowSignature;
diff --git
a/processing/src/main/java/org/apache/druid/segment/NoopQueryableIndex.java
b/processing/src/main/java/org/apache/druid/segment/NoopQueryableIndex.java
new file mode 100644
index 00000000000..116f7f9e1ce
--- /dev/null
+++ b/processing/src/main/java/org/apache/druid/segment/NoopQueryableIndex.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.segment;
+
+import org.apache.druid.collections.bitmap.BitmapFactory;
+import org.apache.druid.query.OrderBy;
+import org.apache.druid.segment.column.ColumnHolder;
+import org.apache.druid.segment.data.Indexed;
+import org.joda.time.Interval;
+
+import javax.annotation.Nullable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A no-op implementation of QueryableIndex. Throws
UnsupportedOperationException for all methods, except {@link #close()}.
+ */
+public class NoopQueryableIndex implements QueryableIndex
+{
+ @Override
+ public Interval getDataInterval()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public int getNumRows()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Indexed<String> getAvailableDimensions()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public BitmapFactory getBitmapFactoryForDimensions()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Nullable
+ @Override
+ public Metadata getMetadata()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Map<String, DimensionHandler> getDimensionHandlers()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<OrderBy> getOrdering()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void close()
+ {
+
+ }
+
+ @Override
+ public List<String> getColumnNames()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Nullable
+ @Override
+ public ColumnHolder getColumnHolder(String columnName)
+ {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git
a/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
b/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
index 8957ec723d7..1836efd8ae0 100644
---
a/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
+++
b/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
@@ -48,10 +48,11 @@ public class ReferenceCountingSegment extends
ReferenceCountingCloseableObject<S
public static ReferenceCountingSegment wrapRootGenerationSegment(Segment
baseSegment)
{
+ int partitionNum = baseSegment.getId() == null ? 0 :
baseSegment.getId().getPartitionNum();
return new ReferenceCountingSegment(
Preconditions.checkNotNull(baseSegment, "baseSegment"),
- baseSegment.getId().getPartitionNum(),
- (baseSegment.getId().getPartitionNum() + 1),
+ partitionNum,
+ partitionNum + 1,
(short) 0,
(short) 1
);
diff --git
a/processing/src/main/java/org/apache/druid/segment/RowBasedSegment.java
b/processing/src/main/java/org/apache/druid/segment/RowBasedSegment.java
index 4ba2c98987d..57d9676f571 100644
--- a/processing/src/main/java/org/apache/druid/segment/RowBasedSegment.java
+++ b/processing/src/main/java/org/apache/druid/segment/RowBasedSegment.java
@@ -34,7 +34,6 @@ import javax.annotation.Nullable;
*/
public class RowBasedSegment<RowType> implements Segment
{
- private final SegmentId segmentId;
private final Sequence<RowType> rowSequence;
private final RowAdapter<RowType> rowAdapter;
private final RowSignature rowSignature;
@@ -51,30 +50,26 @@ public class RowBasedSegment<RowType> implements Segment
* cursor factory will allow creation of selectors on any field, using the
{@link RowAdapter#columnFunction} for that
* field, even if it doesn't appear in "rowSignature".
*
- * @param segmentId segment identifier; will be returned by {@link
#getId()}
* @param rowSequence objects that comprise this segment. Must be
re-iterable if support for {@link Cursor#reset()}
* is required. Otherwise, does not need to be
re-iterable.
* @param rowAdapter adapter used for reading these objects
* @param rowSignature signature of the columns in these objects
*/
public RowBasedSegment(
- final SegmentId segmentId,
final Sequence<RowType> rowSequence,
final RowAdapter<RowType> rowAdapter,
final RowSignature rowSignature
)
{
- this.segmentId = Preconditions.checkNotNull(segmentId, "segmentId");
this.rowSignature = Preconditions.checkNotNull(rowSignature,
"rowSignature");
this.rowSequence = Preconditions.checkNotNull(rowSequence, "rowSequence");
this.rowAdapter = Preconditions.checkNotNull(rowAdapter, "rowAdapter");
}
@Override
- @Nonnull
public SegmentId getId()
{
- return segmentId;
+ return null;
}
@Override
diff --git a/processing/src/main/java/org/apache/druid/segment/Segment.java
b/processing/src/main/java/org/apache/druid/segment/Segment.java
index 1da4b47f89c..0c779d09228 100644
--- a/processing/src/main/java/org/apache/druid/segment/Segment.java
+++ b/processing/src/main/java/org/apache/druid/segment/Segment.java
@@ -38,6 +38,10 @@ import java.io.Closeable;
@PublicApi
public interface Segment extends Closeable
{
+ /**
+ * Returns the {@link SegmentId} of this segment, if it is backed by a real
table, otherwise returns null.
+ */
+ @Nullable
SegmentId getId();
Interval getDataInterval();
diff --git
a/processing/src/main/java/org/apache/druid/segment/loading/TombstoneSegmentizerFactory.java
b/processing/src/main/java/org/apache/druid/segment/loading/TombstoneSegmentizerFactory.java
index f07c039ea4e..fef7a69f238 100644
---
a/processing/src/main/java/org/apache/druid/segment/loading/TombstoneSegmentizerFactory.java
+++
b/processing/src/main/java/org/apache/druid/segment/loading/TombstoneSegmentizerFactory.java
@@ -21,29 +21,22 @@ package org.apache.druid.segment.loading;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
-import org.apache.druid.collections.bitmap.BitmapFactory;
-import org.apache.druid.query.OrderBy;
import org.apache.druid.segment.Cursor;
import org.apache.druid.segment.CursorBuildSpec;
import org.apache.druid.segment.CursorFactory;
import org.apache.druid.segment.CursorHolder;
-import org.apache.druid.segment.DimensionHandler;
-import org.apache.druid.segment.Metadata;
+import org.apache.druid.segment.NoopQueryableIndex;
import org.apache.druid.segment.QueryableIndex;
import org.apache.druid.segment.Segment;
import org.apache.druid.segment.SegmentLazyLoadFailCallback;
import org.apache.druid.segment.column.ColumnCapabilities;
-import org.apache.druid.segment.column.ColumnHolder;
import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.segment.data.Indexed;
import org.apache.druid.timeline.DataSegment;
import org.apache.druid.timeline.SegmentId;
import org.joda.time.Interval;
import javax.annotation.Nullable;
import java.io.File;
-import java.util.List;
-import java.util.Map;
public class TombstoneSegmentizerFactory implements SegmentizerFactory
{
@@ -66,72 +59,14 @@ public class TombstoneSegmentizerFactory implements
SegmentizerFactory
// Create a no-op queryable index that indicates that it was created from
a tombstone...then the
// server manager will use the information to short-circuit and create a
no-op query runner for
// it since it has no data:
- final QueryableIndex queryableIndex =
- new QueryableIndex()
- {
- @Override
- public Interval getDataInterval()
- {
- return tombstone.getInterval();
- }
-
- @Override
- public int getNumRows()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Indexed<String> getAvailableDimensions()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BitmapFactory getBitmapFactoryForDimensions()
- {
- throw new UnsupportedOperationException();
- }
-
- @Nullable
- @Override
- public Metadata getMetadata()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Map<String, DimensionHandler> getDimensionHandlers()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public List<OrderBy> getOrdering()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void close()
- {
-
- }
-
- @Override
- public List<String> getColumnNames()
- {
- throw new UnsupportedOperationException();
- }
-
- @Nullable
- @Override
- public ColumnHolder getColumnHolder(String columnName)
- {
- throw new UnsupportedOperationException();
- }
-
- };
+ final QueryableIndex queryableIndex = new NoopQueryableIndex()
+ {
+ @Override
+ public Interval getDataInterval()
+ {
+ return tombstone.getInterval();
+ }
+ };
final Segment segmentObject = new Segment()
{
diff --git
a/processing/src/test/java/org/apache/druid/frame/key/FrameComparisonWidgetImplTest.java
b/processing/src/test/java/org/apache/druid/frame/key/FrameComparisonWidgetImplTest.java
index 9e0547cae43..a3aa832fa2b 100644
---
a/processing/src/test/java/org/apache/druid/frame/key/FrameComparisonWidgetImplTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/key/FrameComparisonWidgetImplTest.java
@@ -30,7 +30,6 @@ import org.apache.druid.segment.CursorFactory;
import org.apache.druid.segment.RowBasedSegment;
import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.testing.InitializedNullHandlingTest;
-import org.apache.druid.timeline.SegmentId;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.Assert;
@@ -51,7 +50,6 @@ public class FrameComparisonWidgetImplTest extends
InitializedNullHandlingTest
public void setUp()
{
final CursorFactory rowBasedAdapterWithoutComplexColumn = new
RowBasedSegment<>(
- SegmentId.dummy("test"),
Sequences.simple(ByteRowKeyComparatorTest.KEY_OBJECTS_WITHOUT_COMPLEX_COLUMN),
columnName -> {
final int idx =
ByteRowKeyComparatorTest.NO_COMPLEX_SIGNATURE.getColumnNames().indexOf(columnName);
@@ -72,7 +70,6 @@ public class FrameComparisonWidgetImplTest extends
InitializedNullHandlingTest
);
final CursorFactory rowBasedAdapterWithComplexColumn = new
RowBasedSegment<>(
- SegmentId.dummy("test"),
Sequences.simple(ByteRowKeyComparatorTest.ALL_KEY_OBJECTS),
columnName -> {
final int idx =
ByteRowKeyComparatorTest.SIGNATURE.getColumnNames().indexOf(columnName);
diff --git
a/processing/src/test/java/org/apache/druid/frame/testutil/FrameTestUtil.java
b/processing/src/test/java/org/apache/druid/frame/testutil/FrameTestUtil.java
index 2bb8789740c..50b4e80dba0 100644
---
a/processing/src/test/java/org/apache/druid/frame/testutil/FrameTestUtil.java
+++
b/processing/src/test/java/org/apache/druid/frame/testutil/FrameTestUtil.java
@@ -31,7 +31,6 @@ import org.apache.druid.frame.file.FrameFileWriter;
import org.apache.druid.frame.read.FrameReader;
import org.apache.druid.frame.segment.FrameSegment;
import org.apache.druid.frame.util.SettableLongVirtualColumn;
-import org.apache.druid.java.util.common.Intervals;
import org.apache.druid.java.util.common.guava.Sequence;
import org.apache.druid.java.util.common.guava.Sequences;
import org.apache.druid.query.OrderBy;
@@ -51,7 +50,6 @@ import org.apache.druid.segment.column.ValueType;
import org.apache.druid.segment.data.IndexedInts;
import org.apache.druid.segment.vector.VectorColumnSelectorFactory;
import org.apache.druid.segment.vector.VectorCursor;
-import org.apache.druid.timeline.SegmentId;
import org.junit.Assert;
import javax.annotation.Nullable;
@@ -198,21 +196,7 @@ public class FrameTestUtil
{
return new FrameSegment(
cursorFactoryToFrame(adapter, frameType),
- FrameReader.create(adapter.getRowSignature()),
- SegmentId.of("TestFrame", Intervals.ETERNITY, "0", 0)
- );
- }
-
- public static FrameSegment cursorFactoryToFrameSegment(
- final CursorFactory cursorFactory,
- final FrameType frameType,
- final SegmentId segmentId
- )
- {
- return new FrameSegment(
- cursorFactoryToFrame(cursorFactory, frameType),
- FrameReader.create(cursorFactory.getRowSignature()),
- segmentId
+ FrameReader.create(adapter.getRowSignature())
);
}
diff --git
a/processing/src/test/java/org/apache/druid/frame/write/FrameWriterTest.java
b/processing/src/test/java/org/apache/druid/frame/write/FrameWriterTest.java
index c5790d3a504..f2c9db01257 100644
--- a/processing/src/test/java/org/apache/druid/frame/write/FrameWriterTest.java
+++ b/processing/src/test/java/org/apache/druid/frame/write/FrameWriterTest.java
@@ -57,7 +57,6 @@ import org.apache.druid.segment.column.ColumnCapabilitiesImpl;
import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.segment.serde.ComplexMetrics;
import org.apache.druid.testing.InitializedNullHandlingTest;
-import org.apache.druid.timeline.SegmentId;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.junit.Assert;
@@ -499,7 +498,6 @@ public class FrameWriterTest extends
InitializedNullHandlingTest
if (inputFrameType == null) {
// inputFrameType null means input is not a frame
inputSegment = new RowBasedSegment<>(
- SegmentId.dummy("dummy"),
rows,
columnName -> {
final int columnNumber = signature.indexOf(columnName);
@@ -518,7 +516,7 @@ public class FrameWriterTest extends
InitializedNullHandlingTest
Collections.emptyList()
).lhs;
- inputSegment = new FrameSegment(inputFrame,
FrameReader.create(signature), SegmentId.dummy("xxx"));
+ inputSegment = new FrameSegment(inputFrame,
FrameReader.create(signature));
}
try (final CursorHolder cursorHolder =
inputSegment.asCursorFactory().makeCursorHolder(CursorBuildSpec.FULL_SCAN)) {
diff --git
a/processing/src/test/java/org/apache/druid/query/groupby/ComplexDimensionGroupByQueryTest.java
b/processing/src/test/java/org/apache/druid/query/groupby/ComplexDimensionGroupByQueryTest.java
index bc1ecbb0ddc..0a17fa45933 100644
---
a/processing/src/test/java/org/apache/druid/query/groupby/ComplexDimensionGroupByQueryTest.java
+++
b/processing/src/test/java/org/apache/druid/query/groupby/ComplexDimensionGroupByQueryTest.java
@@ -35,7 +35,6 @@ import org.apache.druid.segment.RowBasedSegment;
import org.apache.druid.segment.Segment;
import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
@@ -91,7 +90,6 @@ public class ComplexDimensionGroupByQueryTest
this.segments = Collections.singletonList(
new RowBasedSegment<>(
- SegmentId.dummy("dummy"),
rows,
columnName -> {
final int columnNumber = rowSignature.indexOf(columnName);
diff --git
a/processing/src/test/java/org/apache/druid/query/lookup/LookupSegmentTest.java
b/processing/src/test/java/org/apache/druid/query/lookup/LookupSegmentTest.java
index 8b93bc06011..4f8d4e79fc7 100644
---
a/processing/src/test/java/org/apache/druid/query/lookup/LookupSegmentTest.java
+++
b/processing/src/test/java/org/apache/druid/query/lookup/LookupSegmentTest.java
@@ -34,7 +34,6 @@ import org.apache.druid.segment.column.ColumnCapabilities;
import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.segment.column.ValueType;
-import org.apache.druid.timeline.SegmentId;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.junit.Assert;
@@ -106,7 +105,13 @@ public class LookupSegmentTest
@Test
public void test_getId()
{
- Assert.assertEquals(SegmentId.dummy(LOOKUP_NAME), LOOKUP_SEGMENT.getId());
+ Assert.assertNull(LOOKUP_SEGMENT.getId());
+ }
+
+ @Test
+ public void test_asString()
+ {
+ Assert.assertEquals("LookupSegment:mylookup", LOOKUP_SEGMENT.asString());
}
@Test
diff --git
a/processing/src/test/java/org/apache/druid/query/operator/SegmentToRowsAndColumnsOperatorTest.java
b/processing/src/test/java/org/apache/druid/query/operator/SegmentToRowsAndColumnsOperatorTest.java
index 36a93fadab4..e56444ced9a 100644
---
a/processing/src/test/java/org/apache/druid/query/operator/SegmentToRowsAndColumnsOperatorTest.java
+++
b/processing/src/test/java/org/apache/druid/query/operator/SegmentToRowsAndColumnsOperatorTest.java
@@ -53,7 +53,6 @@ public class SegmentToRowsAndColumnsOperatorTest
);
ArrayListSegment<Object[]> segment = new ArrayListSegment<>(
- SegmentId.dummy("test"),
rows,
columnName -> objects -> objects[Integer.parseInt(columnName)],
RowSignature.builder()
diff --git
a/processing/src/test/java/org/apache/druid/query/rowsandcols/semantic/RowsAndColumnsDecoratorTest.java
b/processing/src/test/java/org/apache/druid/query/rowsandcols/semantic/RowsAndColumnsDecoratorTest.java
index 41295f48017..65929faa61f 100644
---
a/processing/src/test/java/org/apache/druid/query/rowsandcols/semantic/RowsAndColumnsDecoratorTest.java
+++
b/processing/src/test/java/org/apache/druid/query/rowsandcols/semantic/RowsAndColumnsDecoratorTest.java
@@ -47,7 +47,6 @@ import org.apache.druid.segment.column.TypeStrategy;
import org.apache.druid.segment.filter.AndFilter;
import org.apache.druid.segment.filter.OrFilter;
import org.apache.druid.segment.filter.SelectorFilter;
-import org.apache.druid.timeline.SegmentId;
import org.joda.time.Interval;
import org.junit.Assert;
import org.junit.Test;
@@ -278,7 +277,6 @@ public class RowsAndColumnsDecoratorTest extends
SemanticTestBase
decor.addFilter(filter);
final ArrayListSegment<Object[]> seggy = new ArrayListSegment<>(
- SegmentId.dummy("dummy"),
new ArrayList<>(Arrays.asList(originalVals)),
columnName -> {
int index = siggy.indexOf(columnName);
diff --git
a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
index 9c507cdcc8d..7ff0d26773e 100644
---
a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
+++
b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
@@ -39,7 +39,7 @@ import org.apache.druid.query.context.ResponseContext;
import org.apache.druid.query.spec.MultipleIntervalSegmentSpec;
import org.apache.druid.query.spec.MultipleSpecificSegmentSpec;
import org.apache.druid.segment.RowAdapter;
-import org.apache.druid.segment.RowBasedSegment;
+import org.apache.druid.segment.TestSegmentUtils.InMemoryTestSegment;
import org.apache.druid.segment.column.ColumnHolder;
import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.segment.column.RowSignature;
@@ -63,7 +63,7 @@ import java.util.stream.IntStream;
/**
* Tests the order in which Scan query results come back.
- *
+ * <p>
* Ensures that we have run-to-run stability of result order, which is
important for offset-based pagination.
*/
@RunWith(Parameterized.class)
@@ -87,8 +87,8 @@ public class ScanQueryResultOrderingTest extends
InitializedNullHandlingTest
.add(ID_COLUMN, ColumnType.LONG)
.build();
- private static final List<RowBasedSegment<Object[]>> SEGMENTS =
ImmutableList.of(
- new RowBasedSegment<>(
+ private static final List<InMemoryTestSegment<Object[]>> SEGMENTS =
ImmutableList.of(
+ new InMemoryTestSegment<>(
SegmentId.of(DATASOURCE, Intervals.of("2000-01-01/P1D"), "1", 0),
Sequences.simple(
ImmutableList.of(
@@ -105,7 +105,7 @@ public class ScanQueryResultOrderingTest extends
InitializedNullHandlingTest
ROW_ADAPTER,
ROW_SIGNATURE
),
- new RowBasedSegment<>(
+ new InMemoryTestSegment<>(
SegmentId.of(DATASOURCE, Intervals.of("2000-01-01/P1D"), "1", 1),
Sequences.simple(
ImmutableList.of(
@@ -122,7 +122,7 @@ public class ScanQueryResultOrderingTest extends
InitializedNullHandlingTest
ROW_ADAPTER,
ROW_SIGNATURE
),
- new RowBasedSegment<>(
+ new InMemoryTestSegment<>(
SegmentId.of(DATASOURCE, Intervals.of("2000-01-02/P1D"), "1", 0),
Sequences.simple(
ImmutableList.of(
diff --git
a/processing/src/test/java/org/apache/druid/query/timeboundary/TimeBoundaryQueryRunnerTest.java
b/processing/src/test/java/org/apache/druid/query/timeboundary/TimeBoundaryQueryRunnerTest.java
index f4659260cb1..92128647ac4 100644
---
a/processing/src/test/java/org/apache/druid/query/timeboundary/TimeBoundaryQueryRunnerTest.java
+++
b/processing/src/test/java/org/apache/druid/query/timeboundary/TimeBoundaryQueryRunnerTest.java
@@ -274,7 +274,6 @@ public class TimeBoundaryQueryRunnerTest extends
InitializedNullHandlingTest
final QueryRunner<Result<TimeBoundaryResultValue>> theRunner =
new
TimeBoundaryQueryRunnerFactory(QueryRunnerTestHelper.NOOP_QUERYWATCHER).createRunner(
new RowBasedSegment<>(
- SegmentId.dummy("dummy"),
Sequences.simple(inlineDataSource.getRows()),
inlineDataSource.rowAdapter(),
inlineDataSource.getRowSignature()
diff --git
a/processing/src/test/java/org/apache/druid/segment/IndexBuilder.java
b/processing/src/test/java/org/apache/druid/segment/IndexBuilder.java
index f081ed46fa5..4d8da3c6389 100644
--- a/processing/src/test/java/org/apache/druid/segment/IndexBuilder.java
+++ b/processing/src/test/java/org/apache/druid/segment/IndexBuilder.java
@@ -45,7 +45,6 @@ import
org.apache.druid.segment.incremental.OnheapIncrementalIndex;
import org.apache.druid.segment.transform.TransformSpec;
import
org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory;
import org.apache.druid.segment.writeout.SegmentWriteOutMediumFactory;
-import org.apache.druid.timeline.SegmentId;
import org.joda.time.Interval;
import javax.annotation.Nonnull;
@@ -406,7 +405,6 @@ public class IndexBuilder
public RowBasedSegment<InputRow> buildRowBasedSegmentWithoutTypeSignature()
{
return new RowBasedSegment<>(
- SegmentId.dummy("IndexBuilder"),
Sequences.simple(rows),
RowAdapters.standardRow(),
RowSignature.empty()
@@ -420,7 +418,6 @@ public class IndexBuilder
final RowSignature signature = new
QueryableIndexCursorFactory(index).getRowSignature();
return new RowBasedSegment<>(
- SegmentId.dummy("IndexBuilder"),
Sequences.simple(rows),
RowAdapters.standardRow(),
signature
@@ -434,8 +431,7 @@ public class IndexBuilder
try (final QueryableIndex index = buildMMappedIndex()) {
return FrameTestUtil.cursorFactoryToFrameSegment(
new QueryableIndexCursorFactory(index),
- frameType,
- SegmentId.dummy("IndexBuilder")
+ frameType
);
}
}
diff --git
a/processing/src/test/java/org/apache/druid/segment/TestSegmentUtils.java
b/processing/src/test/java/org/apache/druid/segment/TestSegmentUtils.java
index 2d20be1f7f5..690eeab94a7 100644
--- a/processing/src/test/java/org/apache/druid/segment/TestSegmentUtils.java
+++ b/processing/src/test/java/org/apache/druid/segment/TestSegmentUtils.java
@@ -24,12 +24,11 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.google.common.collect.ImmutableMap;
import com.google.common.io.Files;
-import org.apache.druid.collections.bitmap.BitmapFactory;
import org.apache.druid.java.util.common.FileUtils;
import org.apache.druid.java.util.common.Intervals;
+import org.apache.druid.java.util.common.guava.Sequence;
import org.apache.druid.query.OrderBy;
-import org.apache.druid.segment.column.ColumnHolder;
-import org.apache.druid.segment.data.Indexed;
+import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.segment.loading.LoadSpec;
import org.apache.druid.segment.loading.SegmentLoadingException;
import org.apache.druid.segment.loading.SegmentizerFactory;
@@ -41,13 +40,11 @@ import org.joda.time.Interval;
import org.junit.Assert;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
/**
@@ -121,77 +118,22 @@ public class TestSegmentUtils
}
}
- public static class SegmentForTesting extends QueryableIndexSegment
implements Segment
+ private static final QueryableIndex INDEX = new NoopQueryableIndex()
+ {
+ @Override
+ public List<OrderBy> getOrdering()
+ {
+ return Cursors.ascendingTimeOrder();
+ }
+ };
+
+ public static class SegmentForTesting extends QueryableIndexSegment
{
private final String datasource;
private final String version;
private final Interval interval;
private final Object lock = new Object();
private volatile boolean closed = false;
- private static final QueryableIndex INDEX = new QueryableIndex()
- {
- @Override
- public Interval getDataInterval()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public int getNumRows()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Indexed<String> getAvailableDimensions()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BitmapFactory getBitmapFactoryForDimensions()
- {
- throw new UnsupportedOperationException();
- }
-
- @Nullable
- @Override
- public Metadata getMetadata()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Map<String, DimensionHandler> getDimensionHandlers()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public List<OrderBy> getOrdering()
- {
- return Cursors.ascendingTimeOrder();
- }
-
- @Override
- public void close()
- {
-
- }
-
- @Override
- public List<String> getColumnNames()
- {
- throw new UnsupportedOperationException();
- }
-
- @Nullable
- @Override
- public ColumnHolder getColumnHolder(String columnName)
- {
- throw new UnsupportedOperationException();
- }
- };
public SegmentForTesting(String datasource, Interval interval, String
version)
{
@@ -260,6 +202,35 @@ public class TestSegmentUtils
}
}
+ /**
+ * A test segment that is backed by a {@link RowBasedSegment}. This is used
to test the {@link QueryableIndexSegment}.
+ */
+ public static class InMemoryTestSegment<RowType> extends
QueryableIndexSegment
+ {
+ private final RowBasedSegment<RowType> segment;
+
+ public InMemoryTestSegment(
+ final SegmentId segmentId,
+ final Sequence<RowType> rowSequence,
+ final RowAdapter<RowType> rowAdapter,
+ final RowSignature rowSignature
+ )
+ {
+ super(INDEX, segmentId);
+ this.segment = new RowBasedSegment<>(
+ rowSequence,
+ rowAdapter,
+ rowSignature
+ );
+ }
+
+ @Override
+ public CursorFactory asCursorFactory()
+ {
+ return segment.asCursorFactory();
+ }
+ }
+
public static DataSegment makeTombstoneSegment(String dataSource, String
version, Interval interval)
{
return new DataSegment(
diff --git
a/server/src/main/java/org/apache/druid/segment/FrameBasedInlineSegmentWrangler.java
b/server/src/main/java/org/apache/druid/segment/FrameBasedInlineSegmentWrangler.java
index 407bbf750fa..d535d299616 100644
---
a/server/src/main/java/org/apache/druid/segment/FrameBasedInlineSegmentWrangler.java
+++
b/server/src/main/java/org/apache/druid/segment/FrameBasedInlineSegmentWrangler.java
@@ -23,7 +23,6 @@ import org.apache.druid.frame.read.FrameReader;
import org.apache.druid.frame.segment.FrameSegment;
import org.apache.druid.query.DataSource;
import org.apache.druid.query.FrameBasedInlineDataSource;
-import org.apache.druid.timeline.SegmentId;
import org.joda.time.Interval;
public class FrameBasedInlineSegmentWrangler implements SegmentWrangler
@@ -45,8 +44,7 @@ public class FrameBasedInlineSegmentWrangler implements
SegmentWrangler
.<Segment>map(
frameSignaturePair -> new FrameSegment(
frameSignaturePair.getFrame(),
- FrameReader.create(frameSignaturePair.getRowSignature()),
- SegmentId.dummy(SEGMENT_ID)
+ FrameReader.create(frameSignaturePair.getRowSignature())
)
)
.iterator();
diff --git
a/server/src/main/java/org/apache/druid/segment/InlineSegmentWrangler.java
b/server/src/main/java/org/apache/druid/segment/InlineSegmentWrangler.java
index 6128dcf49f2..459f817c0d9 100644
--- a/server/src/main/java/org/apache/druid/segment/InlineSegmentWrangler.java
+++ b/server/src/main/java/org/apache/druid/segment/InlineSegmentWrangler.java
@@ -22,7 +22,6 @@ package org.apache.druid.segment;
import org.apache.druid.java.util.common.guava.Sequences;
import org.apache.druid.query.DataSource;
import org.apache.druid.query.InlineDataSource;
-import org.apache.druid.timeline.SegmentId;
import org.joda.time.Interval;
import java.util.ArrayList;
@@ -30,7 +29,7 @@ import java.util.Collections;
/**
* A {@link SegmentWrangler} for {@link InlineDataSource}.
- *
+ * <p>
* It is not valid to pass any other DataSource type to the
"getSegmentsForIntervals" method.
*/
public class InlineSegmentWrangler implements SegmentWrangler
@@ -46,7 +45,6 @@ public class InlineSegmentWrangler implements SegmentWrangler
if (inlineDataSource.rowsAreArrayList()) {
return Collections.singletonList(
new ArrayListSegment<>(
- SegmentId.dummy(SEGMENT_ID),
(ArrayList<Object[]>) inlineDataSource.getRowsAsList(),
inlineDataSource.rowAdapter(),
inlineDataSource.getRowSignature()
@@ -56,7 +54,6 @@ public class InlineSegmentWrangler implements SegmentWrangler
return Collections.singletonList(
new RowBasedSegment<>(
- SegmentId.dummy(SEGMENT_ID),
Sequences.simple(inlineDataSource.getRows()),
inlineDataSource.rowAdapter(),
inlineDataSource.getRowSignature()
diff --git
a/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
b/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
index 7ec6490be82..a464fbc5be9 100644
--- a/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
+++ b/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
@@ -360,7 +360,6 @@ public class SinkTest extends InitializedNullHandlingTest
new FireHydrant(EasyMock.createMock(IncrementalIndex.class), 0,
segmentId),
new FireHydrant(
new RowBasedSegment<>(
- segmentId,
Sequences.empty(),
RowAdapters.standardRow(),
RowSignature.empty()
diff --git
a/server/src/test/java/org/apache/druid/server/ClientQuerySegmentWalkerTest.java
b/server/src/test/java/org/apache/druid/server/ClientQuerySegmentWalkerTest.java
index b6abac80167..a812acc4597 100644
---
a/server/src/test/java/org/apache/druid/server/ClientQuerySegmentWalkerTest.java
+++
b/server/src/test/java/org/apache/druid/server/ClientQuerySegmentWalkerTest.java
@@ -91,7 +91,6 @@ import
org.apache.druid.segment.virtual.ExpressionVirtualColumn;
import org.apache.druid.server.initialization.ServerConfig;
import org.apache.druid.server.scheduling.ManualQueryPrioritizationStrategy;
import org.apache.druid.server.scheduling.NoQueryLaningStrategy;
-import org.apache.druid.timeline.SegmentId;
import org.apache.druid.timeline.VersionedIntervalTimeline;
import org.apache.druid.timeline.partition.NumberedShardSpec;
import org.apache.druid.timeline.partition.ShardSpec;
@@ -1856,7 +1855,6 @@ public class ClientQuerySegmentWalkerTest
SHARD_SPEC.createChunk(
ReferenceCountingSegment.wrapSegment(
new RowBasedSegment<>(
- SegmentId.of(name, INTERVAL, VERSION,
SHARD_SPEC.getPartitionNum()),
Sequences.simple(dataSource.getRows()),
dataSource.rowAdapter(),
dataSource.getRowSignature()
diff --git
a/server/src/test/java/org/apache/druid/server/TestClusterQuerySegmentWalker.java
b/server/src/test/java/org/apache/druid/server/TestClusterQuerySegmentWalker.java
index 71480d7c2be..730dff7ee8b 100644
---
a/server/src/test/java/org/apache/druid/server/TestClusterQuerySegmentWalker.java
+++
b/server/src/test/java/org/apache/druid/server/TestClusterQuerySegmentWalker.java
@@ -264,7 +264,7 @@ public class TestClusterQuerySegmentWalker implements
QuerySegmentWalker
for (TimelineObjectHolder<String, ReferenceCountingSegment> holder :
timeline.lookup(interval)) {
for (PartitionChunk<ReferenceCountingSegment> chunk :
holder.getObject()) {
- retVal.add(new WindowedSegment(chunk.getObject(),
holder.getInterval()));
+ retVal.add(new WindowedSegment(chunk.getObject(),
holder.getInterval(), holder.getVersion(), chunk.getChunkNumber()));
}
}
@@ -287,7 +287,7 @@ public class TestClusterQuerySegmentWalker implements
QuerySegmentWalker
spec.getVersion(),
spec.getPartitionNumber()
);
- retVal.add(new WindowedSegment(entry.getObject(), spec.getInterval()));
+ retVal.add(new WindowedSegment(entry.getObject(), spec.getInterval(),
spec.getVersion(), spec.getPartitionNumber()));
}
return retVal;
@@ -298,12 +298,23 @@ public class TestClusterQuerySegmentWalker implements
QuerySegmentWalker
{
private final ReferenceCountingSegment segment;
private final Interval interval;
+ private final String version;
+ private final int partitionNumber;
- public WindowedSegment(ReferenceCountingSegment segment, Interval interval)
+ public WindowedSegment(ReferenceCountingSegment segment, Interval
interval, String version, int partitionNumber)
{
+ if (segment.getId() != null) {
+
Preconditions.checkArgument(segment.getId().getInterval().contains(interval));
+ } else {
+ Preconditions.checkArgument(
+ segment.getDataInterval().contains(interval),
+ "Data interval for non-table segment should default to external"
+ );
+ }
this.segment = segment;
this.interval = interval;
-
Preconditions.checkArgument(segment.getId().getInterval().contains(interval));
+ this.version = version;
+ this.partitionNumber = partitionNumber;
}
public ReferenceCountingSegment getSegment()
@@ -318,7 +329,7 @@ public class TestClusterQuerySegmentWalker implements
QuerySegmentWalker
public SegmentDescriptor getDescriptor()
{
- return new SegmentDescriptor(interval, segment.getId().getVersion(),
segment.getId().getPartitionNum());
+ return new SegmentDescriptor(interval, version, partitionNumber);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]