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];
}
/**