Skip to content

Commit a5e8562

Browse files
committed
Fix tag log append EOF handling
1 parent e0775f9 commit a5e8562

2 files changed

Lines changed: 60 additions & 0 deletions

File tree

  • iotdb-core/datanode/src

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/tag/TagLogFile.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ private List<Long> parseOffsetList(long position) throws IOException {
147147
blockOffset.add(position);
148148
// Read the first block
149149
ByteBuffer byteBuffer = ByteBuffer.allocate(MAX_LENGTH);
150+
if (position == fileChannel.size()) {
151+
return blockOffset;
152+
}
150153
IOUtils.readFully(fileChannel, byteBuffer, position);
151154
byteBuffer.flip();
152155
if (byteBuffer.limit() > 0) { // This indicates that there is data at this position
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.iotdb.db.schemaengine.schemaregion.tag;
20+
21+
import org.apache.tsfile.external.commons.io.FileUtils;
22+
import org.apache.tsfile.utils.Pair;
23+
import org.junit.After;
24+
import org.junit.Assert;
25+
import org.junit.Test;
26+
27+
import java.io.File;
28+
import java.nio.file.Files;
29+
import java.util.Collections;
30+
import java.util.Map;
31+
32+
public class TagLogFileTest {
33+
34+
private File tempDir;
35+
36+
@After
37+
public void tearDown() throws Exception {
38+
if (tempDir != null) {
39+
FileUtils.deleteDirectory(tempDir);
40+
}
41+
}
42+
43+
@Test
44+
public void writeAppendsFirstRecordWithoutReadingPastFileEnd() throws Exception {
45+
tempDir = Files.createTempDirectory("tag-log-file").toFile();
46+
Map<String, String> tags = Collections.singletonMap("tag", "value");
47+
Map<String, String> attributes = Collections.singletonMap("attr", "value");
48+
49+
try (TagLogFile tagLogFile = new TagLogFile(tempDir.getAbsolutePath(), "tag.log")) {
50+
long offset = tagLogFile.write(tags, attributes);
51+
Pair<Map<String, String>, Map<String, String>> result = tagLogFile.read(offset);
52+
53+
Assert.assertEquals(tags, result.left);
54+
Assert.assertEquals(attributes, result.right);
55+
}
56+
}
57+
}

0 commit comments

Comments
 (0)