You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2022/01/21 05:46:28 UTC
[iotdb] branch master updated: [IOTDB-2457] Fix Write is blocked after set time_index_level=FILE_TIM… (#4935)
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new a235a88 [IOTDB-2457] Fix Write is blocked after set time_index_level=FILE_TIM… (#4935)
a235a88 is described below
commit a235a88c21741783b92e7d7a03c39addce04504f
Author: Jackie Tien <ja...@gmail.com>
AuthorDate: Fri Jan 21 13:45:49 2022 +0800
[IOTDB-2457] Fix Write is blocked after set time_index_level=FILE_TIM… (#4935)
---
.../db/engine/storagegroup/TsFileResource.java | 11 +-
.../storagegroup/timeindex/TimeIndexLevel.java | 11 +-
.../storagegroup/timeindex/V012FileTimeIndex.java | 169 +++++++++++++++++++++
.../db/engine/compaction/CompactionUtilsTest.java | 4 +-
4 files changed, 188 insertions(+), 7 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
index 630df4f..1984f94 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
@@ -92,7 +92,7 @@ public class TsFileResource {
/** time index */
protected ITimeIndex timeIndex;
- /** time index type, fileTimeIndex = 0, deviceTimeIndex = 1 */
+ /** time index type, V012FileTimeIndex = 0, deviceTimeIndex = 1, fileTimeIndex = 2 */
private byte timeIndexType;
private ModificationFile modFile;
@@ -271,6 +271,13 @@ public class TsFileResource {
}
}
}
+
+ // upgrade from v0.12 to v0.13, we need to rewrite the TsFileResource if the previous time index
+ // is file time index
+ if (timeIndexType == 0) {
+ timeIndexType = 2;
+ serialize();
+ }
}
/** deserialize tsfile resource from old file */
@@ -954,7 +961,7 @@ public class TsFileResource {
long endTime = timeIndex.getMaxEndTime();
// replace the DeviceTimeIndex with FileTimeIndex
timeIndex = new FileTimeIndex(startTime, endTime);
- timeIndexType = 0;
+ timeIndexType = 2;
return ramSize - timeIndex.calculateRamSize();
}
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/TimeIndexLevel.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/TimeIndexLevel.java
index 95e9b9e..428f8c3 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/TimeIndexLevel.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/TimeIndexLevel.java
@@ -20,14 +20,19 @@
package org.apache.iotdb.db.engine.storagegroup.timeindex;
public enum TimeIndexLevel {
- /** file to time index (small memory foot print) */
- FILE_TIME_INDEX,
+ /** v0.12 file to time index (small memory foot print) */
+ V012_FILE_TIME_INDEX,
/** device to time index (large memory foot print) */
- DEVICE_TIME_INDEX;
+ DEVICE_TIME_INDEX,
+
+ /** file to time index (small memory foot print) */
+ FILE_TIME_INDEX;
public ITimeIndex getTimeIndex() {
switch (this) {
+ case V012_FILE_TIME_INDEX:
+ return new V012FileTimeIndex();
case FILE_TIME_INDEX:
return new FileTimeIndex();
case DEVICE_TIME_INDEX:
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/V012FileTimeIndex.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/V012FileTimeIndex.java
new file mode 100644
index 0000000..84c8b9c
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/V012FileTimeIndex.java
@@ -0,0 +1,169 @@
+/*
+ * 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.iotdb.db.engine.storagegroup.timeindex;
+
+import org.apache.iotdb.db.exception.PartitionViolationException;
+import org.apache.iotdb.db.utils.SerializeUtils;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.util.Set;
+
+public class V012FileTimeIndex implements ITimeIndex {
+
+ /** devices */
+ public V012FileTimeIndex() {}
+
+ @Override
+ public void serialize(OutputStream outputStream) throws IOException {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and serialize() method should not be called any more.");
+ }
+
+ @Override
+ public FileTimeIndex deserialize(InputStream inputStream) throws IOException {
+ int size = ReadWriteIOUtils.readInt(inputStream);
+ for (int i = 0; i < size; i++) {
+ ReadWriteIOUtils.readString(inputStream);
+ }
+ return new FileTimeIndex(
+ ReadWriteIOUtils.readLong(inputStream), ReadWriteIOUtils.readLong(inputStream));
+ }
+
+ @Override
+ public FileTimeIndex deserialize(ByteBuffer buffer) {
+ int size = buffer.getInt();
+ for (int i = 0; i < size; i++) {
+ SerializeUtils.deserializeString(buffer);
+ }
+ return new FileTimeIndex(buffer.getLong(), buffer.getLong());
+ }
+
+ @Override
+ public void close() {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and close() method should not be called any more.");
+ }
+
+ @Override
+ public Set<String> getDevices(String tsFilePath) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and getDevices() method should not be called any more.");
+ }
+
+ @Override
+ public boolean endTimeEmpty() {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and endTimeEmpty() method should not be called any more.");
+ }
+
+ @Override
+ public boolean stillLives(long timeLowerBound) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and stillLives() method should not be called any more.");
+ }
+
+ @Override
+ public long calculateRamSize() {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and calculateRamSize() method should not be called any more.");
+ }
+
+ @Override
+ public long getTimePartition(String tsFilePath) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and getTimePartition() method should not be called any more.");
+ }
+
+ @Override
+ public long getTimePartitionWithCheck(String tsFilePath) throws PartitionViolationException {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and getTimePartitionWithCheck() method should not be called any more.");
+ }
+
+ @Override
+ public boolean isSpanMultiTimePartitions() {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and isSpanMultiTimePartitions() method should not be called any more.");
+ }
+
+ @Override
+ public void updateStartTime(String deviceId, long time) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and updateStartTime() method should not be called any more.");
+ }
+
+ @Override
+ public void updateEndTime(String deviceId, long time) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and updateEndTime() method should not be called any more.");
+ }
+
+ @Override
+ public void putStartTime(String deviceId, long time) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and putStartTime() method should not be called any more.");
+ }
+
+ @Override
+ public void putEndTime(String deviceId, long time) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and putEndTime() method should not be called any more.");
+ }
+
+ @Override
+ public long getStartTime(String deviceId) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and getStartTime() method should not be called any more.");
+ }
+
+ @Override
+ public long getEndTime(String deviceId) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and getEndTime() method should not be called any more.");
+ }
+
+ @Override
+ public boolean checkDeviceIdExist(String deviceId) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and checkDeviceIdExist() method should not be called any more.");
+ }
+
+ @Override
+ public long getMinStartTime() {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and getMinStartTime() method should not be called any more.");
+ }
+
+ @Override
+ public long getMaxEndTime() {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading and getMaxEndTime() method should not be called any more.");
+ }
+
+ @Override
+ public int compareDegradePriority(ITimeIndex timeIndex) {
+ throw new UnsupportedOperationException(
+ "V012FileTimeIndex should be rewritten while upgrading.");
+ }
+}
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionUtilsTest.java
index 107e3f8..3860434 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionUtilsTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionUtilsTest.java
@@ -3205,10 +3205,10 @@ public class CompactionUtilsTest extends AbstractCompactionTest {
generateModsFile(seriesPaths, unseqResources, Long.MIN_VALUE, Long.MAX_VALUE);
for (TsFileResource resource : seqResources) {
- resource.setTimeIndexType((byte) 0);
+ resource.setTimeIndexType((byte) 2);
}
for (TsFileResource resource : unseqResources) {
- resource.setTimeIndexType((byte) 0);
+ resource.setTimeIndexType((byte) 2);
}
for (int i = TsFileGeneratorUtils.getAlignDeviceOffset();