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