This is an automated email from the ASF dual-hosted git repository. qiaojialin pushed a commit to branch fix_version in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 135fa0a3a4d9b9fdb8e94e23882a0c4008020121 Author: qiaojialin <[email protected]> AuthorDate: Tue Jun 16 17:40:00 2020 +0800 fix recover version --- .../apache/iotdb/db/utils/VersionUtilsTest.java | 55 ++++++++++++++++++++++ .../apache/iotdb/tsfile/utils/VersionUtils.java | 13 ++--- 2 files changed, 62 insertions(+), 6 deletions(-) diff --git a/server/src/test/java/org/apache/iotdb/db/utils/VersionUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/utils/VersionUtilsTest.java new file mode 100644 index 0000000..3b91cf3 --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/utils/VersionUtilsTest.java @@ -0,0 +1,55 @@ +/* + * 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.utils; + +import java.util.ArrayList; +import java.util.List; +import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.utils.Pair; +import org.apache.iotdb.tsfile.utils.VersionUtils; +import org.junit.Assert; +import org.junit.Test; + +public class VersionUtilsTest { + + @Test + public void isNumberTest() { + List<ChunkMetadata> chunkMetadataList = new ArrayList<>(); + chunkMetadataList.add(new ChunkMetadata("s1", TSDataType.INT32, 10, null)); + chunkMetadataList.add(new ChunkMetadata("s1", TSDataType.INT32, 20, null)); + chunkMetadataList.add(new ChunkMetadata("s1", TSDataType.INT32, 30, null)); + chunkMetadataList.add(new ChunkMetadata("s1", TSDataType.INT32, 40, null)); + chunkMetadataList.add(new ChunkMetadata("s1", TSDataType.INT32, 50, null)); + + List<Pair<Long, Long>> versionInfo = new ArrayList<>(); + versionInfo.add(new Pair<>(25L, 1L)); + versionInfo.add(new Pair<>(45L, 2L)); + + VersionUtils.applyVersion(chunkMetadataList, versionInfo); + + Assert.assertEquals(1L, chunkMetadataList.get(0).getVersion()); + Assert.assertEquals(1L, chunkMetadataList.get(1).getVersion()); + Assert.assertEquals(2L, chunkMetadataList.get(2).getVersion()); + Assert.assertEquals(2L, chunkMetadataList.get(3).getVersion()); + Assert.assertEquals(0L, chunkMetadataList.get(4).getVersion()); + } + + +} diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/VersionUtils.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/VersionUtils.java index 621c9c9..1eaaafc 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/VersionUtils.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/VersionUtils.java @@ -33,16 +33,17 @@ public class VersionUtils { } int versionIndex = 0; for (ChunkMetadata chunkMetadata : chunkMetadataList) { + while (chunkMetadata.getOffsetOfChunkHeader() >= versionInfo.get(versionIndex).left) { versionIndex++; + // When the TsFile is uncompleted, + // skip the chunkMetadatas those don't have their version information + if (versionIndex >= versionInfo.size()) { + return; + } } - // When the TsFile is uncompleted, - // skip the chunkMetadatas those don't have their version information - if (versionIndex >= versionInfo.size()) { - break; - } + chunkMetadata.setVersion(versionInfo.get(versionIndex).right); } } - }
