This is an automated email from the ASF dual-hosted git repository.
zyk 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 788b0bc9523 Refactor Device Node Implementation in SchemaRegion
(#11661)
788b0bc9523 is described below
commit 788b0bc95238c3eb33c7ccfc93062fd632ed4c7c
Author: Marcos_Zyk <[email protected]>
AuthorDate: Wed Dec 6 22:26:08 2023 +0800
Refactor Device Node Implementation in SchemaRegion (#11661)
---
.../confignode/persistence/schema/ConfigMTree.java | 2 +-
.../persistence/schema/mnode/IConfigMNode.java | 28 ++
.../schema/mnode/basic/ConfigBasicMNode.java | 50 +---
.../mnode/impl/ConfigBasicInternalMNode.java | 37 +--
.../mtree/impl/mem/MTreeBelowSGMemoryImpl.java | 28 +-
.../schemaregion/mtree/impl/mem/MemMTreeStore.java | 23 +-
.../mtree/impl/mem/mnode/basic/BasicMNode.java | 26 +-
.../impl/mem/mnode/factory/MemMNodeFactory.java | 11 +-
.../impl/mem/mnode/impl/BasicInternalMNode.java | 83 +++---
.../impl/mem/mnode/impl/DatabaseDeviceMNode.java | 37 ---
.../mtree/impl/mem/mnode/impl/DatabaseMNode.java | 17 +-
.../mtree/impl/mem/mnode/info/LogicalViewInfo.java | 2 +-
.../impl/mem/snapshot/MemMTreeSnapshotUtil.java | 75 +++---
.../mtree/impl/pbtree/CachedMTreeStore.java | 43 ++-
.../mtree/impl/pbtree/MTreeBelowSGCachedImpl.java | 28 +-
.../impl/pbtree/mnode/basic/CachedBasicMNode.java | 25 +-
.../pbtree/mnode/factory/CacheMNodeFactory.java | 11 +-
.../mnode/impl/CachedBasicInternalMNode.java | 91 ++++---
.../mnode/impl/CachedDatabaseDeviceMNode.java | 49 ----
.../pbtree/mnode/impl/CachedDatabaseMNode.java | 18 +-
.../impl/pbtree/mnode/impl/CachedDeviceMNode.java | 48 ----
.../schemaregion/utils/MNodeUtils.java | 54 +---
.../apache/iotdb/db/metadata/mnode/MNodeTest.java | 31 +--
.../metadata/mtree/schemafile/SchemaFileTest.java | 2 +-
.../apache/iotdb/commons/schema/node/IMNode.java | 12 +-
.../node/common/AbstractAboveDatabaseMNode.java | 18 +-
.../node/common/AbstractDatabaseDeviceMNode.java | 299 ---------------------
.../schema/node/common/AbstractDatabaseMNode.java | 26 +-
.../node/common/AbstractMeasurementMNode.java | 19 +-
...actDeviceMNode.java => DeviceMNodeWrapper.java} | 130 ++++-----
.../commons/schema/node/role/IDeviceMNode.java | 2 +-
.../commons/schema/node/role/IInternalMNode.java} | 37 ++-
.../commons/schema/node/visitor/MNodeVisitor.java | 7 -
33 files changed, 377 insertions(+), 992 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java
index 72dae94e440..9f4a226daca 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java
@@ -427,7 +427,7 @@ public class ConfigMTree {
result.add(
new TSchemaNode(
getPartialPathFromRootToNode(node).getFullPath(),
- node.getMNodeType(true).getNodeType()));
+ node.getMNodeType().getNodeType()));
return null;
}
}) {
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/IConfigMNode.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/IConfigMNode.java
index 5337bd60218..805c270ec46 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/IConfigMNode.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/IConfigMNode.java
@@ -19,6 +19,9 @@
package org.apache.iotdb.confignode.persistence.schema.mnode;
import org.apache.iotdb.commons.schema.node.IMNode;
+import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
+import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
public interface IConfigMNode extends IMNode<IConfigMNode> {
@@ -42,4 +45,29 @@ public interface IConfigMNode extends IMNode<IConfigMNode> {
default TDatabaseSchema getDatabaseSchema() {
throw new UnsupportedOperationException();
}
+
+ @Override
+ default boolean isDevice() {
+ return false;
+ }
+
+ @Override
+ default boolean isMeasurement() {
+ return false;
+ }
+
+ @Override
+ default IInternalMNode<IConfigMNode> getAsInternalMNode() {
+ throw new UnsupportedOperationException("Wrong node type");
+ }
+
+ @Override
+ default IDeviceMNode<IConfigMNode> getAsDeviceMNode() {
+ throw new UnsupportedOperationException("Wrong node type");
+ }
+
+ @Override
+ default IMeasurementMNode<IConfigMNode> getAsMeasurementMNode() {
+ throw new UnsupportedOperationException("Wrong node type");
+ }
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/basic/ConfigBasicMNode.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/basic/ConfigBasicMNode.java
index 6686227709a..47575892790 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/basic/ConfigBasicMNode.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/basic/ConfigBasicMNode.java
@@ -20,10 +20,7 @@ package
org.apache.iotdb.confignode.persistence.schema.mnode.basic;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.node.MNodeType;
import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
-import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
-import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor;
import org.apache.iotdb.confignode.persistence.schema.mnode.IConfigMNode;
@@ -33,7 +30,7 @@ import
org.apache.iotdb.confignode.persistence.schema.mnode.info.ConfigMNodeInfo
import java.util.ArrayList;
import java.util.List;
-public class ConfigBasicMNode implements IConfigMNode {
+public abstract class ConfigBasicMNode implements IConfigMNode {
private static final long serialVersionUID = -770028375899514063L;
@@ -150,21 +147,6 @@ public class ConfigBasicMNode implements IConfigMNode {
return null;
}
- /**
- * Replace a child of this mnode. New child's name must be the same as old
child's name.
- *
- * @param oldChildName measurement name
- * @param newChildNode new child node
- */
- @Override
- public synchronized void replaceChild(String oldChildName, IConfigMNode
newChildNode) {}
-
- @Override
- public void moveDataToNewMNode(IConfigMNode newMNode) {
- newMNode.setParent(parent);
-
newMNode.setSchemaTemplateId(configMNodeInfo.getSchemaTemplateIdWithState());
- }
-
@Override
public IMNodeContainer<IConfigMNode> getChildren() {
return ConfigMNodeContainer.emptyMNodeContainer();
@@ -183,36 +165,11 @@ public class ConfigBasicMNode implements IConfigMNode {
return false;
}
- @Override
- public boolean isDevice() {
- return false;
- }
-
- @Override
- public boolean isMeasurement() {
- return false;
- }
-
- @Override
- public MNodeType getMNodeType(Boolean isConfig) {
- return isConfig ? MNodeType.SG_INTERNAL : MNodeType.INTERNAL;
- }
-
@Override
public IDatabaseMNode<IConfigMNode> getAsDatabaseMNode() {
throw new UnsupportedOperationException("Wrong MNode Type");
}
- @Override
- public IDeviceMNode<IConfigMNode> getAsDeviceMNode() {
- throw new UnsupportedOperationException("Wrong MNode Type");
- }
-
- @Override
- public IMeasurementMNode<IConfigMNode> getAsMeasurementMNode() {
- throw new UnsupportedOperationException("Wrong MNode Type");
- }
-
@Override
public <R, C> R accept(MNodeVisitor<R, C> visitor, C context) {
return visitor.visitBasicMNode(this, context);
@@ -271,9 +228,4 @@ public class ConfigBasicMNode implements IConfigMNode {
public int estimateSize() {
return 8 + 8 + 8 + 8 + 8 + 8 + 28 + configMNodeInfo.estimateSize();
}
-
- @Override
- public IConfigMNode getAsMNode() {
- return this;
- }
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/impl/ConfigBasicInternalMNode.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/impl/ConfigBasicInternalMNode.java
index 293c4388ce6..b61d5570a60 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/impl/ConfigBasicInternalMNode.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/impl/ConfigBasicInternalMNode.java
@@ -18,6 +18,7 @@
*/
package org.apache.iotdb.confignode.persistence.schema.mnode.impl;
+import org.apache.iotdb.commons.schema.node.MNodeType;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import org.apache.iotdb.confignode.persistence.schema.mnode.IConfigMNode;
import
org.apache.iotdb.confignode.persistence.schema.mnode.basic.ConfigBasicMNode;
@@ -124,37 +125,6 @@ public class ConfigBasicInternalMNode extends
ConfigBasicMNode {
return null;
}
- /**
- * Replace a child of this mnode. New child's name must be the same as old
child's name.
- *
- * @param oldChildName measurement name
- * @param newChildNode new child node
- */
- @Override
- public synchronized void replaceChild(String oldChildName, IConfigMNode
newChildNode) {
- if (!oldChildName.equals(newChildNode.getName())) {
- throw new RuntimeException("New child's name must be the same as old
child's name!");
- }
- IConfigMNode oldChildNode = this.getChild(oldChildName);
- if (oldChildNode == null) {
- return;
- }
-
- oldChildNode.moveDataToNewMNode(newChildNode);
-
- children.replace(newChildNode.getName(), newChildNode);
- }
-
- @Override
- public void moveDataToNewMNode(IConfigMNode newMNode) {
- super.moveDataToNewMNode(newMNode);
-
- if (children != null) {
- newMNode.setChildren(children);
- children.forEach((childName, childNode) ->
childNode.setParent(newMNode));
- }
- }
-
@Override
public IMNodeContainer<IConfigMNode> getChildren() {
if (children == null) {
@@ -174,6 +144,11 @@ public class ConfigBasicInternalMNode extends
ConfigBasicMNode {
return 8 + 80 + super.estimateSize();
}
+ @Override
+ public MNodeType getMNodeType() {
+ return MNodeType.SG_INTERNAL;
+ }
+
@Override
public IConfigMNode getAsMNode() {
return this;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
index 3dbd8bf2dcd..ffb8cf41052 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.SchemaConstant;
-import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
@@ -158,13 +157,6 @@ public class MTreeBelowSGMemoryImpl {
storageGroupMNode = null;
}
- protected void replaceStorageGroupMNode(IDatabaseMNode<IMemMNode> newMNode) {
- this.storageGroupMNode
- .getParent()
- .replaceChild(this.storageGroupMNode.getName(), newMNode.getAsMNode());
- this.storageGroupMNode = newMNode.getAsMNode();
- }
-
public synchronized boolean createSnapshot(File snapshotDir) {
return store.createSnapshot(snapshotDir);
}
@@ -256,9 +248,6 @@ public class MTreeBelowSGMemoryImpl {
entityMNode = device.getAsDeviceMNode();
} else {
entityMNode = store.setToEntity(device);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
}
// create a non-aligned timeseries
@@ -344,9 +333,6 @@ public class MTreeBelowSGMemoryImpl {
} else {
entityMNode = store.setToEntity(device);
entityMNode.setAligned(true);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
}
// create a aligned timeseries
@@ -547,9 +533,6 @@ public class MTreeBelowSGMemoryImpl {
if (!hasMeasurement) {
synchronized (this) {
curNode = store.setToInternal(entityMNode);
- if (curNode.isDatabase()) {
- replaceStorageGroupMNode(curNode.getAsDatabaseMNode());
- }
}
} else if (!hasNonViewMeasurement) {
// has some measurement but they are all logical view
@@ -828,9 +811,6 @@ public class MTreeBelowSGMemoryImpl {
entityMNode = cur.getAsDeviceMNode();
} else {
entityMNode = store.setToEntity(cur);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
}
}
@@ -933,9 +913,6 @@ public class MTreeBelowSGMemoryImpl {
entityMNode = cur.getAsDeviceMNode();
} else {
entityMNode = store.setToEntity(cur);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
}
if (!entityMNode.isAligned()) {
@@ -1117,7 +1094,7 @@ public class MTreeBelowSGMemoryImpl {
protected INodeSchemaInfo collectMNode(IMemMNode node) {
return new ShowNodesResult(
- getPartialPathFromRootToNode(node).getFullPath(),
node.getMNodeType(false));
+ getPartialPathFromRootToNode(node).getFullPath(),
node.getMNodeType());
}
};
collector.setTargetLevel(showNodesPlan.getLevel());
@@ -1194,9 +1171,6 @@ public class MTreeBelowSGMemoryImpl {
entityMNode = device.getAsDeviceMNode();
} else {
entityMNode = store.setToEntity(device);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
// this parent has no measurement before. The leafName is his first
child who is a logical
// view.
entityMNode.setAligned(null);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MemMTreeStore.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MemMTreeStore.java
index d5df95c4d5f..2eab7c65563 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MemMTreeStore.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MemMTreeStore.java
@@ -139,29 +139,24 @@ public class MemMTreeStore implements
IMTreeStore<IMemMNode> {
@Override
public IDeviceMNode<IMemMNode> setToEntity(IMemMNode node) {
- IDeviceMNode<IMemMNode> result = MNodeUtils.setToEntity(node, nodeFactory);
- if (result != node) {
+ int rawSize = node.estimateSize();
+ if (MNodeUtils.setToEntity(node)) {
regionStatistics.addDevice();
- requestMemory(result.estimateSize() - node.estimateSize());
+ requestMemory(node.estimateSize() - rawSize);
}
- if (result.isDatabase()) {
- root = result.getAsMNode();
- }
- return result;
+ return node.getAsDeviceMNode();
}
@Override
public IMemMNode setToInternal(IDeviceMNode<IMemMNode> entityMNode) {
- IMemMNode result = MNodeUtils.setToInternal(entityMNode, nodeFactory);
- if (result != entityMNode) {
+ int rawSize = entityMNode.estimateSize();
+ if (MNodeUtils.setToInternal(entityMNode)) {
regionStatistics.deleteDevice();
- releaseMemory(entityMNode.estimateSize() - result.estimateSize());
- }
- if (result.isDatabase()) {
- root = result;
+ releaseMemory(rawSize - entityMNode.estimateSize());
}
- return result;
+
+ return entityMNode.getAsMNode();
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/basic/BasicMNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/basic/BasicMNode.java
index 7e4f5cd074f..ccacef6c7eb 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/basic/BasicMNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/basic/BasicMNode.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.node.MNodeType;
import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor;
@@ -155,22 +156,6 @@ public class BasicMNode implements IMemMNode {
return null;
}
- /**
- * Replace a child of this mnode. New child's name must be the same as old
child's name.
- *
- * @param oldChildName measurement name
- * @param newChildNode new child node
- */
- @Override
- public synchronized void replaceChild(String oldChildName, IMemMNode
newChildNode) {
- // Do nothing
- }
-
- @Override
- public void moveDataToNewMNode(IMemMNode newMNode) {
- newMNode.setParent(parent);
- }
-
@Override
public IMNodeContainer<IMemMNode> getChildren() {
return MemMNodeContainer.emptyMNodeContainer();
@@ -200,8 +185,8 @@ public class BasicMNode implements IMemMNode {
}
@Override
- public MNodeType getMNodeType(Boolean isConfig) {
- return isConfig ? MNodeType.SG_INTERNAL : MNodeType.INTERNAL;
+ public MNodeType getMNodeType() {
+ return MNodeType.UNIMPLEMENT;
}
@Override
@@ -214,6 +199,11 @@ public class BasicMNode implements IMemMNode {
throw new UnsupportedOperationException("Wrong MNode Type");
}
+ @Override
+ public IInternalMNode<IMemMNode> getAsInternalMNode() {
+ throw new UnsupportedOperationException("Wrong MNode Type");
+ }
+
@Override
public IMeasurementMNode<IMemMNode> getAsMeasurementMNode() {
throw new UnsupportedOperationException("Wrong MNode Type");
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/factory/MemMNodeFactory.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/factory/MemMNodeFactory.java
index 05c3e403506..186fa3c2f40 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/factory/MemMNodeFactory.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/factory/MemMNodeFactory.java
@@ -26,10 +26,9 @@ import
org.apache.iotdb.commons.schema.node.utils.MNodeFactory;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.IMemMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl.AboveDatabaseMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl.BasicInternalMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl.DatabaseDeviceMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl.DatabaseMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl.DeviceMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl.MeasurementMNode;
+import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.DeviceInfo;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
@MNodeFactory
@@ -43,7 +42,9 @@ public class MemMNodeFactory implements
IMNodeFactory<IMemMNode> {
@Override
public IDeviceMNode<IMemMNode> createDeviceMNode(IMemMNode parent, String
name) {
- return new DeviceMNode(parent, name);
+ BasicInternalMNode internalMNode = new BasicInternalMNode(parent, name);
+ internalMNode.setDeviceInfo(new DeviceInfo<>());
+ return internalMNode.getAsDeviceMNode();
}
@Override
@@ -59,7 +60,9 @@ public class MemMNodeFactory implements
IMNodeFactory<IMemMNode> {
@Override
public IMemMNode createDatabaseDeviceMNode(IMemMNode parent, String name,
long dataTTL) {
- return new DatabaseDeviceMNode(parent, name, dataTTL);
+ DatabaseMNode databaseMNode = new DatabaseMNode(parent, name, dataTTL);
+ databaseMNode.setDeviceInfo(new DeviceInfo<>());
+ return databaseMNode.getAsMNode();
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/BasicInternalMNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/BasicInternalMNode.java
index 0b748818e68..904a0a5b5ba 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/BasicInternalMNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/BasicInternalMNode.java
@@ -19,6 +19,11 @@
package
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl;
+import org.apache.iotdb.commons.schema.node.MNodeType;
+import org.apache.iotdb.commons.schema.node.common.DeviceMNodeWrapper;
+import org.apache.iotdb.commons.schema.node.info.IDeviceInfo;
+import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.IMemMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.basic.BasicMNode;
@@ -28,7 +33,7 @@ import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.contai
* This class is the implementation of Metadata Node. One MNode instance
represents one node in the
* Metadata Tree
*/
-public class BasicInternalMNode extends BasicMNode {
+public class BasicInternalMNode extends BasicMNode implements
IInternalMNode<IMemMNode> {
/**
* Suppress warnings reason: volatile for double synchronized check.
@@ -38,6 +43,9 @@ public class BasicInternalMNode extends BasicMNode {
@SuppressWarnings("squid:S3077")
private transient volatile IMNodeContainer<IMemMNode> children = null;
+ @SuppressWarnings("squid:S3077")
+ private volatile IDeviceInfo<IMemMNode> deviceInfo = null;
+
/** Constructor of MNode. */
public BasicInternalMNode(IMemMNode parent, String name) {
super(parent, name);
@@ -46,7 +54,11 @@ public class BasicInternalMNode extends BasicMNode {
/** Check whether the MNode has a child with the name. */
@Override
public boolean hasChild(String name) {
- return (children != null && children.containsKey(name));
+ return (children != null && children.containsKey(name)) ||
hasChildInDeviceInfo(name);
+ }
+
+ private boolean hasChildInDeviceInfo(String name) {
+ return deviceInfo != null && deviceInfo.hasAliasChild(name);
}
/** Get the child with the name. */
@@ -56,6 +68,9 @@ public class BasicInternalMNode extends BasicMNode {
if (children != null) {
child = children.get(name);
}
+ if (child == null && deviceInfo != null) {
+ child = deviceInfo.getAliasChild(name);
+ }
return child;
}
@@ -125,58 +140,56 @@ public class BasicInternalMNode extends BasicMNode {
return null;
}
- /**
- * Replace a child of this mnode. New child's name must be the same as old
child's name.
- *
- * @param oldChildName measurement name
- * @param newChildNode new child node
- */
@Override
- public synchronized void replaceChild(String oldChildName, IMemMNode
newChildNode) {
- if (!oldChildName.equals(newChildNode.getName())) {
- throw new RuntimeException("New child's name must be the same as old
child's name!");
- }
- IMemMNode oldChildNode = this.getChild(oldChildName);
- if (oldChildNode == null) {
- return;
+ public IMNodeContainer<IMemMNode> getChildren() {
+ if (children == null) {
+ return MemMNodeContainer.emptyMNodeContainer();
}
+ return children;
+ }
- oldChildNode.moveDataToNewMNode(newChildNode);
+ @Override
+ public void setChildren(IMNodeContainer<IMemMNode> children) {
+ this.children = children;
+ }
- children.replace(newChildNode.getName(), newChildNode);
+ /** MNodeContainer reference and basic occupation, 8 + 80B. DeviceInfo
reference and size. */
+ @Override
+ public int estimateSize() {
+ return 8 + 80 + super.estimateSize() + 8 + (deviceInfo == null ? 0 :
deviceInfo.estimateSize());
}
@Override
- public void moveDataToNewMNode(IMemMNode newMNode) {
- super.moveDataToNewMNode(newMNode);
+ public MNodeType getMNodeType() {
+ return deviceInfo == null ? MNodeType.INTERNAL : MNodeType.DEVICE;
+ }
- if (children != null) {
- newMNode.setChildren(children);
- children.forEach((childName, childNode) ->
childNode.setParent(newMNode));
- }
+ @Override
+ public boolean isDevice() {
+ return getDeviceInfo() != null;
}
@Override
- public IMNodeContainer<IMemMNode> getChildren() {
- if (children == null) {
- return MemMNodeContainer.emptyMNodeContainer();
- }
- return children;
+ public IInternalMNode<IMemMNode> getAsInternalMNode() {
+ return this;
}
@Override
- public void setChildren(IMNodeContainer<IMemMNode> children) {
- this.children = children;
+ public IDeviceMNode<IMemMNode> getAsDeviceMNode() {
+ if (isDevice()) {
+ return new DeviceMNodeWrapper<>(this);
+ } else {
+ throw new UnsupportedOperationException("Wrong node type");
+ }
}
- /** MNodeContainer reference and basic occupation, 8 + 80B. */
@Override
- public int estimateSize() {
- return 8 + 80 + super.estimateSize();
+ public IDeviceInfo<IMemMNode> getDeviceInfo() {
+ return deviceInfo;
}
@Override
- public IMemMNode getAsMNode() {
- return this;
+ public void setDeviceInfo(IDeviceInfo<IMemMNode> deviceInfo) {
+ this.deviceInfo = deviceInfo;
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DatabaseDeviceMNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DatabaseDeviceMNode.java
deleted file mode 100644
index d5c4fd39ebe..00000000000
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DatabaseDeviceMNode.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl;
-
-import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseDeviceMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.IMemMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.basic.BasicMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.DatabaseDeviceInfo;
-
-public class DatabaseDeviceMNode extends
AbstractDatabaseDeviceMNode<IMemMNode, BasicMNode>
- implements IMemMNode {
- public DatabaseDeviceMNode(IMemMNode parent, String name, long dataTTL) {
- super(new BasicInternalMNode(parent, name), new DatabaseDeviceInfo<>());
- setDataTTL(dataTTL);
- }
-
- @Override
- public IMemMNode getAsMNode() {
- return this;
- }
-}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DatabaseMNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DatabaseMNode.java
index bb35ca97707..84a505f9725 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DatabaseMNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DatabaseMNode.java
@@ -19,12 +19,13 @@
package
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl;
import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseMNode;
+import org.apache.iotdb.commons.schema.node.info.IDeviceInfo;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.IMemMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.basic.BasicMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.DatabaseInfo;
-public class DatabaseMNode extends AbstractDatabaseMNode<IMemMNode, BasicMNode>
- implements IMemMNode {
+public class DatabaseMNode extends AbstractDatabaseMNode<IMemMNode,
BasicInternalMNode>
+ implements IMemMNode, IInternalMNode<IMemMNode> {
public DatabaseMNode(IMemMNode parent, String name) {
super(new BasicInternalMNode(parent, name), new DatabaseInfo<>());
@@ -40,4 +41,14 @@ public class DatabaseMNode extends
AbstractDatabaseMNode<IMemMNode, BasicMNode>
public IMemMNode getAsMNode() {
return this;
}
+
+ @Override
+ public IDeviceInfo<IMemMNode> getDeviceInfo() {
+ return basicMNode.getDeviceInfo();
+ }
+
+ @Override
+ public void setDeviceInfo(IDeviceInfo<IMemMNode> deviceInfo) {
+ basicMNode.setDeviceInfo(deviceInfo);
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/info/LogicalViewInfo.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/info/LogicalViewInfo.java
index 972e4ffcfad..b6aa2b4c941 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/info/LogicalViewInfo.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/info/LogicalViewInfo.java
@@ -158,7 +158,7 @@ public class LogicalViewInfo implements IMeasurementInfo {
throw new SchemaExecutionException(
new IllegalArgumentException(
"Type of newMNode is not LogicalViewMNode! It's "
- + newMNode.getMNodeType(false).toString()));
+ + newMNode.getMNodeType().toString()));
}
// endregion
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/snapshot/MemMTreeSnapshotUtil.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/snapshot/MemMTreeSnapshotUtil.java
index 7b337246e7e..31d10e6523c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/snapshot/MemMTreeSnapshotUtil.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/snapshot/MemMTreeSnapshotUtil.java
@@ -22,9 +22,7 @@ package
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.snapshot;
import org.apache.iotdb.commons.file.SystemFileFactory;
import org.apache.iotdb.commons.schema.SchemaConstant;
import org.apache.iotdb.commons.schema.node.IMNode;
-import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseDeviceMNode;
import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseMNode;
-import org.apache.iotdb.commons.schema.node.common.AbstractDeviceMNode;
import org.apache.iotdb.commons.schema.node.common.AbstractMeasurementMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
@@ -281,10 +279,19 @@ public class MemMTreeSnapshotUtil {
@Override
public Boolean visitBasicMNode(IMNode<?> node, OutputStream outputStream) {
try {
- ReadWriteIOUtils.write(INTERNAL_MNODE_TYPE, outputStream);
- serializeBasicMNode(node, outputStream);
- ReadWriteIOUtils.write(0, outputStream); // for compatibly
- ReadWriteIOUtils.write(false, outputStream); // for compatibly
+ if (node.isDevice()) {
+ ReadWriteIOUtils.write(ENTITY_MNODE_TYPE, outputStream);
+ serializeBasicMNode(node, outputStream);
+ IDeviceMNode<?> deviceMNode = node.getAsDeviceMNode();
+ ReadWriteIOUtils.write(deviceMNode.getSchemaTemplateIdWithState(),
outputStream);
+ ReadWriteIOUtils.write(deviceMNode.isUseTemplate(), outputStream);
+ ReadWriteIOUtils.write(deviceMNode.isAlignedNullable(),
outputStream);
+ } else {
+ ReadWriteIOUtils.write(INTERNAL_MNODE_TYPE, outputStream);
+ serializeBasicMNode(node, outputStream);
+ ReadWriteIOUtils.write(0, outputStream); // for compatibly
+ ReadWriteIOUtils.write(false, outputStream); // for compatibly
+ }
return true;
} catch (IOException e) {
logger.error(SERIALIZE_ERROR_INFO, e);
@@ -296,45 +303,23 @@ public class MemMTreeSnapshotUtil {
public Boolean visitDatabaseMNode(
AbstractDatabaseMNode<?, ? extends IMNode<?>> node, OutputStream
outputStream) {
try {
- ReadWriteIOUtils.write(STORAGE_GROUP_MNODE_TYPE, outputStream);
- serializeBasicMNode(node.getBasicMNode(), outputStream);
- ReadWriteIOUtils.write(0, outputStream); // for compatibly
- ReadWriteIOUtils.write(false, outputStream); // for compatibly
- // database node in schemaRegion doesn't store any database schema
- return true;
- } catch (IOException e) {
- logger.error(SERIALIZE_ERROR_INFO, e);
- return false;
- }
- }
-
- @Override
- public Boolean visitDatabaseDeviceMNode(
- AbstractDatabaseDeviceMNode<?, ? extends IMNode<?>> node, OutputStream
outputStream) {
- try {
- ReadWriteIOUtils.write(STORAGE_GROUP_ENTITY_MNODE_TYPE, outputStream);
- serializeBasicMNode(node.getBasicMNode(), outputStream);
- ReadWriteIOUtils.write(node.getSchemaTemplateIdWithState(),
outputStream);
- ReadWriteIOUtils.write(node.isUseTemplate(), outputStream);
- ReadWriteIOUtils.write(node.isAlignedNullable(), outputStream);
- // database node in schemaRegion doesn't store any database schema
- return true;
- } catch (IOException e) {
- logger.error(SERIALIZE_ERROR_INFO, e);
- return false;
- }
- }
-
- @Override
- public Boolean visitDeviceMNode(
- AbstractDeviceMNode<?, ? extends IMNode<?>> node, OutputStream
outputStream) {
- try {
- ReadWriteIOUtils.write(ENTITY_MNODE_TYPE, outputStream);
- serializeBasicMNode(node.getBasicMNode(), outputStream);
- ReadWriteIOUtils.write(node.getSchemaTemplateIdWithState(),
outputStream);
- ReadWriteIOUtils.write(node.isUseTemplate(), outputStream);
- ReadWriteIOUtils.write(node.isAlignedNullable(), outputStream);
- return true;
+ if (node.isDevice()) {
+ ReadWriteIOUtils.write(STORAGE_GROUP_ENTITY_MNODE_TYPE,
outputStream);
+ serializeBasicMNode(node.getBasicMNode(), outputStream);
+ IDeviceMNode<?> deviceMNode = node.getAsDeviceMNode();
+ ReadWriteIOUtils.write(deviceMNode.getSchemaTemplateIdWithState(),
outputStream);
+ ReadWriteIOUtils.write(deviceMNode.isUseTemplate(), outputStream);
+ ReadWriteIOUtils.write(deviceMNode.isAlignedNullable(),
outputStream);
+ // database node in schemaRegion doesn't store any database schema
+ return true;
+ } else {
+ ReadWriteIOUtils.write(STORAGE_GROUP_MNODE_TYPE, outputStream);
+ serializeBasicMNode(node.getBasicMNode(), outputStream);
+ ReadWriteIOUtils.write(0, outputStream); // for compatibly
+ ReadWriteIOUtils.write(false, outputStream); // for compatibly
+ // database node in schemaRegion doesn't store any database schema
+ return true;
+ }
} catch (IOException e) {
logger.error(SERIALIZE_ERROR_INFO, e);
return false;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
index 59e0d9646c4..0f6e921e16e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
@@ -338,40 +338,37 @@ public class CachedMTreeStore implements
IMTreeStore<ICachedMNode> {
@Override
public IDeviceMNode<ICachedMNode> setToEntity(ICachedMNode node) {
- AtomicReference<IDeviceMNode<ICachedMNode>> resultReference = new
AtomicReference<>(null);
- updateMNode(
- node,
- o -> {
- IDeviceMNode<ICachedMNode> result = MNodeUtils.setToEntity(node,
nodeFactory);
- resultReference.getAndSet(result);
- });
-
- IDeviceMNode<ICachedMNode> result = resultReference.get();
- if (result != node) {
+ int rawSize = node.estimateSize();
+ AtomicReference<Boolean> resultReference = new AtomicReference<>(false);
+ updateMNode(node, o ->
resultReference.getAndSet(MNodeUtils.setToEntity(node)));
+
+ boolean isSuccess = resultReference.get();
+ if (isSuccess) {
regionStatistics.addDevice();
- memManager.updatePinnedSize(result.estimateSize() - node.estimateSize());
+ memManager.updatePinnedSize(node.estimateSize() - rawSize);
}
- return result;
+ return node.getAsDeviceMNode();
}
@Override
public ICachedMNode setToInternal(IDeviceMNode<ICachedMNode> entityMNode) {
- AtomicReference<ICachedMNode> resultReference = new
AtomicReference<>(null);
+ int rawSize = entityMNode.estimateSize();
+ AtomicReference<Boolean> resultReference = new AtomicReference<>(false);
+ // the entityMNode is just a wrapper, the actual CachedMNode instance
shall be the same before
+ // and after
+ // setToInternal
+ ICachedMNode internalMNode = entityMNode.getAsMNode();
updateMNode(
- entityMNode.getAsMNode(),
- o -> {
- ICachedMNode result = MNodeUtils.setToInternal(entityMNode,
nodeFactory);
- resultReference.getAndSet(result);
- });
-
- ICachedMNode result = resultReference.get();
- if (result != entityMNode) {
+ internalMNode, o ->
resultReference.getAndSet(MNodeUtils.setToInternal(entityMNode)));
+
+ boolean isSuccess = resultReference.get();
+ if (isSuccess) {
regionStatistics.deleteDevice();
- memManager.updatePinnedSize(result.estimateSize() -
entityMNode.estimateSize());
+ memManager.updatePinnedSize(internalMNode.estimateSize() - rawSize);
}
- return result;
+ return internalMNode;
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
index 93f067328d6..7b695f5e0e6 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.SchemaConstant;
-import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
@@ -209,13 +208,6 @@ public class MTreeBelowSGCachedImpl {
storageGroupMNode = null;
}
- protected void replaceStorageGroupMNode(IDatabaseMNode<ICachedMNode>
newMNode) {
- this.storageGroupMNode
- .getParent()
- .replaceChild(this.storageGroupMNode.getName(), newMNode.getAsMNode());
- this.storageGroupMNode = newMNode.getAsMNode();
- }
-
public boolean createSnapshot(File snapshotDir) {
return store.createSnapshot(snapshotDir);
}
@@ -317,9 +309,6 @@ public class MTreeBelowSGCachedImpl {
entityMNode = device.getAsDeviceMNode();
} else {
entityMNode = store.setToEntity(device);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
device = entityMNode.getAsMNode();
}
@@ -407,9 +396,6 @@ public class MTreeBelowSGCachedImpl {
} else {
entityMNode = store.setToEntity(device);
entityMNode.setAligned(true);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
device = entityMNode.getAsMNode();
}
@@ -642,9 +628,6 @@ public class MTreeBelowSGCachedImpl {
if (!hasMeasurement) {
synchronized (this) {
curNode = store.setToInternal(entityMNode);
- if (curNode.isDatabase()) {
- replaceStorageGroupMNode(curNode.getAsDatabaseMNode());
- }
}
} else if (!hasNonViewMeasurement) {
// has some measurement but they are all logical view
@@ -970,9 +953,6 @@ public class MTreeBelowSGCachedImpl {
entityMNode = device.getAsDeviceMNode();
} else {
entityMNode = store.setToEntity(device);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
// this parent has no measurement before. The leafName is his
first child who is a
// logical
// view.
@@ -1095,9 +1075,6 @@ public class MTreeBelowSGCachedImpl {
entityMNode = cur.getAsDeviceMNode();
} else {
entityMNode = store.setToEntity(cur);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
}
if (entityMNode.isUseTemplate()) {
@@ -1144,9 +1121,6 @@ public class MTreeBelowSGCachedImpl {
entityMNode = cur.getAsDeviceMNode();
} else {
entityMNode = store.setToEntity(cur);
- if (entityMNode.isDatabase()) {
- replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode());
- }
}
store.updateMNode(
@@ -1438,7 +1412,7 @@ public class MTreeBelowSGCachedImpl {
protected INodeSchemaInfo collectMNode(ICachedMNode node) {
return new ShowNodesResult(
- getPartialPathFromRootToNode(node).getFullPath(),
node.getMNodeType(false));
+ getPartialPathFromRootToNode(node).getFullPath(),
node.getMNodeType());
}
};
collector.setTargetLevel(showNodesPlan.getLevel());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/basic/CachedBasicMNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/basic/CachedBasicMNode.java
index 00ab85bac1b..31dc86e04da 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/basic/CachedBasicMNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/basic/CachedBasicMNode.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.node.MNodeType;
import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor;
@@ -155,21 +156,6 @@ public class CachedBasicMNode implements ICachedMNode {
return null;
}
- /**
- * Replace a child of this mnode. New child's name must be the same as old
child's name.
- *
- * @param oldChildName measurement name
- * @param newChildNode new child node
- */
- @Override
- public synchronized void replaceChild(String oldChildName, ICachedMNode
newChildNode) {}
-
- @Override
- public void moveDataToNewMNode(ICachedMNode newMNode) {
- newMNode.setParent(parent);
- newMNode.setCacheEntry(getCacheEntry());
- }
-
@Override
public IMNodeContainer<ICachedMNode> getChildren() {
return CachedMNodeContainer.emptyMNodeContainer();
@@ -199,8 +185,8 @@ public class CachedBasicMNode implements ICachedMNode {
}
@Override
- public MNodeType getMNodeType(Boolean isConfig) {
- return isConfig ? MNodeType.SG_INTERNAL : MNodeType.INTERNAL;
+ public MNodeType getMNodeType() {
+ return MNodeType.UNIMPLEMENT;
}
@Override
@@ -213,6 +199,11 @@ public class CachedBasicMNode implements ICachedMNode {
throw new UnsupportedOperationException("Wrong MNode Type");
}
+ @Override
+ public IInternalMNode<ICachedMNode> getAsInternalMNode() {
+ throw new UnsupportedOperationException("Wrong MNode Type");
+ }
+
@Override
public IMeasurementMNode<ICachedMNode> getAsMeasurementMNode() {
throw new UnsupportedOperationException("Wrong MNode Type");
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/factory/CacheMNodeFactory.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/factory/CacheMNodeFactory.java
index faa19842007..cf31d3166f5 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/factory/CacheMNodeFactory.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/factory/CacheMNodeFactory.java
@@ -23,12 +23,11 @@ import
org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import org.apache.iotdb.commons.schema.node.utils.MNodeFactory;
+import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.DeviceInfo;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.ICachedMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl.CachedAboveDatabaseMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl.CachedBasicInternalMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl.CachedDatabaseDeviceMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl.CachedDatabaseMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl.CachedDeviceMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl.CachedMeasurementMNode;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
@@ -43,7 +42,9 @@ public class CacheMNodeFactory implements
IMNodeFactory<ICachedMNode> {
@Override
public IDeviceMNode<ICachedMNode> createDeviceMNode(ICachedMNode parent,
String name) {
- return new CachedDeviceMNode(parent, name);
+ CachedBasicInternalMNode internalMNode = new
CachedBasicInternalMNode(parent, name);
+ internalMNode.setDeviceInfo(new DeviceInfo<>());
+ return internalMNode.getAsDeviceMNode();
}
@Override
@@ -59,7 +60,9 @@ public class CacheMNodeFactory implements
IMNodeFactory<ICachedMNode> {
@Override
public ICachedMNode createDatabaseDeviceMNode(ICachedMNode parent, String
name, long dataTTL) {
- return new CachedDatabaseDeviceMNode(parent, name, dataTTL);
+ CachedDatabaseMNode databaseMNode = new CachedDatabaseMNode(parent, name,
dataTTL);
+ databaseMNode.setDeviceInfo(new DeviceInfo<>());
+ return databaseMNode;
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedBasicInternalMNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedBasicInternalMNode.java
index 23491c50766..1b4e67e623d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedBasicInternalMNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedBasicInternalMNode.java
@@ -18,6 +18,11 @@
*/
package
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl;
+import org.apache.iotdb.commons.schema.node.MNodeType;
+import org.apache.iotdb.commons.schema.node.common.DeviceMNodeWrapper;
+import org.apache.iotdb.commons.schema.node.info.IDeviceInfo;
+import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.ICachedMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.basic.CachedBasicMNode;
@@ -27,7 +32,8 @@ import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.con
* This class is the implementation of Metadata Node. One MNode instance
represents one node in the
* Metadata Tree
*/
-public class CachedBasicInternalMNode extends CachedBasicMNode {
+public class CachedBasicInternalMNode extends CachedBasicMNode
+ implements IInternalMNode<ICachedMNode> {
/**
* suppress warnings reason: volatile for double synchronized check
@@ -37,6 +43,9 @@ public class CachedBasicInternalMNode extends
CachedBasicMNode {
@SuppressWarnings("squid:S3077")
private transient volatile IMNodeContainer<ICachedMNode> children = null;
+ @SuppressWarnings("squid:S3077")
+ private volatile IDeviceInfo<ICachedMNode> deviceInfo = null;
+
/** Constructor of MNode. */
public CachedBasicInternalMNode(ICachedMNode parent, String name) {
super(parent, name);
@@ -45,7 +54,11 @@ public class CachedBasicInternalMNode extends
CachedBasicMNode {
/** check whether the MNode has a child with the name */
@Override
public boolean hasChild(String name) {
- return (children != null && children.containsKey(name));
+ return (children != null && children.containsKey(name)) ||
hasChildInDeviceInfo(name);
+ }
+
+ private boolean hasChildInDeviceInfo(String name) {
+ return deviceInfo != null && deviceInfo.hasAliasChild(name);
}
/** get the child with the name */
@@ -55,6 +68,9 @@ public class CachedBasicInternalMNode extends
CachedBasicMNode {
if (children != null) {
child = children.get(name);
}
+ if (child == null && deviceInfo != null) {
+ child = deviceInfo.getAliasChild(name);
+ }
return child;
}
@@ -124,37 +140,6 @@ public class CachedBasicInternalMNode extends
CachedBasicMNode {
return null;
}
- /**
- * Replace a child of this mnode. New child's name must be the same as old
child's name.
- *
- * @param oldChildName measurement name
- * @param newChildNode new child node
- */
- @Override
- public synchronized void replaceChild(String oldChildName, ICachedMNode
newChildNode) {
- if (!oldChildName.equals(newChildNode.getName())) {
- throw new RuntimeException("New child's name must be the same as old
child's name!");
- }
- ICachedMNode oldChildNode = this.getChild(oldChildName);
- if (oldChildNode == null) {
- return;
- }
-
- oldChildNode.moveDataToNewMNode(newChildNode);
-
- children.replace(newChildNode.getName(), newChildNode);
- }
-
- @Override
- public void moveDataToNewMNode(ICachedMNode newMNode) {
- super.moveDataToNewMNode(newMNode);
-
- if (children != null) {
- newMNode.setChildren(children);
- children.forEach((childName, childNode) ->
childNode.setParent(newMNode));
- }
- }
-
@Override
public IMNodeContainer<ICachedMNode> getChildren() {
if (children == null) {
@@ -177,15 +162,51 @@ public class CachedBasicInternalMNode extends
CachedBasicMNode {
* <li>three map reference (1 cache and 2 buffer), 8 * 3 = 24B
* <li>estimate occupation of map implementation, minus the basic
container occupation, 80 * 3 -
* 80 = 160B
+ * <li>reference for deviceInfo
+ * <li>deviceInfo's size
* </ol>
*/
@Override
public int estimateSize() {
- return 8 + 80 + 192 + super.estimateSize();
+ return 8
+ + 80
+ + 192
+ + super.estimateSize()
+ + 8
+ + (deviceInfo == null ? 0 : deviceInfo.estimateSize());
+ }
+
+ @Override
+ public boolean isDevice() {
+ return getDeviceInfo() != null;
}
@Override
- public ICachedMNode getAsMNode() {
+ public MNodeType getMNodeType() {
+ return deviceInfo == null ? MNodeType.INTERNAL : MNodeType.DEVICE;
+ }
+
+ @Override
+ public IInternalMNode<ICachedMNode> getAsInternalMNode() {
return this;
}
+
+ @Override
+ public IDeviceMNode<ICachedMNode> getAsDeviceMNode() {
+ if (isDevice()) {
+ return new DeviceMNodeWrapper<>(this);
+ } else {
+ throw new UnsupportedOperationException("Wrong node type");
+ }
+ }
+
+ @Override
+ public IDeviceInfo<ICachedMNode> getDeviceInfo() {
+ return deviceInfo;
+ }
+
+ @Override
+ public void setDeviceInfo(IDeviceInfo<ICachedMNode> deviceInfo) {
+ this.deviceInfo = deviceInfo;
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDatabaseDeviceMNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDatabaseDeviceMNode.java
deleted file mode 100644
index 84186ddfb92..00000000000
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDatabaseDeviceMNode.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl;
-
-import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseDeviceMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.DatabaseDeviceInfo;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.cache.CacheEntry;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.ICachedMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.basic.CachedBasicMNode;
-
-public class CachedDatabaseDeviceMNode
- extends AbstractDatabaseDeviceMNode<ICachedMNode, CachedBasicMNode>
implements ICachedMNode {
-
- public CachedDatabaseDeviceMNode(ICachedMNode parent, String name, long
dataTTL) {
- super(new CachedBasicInternalMNode(parent, name), new
DatabaseDeviceInfo<>());
- setDataTTL(dataTTL);
- }
-
- @Override
- public CacheEntry getCacheEntry() {
- return basicMNode.getCacheEntry();
- }
-
- @Override
- public void setCacheEntry(CacheEntry cacheEntry) {
- basicMNode.setCacheEntry(cacheEntry);
- }
-
- @Override
- public ICachedMNode getAsMNode() {
- return this;
- }
-}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDatabaseMNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDatabaseMNode.java
index 9b58e5a8ec6..18cc9e3ba7f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDatabaseMNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDatabaseMNode.java
@@ -19,13 +19,15 @@
package
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl;
import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseMNode;
+import org.apache.iotdb.commons.schema.node.info.IDeviceInfo;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.DatabaseInfo;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.cache.CacheEntry;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.ICachedMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.basic.CachedBasicMNode;
-public class CachedDatabaseMNode extends AbstractDatabaseMNode<ICachedMNode,
CachedBasicMNode>
- implements ICachedMNode {
+public class CachedDatabaseMNode
+ extends AbstractDatabaseMNode<ICachedMNode, CachedBasicInternalMNode>
+ implements ICachedMNode, IInternalMNode<ICachedMNode> {
public CachedDatabaseMNode(ICachedMNode parent, String name) {
super(new CachedBasicInternalMNode(parent, name), new DatabaseInfo<>());
@@ -51,4 +53,14 @@ public class CachedDatabaseMNode extends
AbstractDatabaseMNode<ICachedMNode, Cac
public ICachedMNode getAsMNode() {
return this;
}
+
+ @Override
+ public IDeviceInfo<ICachedMNode> getDeviceInfo() {
+ return basicMNode.getDeviceInfo();
+ }
+
+ @Override
+ public void setDeviceInfo(IDeviceInfo<ICachedMNode> deviceInfo) {
+ basicMNode.setDeviceInfo(deviceInfo);
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDeviceMNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDeviceMNode.java
deleted file mode 100644
index 575b4773569..00000000000
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/impl/CachedDeviceMNode.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.impl;
-
-import org.apache.iotdb.commons.schema.node.common.AbstractDeviceMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.DeviceInfo;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.cache.CacheEntry;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.ICachedMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.pbtree.mnode.basic.CachedBasicMNode;
-
-public class CachedDeviceMNode extends AbstractDeviceMNode<ICachedMNode,
CachedBasicMNode>
- implements ICachedMNode {
-
- public CachedDeviceMNode(ICachedMNode parent, String name) {
- super(new CachedBasicInternalMNode(parent, name), new DeviceInfo<>());
- }
-
- @Override
- public CacheEntry getCacheEntry() {
- return basicMNode.getCacheEntry();
- }
-
- @Override
- public void setCacheEntry(CacheEntry cacheEntry) {
- basicMNode.setCacheEntry(cacheEntry);
- }
-
- @Override
- public ICachedMNode getAsMNode() {
- return this;
- }
-}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MNodeUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MNodeUtils.java
index 05876d6cf26..fb3b034738c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MNodeUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MNodeUtils.java
@@ -19,9 +19,10 @@
package org.apache.iotdb.db.schemaengine.schemaregion.utils;
import org.apache.iotdb.commons.schema.node.IMNode;
-import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
+import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.DeviceInfo;
import org.apache.iotdb.db.schemaengine.template.Template;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
@@ -35,32 +36,15 @@ public class MNodeUtils {
* part first.
*
* @param node node to be transformed
- * @return generated entityMNode
*/
- public static <N extends IMNode<N>> IDeviceMNode<N> setToEntity(
- IMNode<N> node, IMNodeFactory<N> nodeFactory) {
- IDeviceMNode<N> entityMNode;
- if (node.isDevice()) {
- entityMNode = node.getAsDeviceMNode();
+ public static <N extends IMNode<N>> boolean setToEntity(IMNode<N> node) {
+ IInternalMNode<N> internalMNode = node.getAsInternalMNode();
+ if (!internalMNode.isDevice()) {
+ internalMNode.setDeviceInfo(new DeviceInfo<>());
+ return true;
} else {
- if (node.isDatabase()) {
- entityMNode =
- nodeFactory
- .createDatabaseDeviceMNode(
- node.getParent(), node.getName(),
node.getAsDatabaseMNode().getDataTTL())
- .getAsDeviceMNode();
- node.moveDataToNewMNode(entityMNode.getAsMNode());
- } else {
- // basic node
- entityMNode = nodeFactory.createDeviceMNode(node.getParent(),
node.getName());
- if (node.getParent() != null) {
- node.getParent().replaceChild(node.getName(),
entityMNode.getAsMNode());
- } else {
- node.moveDataToNewMNode(entityMNode.getAsMNode());
- }
- }
+ return false;
}
- return entityMNode;
}
/**
@@ -69,25 +53,15 @@ public class MNodeUtils {
* MTree structure first.
*
* @param entityMNode node to be transformed
- * @return generated NoEntity node
*/
- public static <N extends IMNode<N>> N setToInternal(
- IDeviceMNode<N> entityMNode, IMNodeFactory<N> nodeFactor) {
- N node;
- N parent = entityMNode.getParent();
- if (entityMNode.isDatabase()) {
- IDatabaseMNode<N> databaseMNode =
- nodeFactor.createDatabaseMNode(parent, entityMNode.getName());
- databaseMNode.setDataTTL(entityMNode.getAsDatabaseMNode().getDataTTL());
- node = databaseMNode.getAsMNode();
+ public static <N extends IMNode<N>> boolean setToInternal(IDeviceMNode<N>
entityMNode) {
+ IInternalMNode<N> internalMNode = entityMNode.getAsInternalMNode();
+ if (internalMNode.isDevice()) {
+ internalMNode.setDeviceInfo(null);
+ return true;
} else {
- node = nodeFactor.createInternalMNode(parent, entityMNode.getName());
- }
-
- if (parent != null) {
- parent.replaceChild(entityMNode.getName(), node);
+ return false;
}
- return node;
}
public static <N extends IMNode<N>> N getChild(
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java
index 986fd54cf67..8ec8f12295a 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java
@@ -18,47 +18,18 @@
*/
package org.apache.iotdb.db.metadata.mnode;
-import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
-import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.IMemMNode;
import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.loader.MNodeFactoryLoader;
-import org.apache.iotdb.db.schemaengine.schemaregion.utils.MetaUtils;
import org.junit.Test;
-import java.util.List;
-
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
public class MNodeTest {
private final IMNodeFactory<IMemMNode> nodeFactory =
- MNodeFactoryLoader.getInstance().getMemMNodeIMNodeFactory();;
-
- @Test
- public void testReplaceChild() {
- IMemMNode rootNode = nodeFactory.createInternalMNode(null, "root");
-
- IDeviceMNode<IMemMNode> aNode = nodeFactory.createDeviceMNode(rootNode,
"a");
- rootNode.addChild(aNode.getName(), aNode.getAsMNode());
-
- IMeasurementMNode<IMemMNode> bNode =
nodeFactory.createMeasurementMNode(aNode, "b", null, null);
-
- aNode.addChild(bNode.getName(), bNode.getAsMNode());
- aNode.addAlias("aliasOfb", bNode);
-
- IDeviceMNode<IMemMNode> newANode = nodeFactory.createDeviceMNode(null,
"a");
- rootNode.replaceChild(aNode.getName(), newANode.getAsMNode());
-
- List<String> multiFullPaths = MetaUtils.getMultiFullPaths(rootNode);
- assertEquals("root.a.b", multiFullPaths.get(0));
- assertEquals("root.a.b",
rootNode.getChild("a").getChild("aliasOfb").getFullPath());
- assertNotSame(aNode, rootNode.getChild("a"));
- assertSame(newANode, rootNode.getChild("a"));
- }
+ MNodeFactoryLoader.getInstance().getMemMNodeIMNodeFactory();
@Test
public void testAddChild() {
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java
index 1dadc42dd0c..987185b9258 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java
@@ -883,7 +883,7 @@ public class SchemaFileTest {
}
ICachedMNode d010 = sgNode.getChildren().get("d_010");
- d010 = MNodeUtils.setToEntity(d010, nodeFactory).getAsMNode();
+ MNodeUtils.setToEntity(d010);
ICachedMNode ano = getMeasurementNode(d010, "splitover", "aliaslasialsai");
d010.addChild(ano);
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/IMNode.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/IMNode.java
index f3f8f48b804..56fe4bdacd1 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/IMNode.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/IMNode.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.commons.schema.node;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor;
@@ -53,13 +54,6 @@ public interface IMNode<N extends IMNode<N>> extends
ITreeNode {
N deleteChild(String name);
- // this method will replace the oldChild with the newChild, the data of
oldChild will be moved to
- // newChild
- void replaceChild(String oldChildName, N newChildNode);
-
- // this method will move all the reference or value of current node's
attributes to newMNode
- void moveDataToNewMNode(N newMNode);
-
IMNodeContainer<N> getChildren();
void setChildren(IMNodeContainer<N> children);
@@ -72,12 +66,14 @@ public interface IMNode<N extends IMNode<N>> extends
ITreeNode {
boolean isMeasurement();
- MNodeType getMNodeType(Boolean isConfig);
+ MNodeType getMNodeType();
IDatabaseMNode<N> getAsDatabaseMNode();
IDeviceMNode<N> getAsDeviceMNode();
+ IInternalMNode<N> getAsInternalMNode();
+
IMeasurementMNode<N> getAsMeasurementMNode();
<R, C> R accept(MNodeVisitor<R, C> visitor, C context);
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractAboveDatabaseMNode.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractAboveDatabaseMNode.java
index 454a0e20388..ab0592480e5 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractAboveDatabaseMNode.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractAboveDatabaseMNode.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.schema.node.IMNode;
import org.apache.iotdb.commons.schema.node.MNodeType;
import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor;
@@ -112,16 +113,6 @@ public abstract class AbstractAboveDatabaseMNode<N extends
IMNode<N>, BasicNode
return basicMNode.deleteChild(name);
}
- @Override
- public void replaceChild(String oldChildName, N newChildNode) {
- basicMNode.replaceChild(oldChildName, newChildNode);
- }
-
- @Override
- public void moveDataToNewMNode(N newMNode) {
- basicMNode.moveDataToNewMNode(newMNode);
- }
-
@Override
public IMNodeContainer<N> getChildren() {
return basicMNode.getChildren();
@@ -153,7 +144,7 @@ public abstract class AbstractAboveDatabaseMNode<N extends
IMNode<N>, BasicNode
}
@Override
- public MNodeType getMNodeType(Boolean isConfig) {
+ public MNodeType getMNodeType() {
return MNodeType.INTERNAL;
}
@@ -167,6 +158,11 @@ public abstract class AbstractAboveDatabaseMNode<N extends
IMNode<N>, BasicNode
throw new UnsupportedOperationException("Wrong MNode Type");
}
+ @Override
+ public IInternalMNode<N> getAsInternalMNode() {
+ throw new UnsupportedOperationException("Wrong MNode Type");
+ }
+
@Override
public IMeasurementMNode<N> getAsMeasurementMNode() {
throw new UnsupportedOperationException("Wrong MNode Type");
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java
deleted file mode 100644
index b0f78219064..00000000000
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.commons.schema.node.common;
-
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.node.IMNode;
-import org.apache.iotdb.commons.schema.node.MNodeType;
-import org.apache.iotdb.commons.schema.node.info.IDatabaseDeviceInfo;
-import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
-import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
-import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
-import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
-import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor;
-
-import java.util.Map;
-
-public abstract class AbstractDatabaseDeviceMNode<N extends IMNode<N>,
BasicNode extends IMNode<N>>
- implements IDatabaseMNode<N>, IDeviceMNode<N> {
-
- private final IDatabaseDeviceInfo<N> databaseDeviceInfo;
- protected final BasicNode basicMNode;
-
- public AbstractDatabaseDeviceMNode(
- BasicNode basicMNode, IDatabaseDeviceInfo<N> databaseDeviceInfo) {
- this.basicMNode = basicMNode;
- this.databaseDeviceInfo = databaseDeviceInfo;
- }
-
- public BasicNode getBasicMNode() {
- return basicMNode;
- }
-
- @Override
- public String getName() {
- return basicMNode.getName();
- }
-
- @Override
- public void setName(String name) {
- basicMNode.setName(name);
- }
-
- @Override
- public N getParent() {
- return basicMNode.getParent();
- }
-
- @Override
- public void setParent(N parent) {
- basicMNode.setParent(parent);
- }
-
- @Override
- public String getFullPath() {
- return basicMNode.getFullPath();
- }
-
- @Override
- public void setFullPath(String fullPath) {
- basicMNode.setFullPath(fullPath);
- }
-
- @Override
- public PartialPath getPartialPath() {
- return basicMNode.getPartialPath();
- }
-
- @Override
- public boolean hasChild(String name) {
- return basicMNode.hasChild(name);
- }
-
- @Override
- public N getChild(String name) {
- return basicMNode.getChild(name);
- }
-
- @Override
- public N addChild(String name, N child) {
- N res = basicMNode.addChild(name, child);
- if (res == child) {
- child.setParent(this.getAsMNode());
- }
- return res;
- }
-
- @Override
- public N addChild(N child) {
- N res = basicMNode.addChild(child);
- if (res == child) {
- child.setParent(this.getAsMNode());
- }
- return res;
- }
-
- @Override
- public N deleteChild(String name) {
- return basicMNode.deleteChild(name);
- }
-
- @Override
- public void replaceChild(String oldChildName, N newChildNode) {
- basicMNode.replaceChild(oldChildName, newChildNode);
- }
-
- @Override
- public void moveDataToNewMNode(N newMNode) {
- basicMNode.moveDataToNewMNode(newMNode);
- if (newMNode.isDevice()) {
- databaseDeviceInfo.moveDataToNewMNode(newMNode.getAsDeviceMNode());
- }
- if (newMNode.isDatabase()) {
- databaseDeviceInfo.moveDataToNewMNode(newMNode.getAsDatabaseMNode());
- }
- }
-
- @Override
- public IMNodeContainer<N> getChildren() {
- return basicMNode.getChildren();
- }
-
- @Override
- public void setChildren(IMNodeContainer<N> children) {
- basicMNode.setChildren(children);
- }
-
- @Override
- public boolean isAboveDatabase() {
- return false;
- }
-
- @Override
- public boolean isDatabase() {
- return true;
- }
-
- @Override
- public boolean isDevice() {
- return true;
- }
-
- @Override
- public boolean isMeasurement() {
- return false;
- }
-
- @Override
- public MNodeType getMNodeType(Boolean isConfig) {
- return MNodeType.STORAGE_GROUP;
- }
-
- @Override
- public IDatabaseMNode<N> getAsDatabaseMNode() {
- return this;
- }
-
- @Override
- public IDeviceMNode<N> getAsDeviceMNode() {
- return this;
- }
-
- @Override
- public IMeasurementMNode<N> getAsMeasurementMNode() {
- throw new UnsupportedOperationException("Wrong MNode Type");
- }
-
- @Override
- public <R, C> R accept(MNodeVisitor<R, C> visitor, C context) {
- return visitor.visitDatabaseDeviceMNode(this, context);
- }
-
- @Override
- public long getDataTTL() {
- return databaseDeviceInfo.getDataTTL();
- }
-
- @Override
- public void setDataTTL(long dataTTL) {
- databaseDeviceInfo.setDataTTL(dataTTL);
- }
-
- @Override
- public boolean addAlias(String alias, IMeasurementMNode<N> child) {
- return databaseDeviceInfo.addAlias(alias, child);
- }
-
- @Override
- public void deleteAliasChild(String alias) {
- databaseDeviceInfo.deleteAliasChild(alias);
- }
-
- @Override
- public Map<String, IMeasurementMNode<N>> getAliasChildren() {
- return databaseDeviceInfo.getAliasChildren();
- }
-
- @Override
- public void setAliasChildren(Map<String, IMeasurementMNode<N>>
aliasChildren) {
- databaseDeviceInfo.setAliasChildren(aliasChildren);
- }
-
- @Override
- public boolean isUseTemplate() {
- return databaseDeviceInfo.isUseTemplate();
- }
-
- @Override
- public void setUseTemplate(boolean useTemplate) {
- databaseDeviceInfo.setUseTemplate(useTemplate);
- }
-
- @Override
- public void setSchemaTemplateId(int schemaTemplateId) {
- databaseDeviceInfo.setSchemaTemplateId(schemaTemplateId);
- }
-
- @Override
- public int getSchemaTemplateId() {
- return databaseDeviceInfo.getSchemaTemplateId();
- }
-
- @Override
- public int getSchemaTemplateIdWithState() {
- return databaseDeviceInfo.getSchemaTemplateIdWithState();
- }
-
- @Override
- public boolean isPreDeactivateTemplate() {
- return databaseDeviceInfo.isPreDeactivateTemplate();
- }
-
- @Override
- public void preDeactivateTemplate() {
- databaseDeviceInfo.preDeactivateTemplate();
- }
-
- @Override
- public void rollbackPreDeactivateTemplate() {
- databaseDeviceInfo.rollbackPreDeactivateTemplate();
- }
-
- @Override
- public void deactivateTemplate() {
- databaseDeviceInfo.deactivateTemplate();
- }
-
- @Override
- public boolean isAligned() {
- Boolean align = databaseDeviceInfo.isAligned();
- if (align == null) {
- return false;
- }
- return align;
- }
-
- @Override
- public Boolean isAlignedNullable() {
- return databaseDeviceInfo.isAligned();
- }
-
- @Override
- public void setAligned(Boolean isAligned) {
- databaseDeviceInfo.setAligned(isAligned);
- }
-
- /**
- * The basic memory occupied by any AbstractDatabaseDeviceMNode object
- *
- * <ol>
- * <li>object header, 8B
- * <li>node attributes
- * <ol>
- * <li>databaseDeviceInfo reference, 8B
- * <li>basicMNode reference, 8B
- * </ol>
- * <li>MapEntry in parent
- * </ol>
- */
- @Override
- public int estimateSize() {
- return 8 + 8 + databaseDeviceInfo.estimateSize() +
basicMNode.estimateSize();
- }
-}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java
index 6781bad26a1..e5834f787c0 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.commons.schema.node.IMNode;
import org.apache.iotdb.commons.schema.node.MNodeType;
import org.apache.iotdb.commons.schema.node.info.IDatabaseInfo;
import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
-import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor;
@@ -113,19 +112,6 @@ public abstract class AbstractDatabaseMNode<N extends
IMNode<N>, BasicNode exten
return basicMNode.deleteChild(name);
}
- @Override
- public void replaceChild(String oldChildName, N newChildNode) {
- basicMNode.replaceChild(oldChildName, newChildNode);
- }
-
- @Override
- public void moveDataToNewMNode(N newMNode) {
- basicMNode.moveDataToNewMNode(newMNode);
- if (newMNode.isDatabase()) {
- databaseInfo.moveDataToNewMNode(newMNode.getAsDatabaseMNode());
- }
- }
-
@Override
public IMNodeContainer<N> getChildren() {
return basicMNode.getChildren();
@@ -146,18 +132,13 @@ public abstract class AbstractDatabaseMNode<N extends
IMNode<N>, BasicNode exten
return true;
}
- @Override
- public boolean isDevice() {
- return false;
- }
-
@Override
public boolean isMeasurement() {
return false;
}
@Override
- public MNodeType getMNodeType(Boolean isConfig) {
+ public MNodeType getMNodeType() {
return MNodeType.STORAGE_GROUP;
}
@@ -166,11 +147,6 @@ public abstract class AbstractDatabaseMNode<N extends
IMNode<N>, BasicNode exten
return this;
}
- @Override
- public IDeviceMNode<N> getAsDeviceMNode() {
- throw new UnsupportedOperationException("Wrong MNode Type");
- }
-
@Override
public IMeasurementMNode<N> getAsMeasurementMNode() {
throw new UnsupportedOperationException("Wrong MNode Type");
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractMeasurementMNode.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractMeasurementMNode.java
index 3d55200c27a..9e4a7427be4 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractMeasurementMNode.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractMeasurementMNode.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.commons.schema.node.MNodeType;
import org.apache.iotdb.commons.schema.node.info.IMeasurementInfo;
import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor;
@@ -180,17 +181,6 @@ public abstract class AbstractMeasurementMNode<N extends
IMNode<N>, BasicNode ex
return null;
}
- @Override
- public void replaceChild(String oldChildName, N newChildNode) {}
-
- @Override
- public void moveDataToNewMNode(N newMNode) {
- basicMNode.moveDataToNewMNode(newMNode);
- if (newMNode.isMeasurement()) {
- measurementInfo.moveDataToNewMNode(newMNode.getAsMeasurementMNode());
- }
- }
-
@Override
public void setChildren(IMNodeContainer<N> children) {
// Do nothing
@@ -217,7 +207,7 @@ public abstract class AbstractMeasurementMNode<N extends
IMNode<N>, BasicNode ex
}
@Override
- public MNodeType getMNodeType(Boolean isConfig) {
+ public MNodeType getMNodeType() {
return MNodeType.MEASUREMENT;
}
@@ -231,6 +221,11 @@ public abstract class AbstractMeasurementMNode<N extends
IMNode<N>, BasicNode ex
throw new UnsupportedOperationException("Wrong MNode Type");
}
+ @Override
+ public IInternalMNode<N> getAsInternalMNode() {
+ throw new UnsupportedOperationException("Wrong MNode Type");
+ }
+
@Override
public IMeasurementMNode<N> getAsMeasurementMNode() {
return this;
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDeviceMNode.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/DeviceMNodeWrapper.java
similarity index 65%
rename from
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDeviceMNode.java
rename to
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/DeviceMNodeWrapper.java
index 49c1e111c89..6b400832da5 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDeviceMNode.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/DeviceMNodeWrapper.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.iotdb.commons.schema.node.common;
import org.apache.iotdb.commons.path.PartialPath;
@@ -24,25 +25,21 @@ import org.apache.iotdb.commons.schema.node.MNodeType;
import org.apache.iotdb.commons.schema.node.info.IDeviceInfo;
import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode;
import org.apache.iotdb.commons.schema.node.role.IDeviceMNode;
+import org.apache.iotdb.commons.schema.node.role.IInternalMNode;
import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode;
import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer;
import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor;
import java.util.Map;
-public abstract class AbstractDeviceMNode<N extends IMNode<N>, BasicNode
extends IMNode<N>>
+// This class provides a device view for an internal node with deviceInfo.
+public class DeviceMNodeWrapper<N extends IMNode<N>, BasicNode extends
IInternalMNode<N>>
implements IDeviceMNode<N> {
- private final IDeviceInfo<N> deviceInfo;
protected final BasicNode basicMNode;
- public AbstractDeviceMNode(BasicNode basicMNode, IDeviceInfo<N> deviceInfo) {
+ public DeviceMNodeWrapper(BasicNode basicMNode) {
this.basicMNode = basicMNode;
- this.deviceInfo = deviceInfo;
- }
-
- public BasicNode getBasicMNode() {
- return basicMNode;
}
@Override
@@ -82,34 +79,22 @@ public abstract class AbstractDeviceMNode<N extends
IMNode<N>, BasicNode extends
@Override
public boolean hasChild(String name) {
- return basicMNode.hasChild(name) || deviceInfo.hasAliasChild(name);
+ return basicMNode.hasChild(name);
}
@Override
public N getChild(String name) {
- N res = basicMNode.getChild(name);
- if (res == null) {
- res = deviceInfo.getAliasChild(name);
- }
- return res;
+ return basicMNode.getChild(name);
}
@Override
public N addChild(String name, N child) {
- N res = basicMNode.addChild(name, child);
- if (res == child) {
- child.setParent(this.getAsMNode());
- }
- return res;
+ return basicMNode.addChild(name, child);
}
@Override
public N addChild(N child) {
- N res = basicMNode.addChild(child);
- if (res == child) {
- child.setParent(this.getAsMNode());
- }
- return res;
+ return basicMNode.addChild(child);
}
@Override
@@ -117,19 +102,6 @@ public abstract class AbstractDeviceMNode<N extends
IMNode<N>, BasicNode extends
return basicMNode.deleteChild(name);
}
- @Override
- public void replaceChild(String oldChildName, N newChildNode) {
- basicMNode.replaceChild(oldChildName, newChildNode);
- }
-
- @Override
- public void moveDataToNewMNode(N newMNode) {
- basicMNode.moveDataToNewMNode(newMNode);
- if (newMNode.isDevice()) {
- deviceInfo.moveDataToNewMNode(newMNode.getAsDeviceMNode());
- }
- }
-
@Override
public IMNodeContainer<N> getChildren() {
return basicMNode.getChildren();
@@ -142,32 +114,37 @@ public abstract class AbstractDeviceMNode<N extends
IMNode<N>, BasicNode extends
@Override
public boolean isAboveDatabase() {
- return false;
+ return basicMNode.isAboveDatabase();
}
@Override
public boolean isDatabase() {
- return false;
+ return basicMNode.isDatabase();
}
@Override
- public boolean isDevice() {
- return true;
+ public IDeviceInfo<N> getDeviceInfo() {
+ return basicMNode.getDeviceInfo();
}
@Override
- public boolean isMeasurement() {
- return false;
+ public void setDeviceInfo(IDeviceInfo<N> deviceInfo) {
+ throw new UnsupportedOperationException();
}
@Override
- public MNodeType getMNodeType(Boolean isConfig) {
+ public boolean isDevice() {
+ return true;
+ }
+
+ @Override
+ public MNodeType getMNodeType() {
return MNodeType.DEVICE;
}
@Override
public IDatabaseMNode<N> getAsDatabaseMNode() {
- throw new UnsupportedOperationException("Wrong MNode Type");
+ return basicMNode.getAsDatabaseMNode();
}
@Override
@@ -175,6 +152,11 @@ public abstract class AbstractDeviceMNode<N extends
IMNode<N>, BasicNode extends
return this;
}
+ @Override
+ public IInternalMNode<N> getAsInternalMNode() {
+ return basicMNode;
+ }
+
@Override
public IMeasurementMNode<N> getAsMeasurementMNode() {
throw new UnsupportedOperationException("Wrong MNode Type");
@@ -182,77 +164,77 @@ public abstract class AbstractDeviceMNode<N extends
IMNode<N>, BasicNode extends
@Override
public <R, C> R accept(MNodeVisitor<R, C> visitor, C context) {
- return visitor.visitDeviceMNode(this, context);
+ return visitor.visitBasicMNode(this, context);
}
@Override
public boolean addAlias(String alias, IMeasurementMNode<N> child) {
- return deviceInfo.addAlias(alias, child);
+ return basicMNode.getDeviceInfo().addAlias(alias, child);
}
@Override
public void deleteAliasChild(String alias) {
- deviceInfo.deleteAliasChild(alias);
+ basicMNode.getDeviceInfo().deleteAliasChild(alias);
}
@Override
public Map<String, IMeasurementMNode<N>> getAliasChildren() {
- return deviceInfo.getAliasChildren();
+ return basicMNode.getDeviceInfo().getAliasChildren();
}
@Override
public void setAliasChildren(Map<String, IMeasurementMNode<N>>
aliasChildren) {
- deviceInfo.setAliasChildren(aliasChildren);
+ basicMNode.getDeviceInfo().setAliasChildren(aliasChildren);
}
@Override
public boolean isUseTemplate() {
- return deviceInfo.isUseTemplate();
+ return basicMNode.getDeviceInfo().isUseTemplate();
}
@Override
public void setUseTemplate(boolean useTemplate) {
- deviceInfo.setUseTemplate(useTemplate);
+ basicMNode.getDeviceInfo().setUseTemplate(useTemplate);
}
@Override
public void setSchemaTemplateId(int schemaTemplateId) {
- deviceInfo.setSchemaTemplateId(schemaTemplateId);
+ basicMNode.getDeviceInfo().setSchemaTemplateId(schemaTemplateId);
}
@Override
public int getSchemaTemplateId() {
- return deviceInfo.getSchemaTemplateId();
+ return basicMNode.getDeviceInfo().getSchemaTemplateId();
}
@Override
public int getSchemaTemplateIdWithState() {
- return deviceInfo.getSchemaTemplateIdWithState();
+ return basicMNode.getDeviceInfo().getSchemaTemplateIdWithState();
}
@Override
public boolean isPreDeactivateTemplate() {
- return deviceInfo.isPreDeactivateTemplate();
+ return basicMNode.getDeviceInfo().isPreDeactivateTemplate();
}
@Override
public void preDeactivateTemplate() {
- deviceInfo.preDeactivateTemplate();
+ basicMNode.getDeviceInfo().preDeactivateTemplate();
}
@Override
public void rollbackPreDeactivateTemplate() {
- deviceInfo.rollbackPreDeactivateTemplate();
+ basicMNode.getDeviceInfo().rollbackPreDeactivateTemplate();
}
@Override
public void deactivateTemplate() {
- deviceInfo.deactivateTemplate();
+ basicMNode.getDeviceInfo().deactivateTemplate();
}
@Override
public boolean isAligned() {
- Boolean align = deviceInfo.isAligned();
+ Boolean align = basicMNode.getDeviceInfo().isAligned();
if (align == null) {
return false;
}
@@ -261,29 +243,21 @@ public abstract class AbstractDeviceMNode<N extends
IMNode<N>, BasicNode extends
@Override
public Boolean isAlignedNullable() {
- return deviceInfo.isAligned();
+ return basicMNode.getDeviceInfo().isAligned();
}
@Override
public void setAligned(Boolean isAligned) {
- deviceInfo.setAligned(isAligned);
- }
-
- /**
- * The basic memory occupied by any AbstractDeviceMNode object
- *
- * <ol>
- * <li>object header, 8B
- * <li>node attributes
- * <ol>
- * <li>deviceInfo reference, 8B
- * <li>basicMNode reference, 8B
- * </ol>
- * <li>MapEntry in parent
- * </ol>
- */
+ basicMNode.getDeviceInfo().setAligned(isAligned);
+ }
+
@Override
public int estimateSize() {
- return 8 + 8 + deviceInfo.estimateSize() + basicMNode.estimateSize();
+ return basicMNode.estimateSize();
+ }
+
+ @Override
+ public N getAsMNode() {
+ return basicMNode.getAsMNode();
}
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDeviceMNode.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDeviceMNode.java
index a2ab8dd0773..4e8c6972723 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDeviceMNode.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDeviceMNode.java
@@ -22,7 +22,7 @@ import org.apache.iotdb.commons.schema.node.IMNode;
import java.util.Map;
-public interface IDeviceMNode<N extends IMNode<N>> extends IMNode<N> {
+public interface IDeviceMNode<N extends IMNode<N>> extends IInternalMNode<N> {
boolean addAlias(String alias, IMeasurementMNode<N> child);
void deleteAliasChild(String alias);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DeviceMNode.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IInternalMNode.java
similarity index 51%
rename from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DeviceMNode.java
rename to
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IInternalMNode.java
index c4d8c0ab02f..ed69923b86d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/impl/DeviceMNode.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IInternalMNode.java
@@ -16,21 +16,40 @@
* specific language governing permissions and limitations
* under the License.
*/
-package
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.impl;
-import org.apache.iotdb.commons.schema.node.common.AbstractDeviceMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.IMemMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.basic.BasicMNode;
-import
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.info.DeviceInfo;
+package org.apache.iotdb.commons.schema.node.role;
-public class DeviceMNode extends AbstractDeviceMNode<IMemMNode, BasicMNode>
implements IMemMNode {
+import org.apache.iotdb.commons.schema.node.IMNode;
+import org.apache.iotdb.commons.schema.node.common.DeviceMNodeWrapper;
+import org.apache.iotdb.commons.schema.node.info.IDeviceInfo;
- public DeviceMNode(IMemMNode parent, String name) {
- super(new BasicInternalMNode(parent, name), new DeviceInfo<>());
+public interface IInternalMNode<N extends IMNode<N>> extends IMNode<N> {
+
+ IDeviceInfo<N> getDeviceInfo();
+
+ void setDeviceInfo(IDeviceInfo<N> deviceInfo);
+
+ @Override
+ default boolean isDevice() {
+ return getDeviceInfo() != null;
+ }
+
+ @Override
+ default boolean isMeasurement() {
+ return false;
}
@Override
- public IMemMNode getAsMNode() {
+ default IInternalMNode<N> getAsInternalMNode() {
return this;
}
+
+ @Override
+ default IDeviceMNode<N> getAsDeviceMNode() {
+ if (isDevice()) {
+ return new DeviceMNodeWrapper<>(this);
+ } else {
+ throw new UnsupportedOperationException("Wrong node type");
+ }
+ }
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/visitor/MNodeVisitor.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/visitor/MNodeVisitor.java
index d156295eb0d..8d4f7209649 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/visitor/MNodeVisitor.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/visitor/MNodeVisitor.java
@@ -20,9 +20,7 @@
package org.apache.iotdb.commons.schema.node.visitor;
import org.apache.iotdb.commons.schema.node.IMNode;
-import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseDeviceMNode;
import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseMNode;
-import org.apache.iotdb.commons.schema.node.common.AbstractDeviceMNode;
import org.apache.iotdb.commons.schema.node.common.AbstractMeasurementMNode;
public abstract class MNodeVisitor<R, C> {
@@ -32,11 +30,6 @@ public abstract class MNodeVisitor<R, C> {
public abstract R visitDatabaseMNode(
AbstractDatabaseMNode<?, ? extends IMNode<?>> node, C context);
- public abstract R visitDatabaseDeviceMNode(
- AbstractDatabaseDeviceMNode<?, ? extends IMNode<?>> node, C context);
-
- public abstract R visitDeviceMNode(AbstractDeviceMNode<?, ? extends
IMNode<?>> node, C context);
-
public abstract R visitMeasurementMNode(
AbstractMeasurementMNode<?, ? extends IMNode<?>> node, C context);
}