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();
+  }
 }

Reply via email to