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

marklau99 pushed a commit to branch IOTDB-3455
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/IOTDB-3455 by this push:
     new b8c792a44f add recover
b8c792a44f is described below

commit b8c792a44fbfb2f65f2ea984b976d66492930f98
Author: Liu Xuxin <[email protected]>
AuthorDate: Thu Aug 25 19:33:48 2022 +0800

    add recover
---
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  2 +-
 .../iotdb/db/localconfignode/LocalConfigNode.java  | 50 +++++++---------------
 .../db/localconfignode/LocalDataPartitionInfo.java | 11 +++--
 .../localconfignode/LocalDataPartitionTable.java   | 25 ++++++-----
 4 files changed, 38 insertions(+), 50 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index a7bb686b98..379ba1fe6c 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -813,7 +813,7 @@ public class IoTDBConfig {
   private int ioTaskQueueSizeForFlushing = 10;
 
   /** the number of data regions per user-defined storage group */
-  private int dataRegionNum = 3;
+  private int dataRegionNum = 1;
 
   /** the interval to log recover progress of each vsg when starting iotdb */
   private long recoveryLogIntervalInMs = 5_000L;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalConfigNode.java 
b/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalConfigNode.java
index d533abae61..9fc6f306e6 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalConfigNode.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalConfigNode.java
@@ -203,7 +203,7 @@ public class LocalConfigNode {
       if (config.isMppMode() && !config.isClusterMode()) {
         Map<String, List<DataRegionId>> recoveredLocalDataRegionInfo =
             storageEngine.getLocalDataRegionInfo();
-        dataPartitionTable.init(null);
+        dataPartitionTable.init(recoveredLocalDataRegionInfo);
       }
     } catch (MetadataException | IOException e) {
       logger.error(
@@ -966,40 +966,20 @@ public class LocalConfigNode {
           deviceToRegionsMap = new HashMap<>();
       for (DataPartitionQueryParam dataPartitionQueryParam : 
dataPartitionQueryParams) {
         String deviceId = dataPartitionQueryParam.getDevicePath();
-        List<TTimePartitionSlot> timePartitionSlots =
-            dataPartitionQueryParam.getTimePartitionSlotList();
-        if (timePartitionSlots.size() == 0) {
-          // if there is no time slot for in the query params
-          // we return all the region id for this sg
-          PartialPath storageGroup =
-              storageGroupSchemaManager.getBelongedStorageGroup(new 
PartialPath(deviceId));
-          List<DataRegionId> regionIdForCurrSg = 
getAllRegionForOneSg(storageGroup);
-          List<TRegionReplicaSet> replicaSetList = new ArrayList<>();
-          regionIdForCurrSg.forEach(
-              x ->
-                  replicaSetList.add(
-                      
genStandaloneRegionReplicaSet(TConsensusGroupType.DataRegion, x.getId())));
-          deviceToRegionsMap
-              .computeIfAbsent(executor.getSeriesPartitionSlot(deviceId), x -> 
new HashMap<>())
-              .put(new 
TTimePartitionSlot(STANDALONE_MOCK_TIME_SLOT_START_TIME), replicaSetList);
-          continue;
-        }
-        for (TTimePartitionSlot timePartitionSlot : timePartitionSlots) {
-          DataRegionId dataRegionId = getBelongedDataRegionId(new 
PartialPath(deviceId));
-          // dataRegionId is null means the DataRegion is not created,
-          // use an empty dataPartitionMap to init DataPartition
-          if (dataRegionId != null) {
-            Map<TTimePartitionSlot, List<TRegionReplicaSet>> 
timePartitionToRegionsMap =
-                deviceToRegionsMap.getOrDefault(
-                    executor.getSeriesPartitionSlot(deviceId), new 
HashMap<>());
-            timePartitionToRegionsMap.put(
-                timePartitionSlot,
-                Collections.singletonList(
-                    genStandaloneRegionReplicaSet(
-                        TConsensusGroupType.DataRegion, 
dataRegionId.getId())));
-            deviceToRegionsMap.put(
-                executor.getSeriesPartitionSlot(deviceId), 
timePartitionToRegionsMap);
-          }
+        DataRegionId dataRegionId = getBelongedDataRegionId(new 
PartialPath(deviceId));
+        // dataRegionId is null means the DataRegion is not created,
+        // use an empty dataPartitionMap to init DataPartition
+        if (dataRegionId != null) {
+          Map<TTimePartitionSlot, List<TRegionReplicaSet>> 
timePartitionToRegionsMap =
+              deviceToRegionsMap.getOrDefault(
+                  executor.getSeriesPartitionSlot(deviceId), new HashMap<>());
+          timePartitionToRegionsMap.put(
+              new TTimePartitionSlot(STANDALONE_MOCK_TIME_SLOT_START_TIME),
+              Collections.singletonList(
+                  genStandaloneRegionReplicaSet(
+                      TConsensusGroupType.DataRegion, dataRegionId.getId())));
+          deviceToRegionsMap.put(
+              executor.getSeriesPartitionSlot(deviceId), 
timePartitionToRegionsMap);
         }
       }
       if (!deviceToRegionsMap.isEmpty()) {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalDataPartitionInfo.java
 
b/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalDataPartitionInfo.java
index 04305c4b32..0802bfc4d8 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalDataPartitionInfo.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalDataPartitionInfo.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.commons.consensus.DataRegionId;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
 
-import java.nio.ByteBuffer;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -48,9 +47,15 @@ public class LocalDataPartitionInfo {
     return LocalDataPartitionTableHolder.INSTANCE;
   }
 
-  public synchronized void init(ByteBuffer byteBuffer) throws 
IllegalPathException {
+  public synchronized void init(Map<String, List<DataRegionId>> regionInfos)
+      throws IllegalPathException {
     partitionTableMap = new ConcurrentHashMap<>();
-    // TODO: recover partition table from input stream
+    for (Map.Entry<String, List<DataRegionId>> entry : regionInfos.entrySet()) 
{
+      String storageGroupName = entry.getKey();
+      List<DataRegionId> regionIds = entry.getValue();
+      LocalDataPartitionTable table = new 
LocalDataPartitionTable(storageGroupName, regionIds);
+      partitionTableMap.put(new PartialPath(storageGroupName), table);
+    }
   }
 
   public synchronized void clear() {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalDataPartitionTable.java
 
b/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalDataPartitionTable.java
index 75c8f6c636..726bf351d6 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalDataPartitionTable.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalDataPartitionTable.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.localconfignode;
 
+import org.apache.iotdb.commons.consensus.ConsensusGroupId;
 import org.apache.iotdb.commons.consensus.DataRegionId;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -26,29 +27,31 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.List;
 
 public class LocalDataPartitionTable {
   private static final Logger LOG = 
LoggerFactory.getLogger(LocalDataPartitionTable.class);
 
   private String storageGroupName;
-  private final int regionNum = 
IoTDBDescriptor.getInstance().getConfig().getDataRegionNum();
+  private final int regionNum;
   private DataRegionId[] regionIds;
 
-  public LocalDataPartitionTable(String storageGroupName) {
+  public LocalDataPartitionTable(String storageGroupName, List<DataRegionId> 
regions) {
     this.storageGroupName = storageGroupName;
-    this.regionIds = new DataRegionId[regionNum];
-  }
-
-  public void init(ByteBuffer buffer) {
-    // TODO: init from byte buffer
+    this.regionNum = regions.size();
+    regions.sort(Comparator.comparingInt(ConsensusGroupId::getId));
+    this.regionIds = new DataRegionId[regions.size()];
+    for (int i = 0; i < regions.size(); ++i) {
+      regionIds[i] = regions.get(i);
+    }
   }
 
-  public void serialize(OutputStream outputStream) {
-    // TODO: serialize the table to output stream
+  public LocalDataPartitionTable(String storageGroupName) {
+    this.storageGroupName = storageGroupName;
+    this.regionNum = 
IoTDBDescriptor.getInstance().getConfig().getDataRegionNum();
+    this.regionIds = new DataRegionId[regionNum];
   }
 
   /**

Reply via email to