This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch rel/0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.12 by this push:
new 2489b6e [IOTDB-1529]Fix mlog recover idx bug and synchronize
setStorageGroup (#3636)
2489b6e is described below
commit 2489b6e871a695d0db8cc5dd2a781b600c48969a
Author: zyk990424 <[email protected]>
AuthorDate: Tue Jul 27 20:00:31 2021 +0800
[IOTDB-1529]Fix mlog recover idx bug and synchronize setStorageGroup (#3636)
---
.../org/apache/iotdb/db/metadata/MManager.java | 18 ++++++++++------
.../java/org/apache/iotdb/db/metadata/MTree.java | 25 +++++++++++++---------
2 files changed, 26 insertions(+), 17 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 7dad6a9..b705684 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
@@ -286,18 +286,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);
}
}
return idx;
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 b5a7581..b0ad69c 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
@@ -415,18 +415,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);
}
}