From 8faf3439fc429e3b37b8ee2244c4f74ba3f4bdee Mon Sep 17 00:00:00 2001 From: Tian Jiang Date: Mon, 13 Jan 2025 18:17:10 +0800 Subject: [PATCH] add more test --- .../it/schema/IoTDBAlterColumnTypeIT.java | 65 ++++++++++++++++--- .../exchange/SharedTsBlockQueue.java | 17 +---- .../exchange/source/LocalSourceHandle.java | 18 ++--- .../operator/source/SeriesScanUtil.java | 5 +- .../memtable/AlignedWritableMemChunk.java | 2 +- .../reader/chunk/MemAlignedPageReader.java | 17 ++--- .../apache/iotdb/db/utils/CommonUtils.java | 19 ++++++ 7 files changed, 90 insertions(+), 53 deletions(-) diff --git a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBAlterColumnTypeIT.java b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBAlterColumnTypeIT.java index b69069039f66..0d4b0202d802 100644 --- a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBAlterColumnTypeIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBAlterColumnTypeIT.java @@ -46,6 +46,7 @@ import static org.apache.iotdb.relational.it.session.IoTDBSessionRelationalIT.genValue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; @RunWith(IoTDBTestRunner.class) @@ -336,6 +337,19 @@ public void testDropAndAlter() throws IoTDBConnectionException, StatementExecuti session.insert(tablet); tablet.reset(); + session.executeNonQueryStatement("FLUSH"); + + tablet = + new Tablet( + "drop_and_alter", + Collections.singletonList("s1"), + Collections.singletonList(TSDataType.INT32), + Collections.singletonList(ColumnCategory.FIELD)); + tablet.addTimestamp(0, 2); + tablet.addValue("s1", 0, genValue(TSDataType.INT32, 2)); + session.insert(tablet); + tablet.reset(); + session.executeNonQueryStatement("ALTER TABLE drop_and_alter DROP COLUMN s1"); tablet = @@ -344,8 +358,21 @@ public void testDropAndAlter() throws IoTDBConnectionException, StatementExecuti Collections.singletonList("s1"), Collections.singletonList(TSDataType.STRING), Collections.singletonList(ColumnCategory.FIELD)); - tablet.addTimestamp(0, 2); - tablet.addValue("s1", 0, genValue(TSDataType.STRING, 2)); + tablet.addTimestamp(0, 3); + tablet.addValue("s1", 0, genValue(TSDataType.STRING, 3)); + session.insert(tablet); + tablet.reset(); + + session.executeNonQueryStatement("FLUSH"); + + tablet = + new Tablet( + "drop_and_alter", + Collections.singletonList("s1"), + Collections.singletonList(TSDataType.STRING), + Collections.singletonList(ColumnCategory.FIELD)); + tablet.addTimestamp(0, 4); + tablet.addValue("s1", 0, genValue(TSDataType.STRING, 4)); session.insert(tablet); tablet.reset(); @@ -358,19 +385,37 @@ public void testDropAndAlter() throws IoTDBConnectionException, StatementExecuti Collections.singletonList("s1"), Collections.singletonList(TSDataType.TEXT), Collections.singletonList(ColumnCategory.FIELD)); - tablet.addTimestamp(0, 3); - tablet.addValue("s1", 0, genValue(TSDataType.STRING, 3)); + tablet.addTimestamp(0, 5); + tablet.addValue("s1", 0, genValue(TSDataType.STRING, 5)); + session.insert(tablet); + tablet.reset(); + + session.executeNonQueryStatement("FLUSH"); + + tablet = + new Tablet( + "drop_and_alter", + Collections.singletonList("s1"), + Collections.singletonList(TSDataType.TEXT), + Collections.singletonList(ColumnCategory.FIELD)); + tablet.addTimestamp(0, 6); + tablet.addValue("s1", 0, genValue(TSDataType.STRING, 6)); session.insert(tablet); tablet.reset(); SessionDataSet dataSet = session.executeQueryStatement("select * from drop_and_alter order by time"); - RowRecord rec = dataSet.next(); - assertEquals(2, rec.getFields().get(0).getLongV()); - assertEquals(genValue(TSDataType.STRING, 2).toString(), rec.getFields().get(1).toString()); - rec = dataSet.next(); - assertEquals(3, rec.getFields().get(0).getLongV()); - assertEquals(genValue(TSDataType.STRING, 3).toString(), rec.getFields().get(1).toString()); + RowRecord rec; + for (int i = 1; i < 3; i++) { + rec = dataSet.next(); + assertEquals(i, rec.getFields().get(0).getLongV()); + assertNull(rec.getFields().get(1).getDataType()); + } + for (int i = 3; i < 7; i++) { + rec = dataSet.next(); + assertEquals(i, rec.getFields().get(0).getLongV()); + assertEquals(genValue(TSDataType.STRING, i).toString(), rec.getFields().get(1).toString()); + } assertFalse(dataSet.hasNext()); } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/SharedTsBlockQueue.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/SharedTsBlockQueue.java index 91029d2a4144..fb376b9e71ca 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/SharedTsBlockQueue.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/SharedTsBlockQueue.java @@ -24,14 +24,13 @@ import org.apache.iotdb.db.queryengine.execution.exchange.sink.LocalSinkChannel; import org.apache.iotdb.db.queryengine.execution.exchange.source.LocalSourceHandle; import org.apache.iotdb.db.queryengine.execution.memory.LocalMemoryManager; +import org.apache.iotdb.db.utils.CommonUtils; import org.apache.iotdb.mpp.rpc.thrift.TFragmentInstanceId; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import org.apache.commons.lang3.Validate; -import org.apache.tsfile.block.column.Column; import org.apache.tsfile.read.common.block.TsBlock; -import org.apache.tsfile.read.common.block.column.TimeColumn; import org.apache.tsfile.utils.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -216,19 +215,9 @@ public TsBlock remove() { * the returned future of last invocation completes. */ public ListenableFuture add(TsBlock tsBlock) { - StringBuilder tsBlockBuilder = new StringBuilder(); - for (Column column : tsBlock.getAllColumns()) { - tsBlockBuilder.append("["); - for (int i = 0; i < column.getPositionCount(); i++) { - if (column instanceof TimeColumn) { - tsBlockBuilder.append(column.getLong(i)).append(","); - } else { - tsBlockBuilder.append(column.getTsPrimitiveType(i)).append(","); - } - } - tsBlockBuilder.append("] "); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("[addTsBlock] TsBlock:{}", CommonUtils.toString(tsBlock)); } - LOGGER.warn("[addTsBlock] TsBlock:{}", tsBlockBuilder); if (closed) { // queue may have been closed return immediateVoidFuture(); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/source/LocalSourceHandle.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/source/LocalSourceHandle.java index 8bf9d75bacc8..1d5a62e87d47 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/source/LocalSourceHandle.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/source/LocalSourceHandle.java @@ -23,15 +23,14 @@ import org.apache.iotdb.db.queryengine.execution.exchange.MPPDataExchangeManager.SourceHandleListener; import org.apache.iotdb.db.queryengine.execution.exchange.SharedTsBlockQueue; import org.apache.iotdb.db.queryengine.metric.DataExchangeCostMetricSet; +import org.apache.iotdb.db.utils.CommonUtils; import org.apache.iotdb.db.utils.SetThreadName; import org.apache.iotdb.mpp.rpc.thrift.TFragmentInstanceId; import org.apache.iotdb.rpc.TSStatusCode; import com.google.common.util.concurrent.ListenableFuture; import org.apache.commons.lang3.Validate; -import org.apache.tsfile.block.column.Column; import org.apache.tsfile.read.common.block.TsBlock; -import org.apache.tsfile.read.common.block.column.TimeColumn; import org.apache.tsfile.read.common.block.column.TsBlockSerde; import org.apache.tsfile.utils.RamUsageEstimator; import org.slf4j.Logger; @@ -143,19 +142,10 @@ public TsBlock receive() { @Override public ByteBuffer getSerializedTsBlock() throws IoTDBException { TsBlock tsBlock = receive(); - StringBuilder tsBlockBuilder = new StringBuilder(); - for (Column column : tsBlock.getAllColumns()) { - tsBlockBuilder.append("["); - for (int i = 0; i < column.getPositionCount(); i++) { - if (column instanceof TimeColumn) { - tsBlockBuilder.append(column.getLong(i)).append(","); - } else { - tsBlockBuilder.append(column.getTsPrimitiveType(i)).append(","); - } - } - tsBlockBuilder.append("] "); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("[GetSerializedTsBlock] TsBlock:{}", CommonUtils.toString(tsBlock)); } - LOGGER.warn("[GetSerializedTsBlock] TsBlock:{}", tsBlockBuilder); + if (tsBlock != null) { long startTime = System.nanoTime(); try { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java index 178839b5ac08..6c8955d36c6e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java @@ -34,6 +34,7 @@ import org.apache.iotdb.db.storageengine.dataregion.read.reader.common.MergeReaderPriority; import org.apache.iotdb.db.storageengine.dataregion.read.reader.common.PriorityMergeReader; import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource; +import org.apache.iotdb.db.utils.CommonUtils; import org.apache.tsfile.block.column.Column; import org.apache.tsfile.enums.TSDataType; @@ -1317,7 +1318,9 @@ TsBlock getAllSatisfiedPageData(boolean ascending) throws IOException { } tsBlockBuilder.append("] "); } - LOGGER.warn("[getAllSatisfiedPageData] TsBlock:{}", tsBlockBuilder); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("[getAllSatisfiedPageData] TsBlock:{}", CommonUtils.toString(tsBlock)); + } return tsBlock; } finally { long time = System.nanoTime() - startTime; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java index 4beb010e2879..ff772d1721e8 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java @@ -513,7 +513,7 @@ public long getLastPoint() { @Override public boolean isEmpty() { - return list.rowCount() == 0 || measurementIndexMap.isEmpty(); + return list.rowCount() == 0 || measurementIndexMap.isEmpty() && ignoreAllNullRows; } @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java index 37bcc7c6a5d9..89f836910069 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.storageengine.dataregion.read.reader.chunk; +import org.apache.iotdb.db.utils.CommonUtils; + import org.apache.tsfile.block.column.Column; import org.apache.tsfile.block.column.ColumnBuilder; import org.apache.tsfile.enums.TSDataType; @@ -28,7 +30,6 @@ import org.apache.tsfile.read.common.BatchDataFactory; import org.apache.tsfile.read.common.block.TsBlock; import org.apache.tsfile.read.common.block.TsBlockBuilder; -import org.apache.tsfile.read.common.block.column.TimeColumn; import org.apache.tsfile.read.filter.basic.Filter; import org.apache.tsfile.read.filter.factory.FilterFactory; import org.apache.tsfile.read.reader.IPageReader; @@ -99,19 +100,9 @@ public TsBlock getAllSatisfiedData() { // build value column buildValueColumns(satisfyInfo, readEndIndex); - StringBuilder tsBlockBuilder = new StringBuilder(); - for (Column column : tsBlock.getAllColumns()) { - tsBlockBuilder.append("["); - for (int i = 0; i < column.getPositionCount(); i++) { - if (column instanceof TimeColumn) { - tsBlockBuilder.append(column.getLong(i)).append(","); - } else { - tsBlockBuilder.append(column.getTsPrimitiveType(i)).append(","); - } - } - tsBlockBuilder.append("] "); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("[memAlignedPageReader] TsBlock:{}", CommonUtils.toString(tsBlock)); } - LOGGER.warn("[memAlignedPageReader] TsBlock:{}", tsBlockBuilder); return builder.build(); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java index d83379bd7386..6e214a39805a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java @@ -49,9 +49,12 @@ import io.airlift.airline.ParseOptionMissingException; import io.airlift.airline.ParseOptionMissingValueException; import org.apache.commons.lang3.StringUtils; +import org.apache.tsfile.block.column.Column; import org.apache.tsfile.common.conf.TSFileConfig; import org.apache.tsfile.enums.TSDataType; import org.apache.tsfile.file.metadata.IDeviceID; +import org.apache.tsfile.read.common.block.TsBlock; +import org.apache.tsfile.read.common.block.column.TimeColumn; import org.apache.tsfile.utils.Binary; import org.apache.tsfile.write.UnSupportedDataTypeException; @@ -433,4 +436,20 @@ public static void addQueryLatency(StatementType statementType, long costTimeInN Tag.TYPE.toString(), statementType.name()); } + + public static String toString(TsBlock tsBlock) { + StringBuilder tsBlockBuilder = new StringBuilder(); + for (Column column : tsBlock.getAllColumns()) { + tsBlockBuilder.append("["); + for (int i = 0; i < column.getPositionCount(); i++) { + if (column instanceof TimeColumn) { + tsBlockBuilder.append(column.getLong(i)).append(","); + } else { + tsBlockBuilder.append(column.getTsPrimitiveType(i)).append(","); + } + } + tsBlockBuilder.append("] "); + } + return tsBlockBuilder.toString(); + } }