This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch KeepAllNullRows
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/KeepAllNullRows by this push:
new e8d65b38e01 fix memtable scan bug
e8d65b38e01 is described below
commit e8d65b38e01a6e4fdb376afb14faff3d66bfb989
Author: JackieTien97 <[email protected]>
AuthorDate: Wed Sep 11 11:39:30 2024 +0800
fix memtable scan bug
---
.../read/reader/chunk/MemAlignedPageReader.java | 32 ++++++----------------
.../metadata/DiskAlignedChunkMetadataLoader.java | 4 +--
2 files changed, 11 insertions(+), 25 deletions(-)
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 f2affe64702..473cd7366c3 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
@@ -69,10 +69,9 @@ public class MemAlignedPageReader implements IPageReader {
BatchData batchData = BatchDataFactory.createBatchData(TSDataType.VECTOR,
ascending, false);
boolean[] satisfyInfo = buildSatisfyInfoArray();
- boolean[] hasValue = buildHasValueArray();
for (int rowIndex = 0; rowIndex < tsBlock.getPositionCount(); rowIndex++) {
- if (satisfyInfo[rowIndex] && hasValue[rowIndex]) {
+ if (satisfyInfo[rowIndex]) {
long time = tsBlock.getTimeByIndex(rowIndex);
TsPrimitiveType[] values = new
TsPrimitiveType[tsBlock.getValueColumnCount()];
for (int column = 0; column < tsBlock.getValueColumnCount(); column++)
{
@@ -91,13 +90,12 @@ public class MemAlignedPageReader implements IPageReader {
builder.reset();
boolean[] satisfyInfo = buildSatisfyInfoArray();
- boolean[] hasValue = buildHasValueArray();
// build time column
- int readEndIndex = buildTimeColumn(satisfyInfo, hasValue);
+ int readEndIndex = buildTimeColumn(satisfyInfo);
// build value column
- buildValueColumns(satisfyInfo, hasValue, readEndIndex);
+ buildValueColumns(satisfyInfo, readEndIndex);
return builder.build();
}
@@ -111,23 +109,11 @@ public class MemAlignedPageReader implements IPageReader {
return recordFilter.satisfyTsBlock(tsBlock);
}
- private boolean[] buildHasValueArray() {
- boolean[] hasValue = new boolean[tsBlock.getPositionCount()];
- // other value column
- for (int column = 0; column < tsBlock.getValueColumnCount(); column++) {
- Column valueColumn = tsBlock.getColumn(column);
- for (int row = 0; row < tsBlock.getPositionCount(); row++) {
- hasValue[row] = hasValue[row] || !valueColumn.isNull(row);
- }
- }
- return hasValue;
- }
-
- private int buildTimeColumn(boolean[] satisfyInfo, boolean[] hasValue) {
+ private int buildTimeColumn(boolean[] satisfyInfo) {
int readEndIndex = tsBlock.getPositionCount();
for (int row = 0; row < readEndIndex; row++) {
- if (needSkipCurrentRow(satisfyInfo, hasValue, row)) {
+ if (needSkipCurrentRow(satisfyInfo, row)) {
continue;
}
@@ -142,8 +128,8 @@ public class MemAlignedPageReader implements IPageReader {
return readEndIndex;
}
- private boolean needSkipCurrentRow(boolean[] satisfyInfo, boolean[]
hasValue, int rowIndex) {
- if (!satisfyInfo[rowIndex] || !hasValue[rowIndex]) {
+ private boolean needSkipCurrentRow(boolean[] satisfyInfo, int rowIndex) {
+ if (!satisfyInfo[rowIndex]) {
return true;
}
if (paginationController.hasCurOffset()) {
@@ -154,12 +140,12 @@ public class MemAlignedPageReader implements IPageReader {
return false;
}
- private void buildValueColumns(boolean[] satisfyInfo, boolean[] hasValue,
int readEndIndex) {
+ private void buildValueColumns(boolean[] satisfyInfo, int readEndIndex) {
for (int column = 0; column < tsBlock.getValueColumnCount(); column++) {
Column valueColumn = tsBlock.getColumn(column);
ColumnBuilder valueBuilder = builder.getColumnBuilder(column);
for (int row = 0; row < readEndIndex; row++) {
- if (satisfyInfo[row] && hasValue[row]) {
+ if (satisfyInfo[row]) {
if (!valueColumn.isNull(row)) {
valueBuilder.write(valueColumn, row);
} else {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
index da9895406eb..24a88cc6cd0 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
@@ -26,8 +26,8 @@ import
org.apache.iotdb.db.storageengine.dataregion.read.reader.chunk.DiskAligne
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.utils.ModificationUtils;
+import org.apache.tsfile.file.metadata.AbstractAlignedTimeSeriesMetadata;
import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
-import org.apache.tsfile.file.metadata.AlignedTimeSeriesMetadata;
import org.apache.tsfile.file.metadata.IChunkMetadata;
import org.apache.tsfile.file.metadata.ITimeSeriesMetadata;
import org.apache.tsfile.read.controller.IChunkMetadataLoader;
@@ -84,7 +84,7 @@ public class DiskAlignedChunkMetadataLoader implements
IChunkMetadataLoader {
final long t1 = System.nanoTime();
try {
List<AlignedChunkMetadata> alignedChunkMetadataList =
- ((AlignedTimeSeriesMetadata)
timeSeriesMetadata).getCopiedChunkMetadataList();
+ ((AbstractAlignedTimeSeriesMetadata)
timeSeriesMetadata).getCopiedChunkMetadataList();
// when alignedChunkMetadataList.size() == 1, it means that the chunk
statistics is same as
// the time series metadata, so we don't need to filter it again.