You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/02/14 05:32:45 UTC

[iotdb] branch master updated: [IOTDB-5393] Show Region creation time when execute show regions (#8958)

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

xingtanzjr 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 d0d89a1ed7 [IOTDB-5393] Show Region creation time when execute show regions (#8958)
d0d89a1ed7 is described below

commit d0d89a1ed712b6cff0d5f8d0ad269573839be714
Author: YongzaoDan <33...@users.noreply.github.com>
AuthorDate: Tue Feb 14 13:32:39 2023 +0800

    [IOTDB-5393] Show Region creation time when execute show regions (#8958)
---
 .../manager/partition/PartitionManager.java           |  2 +-
 .../persistence/partition/DatabasePartitionTable.java |  5 ++++-
 .../persistence/partition/PartitionInfo.java          |  2 +-
 .../confignode/persistence/partition/RegionGroup.java | 19 +++++++++++++------
 .../db/mpp/common/header/ColumnHeaderConstant.java    |  3 ++-
 .../execution/config/metadata/ShowRegionTask.java     |  8 +++++---
 thrift-confignode/src/main/thrift/confignode.thrift   |  1 +
 7 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
index b8fa5732e1..1529a8d594 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
@@ -667,9 +667,9 @@ public class PartitionManager {
     // Get static result
     RegionInfoListResp regionInfoListResp =
         (RegionInfoListResp) getConsensusManager().read(req).getDataset();
-    Map<TConsensusGroupId, Integer> allLeadership = getLoadManager().getLatestRegionLeaderMap();
 
     // Get cached result
+    Map<TConsensusGroupId, Integer> allLeadership = getLoadManager().getLatestRegionLeaderMap();
     regionInfoListResp
         .getRegionInfoList()
         .forEach(
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/DatabasePartitionTable.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/DatabasePartitionTable.java
index 10842fc1e1..c432edad3b 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/DatabasePartitionTable.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/DatabasePartitionTable.java
@@ -94,7 +94,9 @@ public class DatabasePartitionTable {
    */
   public void createRegionGroups(List<TRegionReplicaSet> replicaSets) {
     replicaSets.forEach(
-        replicaSet -> regionGroupMap.put(replicaSet.getRegionId(), new RegionGroup(replicaSet)));
+        replicaSet ->
+            regionGroupMap.put(
+                replicaSet.getRegionId(), new RegionGroup(System.currentTimeMillis(), replicaSet)));
   }
 
   /**
@@ -348,6 +350,7 @@ public class DatabasePartitionTable {
               regionInfo.setDataNodeId(dataNodeLocation.getDataNodeId());
               regionInfo.setClientRpcIp(dataNodeLocation.getClientRpcEndPoint().getIp());
               regionInfo.setClientRpcPort(dataNodeLocation.getClientRpcEndPoint().getPort());
+              regionInfo.setCreateTime(regionGroup.getCreateTime());
               regionInfoList.add(regionInfo);
             });
 
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
index 38849fc6af..5e9ef561e1 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
@@ -441,7 +441,7 @@ public class PartitionInfo implements SnapshotProcessor {
     return schemaNodeManagementResp;
   }
 
-  /** Get region information */
+  /** Get Region information */
   public DataSet getRegionInfoList(GetRegionInfoListPlan regionsInfoPlan) {
     RegionInfoListResp regionResp = new RegionInfoListResp();
     List<TRegionInfo> regionInfoList = new Vector<>();
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/RegionGroup.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/RegionGroup.java
index c844411911..4c4c7ffbc9 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/RegionGroup.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/RegionGroup.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.confignode.persistence.partition;
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
 import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
 import org.apache.iotdb.common.rpc.thrift.TSeriesPartitionSlot;
-import org.apache.iotdb.confignode.manager.partition.heartbeat.RegionGroupStatistics;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import org.apache.thrift.TException;
@@ -37,6 +36,7 @@ import java.util.concurrent.atomic.AtomicLong;
 
 public class RegionGroup {
 
+  private long createTime;
   private final TRegionReplicaSet replicaSet;
 
   // Map<TSeriesPartitionSlot, TTimePartitionSlot Count>
@@ -48,20 +48,24 @@ public class RegionGroup {
 
   private final AtomicLong totalTimeSlotCount;
 
-  private volatile RegionGroupStatistics statistics;
-
   public RegionGroup() {
+    this.createTime = 0;
     this.replicaSet = new TRegionReplicaSet();
     this.slotCountMap = new ConcurrentHashMap<>();
     this.totalTimeSlotCount = new AtomicLong();
   }
 
-  public RegionGroup(TRegionReplicaSet replicaSet) {
+  public RegionGroup(long createTime, TRegionReplicaSet replicaSet) {
+    this.createTime = createTime;
     this.replicaSet = replicaSet;
     this.slotCountMap = new ConcurrentHashMap<>();
     this.totalTimeSlotCount = new AtomicLong(0);
   }
 
+  public long getCreateTime() {
+    return createTime;
+  }
+
   public TConsensusGroupId getId() {
     return replicaSet.getRegionId();
   }
@@ -91,6 +95,7 @@ public class RegionGroup {
 
   public void serialize(OutputStream outputStream, TProtocol protocol)
       throws IOException, TException {
+    ReadWriteIOUtils.write(createTime, outputStream);
     replicaSet.write(protocol);
 
     ReadWriteIOUtils.write(slotCountMap.size(), outputStream);
@@ -104,6 +109,7 @@ public class RegionGroup {
 
   public void deserialize(InputStream inputStream, TProtocol protocol)
       throws IOException, TException {
+    this.createTime = ReadWriteIOUtils.readLong(inputStream);
     replicaSet.read(protocol);
 
     int size = ReadWriteIOUtils.readInt(inputStream);
@@ -130,12 +136,13 @@ public class RegionGroup {
         return false;
       }
     }
-    return replicaSet.equals(that.replicaSet)
+    return createTime == that.createTime
+        && replicaSet.equals(that.replicaSet)
         && totalTimeSlotCount.get() == that.totalTimeSlotCount.get();
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(replicaSet, slotCountMap, totalTimeSlotCount);
+    return Objects.hash(createTime, replicaSet, slotCountMap, totalTimeSlotCount);
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java
index 8bb9f7f3fb..baaf9a773c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java
@@ -263,7 +263,8 @@ public class ColumnHeaderConstant {
           new ColumnHeader(DATA_NODE_ID, TSDataType.INT32),
           new ColumnHeader(RPC_ADDRESS, TSDataType.TEXT),
           new ColumnHeader(RPC_PORT, TSDataType.INT32),
-          new ColumnHeader(ROLE, TSDataType.TEXT));
+          new ColumnHeader(ROLE, TSDataType.TEXT),
+          new ColumnHeader(CREATE_TIME, TSDataType.TEXT));
 
   public static final List<ColumnHeader> showDataNodesColumnHeaders =
       ImmutableList.of(
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowRegionTask.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowRegionTask.java
index 4cee887fa4..5b14e7f48c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowRegionTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowRegionTask.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.db.mpp.plan.execution.config.ConfigTaskResult;
 import org.apache.iotdb.db.mpp.plan.execution.config.IConfigTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.executor.IConfigTaskExecutor;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowRegionStatement;
+import org.apache.iotdb.db.utils.DateTimeUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
@@ -43,9 +44,7 @@ import java.util.stream.Collectors;
 
 public class ShowRegionTask implements IConfigTask {
 
-  private ShowRegionStatement showRegionStatement;
-
-  public ShowRegionTask() {}
+  private final ShowRegionStatement showRegionStatement;
 
   public ShowRegionTask(ShowRegionStatement showRegionStatement) {
     this.showRegionStatement = showRegionStatement;
@@ -90,6 +89,9 @@ public class ShowRegionTask implements IConfigTask {
         builder.getColumnBuilder(7).writeBinary(Binary.valueOf(regionInfo.getClientRpcIp()));
         builder.getColumnBuilder(8).writeInt(regionInfo.getClientRpcPort());
         builder.getColumnBuilder(9).writeBinary(Binary.valueOf(regionInfo.getRoleType()));
+        builder
+            .getColumnBuilder(10)
+            .writeBinary(new Binary(DateTimeUtils.convertLongToDate(regionInfo.getCreateTime())));
         builder.declarePosition();
       }
     }
diff --git a/thrift-confignode/src/main/thrift/confignode.thrift b/thrift-confignode/src/main/thrift/confignode.thrift
index 654617349a..d7890ec803 100644
--- a/thrift-confignode/src/main/thrift/confignode.thrift
+++ b/thrift-confignode/src/main/thrift/confignode.thrift
@@ -519,6 +519,7 @@ struct TRegionInfo {
   7: required i64 timeSlots
   8: optional string status
   9: optional string roleType
+  10: optional i64 createTime
 }
 
 struct TShowRegionResp {