You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2021/07/27 12:02:22 UTC
[iotdb] branch master updated: [IOTDB-1529]Fix mlog recover idx bug
and synchronize setStorageGroup (#3635)
This is an automated email from the ASF dual-hosted git repository.
qiaojialin 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 95e3b69 [IOTDB-1529]Fix mlog recover idx bug and synchronize setStorageGroup (#3635)
95e3b69 is described below
commit 95e3b69402cd40555d8a9654833b552d7c7e3d9d
Author: zyk990424 <38...@users.noreply.github.com>
AuthorDate: Tue Jul 27 20:02:00 2021 +0800
[IOTDB-1529]Fix mlog recover idx bug and synchronize setStorageGroup (#3635)
---
.../org/apache/iotdb/db/metadata/MManager.java | 19 +++++++++-------
.../java/org/apache/iotdb/db/metadata/MTree.java | 25 +++++++++++++---------
2 files changed, 26 insertions(+), 18 deletions(-)
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 0a75b02..b5e3ff0 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
@@ -294,19 +294,22 @@ public class MManager {
private int applyMlog(MLogReader mLogReader) {
int idx = 0;
-
+ PhysicalPlan plan;
while (mLogReader.hasNext()) {
- PhysicalPlan plan = null;
try {
plan = mLogReader.next();
- if (plan == null) {
- continue;
- }
- operation(plan);
idx++;
} catch (Exception e) {
- logger.error(
- "Can not operate cmd {} for err:", plan == null ? "" : plan.getOperatorType(), e);
+ logger.error("Parse mlog error at lineNumber {} because:", idx, e);
+ break;
+ }
+ if (plan == null) {
+ continue;
+ }
+ try {
+ operation(plan);
+ } catch (MetadataException | IOException e) {
+ logger.error("Can not operate cmd {} for err:", plan.getOperatorType(), e);
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
index 9dc7968..f18f689 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
@@ -498,18 +498,23 @@ public class MTree implements Serializable {
cur = cur.getChild(nodeNames[i]);
i++;
}
- if (cur.hasChild(nodeNames[i])) {
- // node b has child sg
- if (cur.getChild(nodeNames[i]) instanceof StorageGroupMNode) {
- throw new StorageGroupAlreadySetException(path.getFullPath());
+
+ // synchronize check and add, we need addChild become atomic operation
+ // only write on mtree will be synchronized
+ synchronized (this) {
+ if (cur.hasChild(nodeNames[i])) {
+ // node b has child sg
+ if (cur.getChild(nodeNames[i]) instanceof StorageGroupMNode) {
+ throw new StorageGroupAlreadySetException(path.getFullPath());
+ } else {
+ throw new StorageGroupAlreadySetException(path.getFullPath(), true);
+ }
} else {
- throw new StorageGroupAlreadySetException(path.getFullPath(), true);
+ StorageGroupMNode storageGroupMNode =
+ new StorageGroupMNode(
+ cur, nodeNames[i], IoTDBDescriptor.getInstance().getConfig().getDefaultTTL());
+ cur.addChild(nodeNames[i], storageGroupMNode);
}
- } else {
- StorageGroupMNode storageGroupMNode =
- new StorageGroupMNode(
- cur, nodeNames[i], IoTDBDescriptor.getInstance().getConfig().getDefaultTTL());
- cur.addChild(nodeNames[i], storageGroupMNode);
}
}