You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/05/30 12:00:41 UTC
[iotdb] branch rel/1.1 updated: [To rel/1.1][IOTDB-5905] Fix aligned timeseries data point lost after flushed in some scenario (#9980)
This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch rel/1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.1 by this push:
new 3ac3d63aeef [To rel/1.1][IOTDB-5905] Fix aligned timeseries data point lost after flushed in some scenario (#9980)
3ac3d63aeef is described below
commit 3ac3d63aeef14c727ebc8b4e52030bfd44bde86c
Author: Haonan <hh...@outlook.com>
AuthorDate: Tue May 30 20:00:33 2023 +0800
[To rel/1.1][IOTDB-5905] Fix aligned timeseries data point lost after flushed in some scenario (#9980)
---
.../db/it/aligned/IoTDBInsertAlignedValuesIT.java | 31 ++++++++++++++++++++++
.../engine/memtable/AlignedWritableMemChunk.java | 19 +++++++------
2 files changed, 40 insertions(+), 10 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/aligned/IoTDBInsertAlignedValuesIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/aligned/IoTDBInsertAlignedValuesIT.java
index cfd70558ab0..d8f7ba8b6fe 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/aligned/IoTDBInsertAlignedValuesIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/aligned/IoTDBInsertAlignedValuesIT.java
@@ -217,6 +217,37 @@ public class IoTDBInsertAlignedValuesIT {
}
}
+ @Test
+ public void testInsertAlignedValuesWithSameTimestamp() throws SQLException {
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+ statement.addBatch("insert into root.sg.d1(time,s2) aligned values(1,2)");
+ statement.addBatch("insert into root.sg.d1(time,s1) aligned values(1,2)");
+ statement.executeBatch();
+
+ try (ResultSet resultSet = statement.executeQuery("select s1, s2 from root.sg.d1")) {
+
+ assertTrue(resultSet.next());
+ assertEquals(1, resultSet.getLong(1));
+ assertEquals(2.0F, resultSet.getObject(2));
+ assertEquals(2.0F, resultSet.getObject(3));
+
+ assertFalse(resultSet.next());
+ }
+
+ statement.execute("flush");
+ try (ResultSet resultSet = statement.executeQuery("select s1, s2 from root.sg.d1")) {
+
+ assertTrue(resultSet.next());
+ assertEquals(1, resultSet.getLong(1));
+ assertEquals(2.0F, resultSet.getObject(2));
+ assertEquals(2.0F, resultSet.getObject(3));
+
+ assertFalse(resultSet.next());
+ }
+ }
+ }
+
@Test
public void testInsertWithWrongMeasurementNum1() throws SQLException {
try (Connection connection = EnvFactory.getEnv().getConnection();
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
index dabd3b472db..0bc71c3995d 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
@@ -315,17 +315,16 @@ public class AlignedWritableMemChunk implements IWritableMemChunk {
int range = 0;
for (int sortedRowIndex = 0; sortedRowIndex < list.rowCount(); sortedRowIndex++) {
long time = list.getTime(sortedRowIndex);
+ if (range == 0) {
+ pageRange.add(sortedRowIndex);
+ }
+ range++;
+ if (range == maxNumberOfPointsInPage) {
+ pageRange.add(sortedRowIndex);
+ range = 0;
+ }
- if (sortedRowIndex == list.rowCount() - 1 || time != list.getTime(sortedRowIndex + 1)) {
- if (range == 0) {
- pageRange.add(sortedRowIndex);
- }
- range++;
- if (range == maxNumberOfPointsInPage) {
- pageRange.add(sortedRowIndex);
- range = 0;
- }
- } else {
+ if (sortedRowIndex != list.rowCount() - 1 && time == list.getTime(sortedRowIndex + 1)) {
if (Objects.isNull(timeDuplicateInfo)) {
timeDuplicateInfo = new boolean[list.rowCount()];
}