This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch rel/0.11
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.11 by this push:
new fbcb90e [IOTDB-1035] [To rel/0.11] Fix bug in
getDeviceTimeseriesMetadata when querying non-exist device (#2151)
fbcb90e is described below
commit fbcb90e4743a2fce486d2ab08ad39b11970cfe98
Author: Zesong Sun <[email protected]>
AuthorDate: Wed Dec 2 11:39:49 2020 +0800
[IOTDB-1035] [To rel/0.11] Fix bug in getDeviceTimeseriesMetadata when
querying non-exist device (#2151)
---
.../iotdb/tsfile/read/TsFileSequenceReader.java | 18 +++++------
.../tsfile/read/TsFileSequenceReaderTest.java | 36 ++++++++++++----------
2 files changed, 28 insertions(+), 26 deletions(-)
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
index 16f932e..432b70b 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
@@ -601,7 +601,7 @@ public class TsFileSequenceReader implements AutoCloseable {
private List<TimeseriesMetadata> getDeviceTimeseriesMetadata(String device)
throws IOException {
MetadataIndexNode metadataIndexNode = tsFileMetaData.getMetadataIndex();
Pair<MetadataIndexEntry, Long> metadataIndexPair = getMetadataAndEndOffset(
- metadataIndexNode, device, MetadataIndexNodeType.INTERNAL_DEVICE,
false);
+ metadataIndexNode, device, MetadataIndexNodeType.INTERNAL_DEVICE,
true);
if (metadataIndexPair == null) {
return Collections.emptyList();
}
@@ -634,17 +634,15 @@ public class TsFileSequenceReader implements
AutoCloseable {
*/
private Pair<MetadataIndexEntry, Long>
getMetadataAndEndOffset(MetadataIndexNode metadataIndex,
String name, MetadataIndexNodeType type, boolean exactSearch) throws
IOException {
- Pair<MetadataIndexEntry, Long> childIndexEntry = metadataIndex
- .getChildIndexEntry(name, exactSearch);
- if (childIndexEntry == null) {
- return null;
- }
if (!metadataIndex.getNodeType().equals(type)) {
- return childIndexEntry;
+ return metadataIndex.getChildIndexEntry(name, exactSearch);
+ } else {
+ Pair<MetadataIndexEntry, Long> childIndexEntry = metadataIndex
+ .getChildIndexEntry(name, false);
+ ByteBuffer buffer = readData(childIndexEntry.left.getOffset(),
childIndexEntry.right);
+ return
getMetadataAndEndOffset(MetadataIndexNode.deserializeFrom(buffer), name, type,
+ false);
}
- ByteBuffer buffer = readData(childIndexEntry.left.getOffset(),
childIndexEntry.right);
- return getMetadataAndEndOffset(MetadataIndexNode.deserializeFrom(buffer),
name, type,
- exactSearch);
}
/**
diff --git
a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
index f8c80ec..4304103 100644
---
a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
+++
b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
@@ -96,22 +96,6 @@ public class TsFileSequenceReaderTest {
MetaMarker.handleUnexpectedMarker(marker);
}
}
- /*
- *
- * for (Entry<String, TsDeviceMetadataIndex> entry:
- * metaData.getDeviceMap().entrySet()) { int chunkGroupIndex = 0;
- * TsDeviceMetadata deviceMetadata =
- * reader.readTsDeviceMetaData(entry.getValue()); List<ChunkGroupMetaData>
- * chunkGroupMetaDataList = deviceMetadata.getChunkGroupMetaDataList();
- * List<Pair<Long, Long>> offsets =
- * deviceChunkGroupMetadataOffsets.get(entry.getKey()); for
(ChunkGroupMetaData
- * chunkGroupMetaData : chunkGroupMetaDataList) { Pair<Long, Long> pair =
- * offsets.get(chunkGroupIndex++);
- * Assert.assertEquals(chunkGroupMetaData.getStartOffsetOfChunkGroup(),
(long)
- * pair.left);
- * Assert.assertEquals(chunkGroupMetaData.getEndOffsetOfChunkGroup(),
(long)
- * pair.right); } }
- */
reader.close();
}
@@ -145,4 +129,24 @@ public class TsFileSequenceReaderTest {
reader.close();
}
+
+ @Test
+ public void testReadChunkMetadataInDevice() throws IOException {
+ TsFileSequenceReader reader = new TsFileSequenceReader(FILE_PATH);
+
+ // test for exist device "d2"
+ Map<String, List<ChunkMetadata>> chunkMetadataMap = reader
+ .readChunkMetadataInDevice("d2");
+ int[] res = new int[]{20, 75, 100, 13};
+
+ Assert.assertEquals(4, chunkMetadataMap.size());
+ for (int i = 0; i < chunkMetadataMap.size(); i++) {
+ int id = i + 1;
+ Assert.assertEquals(res[i], chunkMetadataMap.get("s" +
id).get(0).getNumOfPoints());
+ }
+
+ // test for non-exist device "d3"
+ Assert.assertTrue(reader.readChunkMetadataInDevice("d3").isEmpty());
+ reader.close();
+ }
}