This is an automated email from the ASF dual-hosted git repository.

tanxinyu 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 1de3067  [IOTDB-2180] Fix show latest timeseries in cluster (#4611)
1de3067 is described below

commit 1de3067ab8178a25b352c15340705e962cfbed0c
Author: BaiJian <[email protected]>
AuthorDate: Wed Dec 22 15:38:12 2021 +0800

    [IOTDB-2180] Fix show latest timeseries in cluster (#4611)
---
 .../handlers/caller/ShowTimeSeriesHandler.java       | 20 ++++----------------
 .../java/org/apache/iotdb/db/metadata/MManager.java  |  4 ++++
 .../iotdb/db/query/dataset/ShowTimeSeriesResult.java | 13 +++++++++++++
 .../db/query/dataset/ShowTimeSeriesResultTest.java   |  2 ++
 4 files changed, 23 insertions(+), 16 deletions(-)

diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/ShowTimeSeriesHandler.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/ShowTimeSeriesHandler.java
index 4d38687..55ea94f 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/ShowTimeSeriesHandler.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/ShowTimeSeriesHandler.java
@@ -40,21 +40,6 @@ import java.util.stream.Collectors;
 /** Handler for getting the schemas from each data group concurrently. */
 public class ShowTimeSeriesHandler implements 
AsyncMethodCallback<List<ShowTimeSeriesResult>> {
 
-  private static class ShowTimeSeriesResultComparator implements 
Comparator<ShowTimeSeriesResult> {
-
-    @Override
-    public int compare(ShowTimeSeriesResult o1, ShowTimeSeriesResult o2) {
-      if (o1 == null && o2 == null) {
-        return 0;
-      } else if (o1 == null) {
-        return -1;
-      } else if (o2 == null) {
-        return 1;
-      }
-      return o1.getName().compareTo(o2.getName());
-    }
-  }
-
   private static final Logger logger = 
LoggerFactory.getLogger(ShowTimeSeriesHandler.class);
 
   /** String representation of a partial path for logging */
@@ -127,7 +112,10 @@ public class ShowTimeSeriesHandler implements 
AsyncMethodCallback<List<ShowTimeS
     }
 
     return timeSeriesNameToResult.values().stream()
-        .sorted(new ShowTimeSeriesResultComparator())
+        .sorted(
+            Comparator.comparingLong(ShowTimeSeriesResult::getLastTime)
+                .reversed()
+                .thenComparing(ShowTimeSeriesResult::getName))
         .collect(Collectors.toList());
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index 20fcf0f..eaa8fed 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -1148,6 +1148,9 @@ public class MManager {
                   measurementSchema.getType(),
                   measurementSchema.getEncodingType(),
                   measurementSchema.getCompressor(),
+                  leaf.getLastCacheContainer().getCachedLast() != null
+                      ? 
leaf.getLastCacheContainer().getCachedLast().getTimestamp()
+                      : 0,
                   tagAndAttributePair.left,
                   tagAndAttributePair.right));
           if (limit != 0) {
@@ -1192,6 +1195,7 @@ public class MManager {
                 TSDataType.valueOf(ansString.right[2]),
                 TSEncoding.valueOf(ansString.right[3]),
                 CompressionType.valueOf(ansString.right[4]),
+                ansString.right[6] != null ? 
Long.parseLong(ansString.right[6]) : 0,
                 tagAndAttributePair.left,
                 tagAndAttributePair.right));
       } catch (IOException e) {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResult.java
 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResult.java
index e202d58..92e2f9d 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResult.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResult.java
@@ -39,6 +39,7 @@ public class ShowTimeSeriesResult extends ShowResult {
   private CompressionType compressor;
   private Map<String, String> tags;
   private Map<String, String> attributes;
+  private long lastTime;
 
   public ShowTimeSeriesResult(
       String name,
@@ -47,6 +48,7 @@ public class ShowTimeSeriesResult extends ShowResult {
       TSDataType dataType,
       TSEncoding encoding,
       CompressionType compressor,
+      long lastTime,
       Map<String, String> tags,
       Map<String, String> attributes) {
     super(name, sgName);
@@ -56,6 +58,7 @@ public class ShowTimeSeriesResult extends ShowResult {
     this.compressor = compressor;
     this.tags = tags;
     this.attributes = attributes;
+    this.lastTime = lastTime;
   }
 
   public ShowTimeSeriesResult() {
@@ -86,6 +89,10 @@ public class ShowTimeSeriesResult extends ShowResult {
     return attributes;
   }
 
+  public long getLastTime() {
+    return lastTime;
+  }
+
   @Override
   public boolean equals(Object o) {
     if (this == o) {
@@ -126,6 +133,9 @@ public class ShowTimeSeriesResult extends ShowResult {
     ReadWriteIOUtils.write(encoding, outputStream);
     ReadWriteIOUtils.write(compressor, outputStream);
 
+    // write last time
+    ReadWriteIOUtils.write(lastTime, outputStream);
+
     // flag for tags and attributes
     writeNullable(tags, outputStream);
     writeNullable(attributes, outputStream);
@@ -142,6 +152,9 @@ public class ShowTimeSeriesResult extends ShowResult {
     result.encoding = ReadWriteIOUtils.readEncoding(buffer);
     result.compressor = ReadWriteIOUtils.readCompressionType(buffer);
 
+    // read last time
+    result.lastTime = ReadWriteIOUtils.readLong(buffer);
+
     // flag for tag
     if (buffer.get() == 1) {
       int tagSize = buffer.getInt();
diff --git 
a/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResultTest.java
 
b/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResultTest.java
index 6f27e2d..17c0248 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResultTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResultTest.java
@@ -46,6 +46,7 @@ public class ShowTimeSeriesResultTest {
             TSDataType.DOUBLE,
             TSEncoding.GORILLA,
             CompressionType.SNAPPY,
+            100,
             tag,
             attribute);
 
@@ -60,6 +61,7 @@ public class ShowTimeSeriesResultTest {
     Assert.assertEquals(TSDataType.DOUBLE, result.getDataType());
     Assert.assertEquals(TSEncoding.GORILLA, result.getEncoding());
     Assert.assertEquals(CompressionType.SNAPPY, result.getCompressor());
+    Assert.assertEquals(100, result.getLastTime());
     Assert.assertEquals(tag, result.getTag());
     Assert.assertEquals(attribute, result.getAttribute());
   }

Reply via email to