From eb70020247a1a19a1fb95ee13b1ca66c84a02497 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Wed, 1 Mar 2023 23:24:23 +0800 Subject: [PATCH 01/26] save --- .../rocksdb/RSchemaReadWriteHandler.java | 2 +- .../schemaregion/rocksdb/RSchemaRegion.java | 8 +- .../schemaregion/rocksdb/RSchemaUtils.java | 8 +- ...ageGroupMNode.java => RDatabaseMNode.java} | 12 +- .../{REntityMNode.java => RDeviceMNode.java} | 10 +- .../schemaregion/rocksdb/mnode/RMNode.java | 22 +- .../rocksdb/mnode/RMeasurementMNode.java | 6 +- .../tagSchemaRegion/TagSchemaRegion.java | 6 +- .../idtable/entry/InsertMeasurementMNode.java | 14 +- .../db/metadata/mnode/AboveDatabaseMNode.java | 2 +- .../{InternalMNode.java => BasicMNode.java} | 173 ++++++---- .../iotdb/db/metadata/mnode/IMNode.java | 52 +-- .../apache/iotdb/db/metadata/mnode/MNode.java | 200 ----------- .../iotdb/db/metadata/mnode/MNodeUtils.java | 27 +- .../db/metadata/mnode/MeasurementMNode.java | 233 ------------- .../mnode/container/IMNodeContainer.java | 2 +- .../container/MNodeContainerMapImpl.java | 4 +- .../estimator/BasicMNodSizeEstimator.java | 6 +- .../iterator/AbstractTraverserIterator.java | 6 +- .../iterator/CachedTraverserIterator.java | 4 +- .../iterator/MemoryTraverserIterator.java | 4 +- .../metadata/mnode/visitor/MNodeVisitor.java | 20 +- .../iotdb/db/metadata/mtree/ConfigMTree.java | 102 +++--- .../db/metadata/mtree/IMTreeBelowSG.java | 2 +- .../mtree/MTreeBelowSGCachedImpl.java | 59 ++-- .../mtree/MTreeBelowSGMemoryImpl.java | 65 ++-- .../mtree/snapshot/MemMTreeSnapshotUtil.java | 45 +-- .../mtree/store/CachedMTreeStore.java | 128 +++---- .../db/metadata/mtree/store/IMTreeStore.java | 37 ++- .../metadata/mtree/store/MemMTreeStore.java | 28 +- .../ReentrantReadOnlyCachedMTreeStore.java | 8 +- .../mtree/store/disk/cache/CacheManager.java | 26 +- .../mtree/store/disk/cache/ICacheManager.java | 4 +- .../memcontrol/CachedMNodeSizeEstimator.java | 6 +- .../store/disk/schemafile/ISchemaFile.java | 4 +- .../store/disk/schemafile/MockSchemaFile.java | 39 ++- .../store/disk/schemafile/RecordUtils.java | 12 +- .../store/disk/schemafile/SchemaFile.java | 17 +- .../disk/schemafile/pagemgr/PageManager.java | 2 +- .../metadata/mtree/traverser/Traverser.java | 2 +- .../traverser/basic/DatabaseTraverser.java | 8 +- .../collector/DatabaseCollector.java | 6 +- .../traverser/collector/EntityCollector.java | 4 +- .../collector/MNodeAboveSGCollector.java | 4 +- .../collector/MeasurementCollector.java | 2 +- .../traverser/updater/EntityUpdater.java | 4 +- .../traverser/updater/MeasurementUpdater.java | 2 +- .../db/metadata/newnode/BasicMNodeInfo.java | 35 ++ .../db/metadata/newnode/CacheMNodeInfo.java | 38 +++ .../db/metadata/newnode/ConfigMNodeInfo.java | 70 ++++ .../DatabaseDeviceInfo.java} | 40 +-- .../db/metadata/newnode/ICacheMNode.java | 28 ++ .../db/metadata/newnode/IConfigMNode.java | 33 ++ .../iotdb/db/metadata/newnode/IMemMNode.java | 23 ++ .../newnode/basic/CacheBasicMNode.java | 303 +++++++++++++++++ .../newnode/basic/ConfigBasicMNode.java | 312 ++++++++++++++++++ .../database/AbstractDatabaseMNode.java | 201 +++++++++++ .../newnode/database/CacheDatabaseMNode.java | 48 +++ .../newnode/database/ConfigDatabaseMNode.java | 56 ++++ .../database/DatabaseInfo.java} | 45 +-- .../newnode/database/DatabaseMNode.java | 36 ++ .../database/IDatabaseInfo.java} | 6 +- .../newnode/database/IDatabaseMNode.java | 24 ++ .../AbstractDatabaseDeviceMNode.java | 265 +++++++++++++++ .../CacheDatabaseDeviceMNode.java | 43 +++ .../databasedevice/DatabaseDeviceMNode.java | 30 ++ .../newnode/device/AbstractDeviceMNode.java | 236 +++++++++++++ .../newnode/device/CacheDeviceMNode.java | 41 +++ .../device/DeviceInfo.java} | 95 ++---- .../metadata/newnode/device/DeviceMNode.java | 29 ++ .../device/IDeviceInfo.java} | 13 +- .../metadata/newnode/device/IDeviceMNode.java | 23 ++ .../measurement/AbstractMeasurementMNode.java | 230 +++++++++++++ .../measurement/CacheMeasurementMNode.java | 44 +++ .../measurement/IMeasurementInfo.java} | 13 +- .../measurement/IMeasurementMNode.java | 31 ++ .../newnode/measurement/MeasurementInfo.java | 79 +++++ .../newnode/measurement/MeasurementMNode.java | 31 ++ .../schemaregion/SchemaRegionMemoryImpl.java | 2 +- .../SchemaRegionSchemaFileImpl.java | 2 +- .../iotdb/db/metadata/tag/TagManager.java | 2 +- .../iotdb/db/metadata/template/Template.java | 11 +- .../iotdb/db/metadata/MetaUtilsTest.java | 14 +- .../db/metadata/idtable/IDTableTest.java | 2 +- .../iotdb/db/metadata/mnode/MNodeTest.java | 37 ++- .../db/metadata/mtree/ConfigMTreeTest.java | 5 +- .../mtree/disk/CachedMNodeContainerTest.java | 14 +- .../mtree/schemafile/RecordUtilTests.java | 4 +- .../mtree/schemafile/SchemaFileLogTest.java | 6 +- .../mtree/schemafile/SchemaFileTest.java | 88 ++--- .../mtree/schemafile/SchemaPageTest.java | 6 +- .../mtree/schemafile/WrappedSegmentTest.java | 12 +- .../schemaRegion/SchemaStatisticsTest.java | 24 +- .../iotdb/db/tools/SchemaFileSketchTest.java | 12 +- 94 files changed, 2973 insertions(+), 1206 deletions(-) rename schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/{RStorageGroupMNode.java => RDatabaseMNode.java} (88%) rename schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/{REntityMNode.java => RDeviceMNode.java} (91%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/{InternalMNode.java => BasicMNode.java} (60%) delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java rename server/src/main/java/org/apache/iotdb/db/metadata/{mnode/StorageGroupEntityMNode.java => newnode/DatabaseDeviceInfo.java} (63%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/ICacheMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/IMemMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java rename server/src/main/java/org/apache/iotdb/db/metadata/{mnode/StorageGroupMNode.java => newnode/database/DatabaseInfo.java} (60%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java rename server/src/main/java/org/apache/iotdb/db/metadata/{mnode/IStorageGroupMNode.java => newnode/database/IDatabaseInfo.java} (87%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java rename server/src/main/java/org/apache/iotdb/db/metadata/{mnode/EntityMNode.java => newnode/device/DeviceInfo.java} (68%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java rename server/src/main/java/org/apache/iotdb/db/metadata/{mnode/IEntityMNode.java => newnode/device/IDeviceInfo.java} (76%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java rename server/src/main/java/org/apache/iotdb/db/metadata/{mnode/IMeasurementMNode.java => newnode/measurement/IMeasurementInfo.java} (76%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java index ea127b46df4df..6d961cc6753db 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java @@ -24,8 +24,8 @@ import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RMNodeType; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java index c2dffc51ec0c5..22e0a1a63f8c4 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java @@ -43,7 +43,7 @@ import org.apache.iotdb.db.metadata.idtable.IDTableManager; import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; @@ -620,7 +620,7 @@ public Pair> deleteTimeseries(PartialPath pathPattern, bool // TODO: tags invert index update } readWriteHandler.executeBatch(batch); - if (!deletedNode.getParent().isStorageGroup()) { + if (!deletedNode.getParent().isDatabase()) { parentNeedsToCheck.add(deletedNode.getParent()); } } @@ -643,7 +643,7 @@ public Pair> deleteTimeseries(PartialPath pathPattern, bool Stream parentStream = parentNeedsToCheck.parallelStream(); parentStream.forEach( currentNode -> { - if (!currentNode.isStorageGroup()) { + if (!currentNode.isDatabase()) { PartialPath parentPath = currentNode.getPartialPath(); int level = parentPath.getNodeLength(); int end = parentPath.getNodeLength() - 1; @@ -653,7 +653,7 @@ public Pair> deleteTimeseries(PartialPath pathPattern, bool readWriteHandler.deleteNode( parentPath.getNodes(), RSchemaUtils.typeOfMNode(currentNode)); IMNode parentNode = currentNode.getParent(); - if (!parentNode.isStorageGroup()) { + if (!parentNode.isDatabase()) { tempSet.add(currentNode.getParent()); } } catch (Exception e) { diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java index f38d3290775d2..d92aaf2afc6c9 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java @@ -24,11 +24,11 @@ import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.utils.PathUtils; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.REntityMNode; +import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RDatabaseMNode; +import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RDeviceMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RMNodeType; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RMNodeValueType; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RMeasurementMNode; -import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RStorageGroupMNode; import org.apache.iotdb.tsfile.utils.BytesUtils; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; @@ -170,11 +170,11 @@ public static PartialPath getPartialPathFromInnerPath(String path, char level) { public static RMNodeType typeOfMNode(IMNode mNode) { // order sensitive - if (mNode instanceof REntityMNode) { + if (mNode instanceof RDeviceMNode) { return RMNodeType.ENTITY; } - if (mNode instanceof RStorageGroupMNode) { + if (mNode instanceof RDatabaseMNode) { return RMNodeType.STORAGE_GROUP; } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RStorageGroupMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java similarity index 88% rename from schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RStorageGroupMNode.java rename to schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java index 8efabdfb29fab..f60b2165c27c9 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RStorageGroupMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java @@ -22,15 +22,15 @@ import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; import org.rocksdb.RocksDBException; -public class RStorageGroupMNode extends RInternalMNode implements IStorageGroupMNode { +public class RDatabaseMNode extends RInternalMNode implements IDatabaseMNode { private long dataTTL; @@ -39,14 +39,12 @@ public class RStorageGroupMNode extends RInternalMNode implements IStorageGroupM * * @param fullPath */ - public RStorageGroupMNode( - String fullPath, long dataTTL, RSchemaReadWriteHandler readWriteHandler) { + public RDatabaseMNode(String fullPath, long dataTTL, RSchemaReadWriteHandler readWriteHandler) { super(fullPath, readWriteHandler); this.dataTTL = dataTTL; } - public RStorageGroupMNode( - String fullPath, byte[] value, RSchemaReadWriteHandler readWriteHandler) { + public RDatabaseMNode(String fullPath, byte[] value, RSchemaReadWriteHandler readWriteHandler) { super(fullPath, readWriteHandler); Object ttl = RSchemaUtils.parseNodeValue(value, RMNodeValueType.TTL); if (ttl == null) { @@ -70,7 +68,7 @@ void updateChildNode(String childName, int childNameMaxLevel) throws MetadataExc } @Override - public boolean isStorageGroup() { + public boolean isDatabase() { return true; } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/REntityMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java similarity index 91% rename from schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/REntityMNode.java rename to schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java index 4fedc5423988e..9f5784f69bc94 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/REntityMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java @@ -20,9 +20,9 @@ package org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; @@ -33,7 +33,7 @@ import java.nio.ByteBuffer; import java.util.Map; -public class REntityMNode extends RInternalMNode implements IEntityMNode { +public class RDeviceMNode extends RInternalMNode implements IDeviceMNode { private volatile boolean isAligned = false; @@ -42,7 +42,7 @@ public class REntityMNode extends RInternalMNode implements IEntityMNode { * * @param fullPath */ - public REntityMNode(String fullPath, RSchemaReadWriteHandler readWriteHandler) { + public RDeviceMNode(String fullPath, RSchemaReadWriteHandler readWriteHandler) { super(fullPath, readWriteHandler); } @@ -58,7 +58,7 @@ void updateChildNode(String childName, int childNameMaxLevel) throws MetadataExc } } - public REntityMNode(String fullPath, byte[] value, RSchemaReadWriteHandler readWriteHandler) { + public RDeviceMNode(String fullPath, byte[] value, RSchemaReadWriteHandler readWriteHandler) { super(fullPath, readWriteHandler); deserialize(value); } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java index 2dbad227c9c30..b24558eaef42b 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java @@ -22,13 +22,13 @@ import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; @@ -96,13 +96,13 @@ protected IMNode getNodeBySpecifiedPath(String keyName) { if (value != null) { switch (type.getValue()) { case RSchemaConstants.NODE_TYPE_SG: - node = new RStorageGroupMNode(keyName, value, readWriteHandler); + node = new RDatabaseMNode(keyName, value, readWriteHandler); return node; case RSchemaConstants.NODE_TYPE_INTERNAL: node = new RInternalMNode(keyName, readWriteHandler); return node; case RSchemaConstants.NODE_TYPE_ENTITY: - node = new REntityMNode(keyName, value, readWriteHandler); + node = new RDeviceMNode(keyName, value, readWriteHandler); return node; case RSchemaConstants.NODE_TYPE_MEASUREMENT: node = new RMeasurementMNode(keyName, value, readWriteHandler); @@ -189,7 +189,7 @@ public boolean isAboveDatabase() { } @Override - public boolean isStorageGroup() { + public boolean isDatabase() { return false; } @@ -204,18 +204,18 @@ public boolean isMeasurement() { } @Override - public IStorageGroupMNode getAsStorageGroupMNode() { - if (isStorageGroup()) { - return (IStorageGroupMNode) this; + public IDatabaseMNode getAsDatabaseMNode() { + if (isDatabase()) { + return (IDatabaseMNode) this; } else { throw new UnsupportedOperationException("Wrong MNode Type"); } } @Override - public IEntityMNode getAsEntityMNode() { + public IDeviceMNode getAsEntityMNode() { if (isEntity()) { - return (IEntityMNode) this; + return (IDeviceMNode) this; } else { throw new UnsupportedOperationException("Wrong MNode Type"); } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java index c13879c5529bd..b64c0ebe400e4 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java @@ -21,11 +21,11 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.MeasurementPath; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; @@ -79,7 +79,7 @@ public RMeasurementMNode( } @Override - public IEntityMNode getParent() { + public IDeviceMNode getParent() { if (super.getParent() == null) { return null; } diff --git a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java index 7aacc567402ae..e8abaa9430847 100644 --- a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java +++ b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java @@ -37,7 +37,7 @@ import org.apache.iotdb.db.metadata.idtable.entry.SHA256DeviceID; import org.apache.iotdb.db.metadata.idtable.entry.SchemaEntry; import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; @@ -87,7 +87,7 @@ public class TagSchemaRegion implements ISchemaRegion { // when a path ends with ".**", it represents batch processing private final String TAIL = ".**"; - private final IStorageGroupMNode storageGroupMNode; + private final IDatabaseMNode storageGroupMNode; private final String storageGroupFullPath; private final SchemaRegionId schemaRegionId; private final String schemaRegionDirPath; @@ -103,7 +103,7 @@ public class TagSchemaRegion implements ISchemaRegion { public TagSchemaRegion( PartialPath storageGroup, SchemaRegionId schemaRegionId, - IStorageGroupMNode storageGroupMNode, + IDatabaseMNode storageGroupMNode, ISeriesNumerMonitor seriesNumerMonitor) throws MetadataException { storageGroupFullPath = storageGroup.getFullPath(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java index 1b376d4c518fd..389dd70cb86f3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java @@ -21,14 +21,14 @@ import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; @@ -73,7 +73,7 @@ public TSDataType getDataType(String measurementId) { } @Override - public IEntityMNode getParent() { + public IDeviceMNode getParent() { return null; } @@ -211,7 +211,7 @@ public boolean isAboveDatabase() { } @Override - public boolean isStorageGroup() { + public boolean isDatabase() { throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); } @@ -231,12 +231,12 @@ public MNodeType getMNodeType(Boolean isConfig) { } @Override - public IStorageGroupMNode getAsStorageGroupMNode() { + public IDatabaseMNode getAsDatabaseMNode() { throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); } @Override - public IEntityMNode getAsEntityMNode() { + public IDeviceMNode getAsEntityMNode() { throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/AboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/AboveDatabaseMNode.java index 9b2251d40f658..af537151e7ff9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/AboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/AboveDatabaseMNode.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.mnode; /** Used to fill the link list of MNode above database in IMTreeBelowSG */ -public class AboveDatabaseMNode extends InternalMNode { +public class AboveDatabaseMNode extends BasicMNode { /** * Constructor of MNode. * diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java similarity index 60% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java index 47e95f0b9cd5f..8a63c8e162bad 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java @@ -18,17 +18,26 @@ */ package org.apache.iotdb.db.metadata.mnode; +import org.apache.iotdb.commons.conf.IoTDBConstant; +import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.container.MNodeContainerMapImpl; import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.BasicMNodeInfo; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -import static org.apache.iotdb.db.metadata.MetadataConstant.NON_TEMPLATE; +import java.util.ArrayList; +import java.util.List; /** * This class is the implementation of Metadata Node. One MNode instance represents one node in the * Metadata Tree */ -public class InternalMNode extends MNode { +public class BasicMNode implements IMemMNode { private static final long serialVersionUID = -770028375899514063L; @@ -39,22 +48,73 @@ public class InternalMNode extends MNode { *

This will be a ConcurrentHashMap instance */ @SuppressWarnings("squid:S3077") - protected transient volatile IMNodeContainer children = null; + protected transient volatile IMNodeContainer children = null; - /** - * This field is mainly used in cluster schema template features. In InternalMNode of ConfigMTree, - * this field represents the template set on this node. In EntityMNode of MTree in SchemaRegion, - * this field represents the template activated on this node. The normal usage value range is [0, - * Int.MaxValue], since this is implemented as auto inc id. The default value -1 means - * NON_TEMPLATE. This value will be set negative to implement some pre-delete features. - */ - protected int schemaTemplateId = NON_TEMPLATE; + private IMemMNode parent; + private BasicMNodeInfo basicMNodeInfo; - private volatile boolean useTemplate = false; + /** from root to this node, only be set when used once for InternalMNode */ + private String fullPath; /** Constructor of MNode. */ - public InternalMNode(IMNode parent, String name) { - super(parent, name); + public BasicMNode(IMemMNode parent, String name) { + this.parent = parent; + this.basicMNodeInfo = new BasicMNodeInfo(name); + } + + @Override + public String getName() { + return basicMNodeInfo.getName(); + } + + @Override + public void setName(String name) { + basicMNodeInfo.setName(name); + } + + @Override + public IMemMNode getParent() { + return parent; + } + + @Override + public void setParent(IMemMNode parent) { + this.parent = parent; + } + + @Override + public String getFullPath() { + if (fullPath == null) { + fullPath = concatFullPath(); + } + return fullPath; + } + + String concatFullPath() { + StringBuilder builder = new StringBuilder(getName()); + IMemMNode curr = this; + while (curr.getParent() != null) { + curr = curr.getParent(); + builder.insert(0, IoTDBConstant.PATH_SEPARATOR).insert(0, curr.getName()); + } + return builder.toString(); + } + + @Override + public void setFullPath(String fullPath) { + this.fullPath = fullPath; + } + + @Override + public PartialPath getPartialPath() { + List detachedPath = new ArrayList<>(); + IMemMNode temp = this; + detachedPath.add(temp.getName()); + while (temp.getParent() != null) { + temp = temp.getParent(); + detachedPath.add(0, temp.getName()); + } + return new PartialPath(detachedPath.toArray(new String[0])); } /** check whether the MNode has a child with the name */ @@ -65,8 +125,8 @@ public boolean hasChild(String name) { /** get the child with the name */ @Override - public IMNode getChild(String name) { - IMNode child = null; + public IMemMNode getChild(String name) { + IMemMNode child = null; if (children != null) { child = children.get(name); } @@ -81,7 +141,7 @@ public IMNode getChild(String name) { * @return the child of this node after addChild */ @Override - public IMNode addChild(String name, IMNode child) { + public IMemMNode addChild(String name, IMemMNode child) { /* use cpu time to exchange memory * measurementNode's children should be null to save memory * add child method will only be called when writing MTree, which is not a frequent operation @@ -90,12 +150,12 @@ public IMNode addChild(String name, IMNode child) { // double check, children is volatile synchronized (this) { if (children == null) { - children = MNodeContainers.getNewMNodeContainer(); + children = new MNodeContainerMapImpl<>(); } } } child.setParent(this); - IMNode existingChild = children.putIfAbsent(name, child); + IMemMNode existingChild = children.putIfAbsent(name, child); return existingChild == null ? child : existingChild; } @@ -111,7 +171,7 @@ public IMNode addChild(String name, IMNode child) { * @return return the MNode already added */ @Override - public IMNode addChild(IMNode child) { + public IMemMNode addChild(IMemMNode child) { /* use cpu time to exchange memory * measurementNode's children should be null to save memory * add child method will only be called when writing MTree, which is not a frequent operation @@ -120,7 +180,7 @@ public IMNode addChild(IMNode child) { // double check, children is volatile synchronized (this) { if (children == null) { - children = MNodeContainers.getNewMNodeContainer(); + children = new MNodeContainerMapImpl<>(); } } } @@ -132,7 +192,7 @@ public IMNode addChild(IMNode child) { /** delete a child */ @Override - public IMNode deleteChild(String name) { + public IMemMNode deleteChild(String name) { if (children != null) { return children.remove(name); } @@ -146,11 +206,11 @@ public IMNode deleteChild(String name) { * @param newChildNode new child node */ @Override - public synchronized void replaceChild(String oldChildName, IMNode newChildNode) { + 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!"); } - IMNode oldChildNode = this.getChild(oldChildName); + IMemMNode oldChildNode = this.getChild(oldChildName); if (oldChildNode == null) { return; } @@ -161,11 +221,8 @@ public synchronized void replaceChild(String oldChildName, IMNode newChildNode) } @Override - public void moveDataToNewMNode(IMNode newMNode) { - super.moveDataToNewMNode(newMNode); - - newMNode.setUseTemplate(useTemplate); - newMNode.setSchemaTemplateId(schemaTemplateId); + public void moveDataToNewMNode(IMemMNode newMNode) { + newMNode.setParent(parent); if (children != null) { newMNode.setChildren(children); @@ -187,53 +244,22 @@ public void setChildren(IMNodeContainer children) { } @Override - public int getSchemaTemplateId() { - return schemaTemplateId >= -1 ? schemaTemplateId : -schemaTemplateId - 2; - } - - @Override - public int getSchemaTemplateIdWithState() { - return schemaTemplateId; - } - - @Override - public void setSchemaTemplateId(int schemaTemplateId) { - this.schemaTemplateId = schemaTemplateId; - } - - /** - * In InternalMNode, schemaTemplateId represents the template set on this node. The pre unset - * mechanism is implemented by making this value negative. Since value 0 and -1 are all occupied, - * the available negative value range is [Int.MIN_VALUE, -2]. The value of a pre unset case equals - * the negative normal value minus 2. For example, if the id of set template is 0, then - 0 - 2 = - * -2 represents the pre unset operation of this template on this node. - */ - @Override - public void preUnsetSchemaTemplate() { - if (this.schemaTemplateId > -1) { - this.schemaTemplateId = -schemaTemplateId - 2; - } - } - - @Override - public void rollbackUnsetSchemaTemplate() { - if (schemaTemplateId < -1) { - schemaTemplateId = -schemaTemplateId - 2; - } + public boolean isAboveDatabase() { + return false; } @Override - public boolean isSchemaTemplatePreUnset() { - return schemaTemplateId < -1; + public boolean isDatabase() { + return false; } @Override - public void unsetSchemaTemplate() { - this.schemaTemplateId = -1; + public boolean isEntity() { + return false; } @Override - public boolean isAboveDatabase() { + public boolean isMeasurement() { return false; } @@ -243,13 +269,18 @@ public MNodeType getMNodeType(Boolean isConfig) { } @Override - public boolean isUseTemplate() { - return useTemplate; + public IDatabaseMNode getAsDatabaseMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IDeviceMNode getAsEntityMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); } @Override - public void setUseTemplate(boolean useTemplate) { - this.useTemplate = useTemplate; + public IMeasurementMNode getAsMeasurementMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java index b7b2e452e823b..0115b2ed0b1c3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java @@ -22,18 +22,20 @@ import org.apache.iotdb.commons.schema.tree.ITreeNode; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; /** This interface defines a MNode's operation interfaces. */ -public interface IMNode extends ITreeNode { +public interface IMNode> extends ITreeNode { String getName(); void setName(String name); - IMNode getParent(); + N getParent(); - void setParent(IMNode parent); + void setParent(N parent); String getFullPath(); @@ -43,48 +45,28 @@ public interface IMNode extends ITreeNode { boolean hasChild(String name); - IMNode getChild(String name); + N getChild(String name); - IMNode addChild(String name, IMNode child); + N addChild(String name, N child); - IMNode addChild(IMNode child); + N addChild(N child); - IMNode deleteChild(String name); + 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, IMNode newChildNode); + void replaceChild(String oldChildName, N newChildNode); // this method will move all the reference or value of current node's attributes to newMNode - void moveDataToNewMNode(IMNode newMNode); + void moveDataToNewMNode(N newMNode); IMNodeContainer getChildren(); void setChildren(IMNodeContainer children); - boolean isUseTemplate(); - - void setUseTemplate(boolean useTemplate); - - /** @return the logic id of template set or activated on this node, id>=-1 */ - int getSchemaTemplateId(); - - /** @return the template id with current state, may be negative since unset or deactivation */ - int getSchemaTemplateIdWithState(); - - void setSchemaTemplateId(int schemaTemplateId); - - void preUnsetSchemaTemplate(); - - void rollbackUnsetSchemaTemplate(); - - boolean isSchemaTemplatePreUnset(); - - void unsetSchemaTemplate(); - boolean isAboveDatabase(); - boolean isStorageGroup(); + boolean isDatabase(); boolean isEntity(); @@ -92,15 +74,11 @@ public interface IMNode extends ITreeNode { MNodeType getMNodeType(Boolean isConfig); - IStorageGroupMNode getAsStorageGroupMNode(); + IDatabaseMNode getAsDatabaseMNode(); - IEntityMNode getAsEntityMNode(); + IDeviceMNode getAsEntityMNode(); IMeasurementMNode getAsMeasurementMNode(); - CacheEntry getCacheEntry(); - - void setCacheEntry(CacheEntry cacheEntry); - R accept(MNodeVisitor visitor, C context); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java deleted file mode 100644 index cfd7f6ee4d2da..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java +++ /dev/null @@ -1,200 +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.metadata.mnode; - -import org.apache.iotdb.commons.conf.IoTDBConstant; -import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -public abstract class MNode implements IMNode { - - /** Name of the MNode */ - protected String name; - - protected IMNode parent; - - /** from root to this node, only be set when used once for InternalMNode */ - protected String fullPath; - - protected CacheEntry cacheEntry; - - /** Constructor of MNode. */ - protected MNode(IMNode parent, String name) { - this.parent = parent; - this.name = name; - } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(String name) { - this.name = name; - } - - @Override - public IMNode getParent() { - return parent; - } - - @Override - public void setParent(IMNode parent) { - this.parent = parent; - } - - /** - * get partial path of this node - * - * @return partial path - */ - @Override - public PartialPath getPartialPath() { - List detachedPath = new ArrayList<>(); - IMNode temp = this; - detachedPath.add(temp.getName()); - while (temp.getParent() != null) { - temp = temp.getParent(); - detachedPath.add(0, temp.getName()); - } - return new PartialPath(detachedPath.toArray(new String[0])); - } - - /** get full path */ - @Override - public String getFullPath() { - if (fullPath == null) { - fullPath = concatFullPath(); - } - return fullPath; - } - - String concatFullPath() { - StringBuilder builder = new StringBuilder(name); - IMNode curr = this; - while (curr.getParent() != null) { - curr = curr.getParent(); - builder.insert(0, IoTDBConstant.PATH_SEPARATOR).insert(0, curr.getName()); - } - return builder.toString(); - } - - @Override - public void setFullPath(String fullPath) { - this.fullPath = fullPath; - } - - @Override - public void moveDataToNewMNode(IMNode newMNode) { - newMNode.setParent(parent); - newMNode.setCacheEntry(cacheEntry); - } - - @Override - public boolean isUseTemplate() { - return false; - } - - @Override - public boolean isStorageGroup() { - return false; - } - - @Override - public boolean isEntity() { - return false; - } - - @Override - public boolean isMeasurement() { - return false; - } - - @Override - public IStorageGroupMNode getAsStorageGroupMNode() { - if (isStorageGroup()) { - return (IStorageGroupMNode) this; - } else { - throw new UnsupportedOperationException("Wrong MNode Type"); - } - } - - @Override - public IEntityMNode getAsEntityMNode() { - if (isEntity()) { - return (IEntityMNode) this; - } else { - throw new UnsupportedOperationException("Wrong MNode Type"); - } - } - - @Override - public IMeasurementMNode getAsMeasurementMNode() { - if (isMeasurement()) { - return (IMeasurementMNode) this; - } else { - throw new UnsupportedOperationException("Wrong MNode Type"); - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - MNode mNode = (MNode) o; - if (fullPath == null) { - return Objects.equals(getFullPath(), mNode.getFullPath()); - } else { - return Objects.equals(fullPath, mNode.getFullPath()); - } - } - - @Override - public int hashCode() { - if (fullPath == null) { - return Objects.hash(getFullPath()); - } else { - return Objects.hash(fullPath); - } - } - - @Override - public String toString() { - return this.getName(); - } - - @Override - public CacheEntry getCacheEntry() { - return cacheEntry; - } - - @Override - public void setCacheEntry(CacheEntry cacheEntry) { - this.cacheEntry = cacheEntry; - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java index c5fed50dfd205..4ebaf95ecf833 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java @@ -18,6 +18,11 @@ */ package org.apache.iotdb.db.metadata.mnode; +import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; + public class MNodeUtils { /** @@ -28,18 +33,18 @@ public class MNodeUtils { * @param node node to be transformed * @return generated entityMNode */ - public static IEntityMNode setToEntity(IMNode node) { - IEntityMNode entityMNode; + public static IDeviceMNode setToEntity(IMNode node) { + IDeviceMNode entityMNode; if (node.isEntity()) { entityMNode = node.getAsEntityMNode(); } else { - if (node.isStorageGroup()) { + if (node.isDatabase()) { entityMNode = - new StorageGroupEntityMNode( - node.getParent(), node.getName(), node.getAsStorageGroupMNode().getDataTTL()); + new AbstractDatabaseDeviceMNode( + node.getParent(), node.getName(), node.getAsDatabaseMNode().getDataTTL()); node.moveDataToNewMNode(entityMNode); } else { - entityMNode = new EntityMNode(node.getParent(), node.getName()); + entityMNode = new AbstractDeviceMNode(node.getParent(), node.getName()); if (node.getParent() != null) { node.getParent().replaceChild(node.getName(), entityMNode); } else { @@ -58,15 +63,15 @@ public static IEntityMNode setToEntity(IMNode node) { * @param entityMNode node to be transformed * @return generated NoEntity node */ - public static IMNode setToInternal(IEntityMNode entityMNode) { + public static IMNode setToInternal(IDeviceMNode entityMNode) { IMNode node; IMNode parent = entityMNode.getParent(); - if (entityMNode.isStorageGroup()) { + if (entityMNode.isDatabase()) { node = - new StorageGroupMNode( - parent, entityMNode.getName(), entityMNode.getAsStorageGroupMNode().getDataTTL()); + new AbstractDatabaseMNode( + parent, entityMNode.getName(), entityMNode.getAsDatabaseMNode().getDataTTL()); } else { - node = new InternalMNode(parent, entityMNode.getName()); + node = new BasicMNode(parent, entityMNode.getName()); } if (parent != null) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java deleted file mode 100644 index 2151a170c023e..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java +++ /dev/null @@ -1,233 +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.metadata.mnode; - -import org.apache.iotdb.commons.path.MeasurementPath; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; -import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class MeasurementMNode extends MNode implements IMeasurementMNode { - - private static final Logger logger = LoggerFactory.getLogger(MeasurementMNode.class); - - /** alias name of this measurement */ - protected String alias; - /** tag/attribute's start offset in tag file */ - private long offset = -1; - /** measurement's Schema for one timeseries represented by current leaf node */ - private IMeasurementSchema schema; - /** whether this measurement is pre deleted and considered in black list */ - private boolean preDeleted = false; - - /** - * MeasurementMNode factory method. The type of returned MeasurementMNode is according to the - * schema type. The default type is UnaryMeasurementMNode, which means if schema == null, an - * UnaryMeasurementMNode will return. - */ - public static IMeasurementMNode getMeasurementMNode( - IEntityMNode parent, String measurementName, IMeasurementSchema schema, String alias) { - return new MeasurementMNode(parent, measurementName, schema, alias); - } - - /** @param alias alias of measurementName */ - public MeasurementMNode(IMNode parent, String name, IMeasurementSchema schema, String alias) { - super(parent, name); - this.schema = schema; - this.alias = alias; - } - - @Override - public IEntityMNode getParent() { - if (parent == null) { - return null; - } - return parent.getAsEntityMNode(); - } - - /** - * get MeasurementPath of this node - * - * @return MeasurementPath - */ - @Override - public MeasurementPath getMeasurementPath() { - MeasurementPath result = new MeasurementPath(super.getPartialPath(), schema); - result.setUnderAlignedEntity(getParent().isAligned()); - return result; - } - - @Override - public IMeasurementSchema getSchema() { - return schema; - } - - /** - * get data type - * - * @param measurementId if it's a vector schema, we need sensor name of it - * @return measurement data type - */ - @Override - public TSDataType getDataType(String measurementId) { - return schema.getType(); - } - - @Override - public long getOffset() { - return offset; - } - - @Override - public void setOffset(long offset) { - this.offset = offset; - } - - @Override - public String getAlias() { - return alias; - } - - @Override - public void setAlias(String alias) { - this.alias = alias; - } - - @Override - public boolean isPreDeleted() { - return preDeleted; - } - - @Override - public void setPreDeleted(boolean preDeleted) { - this.preDeleted = preDeleted; - } - - @Override - public R accept(MNodeVisitor visitor, C context) { - return visitor.visitMeasurementMNode(this, context); - } - - @Override - public String getFullPath() { - if (fullPath != null) { - return fullPath; - } - return concatFullPath(); - } - - @Override - public boolean hasChild(String name) { - return false; - } - - @Override - public IMNode getChild(String name) { - MeasurementMNode.logger.warn( - "current node {} is a MeasurementMNode, can not get child {}", this.name, name); - throw new RuntimeException( - String.format( - "current node %s is a MeasurementMNode, can not get child %s", super.name, name)); - } - - @Override - public IMNode addChild(String name, IMNode child) { - // Do nothing - return null; - } - - @Override - public IMNode addChild(IMNode child) { - return null; - } - - @Override - public IMNode deleteChild(String name) { - return null; - } - - @Override - public void replaceChild(String oldChildName, IMNode newChildNode) {} - - @Override - public IMNodeContainer getChildren() { - return MNodeContainers.emptyMNodeContainer(); - } - - @Override - public void setChildren(IMNodeContainer children) { - // Do nothing - } - - @Override - public int getSchemaTemplateId() { - MeasurementMNode.logger.warn( - "current node {} is a MeasurementMNode, can not get Schema Template", name); - throw new UnsupportedOperationException( - String.format("current node %s is a MeasurementMNode, can not get Schema Template", name)); - } - - @Override - public int getSchemaTemplateIdWithState() { - MeasurementMNode.logger.warn( - "current node {} is a MeasurementMNode, can not get Schema Template", name); - throw new UnsupportedOperationException( - String.format("current node %s is a MeasurementMNode, can not get Schema Template", name)); - } - - @Override - public void setSchemaTemplateId(int schemaTemplateId) {} - - @Override - public void preUnsetSchemaTemplate() {} - - @Override - public void rollbackUnsetSchemaTemplate() {} - - @Override - public boolean isSchemaTemplatePreUnset() { - return false; - } - - @Override - public void unsetSchemaTemplate() {} - - @Override - public boolean isAboveDatabase() { - return false; - } - - @Override - public void setUseTemplate(boolean useTemplate) {} - - @Override - public boolean isMeasurement() { - return true; - } - - @Override - public MNodeType getMNodeType(Boolean isConfig) { - return MNodeType.MEASUREMENT; - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/IMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/IMNodeContainer.java index e8e0cb6820c0e..a32dbc9f9977e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/IMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/IMNodeContainer.java @@ -22,4 +22,4 @@ import java.util.Map; -public interface IMNodeContainer extends Map {} +public interface IMNodeContainer> extends Map {} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainerMapImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainerMapImpl.java index a7a043b6deb8d..faba67bdd4863 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainerMapImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainerMapImpl.java @@ -22,5 +22,5 @@ import java.util.concurrent.ConcurrentHashMap; -public class MNodeContainerMapImpl extends ConcurrentHashMap - implements IMNodeContainer {} +public class MNodeContainerMapImpl> extends ConcurrentHashMap + implements IMNodeContainer {} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java index ff695e753bdee..091d7e2faf6e2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java @@ -20,7 +20,7 @@ package org.apache.iotdb.db.metadata.mnode.estimator; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; public class BasicMNodSizeEstimator implements IMNodeSizeEstimator { /** @@ -99,9 +99,9 @@ public int estimateSize(IMNode node) { } } else { size += INTERNAL_NODE_BASE_SIZE; - if (node.isStorageGroup()) { + if (node.isDatabase()) { size += STORAGE_GROUP_NODE_BASE_SIZE; - size += node.getAsStorageGroupMNode().getFullPath().length(); + size += node.getAsDatabaseMNode().getFullPath().length(); } if (node.isEntity()) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java index 821c901de524e..96303b323aa1c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java @@ -19,9 +19,9 @@ package org.apache.iotdb.db.metadata.mnode.iterator; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.template.Template; import java.util.Iterator; @@ -43,7 +43,7 @@ public abstract class AbstractTraverserIterator implements IMNodeIterator { private boolean skipPreDeletedSchema = false; protected AbstractTraverserIterator( - IMTreeStore store, IEntityMNode parent, Map templateMap) + IMTreeStore store, IDeviceMNode parent, Map templateMap) throws MetadataException { this.directChildrenIterator = store.getChildrenIterator(parent); if (templateMap != null && parent.isUseTemplate()) { @@ -59,7 +59,7 @@ public void setSkipPreDeletedSchema(boolean skipPreDeletedSchema) { } private Template getActivatedSchemaTemplate( - IEntityMNode node, Map templateMap) { + IDeviceMNode node, Map templateMap) { // new cluster, the used template is directly recorded as template id in device mnode if (node.getSchemaTemplateId() != NON_TEMPLATE) { if (skipPreDeletedSchema && node.getAsEntityMNode().isPreDeactivateTemplate()) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java index 501f7483157e5..a8c635b6808fc 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java @@ -19,8 +19,8 @@ package org.apache.iotdb.db.metadata.mnode.iterator; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.template.Template; import java.util.Map; @@ -29,7 +29,7 @@ public class CachedTraverserIterator extends AbstractTraverserIterator { private final IMTreeStore store; public CachedTraverserIterator( - IMTreeStore store, IEntityMNode parent, Map templateMap) + IMTreeStore store, IDeviceMNode parent, Map templateMap) throws MetadataException { super(store, parent, templateMap); this.store = store; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java index 9a8d9be7bcca8..33dd65b6618bb 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java @@ -19,15 +19,15 @@ package org.apache.iotdb.db.metadata.mnode.iterator; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.template.Template; import java.util.Map; public class MemoryTraverserIterator extends AbstractTraverserIterator { public MemoryTraverserIterator( - IMTreeStore store, IEntityMNode parent, Map templateMap) + IMTreeStore store, IDeviceMNode parent, Map templateMap) throws MetadataException { super(store, parent, templateMap); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java index 53ccc1f059cdd..a64abb4780af8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java @@ -19,21 +19,21 @@ package org.apache.iotdb.db.metadata.mnode.visitor; -import org.apache.iotdb.db.metadata.mnode.EntityMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupEntityMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; public abstract class MNodeVisitor { - public abstract R visitInternalMNode(InternalMNode node, C context); + public abstract R visitInternalMNode(BasicMNode node, C context); - public abstract R visitStorageGroupMNode(StorageGroupMNode node, C context); + public abstract R visitStorageGroupMNode(AbstractDatabaseMNode node, C context); - public abstract R visitStorageGroupEntityMNode(StorageGroupEntityMNode node, C context); + public abstract R visitStorageGroupEntityMNode(AbstractDatabaseDeviceMNode node, C context); - public abstract R visitEntityMNode(EntityMNode node, C context); + public abstract R visitDeviceMNode(IDeviceMNode node, C context); - public abstract R visitMeasurementMNode(MeasurementMNode node, C context); + public abstract R visitMeasurementMNode(IMeasurementMNode node, C context); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java index 8c2649018c72d..1f61f5fb23baf 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java @@ -28,16 +28,16 @@ import org.apache.iotdb.db.exception.metadata.PathNotExistException; import org.apache.iotdb.db.exception.metadata.StorageGroupAlreadySetException; import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.collector.DatabaseCollector; import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeAboveSGCollector; import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeCollector; import org.apache.iotdb.db.metadata.mtree.traverser.counter.DatabaseCounter; +import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; import org.apache.iotdb.tsfile.utils.Pair; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; @@ -109,8 +109,8 @@ public void setStorageGroup(PartialPath path) throws MetadataException { while (i < nodeNames.length - 1) { IMNode temp = cur.getChild(nodeNames[i]); if (temp == null) { - cur.addChild(nodeNames[i], new InternalMNode(cur, nodeNames[i])); - } else if (temp.isStorageGroup()) { + cur.addChild(nodeNames[i], new BasicMNode(cur, nodeNames[i])); + } else if (temp.isDatabase()) { // before create database, check whether the database already exists throw new StorageGroupAlreadySetException(temp.getFullPath()); } @@ -123,14 +123,14 @@ public void setStorageGroup(PartialPath path) throws MetadataException { synchronized (this) { if (cur.hasChild(nodeNames[i])) { // node b has child sg - if (cur.getChild(nodeNames[i]).isStorageGroup()) { + if (cur.getChild(nodeNames[i]).isDatabase()) { throw new StorageGroupAlreadySetException(path.getFullPath()); } else { throw new StorageGroupAlreadySetException(path.getFullPath(), true); } } else { - IStorageGroupMNode storageGroupMNode = - new StorageGroupMNode( + IDatabaseMNode storageGroupMNode = + new AbstractDatabaseMNode( cur, nodeNames[i], CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); IMNode result = cur.addChild(nodeNames[i], storageGroupMNode); @@ -144,7 +144,7 @@ public void setStorageGroup(PartialPath path) throws MetadataException { /** Delete a database */ public void deleteStorageGroup(PartialPath path) throws MetadataException { - IStorageGroupMNode storageGroupMNode = getStorageGroupNodeByStorageGroupPath(path); + IDatabaseMNode storageGroupMNode = getStorageGroupNodeByStorageGroupPath(path); IMNode cur = storageGroupMNode.getParent(); // Suppose current system has root.a.b.sg1, root.a.sg2, and delete root.a.b.sg1 // delete the database node sg1 @@ -193,7 +193,7 @@ private List collectStorageGroups( try (DatabaseCollector> collector = new DatabaseCollector>(root, pathPattern, store, isPrefixMatch) { @Override - protected void collectDatabase(IStorageGroupMNode node) { + protected void collectDatabase(IDatabaseMNode node) { result.add(node.getPartialPath()); } }) { @@ -214,7 +214,7 @@ public List getAllStorageGroupPaths() { nodeStack.add(root); while (!nodeStack.isEmpty()) { IMNode current = nodeStack.pop(); - if (current.isStorageGroup()) { + if (current.isDatabase()) { res.add(current.getPartialPath()); } else { nodeStack.addAll(current.getChildren().values()); @@ -240,7 +240,7 @@ public int getStorageGroupNum(PartialPath pathPattern, boolean isPrefixMatch) /** * E.g., root.sg is database given [root, sg], if the give path is not a database, throw exception */ - public IStorageGroupMNode getStorageGroupNodeByStorageGroupPath(PartialPath storageGroupPath) + public IDatabaseMNode getStorageGroupNodeByStorageGroupPath(PartialPath storageGroupPath) throws MetadataException { String[] nodes = storageGroupPath.getNodes(); if (nodes.length == 0 || !nodes[0].equals(root.getName())) { @@ -252,7 +252,7 @@ public IStorageGroupMNode getStorageGroupNodeByStorageGroupPath(PartialPath stor if (cur == null) { throw new StorageGroupNotSetException(storageGroupPath.getFullPath()); } - if (cur.isStorageGroup()) { + if (cur.isDatabase()) { throw new StorageGroupAlreadySetException(cur.getFullPath()); } } @@ -261,8 +261,8 @@ public IStorageGroupMNode getStorageGroupNodeByStorageGroupPath(PartialPath stor if (cur == null) { throw new StorageGroupNotSetException(storageGroupPath.getFullPath()); } - if (cur.isStorageGroup()) { - return cur.getAsStorageGroupMNode(); + if (cur.isDatabase()) { + return cur.getAsDatabaseMNode(); } else { throw new StorageGroupAlreadySetException(storageGroupPath.getFullPath(), true); } @@ -273,7 +273,7 @@ public IStorageGroupMNode getStorageGroupNodeByStorageGroupPath(PartialPath stor * device], return the MNode of root.sg Get database node, the give path don't need to be database * path. */ - public IStorageGroupMNode getStorageGroupNodeByPath(PartialPath path) throws MetadataException { + public IDatabaseMNode getStorageGroupNodeByPath(PartialPath path) throws MetadataException { String[] nodes = path.getNodes(); if (nodes.length == 0 || !nodes[0].equals(root.getName())) { throw new IllegalPathException(path.getFullPath()); @@ -284,8 +284,8 @@ public IStorageGroupMNode getStorageGroupNodeByPath(PartialPath path) throws Met if (cur == null) { break; } - if (cur.isStorageGroup()) { - return cur.getAsStorageGroupMNode(); + if (cur.isDatabase()) { + return cur.getAsDatabaseMNode(); } } throw new StorageGroupNotSetException(path.getFullPath()); @@ -308,7 +308,7 @@ public boolean isStorageGroupAlreadySet(PartialPath path) { return false; } cur = cur.getChild(nodeNames[i]); - if (cur.isStorageGroup()) { + if (cur.isDatabase()) { return true; } } @@ -332,7 +332,7 @@ public void checkStorageGroupAlreadySet(PartialPath path) throws StorageGroupAlr return; } cur = cur.getChild(nodeNames[i]); - if (cur.isStorageGroup()) { + if (cur.isDatabase()) { throw new StorageGroupAlreadySetException(cur.getFullPath()); } } @@ -352,11 +352,11 @@ public IMNode getNodeWithAutoCreate(PartialPath path) throws StorageGroupNotSetE child = cur.getChild(nodeNames[i]); if (child == null) { if (hasStorageGroup) { - child = cur.addChild(nodeNames[i], new InternalMNode(cur, nodeNames[i])); + child = cur.addChild(nodeNames[i], new BasicMNode(cur, nodeNames[i])); } else { throw new StorageGroupNotSetException(path.getFullPath()); } - } else if (child.isStorageGroup()) { + } else if (child.isDatabase()) { hasStorageGroup = true; } @@ -600,10 +600,10 @@ private IMNode getNodeSetTemplate(int templateId, PartialPath path) throws Metad // region Serialization and Deserialization public void serialize(OutputStream outputStream) throws IOException { - serializeInternalNode((InternalMNode) this.root, outputStream); + serializeInternalNode((BasicMNode) this.root, outputStream); } - private void serializeInternalNode(InternalMNode node, OutputStream outputStream) + private void serializeInternalNode(BasicMNode node, OutputStream outputStream) throws IOException { serializeChildren(node, outputStream); @@ -613,18 +613,18 @@ private void serializeInternalNode(InternalMNode node, OutputStream outputStream ReadWriteIOUtils.write(node.getChildren().size(), outputStream); } - private void serializeChildren(InternalMNode node, OutputStream outputStream) throws IOException { + private void serializeChildren(BasicMNode node, OutputStream outputStream) throws IOException { for (IMNode child : node.getChildren().values()) { - if (child.isStorageGroup()) { - serializeStorageGroupNode((StorageGroupMNode) child, outputStream); + if (child.isDatabase()) { + serializeStorageGroupNode((AbstractDatabaseMNode) child, outputStream); } else { - serializeInternalNode((InternalMNode) child, outputStream); + serializeInternalNode((BasicMNode) child, outputStream); } } } private void serializeStorageGroupNode( - StorageGroupMNode storageGroupNode, OutputStream outputStream) throws IOException { + AbstractDatabaseMNode storageGroupNode, OutputStream outputStream) throws IOException { serializeChildren(storageGroupNode, outputStream); ReadWriteIOUtils.write(STORAGE_GROUP_MNODE_TYPE, outputStream); @@ -641,33 +641,33 @@ public void deserialize(InputStream inputStream) throws IOException { return; } - StorageGroupMNode storageGroupMNode = deserializeStorageGroupMNode(inputStream); - InternalMNode internalMNode; + AbstractDatabaseMNode databaseMNode = deserializeStorageGroupMNode(inputStream); + BasicMNode basicMNode; - Stack stack = new Stack<>(); - stack.push(storageGroupMNode); + Stack stack = new Stack<>(); + stack.push(databaseMNode); - String name = storageGroupMNode.getName(); + String name = databaseMNode.getName(); int childNum = 0; while (!PATH_ROOT.equals(name)) { type = ReadWriteIOUtils.readByte(inputStream); switch (type) { case INTERNAL_MNODE_TYPE: - internalMNode = deserializeInternalMNode(inputStream); + basicMNode = deserializeInternalMNode(inputStream); childNum = ReadWriteIOUtils.readInt(inputStream); while (childNum > 0) { - internalMNode.addChild(stack.pop()); + basicMNode.addChild(stack.pop()); childNum--; } - stack.push(internalMNode); - name = internalMNode.getName(); + stack.push(basicMNode); + name = basicMNode.getName(); break; case STORAGE_GROUP_MNODE_TYPE: - storageGroupMNode = deserializeStorageGroupMNode(inputStream); + databaseMNode = deserializeStorageGroupMNode(inputStream); childNum = 0; - stack.push(storageGroupMNode); - name = storageGroupMNode.getName(); + stack.push(databaseMNode); + name = databaseMNode.getName(); break; default: logger.error("Unrecognized node type. Cannot deserialize MTreeAboveSG from given buffer"); @@ -677,20 +677,20 @@ public void deserialize(InputStream inputStream) throws IOException { this.root = stack.peek(); } - private InternalMNode deserializeInternalMNode(InputStream inputStream) throws IOException { - InternalMNode internalMNode = new InternalMNode(null, ReadWriteIOUtils.readString(inputStream)); - internalMNode.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); - return internalMNode; + private BasicMNode deserializeInternalMNode(InputStream inputStream) throws IOException { + BasicMNode basicMNode = new BasicMNode(null, ReadWriteIOUtils.readString(inputStream)); + basicMNode.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); + return basicMNode; } - private StorageGroupMNode deserializeStorageGroupMNode(InputStream inputStream) + private AbstractDatabaseMNode deserializeStorageGroupMNode(InputStream inputStream) throws IOException { - StorageGroupMNode storageGroupMNode = - new StorageGroupMNode(null, ReadWriteIOUtils.readString(inputStream)); - storageGroupMNode.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); - storageGroupMNode.setStorageGroupSchema( + AbstractDatabaseMNode databaseMNode = + new AbstractDatabaseMNode(null, ReadWriteIOUtils.readString(inputStream)); + databaseMNode.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); + databaseMNode.setStorageGroupSchema( ThriftConfigNodeSerDeUtils.deserializeTStorageGroupSchema(inputStream)); - return storageGroupMNode; + return databaseMNode; } // endregion diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java index de0aa5b8e09db..df90dded36db7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.template.Template; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index 60d70848dad73..dfa7d71bf50d2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -34,11 +34,8 @@ import org.apache.iotdb.db.exception.metadata.template.TemplateImcompatibeException; import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.CachedMTreeStore; @@ -51,6 +48,9 @@ import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementCounter; import org.apache.iotdb.db.metadata.mtree.traverser.updater.EntityUpdater; import org.apache.iotdb.db.metadata.mtree.traverser.updater.MeasurementUpdater; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; @@ -104,7 +104,7 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { private final CachedMTreeStore store; - private volatile IStorageGroupMNode storageGroupMNode; + private volatile IDatabaseMNode storageGroupMNode; private final IMNode rootNode; private final Function> tagGetter; private final int levelOfSG; @@ -120,7 +120,7 @@ public MTreeBelowSGCachedImpl( throws MetadataException, IOException { this.tagGetter = tagGetter; store = new CachedMTreeStore(storageGroupPath, schemaRegionId, regionStatistics, flushCallback); - this.storageGroupMNode = store.getRoot().getAsStorageGroupMNode(); + this.storageGroupMNode = store.getRoot().getAsDatabaseMNode(); this.storageGroupMNode.setParent(storageGroupMNode.getParent()); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; @@ -148,7 +148,7 @@ private MTreeBelowSGCachedImpl( Function> tagGetter) throws MetadataException { this.store = store; - this.storageGroupMNode = store.getRoot().getAsStorageGroupMNode(); + this.storageGroupMNode = store.getRoot().getAsDatabaseMNode(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupMNode.getPartialPath().getNodeLength() - 1; this.tagGetter = tagGetter; @@ -173,7 +173,7 @@ public void clear() { storageGroupMNode = null; } - protected void replaceStorageGroupMNode(IStorageGroupMNode newMNode) { + protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { this.storageGroupMNode.getParent().replaceChild(this.storageGroupMNode.getName(), newMNode); this.storageGroupMNode = newMNode; } @@ -271,13 +271,13 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( device.getFullPath()); } - IEntityMNode entityMNode; + IDeviceMNode entityMNode; if (device.isEntity()) { entityMNode = device.getAsEntityMNode(); } else { entityMNode = store.setToEntity(device); - if (entityMNode.isStorageGroup()) { - replaceStorageGroupMNode(entityMNode.getAsStorageGroupMNode()); + if (entityMNode.isDatabase()) { + replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } device = entityMNode; } @@ -354,14 +354,14 @@ public List createAlignedTimeseries( devicePath.getFullPath()); } - IEntityMNode entityMNode; + IDeviceMNode entityMNode; if (device.isEntity()) { entityMNode = device.getAsEntityMNode(); } else { entityMNode = store.setToEntity(device); entityMNode.setAligned(true); - if (entityMNode.isStorageGroup()) { - replaceStorageGroupMNode(entityMNode.getAsStorageGroupMNode()); + if (entityMNode.isDatabase()) { + replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } device = entityMNode; } @@ -471,7 +471,7 @@ private IMNode checkAndAutoCreateInternalPath(PartialPath devicePath) throws Met childName = nodeNames[i]; child = store.getChild(cur, childName); if (child == null) { - child = store.addChild(cur, childName, new InternalMNode(cur, childName)); + child = store.addChild(cur, childName, new BasicMNode(cur, childName)); } cur = child; @@ -495,8 +495,7 @@ private IMNode checkAndAutoCreateDeviceNode(String deviceName, IMNode devicePare } IMNode device = store.getChild(deviceParent, deviceName); if (device == null) { - device = - store.addChild(deviceParent, deviceName, new InternalMNode(deviceParent, deviceName)); + device = store.addChild(deviceParent, deviceName, new BasicMNode(deviceParent, deviceName)); } if (device.isMeasurement()) { @@ -518,7 +517,7 @@ public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataExcep } IMeasurementMNode deletedNode = getMeasurementMNode(path); - IEntityMNode parent = deletedNode.getParent(); + IDeviceMNode parent = deletedNode.getParent(); // delete the last node of path store.deleteChild(parent, path.getMeasurement()); if (deletedNode.getAlias() != null) { @@ -534,7 +533,7 @@ public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataExcep * * @param entityMNode delete empty InternalMNode from entityMNode to storageGroupMNode */ - private void deleteAndUnpinEmptyInternalMNode(IEntityMNode entityMNode) throws MetadataException { + private void deleteAndUnpinEmptyInternalMNode(IDeviceMNode entityMNode) throws MetadataException { IMNode curNode = entityMNode; if (!entityMNode.isUseTemplate()) { boolean hasMeasurement = false; @@ -556,8 +555,8 @@ private void deleteAndUnpinEmptyInternalMNode(IEntityMNode entityMNode) throws M if (!hasMeasurement) { synchronized (this) { curNode = store.setToInternal(entityMNode); - if (curNode.isStorageGroup()) { - replaceStorageGroupMNode(curNode.getAsStorageGroupMNode()); + if (curNode.isDatabase()) { + replaceStorageGroupMNode(curNode.getAsDatabaseMNode()); } } } @@ -566,7 +565,7 @@ private void deleteAndUnpinEmptyInternalMNode(IEntityMNode entityMNode) throws M // delete all empty ancestors except database and MeasurementMNode while (isEmptyInternalMNode(curNode)) { // if current database has no time series, return the database name - if (curNode.isStorageGroup()) { + if (curNode.isDatabase()) { return; } store.deleteChild(curNode.getParent(), curNode.getName()); @@ -687,7 +686,7 @@ public IMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws Metadat for (int i = levelOfSG + 1; i < nodeNames.length; i++) { child = store.getChild(cur, nodeNames[i]); if (child == null) { - child = store.addChild(cur, nodeNames[i], new InternalMNode(cur, nodeNames[i])); + child = store.addChild(cur, nodeNames[i], new BasicMNode(cur, nodeNames[i])); } cur = child; } @@ -794,7 +793,7 @@ public void activateTemplate(PartialPath activatePath, Template template) String[] nodes = activatePath.getNodes(); IMNode cur = storageGroupMNode; IMNode child; - IEntityMNode entityMNode; + IDeviceMNode entityMNode; try { for (int i = levelOfSG + 1; i < nodes.length; i++) { @@ -824,8 +823,8 @@ public void activateTemplate(PartialPath activatePath, Template template) entityMNode = cur.getAsEntityMNode(); } else { entityMNode = store.setToEntity(cur); - if (entityMNode.isStorageGroup()) { - replaceStorageGroupMNode(entityMNode.getAsStorageGroupMNode()); + if (entityMNode.isDatabase()) { + replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } } } @@ -850,7 +849,7 @@ public Map> constructSchemaBlackListWithTemplate( try (EntityUpdater updater = new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IEntityMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId())) { resultTemplateSetInfo.put( node.getPartialPath(), Collections.singletonList(node.getSchemaTemplateId())); @@ -873,7 +872,7 @@ public Map> rollbackSchemaBlackListWithTemplate( try (EntityUpdater updater = new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IEntityMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( @@ -897,7 +896,7 @@ public Map> deactivateTemplateInBlackList( try (EntityUpdater collector = new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IEntityMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( @@ -962,7 +961,7 @@ public ISchemaReader getDeviceReader(IShowDevicesPlan showDev new EntityCollector( rootNode, showDevicesPlan.getPath(), store, showDevicesPlan.isPrefixMatch()) { @Override - protected IDeviceSchemaInfo collectEntity(IEntityMNode node) { + protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { PartialPath device = getPartialPathFromRootToNode(node); return new ShowDevicesResult(device.getFullPath(), node.isAligned()); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index 7d1c397104d98..c7f6e06535956 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -34,11 +34,8 @@ import org.apache.iotdb.db.exception.metadata.template.TemplateImcompatibeException; import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; @@ -51,6 +48,9 @@ import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementCounter; import org.apache.iotdb.db.metadata.mtree.traverser.updater.EntityUpdater; import org.apache.iotdb.db.metadata.mtree.traverser.updater.MeasurementUpdater; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; @@ -105,7 +105,7 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG { // this implementation is based on memory, thus only MTree write operation must invoke MTreeStore private final MemMTreeStore store; - private volatile IStorageGroupMNode storageGroupMNode; + private volatile IDatabaseMNode storageGroupMNode; private final IMNode rootNode; private final Function> tagGetter; private final int levelOfSG; @@ -116,7 +116,7 @@ public MTreeBelowSGMemoryImpl( Function> tagGetter, MemSchemaRegionStatistics regionStatistics) { store = new MemMTreeStore(storageGroupPath, true, regionStatistics); - this.storageGroupMNode = store.getRoot().getAsStorageGroupMNode(); + this.storageGroupMNode = store.getRoot().getAsDatabaseMNode(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; @@ -127,7 +127,7 @@ private MTreeBelowSGMemoryImpl( MemMTreeStore store, Function> tagGetter) { this.store = store; - this.storageGroupMNode = store.getRoot().getAsStorageGroupMNode(); + this.storageGroupMNode = store.getRoot().getAsDatabaseMNode(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; @@ -139,7 +139,7 @@ public void clear() { storageGroupMNode = null; } - protected void replaceStorageGroupMNode(IStorageGroupMNode newMNode) { + protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { this.storageGroupMNode.getParent().replaceChild(this.storageGroupMNode.getName(), newMNode); this.storageGroupMNode = newMNode; } @@ -227,13 +227,13 @@ public IMeasurementMNode createTimeseries( device.getFullPath()); } - IEntityMNode entityMNode; + IDeviceMNode entityMNode; if (device.isEntity()) { entityMNode = device.getAsEntityMNode(); } else { entityMNode = store.setToEntity(device); - if (entityMNode.isStorageGroup()) { - replaceStorageGroupMNode(entityMNode.getAsStorageGroupMNode()); + if (entityMNode.isDatabase()) { + replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } } @@ -308,14 +308,14 @@ public List createAlignedTimeseries( devicePath.getFullPath()); } - IEntityMNode entityMNode; + IDeviceMNode entityMNode; if (device.isEntity()) { entityMNode = device.getAsEntityMNode(); } else { entityMNode = store.setToEntity(device); entityMNode.setAligned(true); - if (entityMNode.isStorageGroup()) { - replaceStorageGroupMNode(entityMNode.getAsStorageGroupMNode()); + if (entityMNode.isDatabase()) { + replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } } @@ -351,7 +351,7 @@ private IMNode checkAndAutoCreateInternalPath(PartialPath devicePath) throws Met childName = nodeNames[i]; child = cur.getChild(childName); if (child == null) { - child = store.addChild(cur, childName, new InternalMNode(cur, childName)); + child = store.addChild(cur, childName, new BasicMNode(cur, childName)); } cur = child; @@ -370,8 +370,7 @@ private IMNode checkAndAutoCreateDeviceNode(String deviceName, IMNode devicePare } IMNode device = store.getChild(deviceParent, deviceName); if (device == null) { - device = - store.addChild(deviceParent, deviceName, new InternalMNode(deviceParent, deviceName)); + device = store.addChild(deviceParent, deviceName, new BasicMNode(deviceParent, deviceName)); } if (device.isMeasurement()) { @@ -438,7 +437,7 @@ public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataExcep } IMeasurementMNode deletedNode = getMeasurementMNode(path); - IEntityMNode parent = deletedNode.getParent(); + IDeviceMNode parent = deletedNode.getParent(); // delete the last node of path store.deleteChild(parent, path.getMeasurement()); if (deletedNode.getAlias() != null) { @@ -449,7 +448,7 @@ public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataExcep } /** Used when delete timeseries or deactivate template */ - public void deleteEmptyInternalMNode(IEntityMNode entityMNode) { + public void deleteEmptyInternalMNode(IDeviceMNode entityMNode) { IMNode curNode = entityMNode; if (!entityMNode.isUseTemplate()) { boolean hasMeasurement = false; @@ -466,8 +465,8 @@ public void deleteEmptyInternalMNode(IEntityMNode entityMNode) { if (!hasMeasurement) { synchronized (this) { curNode = store.setToInternal(entityMNode); - if (curNode.isStorageGroup()) { - replaceStorageGroupMNode(curNode.getAsStorageGroupMNode()); + if (curNode.isDatabase()) { + replaceStorageGroupMNode(curNode.getAsDatabaseMNode()); } } } @@ -476,7 +475,7 @@ public void deleteEmptyInternalMNode(IEntityMNode entityMNode) { // delete all empty ancestors except database and MeasurementMNode while (isEmptyInternalMNode(curNode)) { // if current database has no time series, return the database name - if (curNode.isStorageGroup()) { + if (curNode.isDatabase()) { return; } store.deleteChild(curNode.getParent(), curNode.getName()); @@ -587,7 +586,7 @@ public IMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws Metadat for (int i = levelOfSG + 1; i < nodeNames.length; i++) { child = cur.getChild(nodeNames[i]); if (child == null) { - child = store.addChild(cur, nodeNames[i], new InternalMNode(cur, nodeNames[i])); + child = store.addChild(cur, nodeNames[i], new BasicMNode(cur, nodeNames[i])); } cur = child; } @@ -686,7 +685,7 @@ public void activateTemplate(PartialPath activatePath, Template template) cur = cur.getChild(nodes[i]); } - IEntityMNode entityMNode; + IDeviceMNode entityMNode; synchronized (this) { for (String measurement : template.getSchemaMap().keySet()) { @@ -708,8 +707,8 @@ public void activateTemplate(PartialPath activatePath, Template template) entityMNode = cur.getAsEntityMNode(); } else { entityMNode = store.setToEntity(cur); - if (entityMNode.isStorageGroup()) { - replaceStorageGroupMNode(entityMNode.getAsStorageGroupMNode()); + if (entityMNode.isDatabase()) { + replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } } } @@ -729,7 +728,7 @@ public Map> constructSchemaBlackListWithTemplate( try (EntityUpdater updater = new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IEntityMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId())) { resultTemplateSetInfo.put( node.getPartialPath(), Collections.singletonList(node.getSchemaTemplateId())); @@ -752,7 +751,7 @@ public Map> rollbackSchemaBlackListWithTemplate( try (EntityUpdater updater = new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IEntityMNode node) { + protected void updateEntity(IDeviceMNode node) { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( @@ -775,7 +774,7 @@ public Map> deactivateTemplateInBlackList( try (EntityUpdater collector = new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IEntityMNode node) { + protected void updateEntity(IDeviceMNode node) { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( @@ -799,13 +798,13 @@ public void activateTemplateWithoutCheck( cur = cur.getChild(nodes[i]); } - IEntityMNode entityMNode; + IDeviceMNode entityMNode; if (cur.isEntity()) { entityMNode = cur.getAsEntityMNode(); } else { entityMNode = store.setToEntity(cur); - if (entityMNode.isStorageGroup()) { - replaceStorageGroupMNode(entityMNode.getAsStorageGroupMNode()); + if (entityMNode.isDatabase()) { + replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } } @@ -835,7 +834,7 @@ public ISchemaReader getDeviceReader(IShowDevicesPlan showDev new EntityCollector( rootNode, showDevicesPlan.getPath(), store, showDevicesPlan.isPrefixMatch()) { @Override - protected IDeviceSchemaInfo collectEntity(IEntityMNode node) { + protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { PartialPath device = getPartialPathFromRootToNode(node); return new ShowDevicesResult(device.getFullPath(), node.isAligned()); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java index b650dc710c232..ff7faf572da17 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java @@ -21,18 +21,22 @@ import org.apache.iotdb.commons.file.SystemFileFactory; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.EntityMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupEntityMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode; import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; +import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.DatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.DeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; @@ -252,7 +256,7 @@ private static void deserializeMNode( private static class MNodeSerializer extends MNodeVisitor { @Override - public Boolean visitInternalMNode(InternalMNode node, OutputStream outputStream) { + public Boolean visitInternalMNode(BasicMNode node, OutputStream outputStream) { try { ReadWriteIOUtils.write(INTERNAL_MNODE_TYPE, outputStream); serializeInternalBasicInfo(node, outputStream); @@ -264,7 +268,7 @@ public Boolean visitInternalMNode(InternalMNode node, OutputStream outputStream) } @Override - public Boolean visitStorageGroupMNode(StorageGroupMNode node, OutputStream outputStream) { + public Boolean visitStorageGroupMNode(AbstractDatabaseMNode node, OutputStream outputStream) { try { ReadWriteIOUtils.write(STORAGE_GROUP_MNODE_TYPE, outputStream); serializeInternalBasicInfo(node, outputStream); @@ -278,7 +282,7 @@ public Boolean visitStorageGroupMNode(StorageGroupMNode node, OutputStream outpu @Override public Boolean visitStorageGroupEntityMNode( - StorageGroupEntityMNode node, OutputStream outputStream) { + AbstractDatabaseDeviceMNode node, OutputStream outputStream) { try { ReadWriteIOUtils.write(STORAGE_GROUP_ENTITY_MNODE_TYPE, outputStream); serializeInternalBasicInfo(node, outputStream); @@ -292,7 +296,7 @@ public Boolean visitStorageGroupEntityMNode( } @Override - public Boolean visitEntityMNode(EntityMNode node, OutputStream outputStream) { + public Boolean visitDeviceMNode(IDeviceMNode node, OutputStream outputStream) { try { ReadWriteIOUtils.write(ENTITY_MNODE_TYPE, outputStream); serializeInternalBasicInfo(node, outputStream); @@ -305,7 +309,7 @@ public Boolean visitEntityMNode(EntityMNode node, OutputStream outputStream) { } @Override - public Boolean visitMeasurementMNode(MeasurementMNode node, OutputStream outputStream) { + public Boolean visitMeasurementMNode(IMeasurementMNode node, OutputStream outputStream) { try { ReadWriteIOUtils.write(MEASUREMENT_MNODE_TYPE, outputStream); ReadWriteIOUtils.write(node.getName(), outputStream); @@ -320,7 +324,7 @@ public Boolean visitMeasurementMNode(MeasurementMNode node, OutputStream outputS } } - private void serializeInternalBasicInfo(InternalMNode node, OutputStream outputStream) + private void serializeInternalBasicInfo(BasicMNode node, OutputStream outputStream) throws IOException { ReadWriteIOUtils.write(node.getChildren().size(), outputStream); ReadWriteIOUtils.write(node.getName(), outputStream); @@ -331,33 +335,32 @@ private void serializeInternalBasicInfo(InternalMNode node, OutputStream outputS private static class MNodeDeserializer { - public InternalMNode deserializeInternalMNode(InputStream inputStream) throws IOException { + public BasicMNode deserializeInternalMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); - InternalMNode node = new InternalMNode(null, name); + BasicMNode node = new BasicMNode(null, name); deserializeInternalBasicInfo(node, inputStream); return node; } - public StorageGroupMNode deserializeStorageGroupMNode(InputStream inputStream) - throws IOException { + public DatabaseMNode deserializeStorageGroupMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); - StorageGroupMNode node = new StorageGroupMNode(null, name); + DatabaseMNode node = new DatabaseMNode(null, name); deserializeInternalBasicInfo(node, inputStream); return node; } - public StorageGroupEntityMNode deserializeStorageGroupEntityMNode(InputStream inputStream) + public DatabaseDeviceMNode deserializeStorageGroupEntityMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); - StorageGroupEntityMNode node = new StorageGroupEntityMNode(null, name, 0); + DatabaseDeviceMNode node = new DatabaseDeviceMNode(null, name, 0); deserializeInternalBasicInfo(node, inputStream); node.setAligned(ReadWriteIOUtils.readBool(inputStream)); return node; } - public EntityMNode deserializeEntityMNode(InputStream inputStream) throws IOException { + public DeviceMNode deserializeEntityMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); - EntityMNode node = new EntityMNode(null, name); + DeviceMNode node = new DeviceMNode(null, name); deserializeInternalBasicInfo(node, inputStream); node.setAligned(ReadWriteIOUtils.readBool(inputStream)); return node; @@ -375,7 +378,7 @@ public MeasurementMNode deserializeMeasurementMNode(InputStream inputStream) return node; } - private void deserializeInternalBasicInfo(InternalMNode node, InputStream inputStream) + private void deserializeInternalBasicInfo(BasicMNode node, InputStream inputStream) throws IOException { node.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); node.setUseTemplate(ReadWriteIOUtils.readBool(inputStream)); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java index 769f01162cb58..f20edb1a501f8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java @@ -22,21 +22,25 @@ import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.metadata.mnode.AboveDatabaseMNode; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; +import org.apache.iotdb.db.metadata.mnode.ICacheMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; +import org.apache.iotdb.db.metadata.mnode.estimator.ICacheMNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; import org.apache.iotdb.db.metadata.mnode.iterator.CachedTraverserIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.iterator.ICacheMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.ICacheManager; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; @@ -52,7 +56,8 @@ import static org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer.getCachedMNodeContainer; -public class CachedMTreeStore implements IMTreeStore { +public class CachedMTreeStore + implements IMTreeStore { private static final Logger logger = LoggerFactory.getLogger(CachedMTreeStore.class); @@ -62,7 +67,7 @@ public class CachedMTreeStore implements IMTreeStore { private ISchemaFile file; - private IMNode root; + private ICacheMNode root; private final Runnable flushCallback; @@ -88,12 +93,12 @@ public CachedMTreeStore( } @Override - public IMNode generatePrefix(PartialPath storageGroupPath) { + public ICacheMNode generatePrefix(PartialPath storageGroupPath) { String[] nodes = storageGroupPath.getNodes(); // nodes[0] must be root IMNode res = new AboveDatabaseMNode(null, nodes[0]); - IMNode cur = res; - IMNode child; + ICacheMNode cur = res; + ICacheMNode child; for (int i = 1; i < nodes.length - 1; i++) { child = new AboveDatabaseMNode(cur, nodes[i]); cur.addChild(nodes[i], child); @@ -105,22 +110,22 @@ public IMNode generatePrefix(PartialPath storageGroupPath) { } @Override - public IMNode getRoot() { + public ICacheMNode getRoot() { return root; } @Override - public boolean hasChild(IMNode parent, String name) throws MetadataException { + public boolean hasChild(ICacheMNode parent, String name) throws MetadataException { return hasChild(parent, name, true); } - protected final boolean hasChild(IMNode parent, String name, boolean needLock) + protected final boolean hasChild(ICacheMNode parent, String name, boolean needLock) throws MetadataException { if (needLock) { lock.threadReadLock(); } try { - IMNode child = getChild(parent, name, needLock); + ICacheMNode child = getChild(parent, name, needLock); if (child == null) { return false; } else { @@ -147,17 +152,17 @@ protected final boolean hasChild(IMNode parent, String name, boolean needLock) * @throws MetadataException */ @Override - public IMNode getChild(IMNode parent, String name) throws MetadataException { + public ICacheMNode getChild(ICacheMNode parent, String name) throws MetadataException { return getChild(parent, name, true); } - protected final IMNode getChild(IMNode parent, String name, boolean needLock) + protected final ICacheMNode getChild(ICacheMNode parent, String name, boolean needLock) throws MetadataException { if (needLock) { lock.threadReadLock(); } try { - IMNode node = parent.getChild(name); + ICacheMNode node = parent.getChild(name); if (node == null) { node = loadChildFromDisk(parent, name); } else { @@ -179,8 +184,8 @@ protected final IMNode getChild(IMNode parent, String name, boolean needLock) } } - private IMNode loadChildFromDisk(IMNode parent, String name) throws MetadataException { - IMNode node = null; + private ICacheMNode loadChildFromDisk(ICacheMNode parent, String name) throws MetadataException { + ICacheMNode node = null; if (!getCachedMNodeContainer(parent).isVolatile()) { try { node = file.getChildNode(parent, name); @@ -194,9 +199,9 @@ private IMNode loadChildFromDisk(IMNode parent, String name) throws MetadataExce return node; } - private IMNode loadChildFromDiskToParent(IMNode parent, IMNode node) { + private ICacheMNode loadChildFromDiskToParent(ICacheMNode parent, ICacheMNode node) { synchronized (parent) { - IMNode nodeAlreadyLoaded = parent.getChild(node.getName()); + ICacheMNode nodeAlreadyLoaded = parent.getChild(node.getName()); if (nodeAlreadyLoaded != null) { try { cacheManager.updateCacheStatusAfterMemoryRead(nodeAlreadyLoaded); @@ -212,7 +217,7 @@ private IMNode loadChildFromDiskToParent(IMNode parent, IMNode node) { } } - private void processAlias(IEntityMNode parent, IMeasurementMNode node) { + private void processAlias(IDeviceMNode parent, IMeasurementMNode node) { String alias = node.getAlias(); if (alias != null) { parent.addAlias(alias, node); @@ -221,11 +226,11 @@ private void processAlias(IEntityMNode parent, IMeasurementMNode node) { // getChildrenIterator will take readLock, must call iterator.close() after usage @Override - public IMNodeIterator getChildrenIterator(IMNode parent) throws MetadataException { + public ICacheMNodeIterator getChildrenIterator(ICacheMNode parent) throws MetadataException { return getChildrenIterator(parent, true); } - final IMNodeIterator getChildrenIterator(IMNode parent, boolean needLock) + final ICacheMNodeIterator getChildrenIterator(ICacheMNode parent, boolean needLock) throws MetadataException { try { return new CachedMNodeIterator(parent, needLock); @@ -235,15 +240,15 @@ final IMNodeIterator getChildrenIterator(IMNode parent, boolean needLock) } @Override - public IMNodeIterator getTraverserIterator( - IMNode parent, Map templateMap, boolean skipPreDeletedSchema) + public ICacheMNodeIterator getTraverserIterator( + ICacheMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { return getTraverserIterator(this, parent, templateMap, skipPreDeletedSchema); } - final IMNodeIterator getTraverserIterator( + final ICacheMNodeIterator getTraverserIterator( IMTreeStore store, - IMNode parent, + ICacheMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { @@ -259,7 +264,7 @@ final IMNodeIterator getTraverserIterator( // must pin parent first @Override - public IMNode addChild(IMNode parent, String childName, IMNode child) { + public ICacheMNode addChild(ICacheMNode parent, String childName, ICacheMNode child) { lock.threadReadLock(); try { child.setParent(parent); @@ -283,10 +288,10 @@ public IMNode addChild(IMNode parent, String childName, IMNode child) { * @throws MetadataException */ @Override - public void deleteChild(IMNode parent, String childName) throws MetadataException { + public void deleteChild(ICacheMNode parent, String childName) throws MetadataException { lock.writeLock(); try { - IMNode deletedMNode = getChild(parent, childName, false); + ICacheMNode deletedMNode = getChild(parent, childName, false); ICachedMNodeContainer container = getCachedMNodeContainer(parent); if (!container.isVolatile() && !container.hasChildInNewChildBuffer(childName)) { // the container has been persisted and this child is not a new child, which means the child @@ -312,11 +317,11 @@ public void deleteChild(IMNode parent, String childName) throws MetadataExceptio * @param node the modified node */ @Override - public void updateMNode(IMNode node) { + public void updateMNode(ICacheMNode node) { updateMNode(node, true); } - final void updateMNode(IMNode node, boolean needLock) { + final void updateMNode(ICacheMNode node, boolean needLock) { if (needLock) { lock.threadReadLock(); } @@ -330,20 +335,20 @@ final void updateMNode(IMNode node, boolean needLock) { } @Override - public IEntityMNode setToEntity(IMNode node) { - IEntityMNode result = MNodeUtils.setToEntity(node); + public IDeviceMNode setToEntity(ICacheMNode node) { + IDeviceMNode result = MNodeUtils.setToEntity(node); if (result != node) { - memManager.updatePinnedSize(IMNodeSizeEstimator.getEntityNodeBaseSize()); + memManager.updatePinnedSize(ICacheMNodeSizeEstimator.getEntityNodeBaseSize()); } updateMNode(result); return result; } @Override - public IMNode setToInternal(IEntityMNode entityMNode) { - IMNode result = MNodeUtils.setToInternal(entityMNode); + public ICacheMNode setToInternal(IDeviceMNode entityMNode) { + ICacheMNode result = MNodeUtils.setToInternal(entityMNode); if (result != entityMNode) { - memManager.updatePinnedSize(-IMNodeSizeEstimator.getEntityNodeBaseSize()); + memManager.updatePinnedSize(-ICacheMNodeSizeEstimator.getEntityNodeBaseSize()); } updateMNode(result); return result; @@ -363,9 +368,9 @@ public void setAlias(IMeasurementMNode measurementMNode, String alias) throws Me memManager.updatePinnedSize(alias.length() - existingAlias.length()); } else if (alias == null) { memManager.updatePinnedSize( - -(IMNodeSizeEstimator.getAliasBaseSize() + existingAlias.length())); + -(ICacheMNodeSizeEstimator.getAliasBaseSize() + existingAlias.length())); } else { - memManager.updatePinnedSize(IMNodeSizeEstimator.getAliasBaseSize() + alias.length()); + memManager.updatePinnedSize(ICacheMNodeSizeEstimator.getAliasBaseSize() + alias.length()); } } @@ -378,11 +383,11 @@ public void setAlias(IMeasurementMNode measurementMNode, String alias) throws Me * @param node */ @Override - public void pin(IMNode node) throws MetadataException { + public void pin(ICacheMNode node) throws MetadataException { pin(node, true); } - final void pin(IMNode node, boolean needLock) throws MetadataException { + final void pin(ICacheMNode node, boolean needLock) throws MetadataException { if (needLock) { lock.threadReadLock(); } @@ -404,11 +409,11 @@ final void pin(IMNode node, boolean needLock) throws MetadataException { * @param node */ @Override - public void unPin(IMNode node) { + public void unPin(ICacheMNode node) { unPin(node, true); } - final void unPin(IMNode node, boolean needLock) { + final void unPin(ICacheMNode node, boolean needLock) { if (needLock) { lock.threadReadLock(); } @@ -424,12 +429,12 @@ final void unPin(IMNode node, boolean needLock) { } @Override - public void unPinPath(IMNode node) { + public void unPinPath(ICacheMNode node) { unPinPath(node, true); } - public void unPinPath(IMNode node, boolean needLock) { - while (!node.isStorageGroup()) { + public void unPinPath(ICacheMNode node, boolean needLock) { + while (!node.isDatabase()) { unPin(node, needLock); node = node.getParent(); } @@ -539,7 +544,7 @@ public boolean executeMemoryRelease() { /** Sync all volatile nodes to schemaFile and execute memory release after flush. */ public void flushVolatileNodes() { try { - IStorageGroupMNode updatedStorageGroupMNode = cacheManager.collectUpdatedStorageGroupMNodes(); + IDatabaseMNode updatedStorageGroupMNode = cacheManager.collectUpdatedStorageGroupMNodes(); if (updatedStorageGroupMNode != null) { try { file.updateStorageGroupNode(updatedStorageGroupMNode); @@ -551,8 +556,8 @@ public void flushVolatileNodes() { return; } } - List nodesToPersist = cacheManager.collectVolatileMNodes(); - for (IMNode volatileNode : nodesToPersist) { + List nodesToPersist = cacheManager.collectVolatileMNodes(); + for (ICacheMNode volatileNode : nodesToPersist) { try { file.writeMNode(volatileNode); } catch (MetadataException | IOException e) { @@ -580,15 +585,16 @@ public void flushVolatileNodes() { * Since any node R/W operation may change the memory status, thus it should be controlled during * iterating child nodes. */ - private class CachedMNodeIterator implements IMNodeIterator { - IMNode parent; - Iterator iterator; - Iterator bufferIterator; + private class CachedMNodeIterator implements ICacheMNodeIterator { + ICacheMNode parent; + Iterator iterator; + Iterator bufferIterator; boolean isIteratingDisk; - IMNode nextNode; + ICacheMNode nextNode; boolean isLocked; - CachedMNodeIterator(IMNode parent, boolean needLock) throws MetadataException, IOException { + CachedMNodeIterator(ICacheMNode parent, boolean needLock) + throws MetadataException, IOException { if (needLock) { lock.threadReadLock(); } @@ -631,17 +637,17 @@ public boolean hasNext() { // must invoke hasNext() first @Override - public IMNode next() { + public ICacheMNode next() { if (nextNode == null && !hasNext()) { throw new NoSuchElementException(); } - IMNode result = nextNode; + ICacheMNode result = nextNode; nextNode = null; return result; } private void readNext() throws MetadataException { - IMNode node = null; + ICacheMNode node = null; if (isIteratingDisk) { ICachedMNodeContainer container = getCachedMNodeContainer(parent); if (iterator.hasNext()) { @@ -656,7 +662,7 @@ private void readNext() throws MetadataException { } } if (node != null) { - IMNode nodeInMem = parent.getChild(node.getName()); + ICacheMNode nodeInMem = parent.getChild(node.getName()); if (nodeInMem != null) { // this branch means the node load from disk is in cache, thus use the instance in // cache diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java index e15311927f5c7..38def6803f272 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.template.Template; import java.io.File; @@ -34,16 +34,17 @@ * *

MTreeStore could be implemented as memory-based or disk-based for different scenarios. */ -public interface IMTreeStore { +public interface IMTreeStore< + N extends IMNode, DeviceN extends IDeviceMNode, MeasurementN extends IMeasurementMNode> { /** * Generate the ancestor nodes of storageGroupNode * * @return root node */ - IMNode generatePrefix(PartialPath storageGroupPath); + N generatePrefix(PartialPath storageGroupPath); - IMNode getRoot(); + N getRoot(); /** * Check if parent has child @@ -52,7 +53,7 @@ public interface IMTreeStore { * @param name name or alias * @return true if parent has a child whose name or alias matches the condition */ - boolean hasChild(IMNode parent, String name) throws MetadataException; + boolean hasChild(N parent, String name) throws MetadataException; /** * Get child by name or alias @@ -61,31 +62,31 @@ public interface IMTreeStore { * @param name name or alias * @return child node */ - IMNode getChild(IMNode parent, String name) throws MetadataException; + N getChild(N parent, String name) throws MetadataException; - IMNodeIterator getChildrenIterator(IMNode parent) throws MetadataException; + IMNodeIterator getChildrenIterator(N parent) throws MetadataException; IMNodeIterator getTraverserIterator( - IMNode parent, Map templateMap, boolean skipPreDeletedSchema) + N parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException; - IMNode addChild(IMNode parent, String childName, IMNode child); + N addChild(N parent, String childName, N child); - void deleteChild(IMNode parent, String childName) throws MetadataException; + void deleteChild(N parent, String childName) throws MetadataException; - void updateMNode(IMNode node) throws MetadataException; + void updateMNode(N node) throws MetadataException; - IEntityMNode setToEntity(IMNode node) throws MetadataException; + DeviceN setToEntity(N node) throws MetadataException; - IMNode setToInternal(IEntityMNode entityMNode) throws MetadataException; + N setToInternal(DeviceN entityMNode) throws MetadataException; - void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException; + void setAlias(MeasurementN measurementMNode, String alias) throws MetadataException; - void pin(IMNode node) throws MetadataException; + void pin(N node) throws MetadataException; - void unPin(IMNode node); + void unPin(N node); - void unPinPath(IMNode node); + void unPinPath(N node); IMTreeStore getWithReentrantReadLock(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index 49b92f7861262..266d66b97116d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -23,12 +23,9 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.metadata.mnode.AboveDatabaseMNode; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode; import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; @@ -36,6 +33,9 @@ import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; import org.apache.iotdb.db.metadata.mnode.iterator.MemoryTraverserIterator; import org.apache.iotdb.db.metadata.mtree.snapshot.MemMTreeSnapshotUtil; +import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; @@ -56,12 +56,12 @@ public class MemMTreeStore implements IMTreeStore { public MemMTreeStore(PartialPath rootPath, boolean isStorageGroup) { if (isStorageGroup) { this.root = - new StorageGroupMNode( + new AbstractDatabaseMNode( null, rootPath.getTailNode(), CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); } else { - this.root = new InternalMNode(null, IoTDBConstant.PATH_ROOT); + this.root = new BasicMNode(null, IoTDBConstant.PATH_ROOT); } } @@ -69,12 +69,12 @@ public MemMTreeStore( PartialPath rootPath, boolean isStorageGroup, MemSchemaRegionStatistics regionStatistics) { if (isStorageGroup) { this.root = - new StorageGroupMNode( + new AbstractDatabaseMNode( null, rootPath.getTailNode(), CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); } else { - this.root = new InternalMNode(null, IoTDBConstant.PATH_ROOT); + this.root = new BasicMNode(null, IoTDBConstant.PATH_ROOT); } this.regionStatistics = regionStatistics; } @@ -154,25 +154,25 @@ public void deleteChild(IMNode parent, String childName) { public void updateMNode(IMNode node) {} @Override - public IEntityMNode setToEntity(IMNode node) { - IEntityMNode result = MNodeUtils.setToEntity(node); + public IDeviceMNode setToEntity(IMNode node) { + IDeviceMNode result = MNodeUtils.setToEntity(node); if (result != node) { requestMemory(IMNodeSizeEstimator.getEntityNodeBaseSize()); } - if (result.isStorageGroup()) { + if (result.isDatabase()) { root = result; } return result; } @Override - public IMNode setToInternal(IEntityMNode entityMNode) { + public IMNode setToInternal(IDeviceMNode entityMNode) { IMNode result = MNodeUtils.setToInternal(entityMNode); if (result != entityMNode) { releaseMemory(IMNodeSizeEstimator.getEntityNodeBaseSize()); } - if (result.isStorageGroup()) { + if (result.isDatabase()) { root = result; } return result; @@ -218,7 +218,7 @@ public IMTreeStore getWithReentrantReadLock() { @Override public void clear() { - root = new InternalMNode(null, IoTDBConstant.PATH_ROOT); + root = new BasicMNode(null, IoTDBConstant.PATH_ROOT); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java index 0c7df571a8de2..4642983b10a6f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.template.Template; import java.io.File; @@ -86,12 +86,12 @@ public void updateMNode(IMNode node) { } @Override - public IEntityMNode setToEntity(IMNode node) { + public IDeviceMNode setToEntity(IMNode node) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public IMNode setToInternal(IEntityMNode entityMNode) { + public IMNode setToInternal(IDeviceMNode entityMNode) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java index e97606262e6eb..3f361f4753e3a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java @@ -21,9 +21,9 @@ import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import java.util.ArrayList; import java.util.Iterator; @@ -158,7 +158,7 @@ private void removeAncestorsFromCache(IMNode node) { IMNode parent = node.getParent(); IMNode current = node; CacheEntry cacheEntry = getCacheEntry(parent); - while (!current.isStorageGroup() && isInNodeCache(cacheEntry)) { + while (!current.isDatabase() && isInNodeCache(cacheEntry)) { removeFromNodeCache(cacheEntry); current = parent; parent = parent.getParent(); @@ -176,7 +176,7 @@ private void removeAncestorsFromCache(IMNode node) { public void updateCacheStatusAfterUpdate(IMNode node) { CacheEntry cacheEntry = getCacheEntry(node); if (!cacheEntry.isVolatile()) { - if (!node.isStorageGroup()) { + if (!node.isDatabase()) { synchronized (cacheEntry) { // the status change affects the subTre collect in nodeBuffer cacheEntry.setVolatile(true); @@ -200,8 +200,8 @@ public void updateCacheStatusAfterUpdate(IMNode node) { * @param node */ private void addToBufferAfterUpdate(IMNode node) { - if (node.isStorageGroup()) { - nodeBuffer.setUpdatedStorageGroupMNode(node.getAsStorageGroupMNode()); + if (node.isDatabase()) { + nodeBuffer.setUpdatedStorageGroupMNode(node.getAsDatabaseMNode()); return; } @@ -237,7 +237,7 @@ private void addToBufferAfterUpdate(IMNode node) { @Override public void updateCacheStatusAfterPersist(IMNode node) { IMNode tmp = node; - while (!tmp.isStorageGroup() && !isInNodeCache(getCacheEntry(tmp))) { + while (!tmp.isDatabase() && !isInNodeCache(getCacheEntry(tmp))) { addToNodeCache(getCacheEntry(tmp), tmp); tmp = tmp.getParent(); } @@ -266,8 +266,8 @@ private void updateCacheStatusAfterPersist(IMNode node, ICachedMNodeContainer co * @return null if not exist */ @Override - public IStorageGroupMNode collectUpdatedStorageGroupMNodes() { - IStorageGroupMNode storageGroupMNode = nodeBuffer.getUpdatedStorageGroupMNode(); + public IDatabaseMNode collectUpdatedStorageGroupMNodes() { + IDatabaseMNode storageGroupMNode = nodeBuffer.getUpdatedStorageGroupMNode(); nodeBuffer.setUpdatedStorageGroupMNode(null); return storageGroupMNode; } @@ -425,7 +425,7 @@ private void doPin(IMNode node) { // do pin MNode in memory if (!cacheEntry.isPinned()) { IMNode parent = node.getParent(); - if (!node.isStorageGroup()) { + if (!node.isDatabase()) { getCacheEntry(parent).pin(); } } @@ -463,7 +463,7 @@ private boolean doUnPin(IMNode node) { } } - if (isPinStatusChanged && !node.isStorageGroup()) { + if (isPinStatusChanged && !node.isDatabase()) { doUnPin(node.getParent()); } @@ -527,7 +527,7 @@ private static class NodeBuffer { private static final int MAP_NUM = 17; - private IStorageGroupMNode updatedStorageGroupMNode; + private IDatabaseMNode updatedStorageGroupMNode; private Map[] maps = new Map[MAP_NUM]; NodeBuffer() { @@ -536,11 +536,11 @@ private static class NodeBuffer { } } - public IStorageGroupMNode getUpdatedStorageGroupMNode() { + public IDatabaseMNode getUpdatedStorageGroupMNode() { return updatedStorageGroupMNode; } - public void setUpdatedStorageGroupMNode(IStorageGroupMNode updatedStorageGroupMNode) { + public void setUpdatedStorageGroupMNode(IDatabaseMNode updatedStorageGroupMNode) { this.updatedStorageGroupMNode = updatedStorageGroupMNode; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java index 395db8044fc93..f6ee9e52136dd 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java @@ -21,7 +21,7 @@ import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import java.util.List; @@ -39,7 +39,7 @@ public interface ICacheManager { void updateCacheStatusAfterPersist(IMNode node); - IStorageGroupMNode collectUpdatedStorageGroupMNodes(); + IDatabaseMNode collectUpdatedStorageGroupMNodes(); List collectVolatileMNodes(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java index 54f7567eecc04..6739a568ea3e9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java @@ -20,8 +20,8 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; public class CachedMNodeSizeEstimator extends BasicMNodSizeEstimator { @@ -57,9 +57,9 @@ public int estimateSize(IMNode node) { } } else { size += INTERNAL_NODE_BASE_SIZE; - if (node.isStorageGroup()) { + if (node.isDatabase()) { size += STORAGE_GROUP_NODE_BASE_SIZE; - size += node.getAsStorageGroupMNode().getFullPath().length(); + size += node.getAsDatabaseMNode().getFullPath().length(); } if (node.isEntity()) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java index f44dce93bd145..b3605132ce09e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import java.io.File; import java.io.IOException; @@ -41,7 +41,7 @@ public interface ISchemaFile { * @param sgNode node to be updated * @return true if success */ - boolean updateStorageGroupNode(IStorageGroupMNode sgNode) throws IOException; + boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException; /** * Only database node along with its descendents could be flushed into schema file. diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java index 0b3f6bd8c0029..e1a345251d844 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java @@ -20,17 +20,16 @@ import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.EntityMNode; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupEntityMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import java.io.File; import java.io.IOException; @@ -45,7 +44,7 @@ public class MockSchemaFile implements ISchemaFile { private PartialPath storageGroupPath; - private IStorageGroupMNode storageGroupMNode; + private IDatabaseMNode storageGroupMNode; private long fileTail = 0; private final Map> mockFile = new HashMap<>(); @@ -57,7 +56,7 @@ public MockSchemaFile(PartialPath storageGroupPath) { @Override public IMNode init() { storageGroupMNode = - new StorageGroupMNode( + new AbstractDatabaseMNode( null, storageGroupPath.getTailNode(), CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); @@ -66,8 +65,8 @@ public IMNode init() { } @Override - public boolean updateStorageGroupNode(IStorageGroupMNode sgNode) throws IOException { - this.storageGroupMNode = cloneMNode(sgNode).getAsStorageGroupMNode(); + public boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException { + this.storageGroupMNode = cloneMNode(sgNode).getAsDatabaseMNode(); return true; } @@ -186,25 +185,25 @@ static IMNode cloneMNode(IMNode node) { measurementMNode.getAlias()); result.setOffset(measurementMNode.getOffset()); return result; - } else if (node.isStorageGroup() && node.isEntity()) { - StorageGroupEntityMNode result = - new StorageGroupEntityMNode( - null, node.getName(), node.getAsStorageGroupMNode().getDataTTL()); + } else if (node.isDatabase() && node.isEntity()) { + AbstractDatabaseDeviceMNode result = + new AbstractDatabaseDeviceMNode( + null, node.getName(), node.getAsDatabaseMNode().getDataTTL()); result.setAligned(node.getAsEntityMNode().isAligned()); cloneInternalMNodeData(node, result); return result; } else if (node.isEntity()) { - IEntityMNode result = new EntityMNode(null, node.getName()); + IDeviceMNode result = new AbstractDeviceMNode(null, node.getName()); result.setAligned(node.getAsEntityMNode().isAligned()); cloneInternalMNodeData(node, result); return result; - } else if (node.isStorageGroup()) { - StorageGroupMNode result = - new StorageGroupMNode(null, node.getName(), node.getAsStorageGroupMNode().getDataTTL()); + } else if (node.isDatabase()) { + AbstractDatabaseMNode result = + new AbstractDatabaseMNode(null, node.getName(), node.getAsDatabaseMNode().getDataTTL()); cloneInternalMNodeData(node, result); return result; } else { - InternalMNode result = new InternalMNode(null, node.getName()); + BasicMNode result = new BasicMNode(null, node.getName()); cloneInternalMNodeData(node, result); return result; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java index a64b0afd4c7a8..5093c926ece9e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java @@ -20,12 +20,12 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.utils.TestOnly; -import org.apache.iotdb.db.metadata.mnode.EntityMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; @@ -188,9 +188,9 @@ public static IMNode buffer2Node(String nodeName, ByteBuffer buffer) throws Meta boolean isAligned = isAligned(bitFlag); if (nodeType == 0) { - resNode = new InternalMNode(null, nodeName); + resNode = new BasicMNode(null, nodeName); } else { - resNode = new EntityMNode(null, nodeName); + resNode = new AbstractDeviceMNode(null, nodeName); resNode.getAsEntityMNode().setAligned(isAligned); } @@ -293,7 +293,7 @@ public static String buffer2String(ByteBuffer buffer) throws MetadataException { ? "" : node.getAsMeasurementMNode().getAlias())); builder.append( - String.format("type: %s, ", node.getAsMeasurementMNode().getDataType("").toString())); + String.format("type: %s, ", node.getAsMeasurementMNode().getDataType().toString())); builder.append( String.format( "encoding: %s, ", diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java index 5d8445e36700e..b2433624c7ac8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java @@ -26,13 +26,13 @@ import org.apache.iotdb.db.exception.metadata.schemafile.SchemaFileNotExists; import org.apache.iotdb.db.metadata.MetadataConstant; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupEntityMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.BTreePageManager; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.IPageManager; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.PageManager; +import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.slf4j.Logger; @@ -176,11 +176,12 @@ public IMNode init() throws MetadataException { if (isEntity) { resNode = setNodeAddress( - new StorageGroupEntityMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), 0L); + new AbstractDatabaseDeviceMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), + 0L); } else { resNode = setNodeAddress( - new StorageGroupMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), 0L); + new AbstractDatabaseMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), 0L); } resNode.setFullPath(storageGroupName); resNode.setSchemaTemplateId(sgNodeTemplateIdWithState); @@ -189,7 +190,7 @@ public IMNode init() throws MetadataException { } @Override - public boolean updateStorageGroupNode(IStorageGroupMNode sgNode) throws IOException { + public boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException { this.dataTTL = sgNode.getDataTTL(); this.isEntity = sgNode.isEntity(); this.sgNodeTemplateIdWithState = sgNode.getSchemaTemplateIdWithState(); @@ -199,7 +200,7 @@ public boolean updateStorageGroupNode(IStorageGroupMNode sgNode) throws IOExcept @Override public void delete(IMNode node) throws IOException, MetadataException { - if (node.isStorageGroup()) { + if (node.isDatabase()) { // should clear this file clear(); } else { @@ -211,7 +212,7 @@ public void delete(IMNode node) throws IOException, MetadataException { public void writeMNode(IMNode node) throws MetadataException, IOException { long curSegAddr = getNodeAddress(node); - if (node.isStorageGroup()) { + if (node.isDatabase()) { isEntity = node.isEntity(); setNodeAddress(node, lastSGAddr); } else { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java index ca5b04c8554f4..853e50df7ae96 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java @@ -573,7 +573,7 @@ private synchronized int loadFromFile(ByteBuffer dst, int pageIndex) throws IOEx private void updateParentalRecord(IMNode parent, String key, long newSegAddr) throws IOException, MetadataException { - if (parent == null || parent.getChild(key).isStorageGroup()) { + if (parent == null || parent.getChild(key).isDatabase()) { throw new MetadataException("Root page shall not be migrated."); } long parSegAddr = parent.getParent() == null ? 0L : getNodeAddress(parent); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java index 4a55d9ef56047..7f2d5567ca8d0 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java @@ -135,7 +135,7 @@ protected IMNode getChild(IMNode parent, String childName) throws MetadataExcept @Override protected void releaseNode(IMNode node) { - if (!node.isAboveDatabase() && !node.isStorageGroup()) { + if (!node.isAboveDatabase() && !node.isDatabase()) { // In any case we can call store#inpin directly because the unpin method will not do anything // if it is an IMNode in template or in memory mode. store.unPin(node); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java index 6ff51cc7d0b8c..da05b9f15265a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java @@ -45,22 +45,22 @@ public DatabaseTraverser( @Override protected boolean acceptFullMatchedNode(IMNode node) { - return node.isStorageGroup(); + return node.isDatabase(); } @Override protected boolean acceptInternalMatchedNode(IMNode node) { - return collectInternal && node.isStorageGroup(); + return collectInternal && node.isDatabase(); } @Override protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { - return !node.isStorageGroup(); + return !node.isDatabase(); } @Override protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { - return !node.isStorageGroup(); + return !node.isDatabase(); } public void setCollectInternal(boolean collectInternal) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java index ea3762f1dcc75..7c4e6096b8ec2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java @@ -21,9 +21,9 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.DatabaseTraverser; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; // This class implements database path collection function. public abstract class DatabaseCollector extends DatabaseTraverser { @@ -35,10 +35,10 @@ protected DatabaseCollector( @Override protected R generateResult(IMNode nextMatchedNode) { - collectDatabase(nextMatchedNode.getAsStorageGroupMNode()); + collectDatabase(nextMatchedNode.getAsDatabaseMNode()); return null; } // TODO: make collectDatabase return R - protected abstract void collectDatabase(IStorageGroupMNode node); + protected abstract void collectDatabase(IDatabaseMNode node); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java index 1756daf271de0..22edf16165032 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.EntityTraverser; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; // This class defines EntityMNode as target node and defines the Entity process framework. // TODO: set R is IDeviceSchemaInfo @@ -40,5 +40,5 @@ protected R generateResult(IMNode nextMatchedNode) { return collectEntity(nextMatchedNode.getAsEntityMNode()); } - protected abstract R collectEntity(IEntityMNode node); + protected abstract R collectEntity(IDeviceMNode node); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java index 06ae88d87bc5a..36731a0929b9a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java @@ -38,7 +38,7 @@ protected MNodeAboveSGCollector( @Override protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { - if (node.isStorageGroup()) { + if (node.isDatabase()) { involvedStorageGroupMNodes.add(getParentPartialPath().concatNode(node.getName())); return false; } else { @@ -48,7 +48,7 @@ protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { @Override protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { - if (node.isStorageGroup()) { + if (node.isDatabase()) { involvedStorageGroupMNodes.add(getParentPartialPath().concatNode(node.getName())); return false; } else { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java index ff488befbb559..b7ed46887699f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java @@ -22,9 +22,9 @@ import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.MeasurementTraverser; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; // This class defines MeasurementMNode as target node and defines the measurement process framework. // TODO: set R is ITimeseriesInfo diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java index 4fa58aff0484d..ed93385ae83f1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.EntityTraverser; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; public abstract class EntityUpdater extends EntityTraverser implements Updater { /** @@ -61,5 +61,5 @@ public void update() throws MetadataException { } } - protected abstract void updateEntity(IEntityMNode node) throws MetadataException; + protected abstract void updateEntity(IDeviceMNode node) throws MetadataException; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java index c779663b8ecbb..4cb5c22ef00ab 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java @@ -21,9 +21,9 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.MeasurementTraverser; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; public abstract class MeasurementUpdater extends MeasurementTraverser implements Updater { /** diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java new file mode 100644 index 0000000000000..8a31e49d68f0c --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java @@ -0,0 +1,35 @@ +/* + * 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.metadata.newnode; + +public class BasicMNodeInfo { + private String name; + + public BasicMNodeInfo(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java new file mode 100644 index 0000000000000..134d983024ead --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java @@ -0,0 +1,38 @@ +/* + * 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.metadata.newnode; + +import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; + +public class CacheMNodeInfo extends BasicMNodeInfo { + + private CacheEntry cacheEntry; + + public CacheMNodeInfo(String name) { + super(name); + } + + public CacheEntry getCacheEntry() { + return cacheEntry; + } + + public void setCacheEntry(CacheEntry cacheEntry) { + this.cacheEntry = cacheEntry; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java new file mode 100644 index 0000000000000..4d573f8605aa2 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java @@ -0,0 +1,70 @@ +/* + * 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.metadata.newnode; + +import static org.apache.iotdb.db.metadata.MetadataConstant.NON_TEMPLATE; + +public class ConfigMNodeInfo extends BasicMNodeInfo { + /** + * This field is mainly used in cluster schema template features. In InternalMNode of ConfigMTree, + * this field represents the template set on this node. The normal usage value range is [0, + * Int.MaxValue], since this is implemented as auto inc id. The default value -1 means + * NON_TEMPLATE. This value will be set negative to implement some pre-delete features. + */ + protected int schemaTemplateId = NON_TEMPLATE; + + public ConfigMNodeInfo(String name) { + super(name); + } + + /** + * In InternalMNode, schemaTemplateId represents the template set on this node. The pre unset + * mechanism is implemented by making this value negative. Since value 0 and -1 are all occupied, + * the available negative value range is [Int.MIN_VALUE, -2]. The value of a pre unset case equals + * the negative normal value minus 2. For example, if the id of set template is 0, then - 0 - 2 = + * -2 represents the pre unset operation of this template on this node. + */ + public int getSchemaTemplateId() { + return schemaTemplateId >= -1 ? schemaTemplateId : -schemaTemplateId - 2; + } + + public int getSchemaTemplateIdWithState() { + return schemaTemplateId; + } + + public void preUnsetSchemaTemplate() { + if (this.schemaTemplateId > -1) { + this.schemaTemplateId = -schemaTemplateId - 2; + } + } + + public void rollbackUnsetSchemaTemplate() { + if (schemaTemplateId < -1) { + schemaTemplateId = -schemaTemplateId - 2; + } + } + + public boolean isSchemaTemplatePreUnset() { + return schemaTemplateId < -1; + } + + public void unsetSchemaTemplate() { + this.schemaTemplateId = -1; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupEntityMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java similarity index 63% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupEntityMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java index f68a5ddad3f02..87f409c1520c2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupEntityMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java @@ -16,31 +16,19 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.db.metadata.newnode; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseInfo; +import org.apache.iotdb.db.metadata.newnode.device.DeviceInfo; -public class StorageGroupEntityMNode extends EntityMNode implements IStorageGroupMNode { +public class DatabaseDeviceInfo extends DeviceInfo implements IDatabaseInfo { /** * when the data file in a database is older than dataTTL, it is considered invalid and will be * eventually deleted. */ private long dataTTL; - public StorageGroupEntityMNode(IMNode parent, String name, long dataTTL) { - super(parent, name); - this.dataTTL = dataTTL; - } - - @Override - public String getFullPath() { - if (fullPath == null) { - fullPath = concatFullPath().intern(); - } - return fullPath; - } - @Override public long getDataTTL() { return dataTTL; @@ -67,24 +55,4 @@ public void setStorageGroupSchema(TDatabaseSchema schema) {} public TDatabaseSchema getStorageGroupSchema() { return null; } - - @Override - public void moveDataToNewMNode(IMNode newMNode) { - super.moveDataToNewMNode(newMNode); - } - - @Override - public boolean isStorageGroup() { - return true; - } - - @Override - public MNodeType getMNodeType(Boolean isConfig) { - return MNodeType.STORAGE_GROUP; - } - - @Override - public R accept(MNodeVisitor visitor, C context) { - return visitor.visitStorageGroupEntityMNode(this, context); - } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ICacheMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ICacheMNode.java new file mode 100644 index 0000000000000..8018232f7da7b --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ICacheMNode.java @@ -0,0 +1,28 @@ +/* + * 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.metadata.newnode; + +import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; + +public interface ICacheMNode extends IMNode { + CacheEntry getCacheEntry(); + + void setCacheEntry(CacheEntry cacheEntry); +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java new file mode 100644 index 0000000000000..a5a40ac87b85b --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java @@ -0,0 +1,33 @@ +/* + * 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.metadata.newnode; + +import org.apache.iotdb.db.metadata.mnode.IMNode; + +public interface IConfigMNode extends IMNode { + int getSchemaTemplateId(); + + void preUnsetSchemaTemplate(); + + void rollbackUnsetSchemaTemplate(); + + boolean isSchemaTemplatePreUnset(); + + void unsetSchemaTemplate(); +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IMemMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IMemMNode.java new file mode 100644 index 0000000000000..c39deaa34238d --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IMemMNode.java @@ -0,0 +1,23 @@ +/* + * 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.metadata.newnode; + +import org.apache.iotdb.db.metadata.mnode.IMNode; + +public interface IMemMNode extends IMNode {} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java new file mode 100644 index 0000000000000..4011d27f4516c --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java @@ -0,0 +1,303 @@ +/* + * 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.metadata.newnode.basic; + +import org.apache.iotdb.commons.conf.IoTDBConstant; +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.container.MNodeContainerMapImpl; +import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; +import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.CacheMNodeInfo; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class is the implementation of Metadata Node. One MNode instance represents one node in the + * Metadata Tree + */ +public class CacheBasicMNode implements ICacheMNode { + + private static final long serialVersionUID = -770028375899514063L; + + /** + * use in Measurement Node so it's protected suppress warnings reason: volatile for double + * synchronized check + * + *

This will be a ConcurrentHashMap instance + */ + @SuppressWarnings("squid:S3077") + protected transient volatile IMNodeContainer children = null; + + private ICacheMNode parent; + private CacheMNodeInfo cacheMNodeInfo; + + /** from root to this node, only be set when used once for InternalMNode */ + private String fullPath; + + /** Constructor of MNode. */ + public CacheBasicMNode(ICacheMNode parent, String name) { + this.parent = parent; + this.cacheMNodeInfo = new CacheMNodeInfo(name); + } + + @Override + public String getName() { + return cacheMNodeInfo.getName(); + } + + @Override + public void setName(String name) { + cacheMNodeInfo.setName(name); + } + + @Override + public ICacheMNode getParent() { + return parent; + } + + @Override + public void setParent(ICacheMNode parent) { + this.parent = parent; + } + + @Override + public String getFullPath() { + if (fullPath == null) { + fullPath = concatFullPath(); + } + return fullPath; + } + + String concatFullPath() { + StringBuilder builder = new StringBuilder(getName()); + ICacheMNode curr = this; + while (curr.getParent() != null) { + curr = curr.getParent(); + builder.insert(0, IoTDBConstant.PATH_SEPARATOR).insert(0, curr.getName()); + } + return builder.toString(); + } + + @Override + public void setFullPath(String fullPath) { + this.fullPath = fullPath; + } + + @Override + public PartialPath getPartialPath() { + List detachedPath = new ArrayList<>(); + ICacheMNode temp = this; + detachedPath.add(temp.getName()); + while (temp.getParent() != null) { + temp = temp.getParent(); + detachedPath.add(0, temp.getName()); + } + return new PartialPath(detachedPath.toArray(new String[0])); + } + + /** check whether the MNode has a child with the name */ + @Override + public boolean hasChild(String name) { + return (children != null && children.containsKey(name)); + } + + /** get the child with the name */ + @Override + public ICacheMNode getChild(String name) { + ICacheMNode child = null; + if (children != null) { + child = children.get(name); + } + return child; + } + + /** + * add a child to current mnode + * + * @param name child's name + * @param child child's node + * @return the child of this node after addChild + */ + @Override + public ICacheMNode addChild(String name, ICacheMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new MNodeContainerMapImpl(); + } + } + } + child.setParent(this); + ICacheMNode existingChild = children.putIfAbsent(name, child); + return existingChild == null ? child : existingChild; + } + + /** + * Add a child to the current mnode. + * + *

This method will not take the child's name as one of the inputs and will also make this + * Mnode be child node's parent. All is to reduce the probability of mistaken by users and be more + * convenient for users to use. And the return of this method is used to conveniently construct a + * chain of time series for users. + * + * @param child child's node + * @return return the MNode already added + */ + @Override + public ICacheMNode addChild(ICacheMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new MNodeContainerMapImpl(); + } + } + } + + child.setParent(this); + children.putIfAbsent(child.getName(), child); + return child; + } + + /** delete a child */ + @Override + public ICacheMNode deleteChild(String name) { + if (children != null) { + return children.remove(name); + } + 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, ICacheMNode newChildNode) { + if (!oldChildName.equals(newChildNode.getName())) { + throw new RuntimeException("New child's name must be the same as old child's name!"); + } + IMNode oldChildNode = this.getChild(oldChildName); + if (oldChildNode == null) { + return; + } + + oldChildNode.moveDataToNewMNode(newChildNode); + + children.replace(newChildNode.getName(), newChildNode); + } + + @Override + public void moveDataToNewMNode(ICacheMNode newMNode) { + newMNode.setParent(parent); + + if (children != null) { + newMNode.setChildren(children); + children.forEach((childName, childNode) -> childNode.setParent(newMNode)); + } + } + + @Override + public IMNodeContainer getChildren() { + if (children == null) { + return MNodeContainers.emptyMNodeContainer(); + } + return children; + } + + @Override + public void setChildren(IMNodeContainer children) { + this.children = children; + } + + @Override + public boolean isAboveDatabase() { + return false; + } + + @Override + public boolean isDatabase() { + return false; + } + + @Override + public boolean isEntity() { + return false; + } + + @Override + public boolean isMeasurement() { + return false; + } + + @Override + public MNodeType getMNodeType(Boolean isConfig) { + return isConfig ? MNodeType.SG_INTERNAL : MNodeType.INTERNAL; + } + + @Override + public IDatabaseMNode getAsDatabaseMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IDeviceMNode getAsEntityMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IMeasurementMNode getAsMeasurementMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public R accept(MNodeVisitor visitor, C context) { + return visitor.visitInternalMNode(this, context); + } + + @Override + public CacheEntry getCacheEntry() { + return cacheMNodeInfo.getCacheEntry(); + } + + @Override + public void setCacheEntry(CacheEntry cacheEntry) { + cacheMNodeInfo.setCacheEntry(cacheEntry); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java new file mode 100644 index 0000000000000..7b9ddedd25ce1 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java @@ -0,0 +1,312 @@ +/* + * 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.metadata.newnode.basic; + +import org.apache.iotdb.commons.conf.IoTDBConstant; +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.container.MNodeContainerMapImpl; +import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; +import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.ConfigMNodeInfo; +import org.apache.iotdb.db.metadata.newnode.IConfigMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; + +import java.util.ArrayList; +import java.util.List; + +public class ConfigBasicMNode implements IConfigMNode { + + private static final long serialVersionUID = -770028375899514063L; + + /** + * use in Measurement Node so it's protected suppress warnings reason: volatile for double + * synchronized check + * + *

This will be a ConcurrentHashMap instance + */ + @SuppressWarnings("squid:S3077") + protected transient volatile IMNodeContainer children = null; + + private IConfigMNode parent; + private ConfigMNodeInfo configMNodeInfo; + + /** from root to this node, only be set when used once for InternalMNode */ + private String fullPath; + + /** Constructor of MNode. */ + public ConfigBasicMNode(IConfigMNode parent, String name) { + this.parent = parent; + this.configMNodeInfo = new ConfigMNodeInfo(name); + } + + @Override + public String getName() { + return configMNodeInfo.getName(); + } + + @Override + public void setName(String name) { + configMNodeInfo.setName(name); + } + + @Override + public IConfigMNode getParent() { + return parent; + } + + @Override + public void setParent(IConfigMNode parent) { + this.parent = parent; + } + + @Override + public String getFullPath() { + if (fullPath == null) { + fullPath = concatFullPath(); + } + return fullPath; + } + + String concatFullPath() { + StringBuilder builder = new StringBuilder(getName()); + IConfigMNode curr = this; + while (curr.getParent() != null) { + curr = curr.getParent(); + builder.insert(0, IoTDBConstant.PATH_SEPARATOR).insert(0, curr.getName()); + } + return builder.toString(); + } + + @Override + public void setFullPath(String fullPath) { + this.fullPath = fullPath; + } + + @Override + public PartialPath getPartialPath() { + List detachedPath = new ArrayList<>(); + IConfigMNode temp = this; + detachedPath.add(temp.getName()); + while (temp.getParent() != null) { + temp = temp.getParent(); + detachedPath.add(0, temp.getName()); + } + return new PartialPath(detachedPath.toArray(new String[0])); + } + + /** check whether the MNode has a child with the name */ + @Override + public boolean hasChild(String name) { + return (children != null && children.containsKey(name)); + } + + /** get the child with the name */ + @Override + public IConfigMNode getChild(String name) { + IConfigMNode child = null; + if (children != null) { + child = children.get(name); + } + return child; + } + + /** + * add a child to current mnode + * + * @param name child's name + * @param child child's node + * @return the child of this node after addChild + */ + @Override + public IConfigMNode addChild(String name, IConfigMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new MNodeContainerMapImpl<>(); + } + } + } + child.setParent(this); + IConfigMNode existingChild = children.putIfAbsent(name, child); + return existingChild == null ? child : existingChild; + } + + /** + * Add a child to the current mnode. + * + *

This method will not take the child's name as one of the inputs and will also make this + * Mnode be child node's parent. All is to reduce the probability of mistaken by users and be more + * convenient for users to use. And the return of this method is used to conveniently construct a + * chain of time series for users. + * + * @param child child's node + * @return return the MNode already added + */ + @Override + public IConfigMNode addChild(IConfigMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new MNodeContainerMapImpl(); + } + } + } + + child.setParent(this); + children.putIfAbsent(child.getName(), child); + return child; + } + + /** delete a child */ + @Override + public IConfigMNode deleteChild(String name) { + if (children != null) { + return children.remove(name); + } + 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) { + newMNode.setParent(parent); + + if (children != null) { + newMNode.setChildren(children); + children.forEach((childName, childNode) -> childNode.setParent(newMNode)); + } + } + + @Override + public IMNodeContainer getChildren() { + if (children == null) { + return MNodeContainers.emptyMNodeContainer(); + } + return children; + } + + @Override + public void setChildren(IMNodeContainer children) { + this.children = children; + } + + @Override + public boolean isAboveDatabase() { + return false; + } + + @Override + public boolean isDatabase() { + return false; + } + + @Override + public boolean isEntity() { + return false; + } + + @Override + public boolean isMeasurement() { + return false; + } + + @Override + public MNodeType getMNodeType(Boolean isConfig) { + return isConfig ? MNodeType.SG_INTERNAL : MNodeType.INTERNAL; + } + + @Override + public IDatabaseMNode getAsDatabaseMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IDeviceMNode getAsEntityMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IMeasurementMNode getAsMeasurementMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public R accept(MNodeVisitor visitor, C context) { + return visitor.visitInternalMNode(this, context); + } + + @Override + public int getSchemaTemplateId() { + return configMNodeInfo.getSchemaTemplateId(); + } + + @Override + public void preUnsetSchemaTemplate() { + configMNodeInfo.preUnsetSchemaTemplate(); + } + + @Override + public void rollbackUnsetSchemaTemplate() { + configMNodeInfo.rollbackUnsetSchemaTemplate(); + } + + @Override + public boolean isSchemaTemplatePreUnset() { + return configMNodeInfo.isSchemaTemplatePreUnset(); + } + + @Override + public void unsetSchemaTemplate() { + configMNodeInfo.unsetSchemaTemplate(); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java new file mode 100644 index 0000000000000..5b15d4b996452 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java @@ -0,0 +1,201 @@ +/* + * 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.metadata.newnode.database; + +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; +import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; + +public abstract class AbstractDatabaseMNode, BasicNode extends IMNode> + implements IDatabaseMNode { + + private static final long serialVersionUID = 7999036474525817732L; + + private final DatabaseInfo databaseInfo; + protected BasicNode basicMNode; + + public AbstractDatabaseMNode(String name) { + this.databaseInfo = new DatabaseInfo(name); + } + + @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) { + return basicMNode.addChild(name, child); + } + + @Override + public N addChild(N child) { + return basicMNode.addChild(child); + } + + @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) { + // TODO + } + + @Override + public IMNodeContainer getChildren() { + return basicMNode.getChildren(); + } + + @Override + public void setChildren(IMNodeContainer children) { + basicMNode.setChildren(children); + } + + @Override + public boolean isAboveDatabase() { + return false; + } + + @Override + public boolean isDatabase() { + return true; + } + + @Override + public boolean isEntity() { + return false; + } + + @Override + public boolean isMeasurement() { + return false; + } + + @Override + public MNodeType getMNodeType(Boolean isConfig) { + return MNodeType.STORAGE_GROUP; + } + + @Override + public IDatabaseMNode getAsDatabaseMNode() { + return this; + } + + @Override + public IDeviceMNode getAsEntityMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IMeasurementMNode getAsMeasurementMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public R accept(MNodeVisitor visitor, C context) { + return visitor.visitStorageGroupMNode(this, context); + } + + @Override + public long getDataTTL() { + return databaseInfo.getDataTTL(); + } + + @Override + public void setDataTTL(long dataTTL) { + databaseInfo.setDataTTL(dataTTL); + } + + @Override + public void setSchemaReplicationFactor(int schemaReplicationFactor) { + databaseInfo.setSchemaReplicationFactor(schemaReplicationFactor); + } + + @Override + public void setDataReplicationFactor(int dataReplicationFactor) { + databaseInfo.setDataReplicationFactor(dataReplicationFactor); + } + + @Override + public void setTimePartitionInterval(long timePartitionInterval) { + databaseInfo.setTimePartitionInterval(timePartitionInterval); + } + + @Override + public void setStorageGroupSchema(TDatabaseSchema schema) { + databaseInfo.setStorageGroupSchema(schema); + } + + @Override + public TDatabaseSchema getStorageGroupSchema() { + return databaseInfo.getStorageGroupSchema(); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java new file mode 100644 index 0000000000000..a76406a57c592 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java @@ -0,0 +1,48 @@ +/* + * 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.metadata.newnode.database; + +import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; + +public class CacheDatabaseMNode extends AbstractDatabaseMNode + implements ICacheMNode { + + public CacheDatabaseMNode(ICacheMNode parent, String name) { + super(name); + this.basicMNode = new CacheBasicMNode(parent, name); + } + + // TODO: @yukun, remove this constructor + public CacheDatabaseMNode(ICacheMNode parent, String name, long dataTTL) { + this(parent, name); + setDataTTL(dataTTL); + } + + @Override + public CacheEntry getCacheEntry() { + return basicMNode.getCacheEntry(); + } + + @Override + public void setCacheEntry(CacheEntry cacheEntry) { + basicMNode.setCacheEntry(cacheEntry); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java new file mode 100644 index 0000000000000..43a21e29bfa66 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java @@ -0,0 +1,56 @@ +/* + * 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.metadata.newnode.database; + +import org.apache.iotdb.db.metadata.newnode.IConfigMNode; +import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; + +public class ConfigDatabaseMNode extends AbstractDatabaseMNode + implements IConfigMNode { + + public ConfigDatabaseMNode(IConfigMNode parent, String name) { + super(name); + this.basicMNode = new ConfigBasicMNode(parent, name); + } + + @Override + public int getSchemaTemplateId() { + return basicMNode.getSchemaTemplateId(); + } + + @Override + public void preUnsetSchemaTemplate() { + basicMNode.preUnsetSchemaTemplate(); + } + + @Override + public void rollbackUnsetSchemaTemplate() { + basicMNode.rollbackUnsetSchemaTemplate(); + } + + @Override + public boolean isSchemaTemplatePreUnset() { + return basicMNode.isSchemaTemplatePreUnset(); + } + + @Override + public void unsetSchemaTemplate() { + basicMNode.unsetSchemaTemplate(); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java similarity index 60% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java index 2cf4d75c75f90..35891495c08a2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java @@ -16,33 +16,16 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.db.metadata.newnode.database; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -public class StorageGroupMNode extends InternalMNode implements IStorageGroupMNode { - - private static final long serialVersionUID = 7999036474525817732L; +public class DatabaseInfo implements IDatabaseInfo { private TDatabaseSchema schema; - public StorageGroupMNode(IMNode parent, String name) { - super(parent, name); - } - - // TODO: @yukun, remove this constructor - public StorageGroupMNode(IMNode parent, String name, long dataTTL) { - super(parent, name); - this.schema = new TDatabaseSchema(name).setTTL(dataTTL); - } - - @Override - public String getFullPath() { - if (fullPath == null) { - fullPath = concatFullPath().intern(); - } - return fullPath; + public DatabaseInfo(String name) { + this.schema = new TDatabaseSchema(name); } @Override @@ -79,24 +62,4 @@ public void setStorageGroupSchema(TDatabaseSchema schema) { public TDatabaseSchema getStorageGroupSchema() { return schema; } - - @Override - public void moveDataToNewMNode(IMNode newMNode) { - super.moveDataToNewMNode(newMNode); - } - - @Override - public boolean isStorageGroup() { - return true; - } - - @Override - public MNodeType getMNodeType(Boolean isConfig) { - return MNodeType.STORAGE_GROUP; - } - - @Override - public R accept(MNodeVisitor visitor, C context) { - return visitor.visitStorageGroupMNode(this, context); - } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java new file mode 100644 index 0000000000000..55a36fd65546a --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java @@ -0,0 +1,36 @@ +/* + * 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.metadata.newnode.database; + +import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; + +public class DatabaseMNode extends AbstractDatabaseMNode { + + public DatabaseMNode(IMemMNode parent, String name) { + super(name); + this.basicMNode = new BasicMNode(parent, name); + } + + // TODO: @yukun, remove this constructor + public DatabaseMNode(IMemMNode parent, String name, long dataTTL) { + this(parent, name); + setDataTTL(dataTTL); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IStorageGroupMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java similarity index 87% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/IStorageGroupMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java index 25d9e2f7b0e90..6761db212ddad 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IStorageGroupMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java @@ -16,13 +16,11 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.db.metadata.newnode.database; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -/** This interface defines a StorageGroupMNode's operation interfaces. */ -public interface IStorageGroupMNode extends IMNode { - +public interface IDatabaseInfo { long getDataTTL(); void setDataTTL(long dataTTL); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java new file mode 100644 index 0000000000000..8f926ba6667ad --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java @@ -0,0 +1,24 @@ +/* + * 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.metadata.newnode.database; + +import org.apache.iotdb.db.metadata.mnode.IMNode; + +/** This interface defines a DatabaseMNode's operation interfaces. */ +public interface IDatabaseMNode> extends IMNode, IDatabaseInfo {} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java new file mode 100644 index 0000000000000..3811a4d266020 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java @@ -0,0 +1,265 @@ +/* + * 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.metadata.newnode.databasedevice; + +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; +import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.DatabaseDeviceInfo; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; + +import java.util.Map; + +public abstract class AbstractDatabaseDeviceMNode, BasicNode extends IMNode> + implements IDatabaseMNode, IDeviceMNode { + + private DatabaseDeviceInfo databaseDeviceInfo; + protected BasicNode basicMNode; + + public AbstractDatabaseDeviceMNode() { + this.databaseDeviceInfo = new DatabaseDeviceInfo(); + } + + @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) { + return basicMNode.addChild(name, child); + } + + @Override + public N addChild(N child) { + return basicMNode.addChild(child); + } + + @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) { + // TODO + } + + @Override + public IMNodeContainer getChildren() { + return basicMNode.getChildren(); + } + + @Override + public void setChildren(IMNodeContainer children) { + basicMNode.setChildren(children); + } + + @Override + public boolean isAboveDatabase() { + return false; + } + + @Override + public boolean isDatabase() { + return true; + } + + @Override + public boolean isEntity() { + return true; + } + + @Override + public boolean isMeasurement() { + return false; + } + + @Override + public MNodeType getMNodeType(Boolean isConfig) { + return MNodeType.STORAGE_GROUP; + } + + @Override + public IDatabaseMNode getAsDatabaseMNode() { + return this; + } + + @Override + public IDeviceMNode getAsEntityMNode() { + return this; + } + + @Override + public IMeasurementMNode getAsMeasurementMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public R accept(MNodeVisitor visitor, C context) { + return visitor.visitStorageGroupEntityMNode(this, context); + } + + @Override + public long getDataTTL() { + return databaseDeviceInfo.getDataTTL(); + } + + @Override + public void setDataTTL(long dataTTL) { + databaseDeviceInfo.setDataTTL(dataTTL); + } + + @Override + public void setSchemaReplicationFactor(int schemaReplicationFactor) {} + + @Override + public void setDataReplicationFactor(int dataReplicationFactor) {} + + @Override + public void setTimePartitionInterval(long timePartitionInterval) {} + + @Override + public void setStorageGroupSchema(TDatabaseSchema schema) {} + + @Override + public TDatabaseSchema getStorageGroupSchema() { + return null; + } + + @Override + public boolean addAlias(String alias, IMeasurementMNode child) { + return databaseDeviceInfo.addAlias(alias, child); + } + + @Override + public void deleteAliasChild(String alias) { + databaseDeviceInfo.deleteAliasChild(alias); + } + + @Override + public Map getAliasChildren() { + return databaseDeviceInfo.getAliasChildren(); + } + + @Override + public void setAliasChildren(Map aliasChildren) { + databaseDeviceInfo.setAliasChildren(aliasChildren); + } + + @Override + public boolean isUseTemplate() { + return databaseDeviceInfo.isUseTemplate(); + } + + @Override + public void setUseTemplate(boolean useTemplate) { + databaseDeviceInfo.setUseTemplate(useTemplate); + } + + @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() { + return databaseDeviceInfo.isAligned(); + } + + @Override + public void setAligned(boolean isAligned) { + databaseDeviceInfo.setAligned(isAligned); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java new file mode 100644 index 0000000000000..d6a36e0924c76 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java @@ -0,0 +1,43 @@ +/* + * 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.metadata.newnode.databasedevice; + +import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; + +public class CacheDatabaseDeviceMNode + extends AbstractDatabaseDeviceMNode implements ICacheMNode { + + public CacheDatabaseDeviceMNode(ICacheMNode parent, String name, long dataTTL) { + super(); + this.basicMNode = new CacheBasicMNode(parent, name); + setDataTTL(dataTTL); + } + + @Override + public CacheEntry getCacheEntry() { + return basicMNode.getCacheEntry(); + } + + @Override + public void setCacheEntry(CacheEntry cacheEntry) { + basicMNode.setCacheEntry(cacheEntry); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java new file mode 100644 index 0000000000000..1e89677902a4f --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java @@ -0,0 +1,30 @@ +/* + * 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.metadata.newnode.databasedevice; + +import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; + +public class DatabaseDeviceMNode extends AbstractDatabaseDeviceMNode { + public DatabaseDeviceMNode(IMemMNode parent, String name, long dataTTL) { + super(); + this.basicMNode = new BasicMNode(parent, name); + setDataTTL(dataTTL); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java new file mode 100644 index 0000000000000..a5b03bd24a550 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java @@ -0,0 +1,236 @@ +/* + * 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.metadata.newnode.device; + +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; + +import java.util.Map; + +public abstract class AbstractDeviceMNode, BasicNode extends IMNode> + implements IDeviceMNode { + + private final IDeviceInfo deviceInfo; + protected BasicNode basicMNode; + + /** Constructor of MNode. */ + public AbstractDeviceMNode() { + this.deviceInfo = new DeviceInfo(); + } + + @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) { + return basicMNode.addChild(name, child); + } + + @Override + public N addChild(N child) { + return basicMNode.addChild(child); + } + + @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) { + // TODO + } + + @Override + public IMNodeContainer getChildren() { + return basicMNode.getChildren(); + } + + @Override + public void setChildren(IMNodeContainer children) { + basicMNode.setChildren(children); + } + + @Override + public boolean isAboveDatabase() { + return false; + } + + @Override + public boolean isDatabase() { + return false; + } + + @Override + public boolean isEntity() { + return true; + } + + @Override + public boolean isMeasurement() { + return false; + } + + @Override + public MNodeType getMNodeType(Boolean isConfig) { + return MNodeType.DEVICE; + } + + @Override + public IDatabaseMNode getAsDatabaseMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IDeviceMNode getAsEntityMNode() { + return this; + } + + @Override + public IMeasurementMNode getAsMeasurementMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public R accept(MNodeVisitor visitor, C context) { + return visitor.visitDeviceMNode(this, context); + } + + @Override + public boolean addAlias(String alias, IMeasurementMNode child) { + return deviceInfo.addAlias(alias, child); + } + + @Override + public void deleteAliasChild(String alias) { + deviceInfo.deleteAliasChild(alias); + } + + @Override + public Map getAliasChildren() { + return deviceInfo.getAliasChildren(); + } + + @Override + public void setAliasChildren(Map aliasChildren) { + deviceInfo.setAliasChildren(aliasChildren); + } + + @Override + public boolean isUseTemplate() { + return deviceInfo.isUseTemplate(); + } + + @Override + public void setUseTemplate(boolean useTemplate) { + deviceInfo.setUseTemplate(useTemplate); + } + + @Override + public int getSchemaTemplateId() { + return deviceInfo.getSchemaTemplateId(); + } + + @Override + public int getSchemaTemplateIdWithState() { + return deviceInfo.getSchemaTemplateIdWithState(); + } + + @Override + public boolean isPreDeactivateTemplate() { + return deviceInfo.isPreDeactivateTemplate(); + } + + @Override + public void preDeactivateTemplate() { + deviceInfo.preDeactivateTemplate(); + } + + @Override + public void rollbackPreDeactivateTemplate() { + deviceInfo.rollbackPreDeactivateTemplate(); + } + + @Override + public void deactivateTemplate() { + deviceInfo.deactivateTemplate(); + } + + @Override + public boolean isAligned() { + return deviceInfo.isAligned(); + } + + @Override + public void setAligned(boolean isAligned) { + deviceInfo.setAligned(isAligned); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java new file mode 100644 index 0000000000000..855c8785f2449 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java @@ -0,0 +1,41 @@ +/* + * 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.metadata.newnode.device; + +import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; + +public class CacheDeviceMNode extends AbstractDeviceMNode + implements ICacheMNode { + + public CacheDeviceMNode(ICacheMNode parent, String name) { + this.basicMNode = new CacheBasicMNode(parent, name); + } + + @Override + public CacheEntry getCacheEntry() { + return basicMNode.getCacheEntry(); + } + + @Override + public void setCacheEntry(CacheEntry cacheEntry) { + basicMNode.setCacheEntry(cacheEntry); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/EntityMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java similarity index 68% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/EntityMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java index 31d8112051e45..1540ecd59b1b3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/EntityMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java @@ -16,15 +16,27 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.db.metadata.newnode.device; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import java.util.Collections; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class EntityMNode extends InternalMNode implements IEntityMNode { +import static org.apache.iotdb.db.metadata.MetadataConstant.NON_TEMPLATE; + +public class DeviceInfo implements IDeviceInfo { + + /** + * In EntityMNode of MTree in SchemaRegion, this field represents the template activated on this + * node. The normal usage value range is [0, Int.MaxValue], since this is implemented as auto inc + * id. The default value -1 means NON_TEMPLATE. This value will be set negative to implement some + * pre-delete features. + */ + protected int schemaTemplateId = NON_TEMPLATE; + + private volatile boolean useTemplate = false; /** * suppress warnings reason: volatile for double synchronized check @@ -36,44 +48,6 @@ public class EntityMNode extends InternalMNode implements IEntityMNode { private volatile boolean isAligned = false; - @Override - public String getFullPath() { - if (fullPath == null) { - fullPath = concatFullPath().intern(); - } - return fullPath; - } - - /** - * Constructor of MNode. - * - * @param parent - * @param name - */ - public EntityMNode(IMNode parent, String name) { - super(parent, name); - } - - /** check whether the MNode has a child with the name */ - @Override - public boolean hasChild(String name) { - return (children != null && children.containsKey(name)) - || (aliasChildren != null && aliasChildren.containsKey(name)); - } - - /** get the child with the name */ - @Override - public IMNode getChild(String name) { - IMNode child = null; - if (children != null) { - child = children.get(name); - } - if (child != null) { - return child; - } - return aliasChildren == null ? null : aliasChildren.get(name); - } - /** add an alias */ @Override public boolean addAlias(String alias, IMeasurementMNode child) { @@ -123,6 +97,11 @@ public int getSchemaTemplateId() { return schemaTemplateId >= -1 ? schemaTemplateId : -schemaTemplateId - 2; } + @Override + public int getSchemaTemplateIdWithState() { + return schemaTemplateId; + } + @Override public boolean isPreDeactivateTemplate() { return schemaTemplateId < -1; @@ -149,40 +128,22 @@ public void deactivateTemplate() { } @Override - public boolean isAligned() { - return isAligned; - } - - @Override - public void setAligned(boolean isAligned) { - this.isAligned = isAligned; - } - - @Override - public void moveDataToNewMNode(IMNode newMNode) { - super.moveDataToNewMNode(newMNode); - - if (newMNode.isEntity()) { - IEntityMNode newEntityMNode = newMNode.getAsEntityMNode(); - newEntityMNode.setAligned(isAligned); - if (aliasChildren != null) { - newEntityMNode.setAliasChildren(aliasChildren); - } - } + public boolean isUseTemplate() { + return useTemplate; } @Override - public boolean isEntity() { - return true; + public void setUseTemplate(boolean useTemplate) { + this.useTemplate = useTemplate; } @Override - public MNodeType getMNodeType(Boolean isConfig) { - return MNodeType.DEVICE; + public boolean isAligned() { + return isAligned; } @Override - public R accept(MNodeVisitor visitor, C context) { - return visitor.visitEntityMNode(this, context); + public void setAligned(boolean isAligned) { + this.isAligned = isAligned; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java new file mode 100644 index 0000000000000..ae06545d68f99 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java @@ -0,0 +1,29 @@ +/* + * 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.metadata.newnode.device; + +import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; + +public class DeviceMNode extends AbstractDeviceMNode { + + public DeviceMNode(IMemMNode parent, String name) { + this.basicMNode = new BasicMNode(parent, name); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IEntityMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java similarity index 76% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/IEntityMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java index 6bbf5717c1bec..6eb1309e6219f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IEntityMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java @@ -16,11 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.db.metadata.newnode.device; + +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import java.util.Map; -public interface IEntityMNode extends IMNode { +public interface IDeviceInfo { boolean addAlias(String alias, IMeasurementMNode child); @@ -30,11 +32,16 @@ public interface IEntityMNode extends IMNode { void setAliasChildren(Map aliasChildren); - @Override boolean isUseTemplate(); void setUseTemplate(boolean useTemplate); + /** @return the logic id of template set or activated on this node, id>=-1 */ + int getSchemaTemplateId(); + + /** @return the template id with current state, may be negative since unset or deactivation */ + int getSchemaTemplateIdWithState(); + boolean isPreDeactivateTemplate(); void preDeactivateTemplate(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java new file mode 100644 index 0000000000000..bc10f76b467ca --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java @@ -0,0 +1,23 @@ +/* + * 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.metadata.newnode.device; + +import org.apache.iotdb.db.metadata.mnode.IMNode; + +public interface IDeviceMNode> extends IMNode, IDeviceInfo {} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java new file mode 100644 index 0000000000000..3d7e08523da13 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java @@ -0,0 +1,230 @@ +/* + * 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.metadata.newnode.measurement; + +import org.apache.iotdb.commons.path.MeasurementPath; +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; +import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public abstract class AbstractMeasurementMNode, BasicNode extends IMNode> + implements IMeasurementMNode { + + private static final Logger logger = LoggerFactory.getLogger(AbstractMeasurementMNode.class); + + private final MeasurementInfo measurementInfo; + protected BasicNode basicMNode; + + /** @param alias alias of measurementName */ + public AbstractMeasurementMNode(N parent, String name, IMeasurementSchema schema, String alias) { + this.measurementInfo = new MeasurementInfo(schema, alias); + } + + @Override + public String getName() { + return basicMNode.getName(); + } + + @Override + public void setName(String name) { + basicMNode.setName(name); + } + + @Override + public N getParent() { + if (basicMNode.getParent() == null) { + return null; + } + return basicMNode.getParent(); + } + + @Override + public void setParent(N parent) { + basicMNode.setParent(parent); + } + + /** + * get MeasurementPath of this node + * + * @return MeasurementPath + */ + @Override + public MeasurementPath getMeasurementPath() { + MeasurementPath result = new MeasurementPath(getPartialPath(), getSchema()); + result.setUnderAlignedEntity(getParent().getAsEntityMNode().isAligned()); + return result; + } + + @Override + public IMeasurementSchema getSchema() { + return measurementInfo.getSchema(); + } + + @Override + public TSDataType getDataType() { + return measurementInfo.getDataType(); + } + + @Override + public long getOffset() { + return measurementInfo.getOffset(); + } + + @Override + public void setOffset(long offset) { + measurementInfo.setOffset(offset); + } + + @Override + public String getAlias() { + return measurementInfo.getAlias(); + } + + @Override + public void setAlias(String alias) { + measurementInfo.setAlias(alias); + } + + @Override + public boolean isPreDeleted() { + return measurementInfo.isPreDeleted(); + } + + @Override + public void setPreDeleted(boolean preDeleted) { + measurementInfo.setPreDeleted(preDeleted); + } + + @Override + public R accept(MNodeVisitor visitor, C context) { + return visitor.visitMeasurementMNode(this, context); + } + + @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 false; + } + + @Override + public N getChild(String name) { + logger.warn("current node {} is a MeasurementMNode, can not get child {}", getName(), name); + throw new RuntimeException( + String.format( + "current node %s is a MeasurementMNode, can not get child %s", getName(), name)); + } + + @Override + public N addChild(String name, N child) { + // Do nothing + return null; + } + + @Override + public N addChild(N child) { + return null; + } + + @Override + public N deleteChild(String name) { + return null; + } + + @Override + public void replaceChild(String oldChildName, N newChildNode) {} + + @Override + public void moveDataToNewMNode(N newMNode) { + basicMNode.moveDataToNewMNode(newMNode); + } + + @Override + public IMNodeContainer getChildren() { + return MNodeContainers.emptyMNodeContainer(); + } + + @Override + public void setChildren(IMNodeContainer children) { + // Do nothing + } + + @Override + public boolean isAboveDatabase() { + return false; + } + + @Override + public boolean isDatabase() { + return false; + } + + @Override + public boolean isEntity() { + return false; + } + + @Override + public boolean isMeasurement() { + return true; + } + + @Override + public MNodeType getMNodeType(Boolean isConfig) { + return MNodeType.MEASUREMENT; + } + + @Override + public IDatabaseMNode getAsDatabaseMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IDeviceMNode getAsEntityMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IMeasurementMNode getAsMeasurementMNode() { + return this; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java new file mode 100644 index 0000000000000..7276e19b8a613 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java @@ -0,0 +1,44 @@ +/* + * 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.metadata.newnode.measurement; + +import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +public class CacheMeasurementMNode extends AbstractMeasurementMNode + implements ICacheMNode { + + public CacheMeasurementMNode( + ICacheMNode parent, String name, IMeasurementSchema schema, String alias) { + super(parent, name, schema, alias); + this.basicMNode = new CacheBasicMNode(parent, name); + } + + @Override + public CacheEntry getCacheEntry() { + return basicMNode.getCacheEntry(); + } + + @Override + public void setCacheEntry(CacheEntry cacheEntry) { + basicMNode.setCacheEntry(cacheEntry); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java similarity index 76% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMeasurementMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java index 5f4cccdf93795..01e606296070b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java @@ -16,23 +16,16 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.db.metadata.newnode.measurement; -import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; -/** This interface defines a MeasurementMNode's operation interfaces. */ -public interface IMeasurementMNode extends IMNode { - - @Override - IEntityMNode getParent(); - - MeasurementPath getMeasurementPath(); +public interface IMeasurementInfo { IMeasurementSchema getSchema(); - TSDataType getDataType(String measurementId); + TSDataType getDataType(); String getAlias(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java new file mode 100644 index 0000000000000..169c89dde2b6d --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java @@ -0,0 +1,31 @@ +/* + * 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.metadata.newnode.measurement; + +import org.apache.iotdb.commons.path.MeasurementPath; +import org.apache.iotdb.db.metadata.mnode.IMNode; + +/** This interface defines a MeasurementMNode's operation interfaces. */ +public interface IMeasurementMNode> extends IMNode, IMeasurementInfo { + + @Override + N getParent(); + + MeasurementPath getMeasurementPath(); +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java new file mode 100644 index 0000000000000..bdba108a3efb4 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java @@ -0,0 +1,79 @@ +/* + * 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.metadata.newnode.measurement; + +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +public class MeasurementInfo implements IMeasurementInfo { + + /** alias name of this measurement */ + protected String alias; + /** tag/attribute's start offset in tag file */ + private long offset = -1; + /** measurement's Schema for one timeseries represented by current leaf node */ + private final IMeasurementSchema schema; + /** whether this measurement is pre deleted and considered in black list */ + private boolean preDeleted = false; + + public MeasurementInfo(IMeasurementSchema schema, String alias) { + this.schema = schema; + this.alias = alias; + } + + @Override + public IMeasurementSchema getSchema() { + return schema; + } + + @Override + public TSDataType getDataType() { + return schema.getType(); + } + + @Override + public String getAlias() { + return alias; + } + + @Override + public void setAlias(String alias) { + this.alias = alias; + } + + @Override + public long getOffset() { + return offset; + } + + @Override + public void setOffset(long offset) { + this.offset = offset; + } + + @Override + public boolean isPreDeleted() { + return preDeleted; + } + + @Override + public void setPreDeleted(boolean preDeleted) { + this.preDeleted = preDeleted; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java new file mode 100644 index 0000000000000..604645c7da063 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java @@ -0,0 +1,31 @@ +/* + * 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.metadata.newnode.measurement; + +import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +public class MeasurementMNode extends AbstractMeasurementMNode { + + public MeasurementMNode(IMemMNode parent, String name, IMeasurementSchema schema, String alias) { + super(parent, name, schema, alias); + this.basicMNode = new BasicMNode(parent, name); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java index d8e50e2f417d9..5fdb4b4460d3d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java @@ -42,8 +42,8 @@ import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; import org.apache.iotdb.db.metadata.metric.SchemaRegionMemMetric; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGMemoryImpl; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanDeserializer; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java index 33c10eaca97b5..e5eb6c78b90c7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java @@ -44,9 +44,9 @@ import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; import org.apache.iotdb.db.metadata.metric.SchemaRegionCachedMetric; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGCachedImpl; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanDeserializer; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java index 206e0bb80c343..44e86ea06d113 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java @@ -25,7 +25,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.metadata.MetadataConstant; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult; import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java index a2a2130ccee2a..c8dc713b3fbba 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java @@ -21,11 +21,10 @@ import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.utils.PathUtils; -import org.apache.iotdb.db.metadata.mnode.EntityMNode; -import org.apache.iotdb.db.metadata.mnode.IEntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.tsfile.common.constant.TsFileConstant; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -247,7 +246,7 @@ private IMeasurementMNode constructTemplateTree(String path, IMeasurementSchema synchronized (this) { IMeasurementMNode leafNode = MeasurementMNode.getMeasurementMNode( - (IEntityMNode) cur, pathNode[pathNode.length - 1], schema, null); + (IDeviceMNode) cur, pathNode[pathNode.length - 1], schema, null); if (cur == null) { directNodes.put(leafNode.getName(), leafNode); } else { @@ -343,7 +342,7 @@ private IMNode constructEntityPath(String path) throws IllegalPathException { IMNode cur = directNodes.get(pathNodes[0]); if (cur == null) { - cur = new EntityMNode(null, pathNodes[0]); + cur = new AbstractDeviceMNode(null, pathNodes[0]); directNodes.put(pathNodes[0], cur); } @@ -353,7 +352,7 @@ private IMNode constructEntityPath(String path) throws IllegalPathException { for (int i = 1; i <= pathNodes.length - 2; i++) { if (!cur.hasChild(pathNodes[i])) { - cur.addChild(pathNodes[i], new EntityMNode(cur, pathNodes[i])); + cur.addChild(pathNodes[i], new AbstractDeviceMNode(cur, pathNodes[i])); } cur = cur.getChild(pathNodes[i]); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java index d2b720a91154d..03671b68085e2 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.path.AlignedPath; import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.utils.MetaUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.Pair; @@ -43,22 +43,22 @@ public class MetaUtilsTest { @Test public void testGetMultiFullPaths() { - InternalMNode rootNode = new InternalMNode(null, "root"); + BasicMNode rootNode = new BasicMNode(null, "root"); // builds the relationship of root.a and root.aa - InternalMNode aNode = new InternalMNode(rootNode, "a"); + BasicMNode aNode = new BasicMNode(rootNode, "a"); rootNode.addChild(aNode.getName(), aNode); - InternalMNode aaNode = new InternalMNode(rootNode, "aa"); + BasicMNode aaNode = new BasicMNode(rootNode, "aa"); rootNode.addChild(aaNode.getName(), aaNode); // builds the relationship of root.a.b and root.aa.bb - InternalMNode bNode = new InternalMNode(aNode, "b"); + BasicMNode bNode = new BasicMNode(aNode, "b"); aNode.addChild(bNode.getName(), bNode); - InternalMNode bbNode = new InternalMNode(aaNode, "bb"); + BasicMNode bbNode = new BasicMNode(aaNode, "bb"); aaNode.addChild(bbNode.getName(), bbNode); // builds the relationship of root.aa.bb.cc - InternalMNode ccNode = new InternalMNode(bbNode, "cc"); + BasicMNode ccNode = new BasicMNode(bbNode, "cc"); bbNode.addChild(ccNode.getName(), ccNode); List multiFullPaths = MetaUtils.getMultiFullPaths(rootNode); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java index 33ef4d106689c..4fb1d6383c16f 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java @@ -30,7 +30,7 @@ // import org.apache.iotdb.db.metadata.idtable.entry.DiskSchemaEntry; // import org.apache.iotdb.db.metadata.idtable.entry.IDeviceID; // import org.apache.iotdb.db.metadata.idtable.entry.SchemaEntry; -// import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; +// import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; // import org.apache.iotdb.db.qp.Planner; // import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan; // import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java index 4b33592632008..d40dd79967d27 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java @@ -18,6 +18,9 @@ */ package org.apache.iotdb.db.metadata.mnode; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.utils.MetaUtils; import com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -45,9 +48,9 @@ public void setUp() throws Exception { @Test public void testReplaceChild() { - InternalMNode rootNode = new InternalMNode(null, "root"); + BasicMNode rootNode = new BasicMNode(null, "root"); - IEntityMNode aNode = new EntityMNode(rootNode, "a"); + IDeviceMNode aNode = new AbstractDeviceMNode(rootNode, "a"); rootNode.addChild(aNode.getName(), aNode); IMeasurementMNode bNode = MeasurementMNode.getMeasurementMNode(aNode, "b", null, null); @@ -55,7 +58,7 @@ public void testReplaceChild() { aNode.addChild(bNode.getName(), bNode); aNode.addAlias("aliasOfb", bNode); - IEntityMNode newANode = new EntityMNode(null, "a"); + IDeviceMNode newANode = new AbstractDeviceMNode(null, "a"); rootNode.replaceChild(aNode.getName(), newANode); List multiFullPaths = MetaUtils.getMultiFullPaths(rootNode); @@ -67,28 +70,28 @@ public void testReplaceChild() { @Test public void testAddChild() { - InternalMNode rootNode = new InternalMNode(null, "root"); + BasicMNode rootNode = new BasicMNode(null, "root"); IMNode speedNode = rootNode - .addChild(new InternalMNode(null, "sg1")) - .addChild(new InternalMNode(null, "a")) - .addChild(new InternalMNode(null, "b")) - .addChild(new InternalMNode(null, "c")) - .addChild(new InternalMNode(null, "d")) - .addChild(new InternalMNode(null, "device")) - .addChild(new InternalMNode(null, "speed")); + .addChild(new BasicMNode(null, "sg1")) + .addChild(new BasicMNode(null, "a")) + .addChild(new BasicMNode(null, "b")) + .addChild(new BasicMNode(null, "c")) + .addChild(new BasicMNode(null, "d")) + .addChild(new BasicMNode(null, "device")) + .addChild(new BasicMNode(null, "speed")); assertEquals("root.sg1.a.b.c.d.device.speed", speedNode.getFullPath()); IMNode temperatureNode = rootNode .getChild("sg1") - .addChild(new InternalMNode(null, "aa")) - .addChild(new InternalMNode(null, "bb")) - .addChild(new InternalMNode(null, "cc")) - .addChild(new InternalMNode(null, "dd")) - .addChild(new InternalMNode(null, "device11")) - .addChild(new InternalMNode(null, "temperature")); + .addChild(new BasicMNode(null, "aa")) + .addChild(new BasicMNode(null, "bb")) + .addChild(new BasicMNode(null, "cc")) + .addChild(new BasicMNode(null, "dd")) + .addChild(new BasicMNode(null, "device11")) + .addChild(new BasicMNode(null, "temperature")); assertEquals("root.sg1.aa.bb.cc.dd.device11.temperature", temperatureNode.getFullPath()); } } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java index ee4a8a36894ff..13dd2a7770eb4 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java @@ -23,7 +23,7 @@ import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.utils.Pair; @@ -255,8 +255,7 @@ public void testSerialization() throws Exception { }; for (int i = 0; i < pathList.length; i++) { root.setStorageGroup(pathList[i]); - IStorageGroupMNode storageGroupMNode = - root.getStorageGroupNodeByStorageGroupPath(pathList[i]); + IDatabaseMNode storageGroupMNode = root.getStorageGroupNodeByStorageGroupPath(pathList[i]); storageGroupMNode.setDataTTL(i); storageGroupMNode.setDataReplicationFactor(i); storageGroupMNode.setSchemaReplicationFactor(i); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java index 02fa73da69b4b..37d966c34d1f7 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java @@ -18,8 +18,8 @@ */ package org.apache.iotdb.db.metadata.mtree.disk; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; import org.junit.Test; @@ -34,13 +34,13 @@ public class CachedMNodeContainerTest { public void testIterator() { CachedMNodeContainer container = new CachedMNodeContainer(); Map childCache = new HashMap<>(); - childCache.put("1", new InternalMNode(null, "1")); - childCache.put("2", new InternalMNode(null, "2")); - childCache.put("5", new InternalMNode(null, "5")); + childCache.put("1", new BasicMNode(null, "1")); + childCache.put("2", new BasicMNode(null, "2")); + childCache.put("5", new BasicMNode(null, "5")); container.loadChildrenFromDisk(childCache); - container.put("3", new InternalMNode(null, "3")); - container.put("4", new InternalMNode(null, "4")); - container.put("6", new InternalMNode(null, "6")); + container.put("3", new BasicMNode(null, "3")); + container.put("4", new BasicMNode(null, "4")); + container.put("6", new BasicMNode(null, "6")); container.updateMNode("5"); container.updateMNode("6"); Iterator iterator = container.getChildrenIterator(); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java index f0544b6796730..39d37e32b8a6d 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java @@ -19,8 +19,8 @@ package org.apache.iotdb.db.metadata.mtree.schemafile; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; @@ -54,7 +54,7 @@ public void tearDown() throws Exception { @Test public void internalNodeTest() throws MetadataException { - IMNode oneNode = new InternalMNode(null, "abcd"); + IMNode oneNode = new BasicMNode(null, "abcd"); ICachedMNodeContainer.getCachedMNodeContainer(oneNode).setSegmentAddress(1234567L); oneNode.setUseTemplate(true); ByteBuffer buffer = RecordUtils.node2Buffer(oneNode); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java index 88d083d528da9..30fbfea0f4f41 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java @@ -21,11 +21,11 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupEntityMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; @@ -71,7 +71,7 @@ public void tearDown() throws Exception { public void essentialLogTest() throws IOException, MetadataException { SchemaFile sf = (SchemaFile) SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - IStorageGroupMNode newSGNode = new StorageGroupEntityMNode(null, "newSG", 10000L); + IDatabaseMNode newSGNode = new AbstractDatabaseDeviceMNode(null, "newSG", 10000L); sf.updateStorageGroupNode(newSGNode); IMNode root = virtualTriangleMTree(5, "root.test"); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java index bcb6ea4c0b904..88550176ba455 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java @@ -21,21 +21,21 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.utils.PathUtils; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.EntityMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MNodeUtils; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupEntityMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.WrappedSegment; +import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -84,7 +84,7 @@ public void tearDown() throws Exception { @Test public void essentialTestSchemaFile() throws IOException, MetadataException { ISchemaFile sf = SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - IStorageGroupMNode newSGNode = new StorageGroupEntityMNode(null, "newSG", 10000L); + IDatabaseMNode newSGNode = new AbstractDatabaseDeviceMNode(null, "newSG", 10000L); sf.updateStorageGroupNode(newSGNode); IMNode root = virtualTriangleMTree(5, "root.test"); @@ -158,7 +158,7 @@ public void essentialTestSchemaFile() throws IOException, MetadataException { @Test public void testVerticalTree() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sgvt.vt", TEST_SCHEMA_REGION_ID); - IStorageGroupMNode sgNode = new StorageGroupEntityMNode(null, "sg", 11_111L); + IDatabaseMNode sgNode = new AbstractDatabaseDeviceMNode(null, "sg", 11_111L); sf.updateStorageGroupNode(sgNode); IMNode root = getVerticalTree(100, "VT"); @@ -227,7 +227,7 @@ public void testVerticalTree() throws MetadataException, IOException { nsf.writeMNode(vt1); nsf.writeMNode(vt4); - Assert.assertEquals(11111L, nsf.init().getAsStorageGroupMNode().getDataTTL()); + Assert.assertEquals(11111L, nsf.init().getAsDatabaseMNode().getDataTTL()); nsf.close(); } @@ -244,7 +244,7 @@ public void testFaltTree() throws MetadataException, IOException { } } - IMNode node = new InternalMNode(null, "a"); + IMNode node = new BasicMNode(null, "a"); ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(0L); List tryReadList = Arrays.asList(199, 1999, 2999, 3999, 4999, 5999); for (Integer rid : tryReadList) { @@ -258,7 +258,7 @@ public void testFaltTree() throws MetadataException, IOException { public void testGetChildren() throws MetadataException, IOException { essentialTestSchemaFile(); - IMNode node = new InternalMNode(null, "test"); + IMNode node = new BasicMNode(null, "test"); ICachedMNodeContainer.getCachedMNodeContainer(node) .setSegmentAddress(SchemaFile.getGlobalIndex(2, (short) 0)); ISchemaFile sf = SchemaFile.loadSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); @@ -276,11 +276,11 @@ public void testGetChildren() throws MetadataException, IOException { @Test public void test200KMeasurement() throws MetadataException, IOException { int i = 200000, j = 20; - IMNode sgNode = new StorageGroupMNode(null, "sgRoot", 11111111L); + IMNode sgNode = new AbstractDatabaseMNode(null, "sgRoot", 11111111L); ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); while (j >= 0) { - IMNode aDevice = new EntityMNode(sgNode, "dev_" + j); + IMNode aDevice = new AbstractDeviceMNode(sgNode, "dev_" + j); sgNode.addChild(aDevice); j--; } @@ -309,11 +309,11 @@ public void test200KMeasurement() throws MetadataException, IOException { @Test public void test10KDevices() throws MetadataException, IOException { int i = 1000; - IMNode sgNode = new StorageGroupMNode(null, "sgRoot", 11111111L); + IMNode sgNode = new AbstractDatabaseMNode(null, "sgRoot", 11111111L); // write with empty entitiy while (i >= 0) { - IMNode aDevice = new InternalMNode(sgNode, "dev_" + i); + IMNode aDevice = new BasicMNode(sgNode, "dev_" + i); sgNode.addChild(aDevice); i--; } @@ -334,7 +334,7 @@ public void test10KDevices() throws MetadataException, IOException { i = 1000; while (i >= 0) { long addr = getSegAddrInContainer(sgNode.getChild("dev_" + i)); - IMNode aDevice = new EntityMNode(sgNode, "dev_" + i); + IMNode aDevice = new AbstractDeviceMNode(sgNode, "dev_" + i); sgNode.deleteChild(aDevice.getName()); sgNode.addChild(aDevice); moveToUpdateBuffer(sgNode, "dev_" + i); @@ -370,7 +370,7 @@ public void test10KDevices() throws MetadataException, IOException { try { while (orderedTree.hasNext()) { node = orderedTree.next(); - if (!node.isMeasurement() && !node.isStorageGroup()) { + if (!node.isMeasurement() && !node.isDatabase()) { sf.writeMNode(node); ICachedMNodeContainer.getCachedMNodeContainer(node).getNewChildBuffer().clear(); } @@ -401,7 +401,7 @@ public void test10KDevices() throws MetadataException, IOException { try { while (orderedTree.hasNext()) { node = orderedTree.next(); - if (!node.isMeasurement() && !node.isStorageGroup()) { + if (!node.isMeasurement() && !node.isDatabase()) { sf.writeMNode(node); if (arbitraryNode.size() < 50) { arbitraryNode.add(node); @@ -458,7 +458,7 @@ public void testUpdateOnFullPageSegment() throws MetadataException, IOException root.getChildren().clear(); - root.addChild(new EntityMNode(root, "ent1")); + root.addChild(new AbstractDeviceMNode(root, "ent1")); IMNode ent1 = root.getChild("ent1"); ent1.addChild(getMeasurementNode(ent1, "m1", "m1a")); @@ -511,7 +511,7 @@ public void testEstimateSegSize() throws Exception { * related methods shall be merged further: {@linkplain SchemaFile#reEstimateSegSize} * ,{@linkplain PageManager#reEstimateSegSize} */ - IMNode sgNode = new StorageGroupMNode(null, "mma", 111111111L); + IMNode sgNode = new AbstractDatabaseMNode(null, "mma", 111111111L); IMNode d1 = fillChildren(sgNode, 300, "d", this::supplyEntity); ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); try { @@ -546,7 +546,7 @@ public void testEstimateSegSize() throws Exception { @Test public void test200KAlias() throws Exception { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - IMNode sgNode = new StorageGroupMNode(null, "mma", 111111111L); + IMNode sgNode = new AbstractDatabaseMNode(null, "mma", 111111111L); // 5 devices, each for 200k measurements int factor20K = 20000; List devs = new ArrayList<>(); @@ -555,7 +555,7 @@ public void test200KAlias() throws Exception { try { for (int i = 0; i < 5; i++) { - devs.add(new EntityMNode(sgNode, "d_" + i)); + devs.add(new AbstractDeviceMNode(sgNode, "d_" + i)); sgNode.addChild(devs.get(i)); } @@ -623,12 +623,12 @@ public void test200KAlias() throws Exception { @Test public void testRearrangementWhenInsert() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - IMNode root = new StorageGroupEntityMNode(null, "sgRoot", 0L); + IMNode root = new AbstractDatabaseDeviceMNode(null, "sgRoot", 0L); root.getChildren().clear(); - IMNode ent2 = new EntityMNode(root, "ent2"); - IMNode ent3 = new EntityMNode(root, "ent3"); - IMNode ent4 = new EntityMNode(root, "ent4"); + IMNode ent2 = new AbstractDeviceMNode(root, "ent2"); + IMNode ent3 = new AbstractDeviceMNode(root, "ent3"); + IMNode ent4 = new AbstractDeviceMNode(root, "ent4"); root.addChild(ent2); root.addChild(ent3); root.addChild(ent4); @@ -680,7 +680,7 @@ public void testRearrangementWhenInsert() throws MetadataException, IOException getSegAddr(sf, getSegAddrInContainer(ent4), "e4m0")); root.getChildren().clear(); - IMNode ent5 = new EntityMNode(root, "ent5"); + IMNode ent5 = new AbstractDeviceMNode(root, "ent5"); root.addChild(ent5); while (ent5.getChildren().size() < 19) { ent5.addChild( @@ -748,7 +748,7 @@ public void bitwiseTest() { public void basicTest() throws IOException, MetadataException { SchemaFileConfig.INTERNAL_SPLIT_VALVE = 16000; int i = 10000; - IMNode sgNode = new StorageGroupEntityMNode(null, "sgRoot", 11111111L); + IMNode sgNode = new AbstractDatabaseDeviceMNode(null, "sgRoot", 11111111L); Set checkSet = new HashSet<>(); // write with empty entitiy while (i >= 0) { @@ -782,7 +782,7 @@ public void basicSplitTest() throws MetadataException, IOException { SchemaFileConfig.INTERNAL_SPLIT_VALVE = 16230; SchemaFileConfig.DETAIL_SKETCH = true; int i = 999; - IMNode sgNode = new StorageGroupEntityMNode(null, "sgRoot", 11111111L); + IMNode sgNode = new AbstractDatabaseDeviceMNode(null, "sgRoot", 11111111L); Set checkSet = new HashSet<>(); // write with empty entitiy while (i >= 0) { @@ -817,7 +817,7 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (j < 100) { name = "0" + name; } - IMNode aMeas = new InternalMNode(sgNode, "d_" + name); + IMNode aMeas = new BasicMNode(sgNode, "d_" + name); sgNode.addChild(aMeas); } @@ -828,7 +828,7 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (j < 100) { name = "0" + name; } - IMNode aMeas = new InternalMNode(sgNode, "dd2_" + name); + IMNode aMeas = new BasicMNode(sgNode, "dd2_" + name); checkSet.add(aMeas.getName()); sgNode.getChildren().get("d_010").addChild(aMeas); } @@ -923,11 +923,11 @@ private IMNode supplyMeasurement(IMNode par, String name) { } private IMNode supplyInternal(IMNode par, String name) { - return new InternalMNode(par, name); + return new BasicMNode(par, name); } private IMNode supplyEntity(IMNode par, String name) { - return new EntityMNode(par, name); + return new AbstractDeviceMNode(par, name); } private IMNode fillChildren( @@ -963,7 +963,7 @@ private IMNode getNode(IMNode root, String path) throws MetadataException { } static IMNode getInternalWithSegAddr(IMNode par, String name, long segAddr) { - IMNode node = new EntityMNode(par, name); + IMNode node = new AbstractDeviceMNode(par, name); ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(segAddr); return node; } @@ -1017,10 +1017,10 @@ static IMNode virtualTriangleMTree(int size, String sgPath) throws MetadataExcep String[] sgPathNodes = PathUtils.splitPathToDetachedNodes(sgPath); IMNode upperNode = null; for (String name : sgPathNodes) { - IMNode child = new InternalMNode(upperNode, name); + IMNode child = new BasicMNode(upperNode, name); upperNode = child; } - IMNode internalNode = new StorageGroupEntityMNode(upperNode, "vRoot1", 0L); + IMNode internalNode = new AbstractDatabaseDeviceMNode(upperNode, "vRoot1", 0L); for (int idx = 0; idx < size; idx++) { String measurementId = "mid" + idx; @@ -1034,7 +1034,7 @@ static IMNode virtualTriangleMTree(int size, String sgPath) throws MetadataExcep IMNode curNode = internalNode; for (int idx = 0; idx < size; idx++) { String nodeName = "int" + idx; - IMNode newNode = new EntityMNode(curNode, nodeName); + IMNode newNode = new AbstractDeviceMNode(curNode, nodeName); curNode.addChild(newNode); curNode = newNode; } @@ -1056,9 +1056,9 @@ static IMNode virtualTriangleMTree(int size, String sgPath) throws MetadataExcep } static IMNode getFlatTree(int flatSize, String id) { - IMNode root = new InternalMNode(null, "root"); - IMNode test = new InternalMNode(root, "test"); - IMNode internalNode = new StorageGroupEntityMNode(null, "vRoot1", 0L); + IMNode root = new BasicMNode(null, "root"); + IMNode test = new BasicMNode(root, "test"); + IMNode internalNode = new AbstractDatabaseDeviceMNode(null, "vRoot1", 0L); for (int idx = 0; idx < flatSize; idx++) { String measurementId = id + idx; @@ -1074,13 +1074,13 @@ static IMNode getFlatTree(int flatSize, String id) { } static IMNode getVerticalTree(int height, String id) { - IMNode trueRoot = new InternalMNode(null, "root"); - trueRoot.addChild(new InternalMNode(trueRoot, "sgvt")); - IMNode root = new StorageGroupEntityMNode(null, "vt", 0L); + IMNode trueRoot = new BasicMNode(null, "root"); + trueRoot.addChild(new BasicMNode(trueRoot, "sgvt")); + IMNode root = new AbstractDatabaseDeviceMNode(null, "vt", 0L); int cnt = 0; IMNode cur = root; while (cnt < height) { - cur.addChild(new EntityMNode(cur, id + "_" + cnt)); + cur.addChild(new AbstractDeviceMNode(cur, id + "_" + cnt)); cur = cur.getChild(id + "_" + cnt); cnt++; } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java index 5e7db846aaa01..dfe2b9dbc7171 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java @@ -19,14 +19,14 @@ package org.apache.iotdb.db.metadata.mtree.schemafile; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.EntityMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaPage; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; @@ -105,7 +105,7 @@ public void essentialPageTest() throws MetadataException, IOException { } private IMNode virtualFlatMTree(int childSize) { - IMNode internalNode = new EntityMNode(null, "vRoot1"); + IMNode internalNode = new AbstractDeviceMNode(null, "vRoot1"); for (int idx = 0; idx < childSize; idx++) { String measurementId = "mid" + idx; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java index 3696abd0e8bcf..612b0ea7dafbc 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java @@ -20,15 +20,15 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.EntityMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegment; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.WrappedSegment; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -102,7 +102,7 @@ public void flatTreeInsert() throws MetadataException { } private IMNode virtualFlatMTree(int childSize) { - IMNode internalNode = new EntityMNode(null, "vRoot1"); + IMNode internalNode = new AbstractDeviceMNode(null, "vRoot1"); for (int idx = 0; idx < childSize; idx++) { String measurementId = "mid" + idx; @@ -157,7 +157,7 @@ public void increasingSplitTest() throws MetadataException { ByteBuffer buf2 = ByteBuffer.allocate(500); ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8"}; - IMNode mNode = new InternalMNode(null, "m"); + IMNode mNode = new BasicMNode(null, "m"); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = 0; i < test.length; i++) { @@ -191,7 +191,7 @@ public void decreasingSplitTest() throws MetadataException { ByteBuffer buf2 = ByteBuffer.allocate(500); ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8"}; - IMNode mNode = new InternalMNode(null, "m"); + IMNode mNode = new BasicMNode(null, "m"); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = test.length - 1; i >= 0; i--) { diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java index 6e1383275fb85..2f61939bc3fab 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java @@ -21,15 +21,15 @@ import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.path.PathPatternTree; -import org.apache.iotdb.db.metadata.mnode.EntityMNode; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupEntityMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode; import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.CachedMNodeSizeEstimator; +import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaEngineStatistics; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.rescon.ISchemaEngineStatistics; @@ -77,14 +77,14 @@ public void testMemoryStatistics() throws Exception { IMNodeSizeEstimator estimator = new CachedMNodeSizeEstimator(); // schemaRegion1 IMNode sg1 = - new StorageGroupEntityMNode( + new AbstractDatabaseDeviceMNode( null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); sg1.setFullPath("root.sg1"); long size1 = estimator.estimateSize(sg1); Assert.assertEquals(size1, schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); // schemaRegion2 IMNode sg2 = - new StorageGroupMNode( + new AbstractDatabaseMNode( null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); sg2.setFullPath("root.sg2"); long size2 = estimator.estimateSize(sg2); @@ -97,7 +97,7 @@ public void testMemoryStatistics() throws Exception { : new CachedMNodeSizeEstimator(); // schemaRegion1 IMNode sg1 = - new StorageGroupEntityMNode( + new AbstractDatabaseDeviceMNode( null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); sg1.setFullPath("root.sg1"); long size1 = estimator.estimateSize(sg1); @@ -109,9 +109,9 @@ public void testMemoryStatistics() throws Exception { "d0", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), null); size1 += estimator.estimateSize(tmp); - tmp = new InternalMNode(sg1, "d1"); + tmp = new BasicMNode(sg1, "d1"); size1 += estimator.estimateSize(tmp); - tmp = new EntityMNode(tmp, "s2"); + tmp = new AbstractDeviceMNode(tmp, "s2"); size1 += estimator.estimateSize(tmp); size1 += estimator.estimateSize( @@ -124,11 +124,11 @@ public void testMemoryStatistics() throws Exception { Assert.assertEquals(size1, schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); // schemaRegion2 IMNode sg2 = - new StorageGroupMNode( + new AbstractDatabaseMNode( null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); sg2.setFullPath("root.sg2"); long size2 = estimator.estimateSize(sg2); - tmp = new EntityMNode(sg2, "d1"); + tmp = new AbstractDeviceMNode(sg2, "d1"); size2 += estimator.estimateSize(tmp); size2 += estimator.estimateSize( @@ -138,7 +138,7 @@ public void testMemoryStatistics() throws Exception { new MeasurementSchema( "s3", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), null)); - tmp = new EntityMNode(sg2, "d2"); + tmp = new AbstractDeviceMNode(sg2, "d2"); size2 += estimator.estimateSize(tmp); size2 += estimator.estimateSize( diff --git a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java index 67a6be5a8a264..f6d36f48cd28e 100644 --- a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java +++ b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java @@ -22,13 +22,13 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.metadata.MetadataConstant; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.StorageGroupEntityMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; +import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.tools.schema.SchemaFileSketchTool; import org.apache.iotdb.db.utils.EnvironmentUtils; @@ -145,9 +145,9 @@ public IMNode next() { } private IMNode getFlatTree(int flatSize, String id) { - IMNode root = new InternalMNode(null, "root"); - IMNode test = new InternalMNode(root, "test"); - IMNode internalNode = new StorageGroupEntityMNode(null, "vRoot1", 0L); + IMNode root = new BasicMNode(null, "root"); + IMNode test = new BasicMNode(root, "test"); + IMNode internalNode = new AbstractDatabaseDeviceMNode(null, "vRoot1", 0L); for (int idx = 0; idx < flatSize; idx++) { String measurementId = id + idx; From 59202654ef9ee856cc6bab001efaae4051cdb186 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Thu, 2 Mar 2023 16:32:31 +0800 Subject: [PATCH 02/26] save --- .../persistence/schema/ClusterSchemaInfo.java | 38 ++-- ....java => DatabaseAlreadySetException.java} | 6 +- ...tion.java => DatabaseNotSetException.java} | 8 +- .../iotdb/db/metadata/mnode/BasicMNode.java | 2 +- .../iotdb/db/metadata/mnode/IMNode.java | 10 +- .../mnode/iterator/IMNodeIterator.java | 2 +- .../mnode/iterator/MNodeIterator.java | 9 +- .../metadata/mnode/visitor/MNodeVisitor.java | 19 +- .../iotdb/db/metadata/mtree/ConfigMTree.java | 144 +++++++------- .../db/metadata/mtree/IMTreeBelowSG.java | 18 +- .../mtree/MTreeBelowSGCachedImpl.java | 180 +++++++++--------- .../mtree/MTreeBelowSGMemoryImpl.java | 9 +- .../mtree/snapshot/MemMTreeSnapshotUtil.java | 77 ++++---- .../mtree/store/CachedMTreeStore.java | 49 +++-- .../mtree/store/ConfigMTreeStore.java | 155 +++++++++++++++ .../db/metadata/mtree/store/IMTreeStore.java | 13 +- .../metadata/mtree/store/MemMTreeStore.java | 85 ++++----- .../store/disk/CachedMNodeContainer.java | 100 +++++----- .../store/disk/ICachedMNodeContainer.java | 28 +-- .../mtree/store/disk/cache/CacheManager.java | 112 +++++------ .../mtree/store/disk/cache/ICacheManager.java | 26 +-- .../store/disk/schemafile/ISchemaFile.java | 15 +- .../store/disk/schemafile/MockSchemaFile.java | 91 +++++---- .../metadata/newnode/DatabaseDeviceInfo.java | 3 + .../abovedatabase}/AboveDatabaseMNode.java | 22 +-- .../AbstractAboveDatabaseMNode.java | 162 ++++++++++++++++ .../CacheAboveDatabaseMNode.java | 41 ++++ .../newnode/basic/CacheBasicMNode.java | 2 +- .../newnode/basic/ConfigBasicMNode.java | 2 +- .../database/AbstractDatabaseMNode.java | 6 +- .../newnode/database/CacheDatabaseMNode.java | 5 + .../newnode/database/ConfigDatabaseMNode.java | 5 + .../newnode/database/DatabaseMNode.java | 8 +- .../newnode/database/IDatabaseMNode.java | 4 +- .../AbstractDatabaseDeviceMNode.java | 11 +- .../databasedevice/DatabaseDeviceMNode.java | 8 +- .../newnode/device/AbstractDeviceMNode.java | 13 +- .../newnode/device/CacheDeviceMNode.java | 5 + .../metadata/newnode/device/DeviceInfo.java | 5 + .../metadata/newnode/device/DeviceMNode.java | 7 +- .../metadata/newnode/device/IDeviceInfo.java | 2 + .../metadata/newnode/device/IDeviceMNode.java | 4 +- .../measurement/AbstractMeasurementMNode.java | 14 +- .../measurement/CacheMeasurementMNode.java | 7 +- .../measurement/IMeasurementMNode.java | 3 +- .../newnode/measurement/MeasurementMNode.java | 10 +- .../SchemaRegionSchemaFileImpl.java | 100 +++++----- .../rest/handler/ExceptionHandler.java | 6 +- .../db/metadata/mtree/ConfigMTreeTest.java | 20 +- .../db/metadata/mtree/MTreeBelowSGTest.java | 10 +- 50 files changed, 1057 insertions(+), 624 deletions(-) rename server/src/main/java/org/apache/iotdb/db/exception/metadata/{StorageGroupAlreadySetException.java => DatabaseAlreadySetException.java} (90%) rename server/src/main/java/org/apache/iotdb/db/exception/metadata/{StorageGroupNotSetException.java => DatabaseNotSetException.java} (85%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java rename server/src/main/java/org/apache/iotdb/db/metadata/{mnode => newnode/abovedatabase}/AboveDatabaseMNode.java (66%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java index 20c5b25f87dd2..d5996bae0530a 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java @@ -134,7 +134,7 @@ public TSStatus createDatabase(DatabaseSchemaPlan plan) { // Set StorageGroupSchema mTree - .getStorageGroupNodeByStorageGroupPath(partialPathName) + .getDatabaseNodeByDatabasePath(partialPathName) .setStorageGroupSchema(storageGroupSchema); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); @@ -161,7 +161,7 @@ public TSStatus alterDatabase(DatabaseSchemaPlan plan) { PartialPath partialPathName = new PartialPath(alterSchema.getName()); TDatabaseSchema currentSchema = - mTree.getStorageGroupNodeByStorageGroupPath(partialPathName).getStorageGroupSchema(); + mTree.getDatabaseNodeByDatabasePath(partialPathName).getStorageGroupSchema(); // TODO: Support alter other fields if (alterSchema.isSetMinSchemaRegionGroupNum()) { currentSchema.setMinSchemaRegionGroupNum(alterSchema.getMinSchemaRegionGroupNum()); @@ -195,7 +195,7 @@ public TSStatus alterDatabase(DatabaseSchemaPlan plan) { } mTree - .getStorageGroupNodeByStorageGroupPath(partialPathName) + .getDatabaseNodeByDatabasePath(partialPathName) .setStorageGroupSchema(currentSchema); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); } catch (MetadataException e) { @@ -264,7 +264,7 @@ public DatabaseSchemaResp getMatchedDatabaseSchemas(GetDatabasePlan plan) { for (PartialPath path : matchedPaths) { schemaMap.put( path.getFullPath(), - mTree.getStorageGroupNodeByStorageGroupPath(path).getStorageGroupSchema()); + mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema()); } result.setSchemaMap(schemaMap); result.setStatus(new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode())); @@ -288,7 +288,7 @@ public TSStatus setTTL(SetTTLPlan plan) { if (!matchedPaths.isEmpty()) { for (PartialPath path : matchedPaths) { mTree - .getStorageGroupNodeByStorageGroupPath(path) + .getDatabaseNodeByDatabasePath(path) .getStorageGroupSchema() .setTTL(plan.getTTL()); } @@ -311,9 +311,9 @@ public TSStatus setSchemaReplicationFactor(SetSchemaReplicationFactorPlan plan) databaseReadWriteLock.writeLock().lock(); try { PartialPath path = new PartialPath(plan.getStorageGroup()); - if (mTree.isStorageGroupAlreadySet(path)) { + if (mTree.isDatabaseAlreadySet(path)) { mTree - .getStorageGroupNodeByStorageGroupPath(path) + .getDatabaseNodeByDatabasePath(path) .getStorageGroupSchema() .setSchemaReplicationFactor(plan.getSchemaReplicationFactor()); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); @@ -334,9 +334,9 @@ public TSStatus setDataReplicationFactor(SetDataReplicationFactorPlan plan) { databaseReadWriteLock.writeLock().lock(); try { PartialPath path = new PartialPath(plan.getStorageGroup()); - if (mTree.isStorageGroupAlreadySet(path)) { + if (mTree.isDatabaseAlreadySet(path)) { mTree - .getStorageGroupNodeByStorageGroupPath(path) + .getDatabaseNodeByDatabasePath(path) .getStorageGroupSchema() .setDataReplicationFactor(plan.getDataReplicationFactor()); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); @@ -357,9 +357,9 @@ public TSStatus setTimePartitionInterval(SetTimePartitionIntervalPlan plan) { databaseReadWriteLock.writeLock().lock(); try { PartialPath path = new PartialPath(plan.getStorageGroup()); - if (mTree.isStorageGroupAlreadySet(path)) { + if (mTree.isDatabaseAlreadySet(path)) { mTree - .getStorageGroupNodeByStorageGroupPath(path) + .getDatabaseNodeByDatabasePath(path) .getStorageGroupSchema() .setTimePartitionInterval(plan.getTimePartitionInterval()); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); @@ -389,7 +389,7 @@ public TSStatus adjustMaxRegionGroupCount(AdjustMaxRegionGroupNumPlan plan) { plan.getMaxRegionGroupNumMap().entrySet()) { PartialPath path = new PartialPath(entry.getKey()); TDatabaseSchema storageGroupSchema = - mTree.getStorageGroupNodeByStorageGroupPath(path).getStorageGroupSchema(); + mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema(); storageGroupSchema.setMaxSchemaRegionGroupNum(entry.getValue().getLeft()); storageGroupSchema.setMaxDataRegionGroupNum(entry.getValue().getRight()); } @@ -435,7 +435,7 @@ public List getDatabaseNames() { public boolean isDatabaseExisted(String databaseName) throws IllegalPathException { databaseReadWriteLock.readLock().lock(); try { - return mTree.isStorageGroupAlreadySet(new PartialPath(databaseName)); + return mTree.isDatabaseAlreadySet(new PartialPath(databaseName)); } finally { databaseReadWriteLock.readLock().unlock(); } @@ -450,7 +450,7 @@ public boolean isDatabaseExisted(String databaseName) throws IllegalPathExceptio public void checkContainsStorageGroup(String storageName) throws MetadataException { databaseReadWriteLock.readLock().lock(); try { - mTree.checkStorageGroupAlreadySet(new PartialPath(storageName)); + mTree.checkDatabaseAlreadySet(new PartialPath(storageName)); } finally { databaseReadWriteLock.readLock().unlock(); } @@ -468,7 +468,7 @@ public TDatabaseSchema getMatchedDatabaseSchemaByName(String storageGroup) databaseReadWriteLock.readLock().lock(); try { return mTree - .getStorageGroupNodeByStorageGroupPath(new PartialPath(storageGroup)) + .getDatabaseNodeByDatabasePath(new PartialPath(storageGroup)) .getStorageGroupSchema(); } catch (MetadataException e) { throw new DatabaseNotExistsException(storageGroup); @@ -492,7 +492,7 @@ public Map getMatchedDatabaseSchemasByName(List List matchedPaths = mTree.getMatchedStorageGroups(patternPath, false); for (PartialPath path : matchedPaths) { schemaMap.put( - path.getFullPath(), mTree.getStorageGroupNodeByPath(path).getStorageGroupSchema()); + path.getFullPath(), mTree.getDatabaseNodeByPath(path).getStorageGroupSchema()); } } } catch (MetadataException e) { @@ -515,7 +515,7 @@ public int getMinRegionGroupNum(String database, TConsensusGroupType consensusGr try { PartialPath path = new PartialPath(database); TDatabaseSchema storageGroupSchema = - mTree.getStorageGroupNodeByStorageGroupPath(path).getStorageGroupSchema(); + mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema(); switch (consensusGroupType) { case SchemaRegion: return storageGroupSchema.getMinSchemaRegionGroupNum(); @@ -543,7 +543,7 @@ public int getMaxRegionGroupNum(String database, TConsensusGroupType consensusGr try { PartialPath path = new PartialPath(database); TDatabaseSchema storageGroupSchema = - mTree.getStorageGroupNodeByStorageGroupPath(path).getStorageGroupSchema(); + mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema(); switch (consensusGroupType) { case SchemaRegion: return storageGroupSchema.getMaxSchemaRegionGroupNum(); @@ -878,7 +878,7 @@ public Map getMatchedStorageGroupSchemasByOneName( List matchedPaths = mTree.getBelongedStorageGroups(patternPath); for (PartialPath path : matchedPaths) { schemaMap.put( - path.getFullPath(), mTree.getStorageGroupNodeByPath(path).getStorageGroupSchema()); + path.getFullPath(), mTree.getDatabaseNodeByPath(path).getStorageGroupSchema()); } } catch (MetadataException e) { LOGGER.warn(ERROR_NAME, e); diff --git a/server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupAlreadySetException.java b/server/src/main/java/org/apache/iotdb/db/exception/metadata/DatabaseAlreadySetException.java similarity index 90% rename from server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupAlreadySetException.java rename to server/src/main/java/org/apache/iotdb/db/exception/metadata/DatabaseAlreadySetException.java index 89aacde85d814..20f42144ea1b9 100644 --- a/server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupAlreadySetException.java +++ b/server/src/main/java/org/apache/iotdb/db/exception/metadata/DatabaseAlreadySetException.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.rpc.TSStatusCode; -public class StorageGroupAlreadySetException extends MetadataException { +public class DatabaseAlreadySetException extends MetadataException { private static final long serialVersionUID = 9110669164701929779L; @@ -30,13 +30,13 @@ public class StorageGroupAlreadySetException extends MetadataException { private final String storageGroupPath; - public StorageGroupAlreadySetException(String path) { + public DatabaseAlreadySetException(String path) { super(getMessage(path, false), TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()); storageGroupPath = path; hasChild = false; } - public StorageGroupAlreadySetException(String path, boolean hasChild) { + public DatabaseAlreadySetException(String path, boolean hasChild) { super(getMessage(path, hasChild), TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()); this.hasChild = hasChild; storageGroupPath = path; diff --git a/server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupNotSetException.java b/server/src/main/java/org/apache/iotdb/db/exception/metadata/DatabaseNotSetException.java similarity index 85% rename from server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupNotSetException.java rename to server/src/main/java/org/apache/iotdb/db/exception/metadata/DatabaseNotSetException.java index 3f48ab9f14425..ef395f5de48b9 100644 --- a/server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupNotSetException.java +++ b/server/src/main/java/org/apache/iotdb/db/exception/metadata/DatabaseNotSetException.java @@ -22,22 +22,22 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.rpc.TSStatusCode; -public class StorageGroupNotSetException extends MetadataException { +public class DatabaseNotSetException extends MetadataException { private static final long serialVersionUID = 3739300272099030533L; - public StorageGroupNotSetException(String path) { + public DatabaseNotSetException(String path) { super(String.format("Database is not set for current seriesPath: [%s]", path)); this.errorCode = TSStatusCode.DATABASE_NOT_EXIST.getStatusCode(); } - public StorageGroupNotSetException(String path, boolean isUserException) { + public DatabaseNotSetException(String path, boolean isUserException) { super(String.format("Database is not set for current seriesPath: [%s]", path)); this.isUserException = isUserException; this.errorCode = TSStatusCode.DATABASE_NOT_EXIST.getStatusCode(); } - public StorageGroupNotSetException(String path, String reason) { + public DatabaseNotSetException(String path, String reason) { super( String.format( "Database is not set for current seriesPath: [%s], because %s", path, reason)); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java index 8a63c8e162bad..c79d6c1e5a2b1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java @@ -285,6 +285,6 @@ public IMeasurementMNode getAsMeasurementMNode() { @Override public R accept(MNodeVisitor visitor, C context) { - return visitor.visitInternalMNode(this, context); + return visitor.visitBasicMNode(this, context); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java index 0115b2ed0b1c3..57b406e5f54a6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java @@ -60,9 +60,9 @@ public interface IMNode> extends ITreeNode { // this method will move all the reference or value of current node's attributes to newMNode void moveDataToNewMNode(N newMNode); - IMNodeContainer getChildren(); + IMNodeContainer getChildren(); - void setChildren(IMNodeContainer children); + void setChildren(IMNodeContainer children); boolean isAboveDatabase(); @@ -74,11 +74,11 @@ public interface IMNode> extends ITreeNode { MNodeType getMNodeType(Boolean isConfig); - IDatabaseMNode getAsDatabaseMNode(); + IDatabaseMNode getAsDatabaseMNode(); - IDeviceMNode getAsEntityMNode(); + IDeviceMNode getAsEntityMNode(); - IMeasurementMNode getAsMeasurementMNode(); + IMeasurementMNode getAsMeasurementMNode(); R accept(MNodeVisitor visitor, C context); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/IMNodeIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/IMNodeIterator.java index 254219a280630..1a7387736b77f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/IMNodeIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/IMNodeIterator.java @@ -22,7 +22,7 @@ import java.util.Iterator; -public interface IMNodeIterator extends Iterator { +public interface IMNodeIterator> extends Iterator { void close(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java index 77b9d7e23f024..a3a8f135b28e3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java @@ -20,14 +20,15 @@ package org.apache.iotdb.db.metadata.mnode.iterator; import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import java.util.Iterator; -public class MNodeIterator implements IMNodeIterator { +public class MNodeIterator> implements IMNodeIterator { - private Iterator iterator; + private Iterator iterator; - public MNodeIterator(Iterator iterator) { + public MNodeIterator(Iterator iterator) { this.iterator = iterator; } @@ -37,7 +38,7 @@ public boolean hasNext() { } @Override - public IMNode next() { + public N next() { return iterator.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java index a64abb4780af8..9468943fa0c73 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java @@ -19,21 +19,24 @@ package org.apache.iotdb.db.metadata.mnode.visitor; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.AbstractMeasurementMNode; public abstract class MNodeVisitor { - public abstract R visitInternalMNode(BasicMNode node, C context); + public abstract R visitBasicMNode(IMNode node, C context); - public abstract R visitStorageGroupMNode(AbstractDatabaseMNode node, C context); + public abstract R visitDatabaseMNode( + AbstractDatabaseMNode> node, C context); - public abstract R visitStorageGroupEntityMNode(AbstractDatabaseDeviceMNode node, C context); + public abstract R visitDatabaseDeviceMNode( + AbstractDatabaseDeviceMNode> node, C context); - public abstract R visitDeviceMNode(IDeviceMNode node, C context); + public abstract R visitDeviceMNode(AbstractDeviceMNode> node, C context); - public abstract R visitMeasurementMNode(IMeasurementMNode node, C context); + public abstract R visitMeasurementMNode( + AbstractMeasurementMNode> node, C context); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java index 1f61f5fb23baf..ef59525a29d17 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java @@ -26,17 +26,20 @@ import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.utils.ThriftConfigNodeSerDeUtils; import org.apache.iotdb.db.exception.metadata.PathNotExistException; -import org.apache.iotdb.db.exception.metadata.StorageGroupAlreadySetException; -import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException; +import org.apache.iotdb.db.exception.metadata.DatabaseAlreadySetException; +import org.apache.iotdb.db.exception.metadata.DatabaseNotSetException; import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; -import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; +import org.apache.iotdb.db.metadata.mtree.store.ConfigMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.collector.DatabaseCollector; import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeAboveSGCollector; import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeCollector; import org.apache.iotdb.db.metadata.mtree.traverser.counter.DatabaseCounter; +import org.apache.iotdb.db.metadata.newnode.IConfigMNode; +import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.ConfigDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; import org.apache.iotdb.tsfile.utils.Pair; @@ -74,12 +77,12 @@ public class ConfigMTree { private final Logger logger = LoggerFactory.getLogger(ConfigMTree.class); - private IMNode root; + private IConfigMNode root; // this store is only used for traverser invoking - private MemMTreeStore store; + private final ConfigMTreeStore store; public ConfigMTree() throws MetadataException { - store = new MemMTreeStore(new PartialPath(PATH_ROOT), false); + store = new ConfigMTreeStore(); root = store.getRoot(); } @@ -103,40 +106,41 @@ public void setStorageGroup(PartialPath path) throws MetadataException { if (nodeNames.length <= 1 || !nodeNames[0].equals(root.getName())) { throw new IllegalPathException(path.getFullPath()); } - IMNode cur = root; + IConfigMNode cur = root; int i = 1; // e.g., path = root.a.b.sg, create internal nodes for a, b while (i < nodeNames.length - 1) { - IMNode temp = cur.getChild(nodeNames[i]); + IConfigMNode temp = store.getChild(cur, nodeNames[i]); if (temp == null) { - cur.addChild(nodeNames[i], new BasicMNode(cur, nodeNames[i])); + store.addChild(cur, nodeNames[i], new ConfigBasicMNode(cur,nodeNames[i])); } else if (temp.isDatabase()) { // before create database, check whether the database already exists - throw new StorageGroupAlreadySetException(temp.getFullPath()); + throw new DatabaseAlreadySetException(temp.getFullPath()); } - cur = cur.getChild(nodeNames[i]); + cur = store.getChild(cur,nodeNames[i]); i++; } // synchronize check and add, we need addChild operation be atomic. // only write operations on mtree will be synchronized synchronized (this) { - if (cur.hasChild(nodeNames[i])) { + if (store.hasChild(cur, nodeNames[i])) { // node b has child sg - if (cur.getChild(nodeNames[i]).isDatabase()) { - throw new StorageGroupAlreadySetException(path.getFullPath()); + if (store.getChild(cur, nodeNames[i]).isDatabase()) { + throw new DatabaseAlreadySetException(path.getFullPath()); } else { - throw new StorageGroupAlreadySetException(path.getFullPath(), true); + throw new DatabaseAlreadySetException(path.getFullPath(), true); } } else { - IDatabaseMNode storageGroupMNode = - new AbstractDatabaseMNode( - cur, nodeNames[i], CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + ConfigDatabaseMNode databaseMNode = + new ConfigDatabaseMNode( + cur, nodeNames[i]); + databaseMNode.setDataTTL(CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - IMNode result = cur.addChild(nodeNames[i], storageGroupMNode); + IConfigMNode result = store.addChild(cur, nodeNames[i], databaseMNode); - if (result != storageGroupMNode) { - throw new StorageGroupAlreadySetException(path.getFullPath(), true); + if (result != databaseMNode) { + throw new DatabaseAlreadySetException(path.getFullPath(), true); } } } @@ -144,11 +148,11 @@ public void setStorageGroup(PartialPath path) throws MetadataException { /** Delete a database */ public void deleteStorageGroup(PartialPath path) throws MetadataException { - IDatabaseMNode storageGroupMNode = getStorageGroupNodeByStorageGroupPath(path); - IMNode cur = storageGroupMNode.getParent(); + IDatabaseMNode storageGroupMNode = getDatabaseNodeByDatabasePath(path); + IConfigMNode cur = storageGroupMNode.getParent(); // Suppose current system has root.a.b.sg1, root.a.sg2, and delete root.a.b.sg1 // delete the database node sg1 - cur.deleteChild(storageGroupMNode.getName()); + store.deleteChild(cur, storageGroupMNode.getName()); // delete node a while retain root.a.sg2 while (cur.getParent() != null && cur.getChildren().size() == 0) { @@ -210,10 +214,10 @@ protected void collectDatabase(IDatabaseMNode node) { */ public List getAllStorageGroupPaths() { List res = new ArrayList<>(); - Deque nodeStack = new ArrayDeque<>(); + Deque nodeStack = new ArrayDeque<>(); nodeStack.add(root); while (!nodeStack.isEmpty()) { - IMNode current = nodeStack.pop(); + IConfigMNode current = nodeStack.pop(); if (current.isDatabase()) { res.add(current.getPartialPath()); } else { @@ -240,31 +244,31 @@ public int getStorageGroupNum(PartialPath pathPattern, boolean isPrefixMatch) /** * E.g., root.sg is database given [root, sg], if the give path is not a database, throw exception */ - public IDatabaseMNode getStorageGroupNodeByStorageGroupPath(PartialPath storageGroupPath) + public IDatabaseMNode getDatabaseNodeByDatabasePath(PartialPath databasePath) throws MetadataException { - String[] nodes = storageGroupPath.getNodes(); + String[] nodes = databasePath.getNodes(); if (nodes.length == 0 || !nodes[0].equals(root.getName())) { - throw new IllegalPathException(storageGroupPath.getFullPath()); + throw new IllegalPathException(databasePath.getFullPath()); } - IMNode cur = root; + IConfigMNode cur = root; for (int i = 1; i < nodes.length - 1; i++) { cur = cur.getChild(nodes[i]); if (cur == null) { - throw new StorageGroupNotSetException(storageGroupPath.getFullPath()); + throw new DatabaseNotSetException(databasePath.getFullPath()); } if (cur.isDatabase()) { - throw new StorageGroupAlreadySetException(cur.getFullPath()); + throw new DatabaseAlreadySetException(cur.getFullPath()); } } cur = cur.getChild(nodes[nodes.length - 1]); if (cur == null) { - throw new StorageGroupNotSetException(storageGroupPath.getFullPath()); + throw new DatabaseNotSetException(databasePath.getFullPath()); } if (cur.isDatabase()) { return cur.getAsDatabaseMNode(); } else { - throw new StorageGroupAlreadySetException(storageGroupPath.getFullPath(), true); + throw new DatabaseAlreadySetException(databasePath.getFullPath(), true); } } @@ -273,12 +277,12 @@ public IDatabaseMNode getStorageGroupNodeByStorageGroupPath(PartialPath storageG * device], return the MNode of root.sg Get database node, the give path don't need to be database * path. */ - public IDatabaseMNode getStorageGroupNodeByPath(PartialPath path) throws MetadataException { + public IDatabaseMNode getDatabaseNodeByPath(PartialPath path) throws MetadataException { String[] nodes = path.getNodes(); if (nodes.length == 0 || !nodes[0].equals(root.getName())) { throw new IllegalPathException(path.getFullPath()); } - IMNode cur = root; + IConfigMNode cur = root; for (int i = 1; i < nodes.length; i++) { cur = cur.getChild(nodes[i]); if (cur == null) { @@ -288,7 +292,7 @@ public IDatabaseMNode getStorageGroupNodeByPath(PartialPath path) throws Metadat return cur.getAsDatabaseMNode(); } } - throw new StorageGroupNotSetException(path.getFullPath()); + throw new DatabaseNotSetException(path.getFullPath()); } /** @@ -297,17 +301,17 @@ public IDatabaseMNode getStorageGroupNodeByPath(PartialPath path) throws Metadat * * @param path a full path or a prefix path */ - public boolean isStorageGroupAlreadySet(PartialPath path) { + public boolean isDatabaseAlreadySet(PartialPath path) { String[] nodeNames = path.getNodes(); - IMNode cur = root; + IConfigMNode cur = root; if (!nodeNames[0].equals(root.getName())) { return false; } for (int i = 1; i < nodeNames.length; i++) { - if (!cur.hasChild(nodeNames[i])) { + if (!store.hasChild(cur, nodeNames[i])) { return false; } - cur = cur.getChild(nodeNames[i]); + cur = store.getChild(cur, nodeNames[i]); if (cur.isDatabase()) { return true; } @@ -321,40 +325,40 @@ public boolean isStorageGroupAlreadySet(PartialPath path) { * * @param path a full path or a prefix path */ - public void checkStorageGroupAlreadySet(PartialPath path) throws StorageGroupAlreadySetException { + public void checkDatabaseAlreadySet(PartialPath path) throws DatabaseAlreadySetException { String[] nodeNames = path.getNodes(); - IMNode cur = root; + IConfigMNode cur = root; if (!nodeNames[0].equals(root.getName())) { return; } for (int i = 1; i < nodeNames.length; i++) { - if (!cur.hasChild(nodeNames[i])) { + if (!store.hasChild(cur, nodeNames[i])) { return; } - cur = cur.getChild(nodeNames[i]); + cur = store.getChild(cur, nodeNames[i]); if (cur.isDatabase()) { - throw new StorageGroupAlreadySetException(cur.getFullPath()); + throw new DatabaseAlreadySetException(cur.getFullPath()); } } - throw new StorageGroupAlreadySetException(path.getFullPath(), true); + throw new DatabaseAlreadySetException(path.getFullPath(), true); } // endregion // region MTree Node Management - public IMNode getNodeWithAutoCreate(PartialPath path) throws StorageGroupNotSetException { + public IConfigMNode getNodeWithAutoCreate(PartialPath path) throws DatabaseNotSetException { String[] nodeNames = path.getNodes(); - IMNode cur = root; - IMNode child; + IConfigMNode cur = root; + IConfigMNode child; boolean hasStorageGroup = false; for (int i = 1; i < nodeNames.length; i++) { - child = cur.getChild(nodeNames[i]); + child = store.getChild(cur, nodeNames[i]); if (child == null) { if (hasStorageGroup) { - child = cur.addChild(nodeNames[i], new BasicMNode(cur, nodeNames[i])); + child = store.addChild(cur, nodeNames[i], new ConfigBasicMNode(cur, nodeNames[i])); } else { - throw new StorageGroupNotSetException(path.getFullPath()); + throw new DatabaseNotSetException(path.getFullPath()); } } else if (child.isDatabase()) { hasStorageGroup = true; @@ -432,8 +436,8 @@ protected Void collectMNode(IMNode node) { */ public void checkTemplateOnPath(PartialPath path) throws MetadataException { String[] nodeNames = path.getNodes(); - IMNode cur = root; - IMNode child; + IConfigMNode cur = root; + IConfigMNode child; if (cur.getSchemaTemplateId() != NON_TEMPLATE) { throw new MetadataException("Template already exists on " + cur.getFullPath()); @@ -457,12 +461,12 @@ public void checkTemplateOnPath(PartialPath path) throws MetadataException { } // traverse all the descendant of the given path node - private void checkTemplateOnSubtree(IMNode node) throws MetadataException { + private void checkTemplateOnSubtree(IConfigMNode node) throws MetadataException { if (node.isMeasurement()) { return; } - IMNode child; - IMNodeIterator iterator = store.getChildrenIterator(node); + IConfigMNode child; + IMNodeIterator iterator = store.getChildrenIterator(node); while (iterator.hasNext()) { child = iterator.next(); @@ -579,9 +583,9 @@ public void unsetTemplate(int templateId, PartialPath path) throws MetadataExcep getNodeSetTemplate(templateId, path).unsetSchemaTemplate(); } - private IMNode getNodeSetTemplate(int templateId, PartialPath path) throws MetadataException { + private IConfigMNode getNodeSetTemplate(int templateId, PartialPath path) throws MetadataException { String[] nodeNames = path.getNodes(); - IMNode cur = root; + IConfigMNode cur = root; for (int i = 1; i < nodeNames.length; i++) { cur = cur.getChild(nodeNames[i]); if (cur == null) { @@ -600,10 +604,10 @@ private IMNode getNodeSetTemplate(int templateId, PartialPath path) throws Metad // region Serialization and Deserialization public void serialize(OutputStream outputStream) throws IOException { - serializeInternalNode((BasicMNode) this.root, outputStream); + serializeInternalNode(this.root, outputStream); } - private void serializeInternalNode(BasicMNode node, OutputStream outputStream) + private void serializeInternalNode(IConfigMNode node, OutputStream outputStream) throws IOException { serializeChildren(node, outputStream); @@ -613,23 +617,23 @@ private void serializeInternalNode(BasicMNode node, OutputStream outputStream) ReadWriteIOUtils.write(node.getChildren().size(), outputStream); } - private void serializeChildren(BasicMNode node, OutputStream outputStream) throws IOException { - for (IMNode child : node.getChildren().values()) { + private void serializeChildren(IConfigMNode node, OutputStream outputStream) throws IOException { + for (IConfigMNode child : node.getChildren().values()) { if (child.isDatabase()) { - serializeStorageGroupNode((AbstractDatabaseMNode) child, outputStream); + serializeDatabaseNode(child.getAsDatabaseMNode(), outputStream); } else { - serializeInternalNode((BasicMNode) child, outputStream); + serializeInternalNode(child, outputStream); } } } - private void serializeStorageGroupNode( - AbstractDatabaseMNode storageGroupNode, OutputStream outputStream) throws IOException { - serializeChildren(storageGroupNode, outputStream); + private void serializeDatabaseNode( + IDatabaseMNode storageGroupNode, OutputStream outputStream) throws IOException { + serializeChildren(storageGroupNode.getAsMNode(), outputStream); ReadWriteIOUtils.write(STORAGE_GROUP_MNODE_TYPE, outputStream); ReadWriteIOUtils.write(storageGroupNode.getName(), outputStream); - ReadWriteIOUtils.write(storageGroupNode.getSchemaTemplateId(), outputStream); + ReadWriteIOUtils.write(storageGroupNode.getAsMNode().getSchemaTemplateId(), outputStream); ThriftConfigNodeSerDeUtils.serializeTStorageGroupSchema( storageGroupNode.getStorageGroupSchema(), outputStream); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java index df90dded36db7..86fe812cd26fc 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java @@ -33,7 +33,7 @@ import java.util.Map; import java.util.Set; -public interface IMTreeBelowSG { +public interface IMTreeBelowSG> { void clear(); /** @@ -44,7 +44,7 @@ public interface IMTreeBelowSG { */ boolean createSnapshot(File snapshotDir); - IMeasurementMNode createTimeseries( + IMeasurementMNode createTimeseries( PartialPath path, TSDataType dataType, TSEncoding encoding, @@ -63,7 +63,7 @@ IMeasurementMNode createTimeseries( * @param encodings encodings list * @param compressors compressor */ - List createAlignedTimeseries( + List> createAlignedTimeseries( PartialPath devicePath, List measurements, List dataTypes, @@ -89,9 +89,7 @@ Map checkMeasurementExistence( * * @param path Format: root.node(.node)+ */ - IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataException; - - boolean isEmptyInternalMNode(IMNode node) throws MetadataException; + IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataException; /** * Construct schema black list via setting matched timeseries to pre deleted. @@ -130,14 +128,14 @@ Map checkMeasurementExistence( Set getDevicesOfPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException; - void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException; + void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException; /** * Add an interval path to MTree. This is only used for automatically creating schema * *

e.g., get root.sg.d1, get or create all internal nodes and return the node of d1 */ - IMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException; + N getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException; /** * Fetch all measurement path @@ -156,9 +154,9 @@ List fetchSchema( * * @return last node in given seriesPath */ - IMNode getNodeByPath(PartialPath path) throws MetadataException; + N getNodeByPath(PartialPath path) throws MetadataException; - IMeasurementMNode getMeasurementMNode(PartialPath path) throws MetadataException; + IMeasurementMNode getMeasurementMNode(PartialPath path) throws MetadataException; long countAllMeasurement() throws MetadataException; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index dfa7d71bf50d2..71129e0b16ddf 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -34,9 +34,7 @@ import org.apache.iotdb.db.exception.metadata.template.TemplateImcompatibeException; import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.CachedMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; @@ -48,8 +46,11 @@ import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementCounter; import org.apache.iotdb.db.metadata.mtree.traverser.updater.EntityUpdater; import org.apache.iotdb.db.metadata.mtree.traverser.updater.MeasurementUpdater; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; @@ -101,26 +102,26 @@ *

  • Interfaces and Implementation for Template check * */ -public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { +public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { private final CachedMTreeStore store; - private volatile IDatabaseMNode storageGroupMNode; - private final IMNode rootNode; - private final Function> tagGetter; + private volatile ICacheMNode storageGroupMNode; + private final ICacheMNode rootNode; + private final Function, Map> tagGetter; private final int levelOfSG; // region MTree initialization, clear and serialization public MTreeBelowSGCachedImpl( PartialPath storageGroupPath, - Function> tagGetter, + Function, Map> tagGetter, Runnable flushCallback, - Consumer measurementProcess, + Consumer> measurementProcess, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics) throws MetadataException, IOException { this.tagGetter = tagGetter; store = new CachedMTreeStore(storageGroupPath, schemaRegionId, regionStatistics, flushCallback); - this.storageGroupMNode = store.getRoot().getAsDatabaseMNode(); + this.storageGroupMNode = store.getRoot(); this.storageGroupMNode.setParent(storageGroupMNode.getParent()); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; @@ -144,11 +145,11 @@ protected Void collectMeasurement(IMeasurementMNode node) { private MTreeBelowSGCachedImpl( PartialPath storageGroupPath, CachedMTreeStore store, - Consumer measurementProcess, - Function> tagGetter) + Consumer> measurementProcess, + Function, Map> tagGetter) throws MetadataException { this.store = store; - this.storageGroupMNode = store.getRoot().getAsDatabaseMNode(); + this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupMNode.getPartialPath().getNodeLength() - 1; this.tagGetter = tagGetter; @@ -173,9 +174,11 @@ public void clear() { storageGroupMNode = null; } - protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { - this.storageGroupMNode.getParent().replaceChild(this.storageGroupMNode.getName(), newMNode); - this.storageGroupMNode = newMNode; + protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { + this.storageGroupMNode + .getParent() + .replaceChild(this.storageGroupMNode.getName(), newMNode.getAsMNode()); + this.storageGroupMNode = newMNode.getAsMNode(); } @Override @@ -188,8 +191,8 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( String storageGroupFullPath, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - Consumer measurementProcess, - Function> tagGetter, + Consumer> measurementProcess, + Function, Map> tagGetter, Runnable flushCallback) throws IOException, MetadataException { return new MTreeBelowSGCachedImpl( @@ -205,7 +208,7 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( // region Timeseries operation, including create and delete @Override - public IMeasurementMNode createTimeseries( + public IMeasurementMNode createTimeseries( PartialPath path, TSDataType dataType, TSEncoding encoding, @@ -213,9 +216,9 @@ public IMeasurementMNode createTimeseries( Map props, String alias) throws MetadataException { - IMeasurementMNode measurementMNode = + IMeasurementMNode measurementMNode = createTimeseriesWithPinnedReturn(path, dataType, encoding, compressor, props, alias); - unPinMNode(measurementMNode); + unPinMNode(measurementMNode.getAsMNode()); return measurementMNode; } @@ -230,7 +233,7 @@ public IMeasurementMNode createTimeseries( * @param props props * @param alias alias of measurement */ - public IMeasurementMNode createTimeseriesWithPinnedReturn( + public IMeasurementMNode createTimeseriesWithPinnedReturn( PartialPath path, TSDataType dataType, TSEncoding encoding, @@ -244,13 +247,13 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( } MetaFormatUtils.checkTimeseries(path); PartialPath devicePath = path.getDevicePath(); - IMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); + ICacheMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); try { // synchronize check and add, we need addChild and add Alias become atomic operation // only write on mtree will be synchronized synchronized (this) { - IMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); + ICacheMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); try { MetaFormatUtils.checkTimeseriesProps(path.getFullPath(), props); @@ -271,7 +274,7 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( device.getFullPath()); } - IDeviceMNode entityMNode; + IDeviceMNode entityMNode; if (device.isEntity()) { entityMNode = device.getAsEntityMNode(); } else { @@ -279,16 +282,16 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( if (entityMNode.isDatabase()) { replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } - device = entityMNode; + device = entityMNode.getAsMNode(); } - IMeasurementMNode measurementMNode = - MeasurementMNode.getMeasurementMNode( - entityMNode, + IMeasurementMNode measurementMNode = + new CacheMeasurementMNode( + entityMNode.getAsMNode(), leafName, new MeasurementSchema(leafName, dataType, encoding, compressor, props), alias); - store.addChild(entityMNode, leafName, measurementMNode); + store.addChild(entityMNode.getAsMNode(), leafName, measurementMNode.getAsMNode()); // link alias to LeafMNode if (alias != null) { entityMNode.addAlias(alias, measurementMNode); @@ -316,7 +319,7 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( * @param compressors compressor */ @Override - public List createAlignedTimeseries( + public List> createAlignedTimeseries( PartialPath devicePath, List measurements, List dataTypes, @@ -324,15 +327,15 @@ public List createAlignedTimeseries( List compressors, List aliasList) throws MetadataException { - List measurementMNodeList = new ArrayList<>(); + List> measurementMNodeList = new ArrayList<>(); MetaFormatUtils.checkSchemaMeasurementNames(measurements); - IMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); + ICacheMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); try { // synchronize check and add, we need addChild operation be atomic. // only write operations on mtree will be synchronized synchronized (this) { - IMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); + ICacheMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); try { for (int i = 0; i < measurements.size(); i++) { @@ -354,7 +357,7 @@ public List createAlignedTimeseries( devicePath.getFullPath()); } - IDeviceMNode entityMNode; + IDeviceMNode entityMNode; if (device.isEntity()) { entityMNode = device.getAsEntityMNode(); } else { @@ -363,13 +366,13 @@ public List createAlignedTimeseries( if (entityMNode.isDatabase()) { replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } - device = entityMNode; + device = entityMNode.getAsMNode(); } for (int i = 0; i < measurements.size(); i++) { - IMeasurementMNode measurementMNode = - MeasurementMNode.getMeasurementMNode( - entityMNode, + IMeasurementMNode measurementMNode = + new CacheMeasurementMNode( + entityMNode.getAsMNode(), measurements.get(i), new MeasurementSchema( measurements.get(i), @@ -377,7 +380,8 @@ public List createAlignedTimeseries( encodings.get(i), compressors.get(i)), aliasList == null ? null : aliasList.get(i)); - store.addChild(entityMNode, measurements.get(i), measurementMNode); + store.addChild( + entityMNode.getAsMNode(), measurements.get(i), measurementMNode.getAsMNode()); if (aliasList != null && aliasList.get(i) != null) { entityMNode.addAlias(aliasList.get(i), measurementMNode); } @@ -398,7 +402,7 @@ public List createAlignedTimeseries( @Override public Map checkMeasurementExistence( PartialPath devicePath, List measurementList, List aliasList) { - IMNode device; + ICacheMNode device; try { device = getNodeByPath(devicePath); } catch (MetadataException e) { @@ -410,7 +414,7 @@ public Map checkMeasurementExistence( } Map failingMeasurementMap = new HashMap<>(); for (int i = 0; i < measurementList.size(); i++) { - IMNode node = null; + ICacheMNode node = null; try { node = store.getChild(device, measurementList.get(i)); if (node != null) { @@ -456,14 +460,15 @@ public Map checkMeasurementExistence( } } - private IMNode checkAndAutoCreateInternalPath(PartialPath devicePath) throws MetadataException { + private ICacheMNode checkAndAutoCreateInternalPath(PartialPath devicePath) + throws MetadataException { String[] nodeNames = devicePath.getNodes(); MetaFormatUtils.checkTimeseries(devicePath); if (nodeNames.length == levelOfSG + 1) { return null; } - IMNode cur = storageGroupMNode; - IMNode child; + ICacheMNode cur = storageGroupMNode; + ICacheMNode child; String childName; try { // e.g, path = root.sg.d1.s1, create internal nodes and set cur to sg node, parent of d1 @@ -471,7 +476,7 @@ private IMNode checkAndAutoCreateInternalPath(PartialPath devicePath) throws Met childName = nodeNames[i]; child = store.getChild(cur, childName); if (child == null) { - child = store.addChild(cur, childName, new BasicMNode(cur, childName)); + child = store.addChild(cur, childName, new CacheBasicMNode(cur, childName)); } cur = child; @@ -486,16 +491,17 @@ private IMNode checkAndAutoCreateInternalPath(PartialPath devicePath) throws Met } } - private IMNode checkAndAutoCreateDeviceNode(String deviceName, IMNode deviceParent) + private ICacheMNode checkAndAutoCreateDeviceNode(String deviceName, ICacheMNode deviceParent) throws MetadataException { if (deviceParent == null) { // device is sg pinMNode(storageGroupMNode); return storageGroupMNode; } - IMNode device = store.getChild(deviceParent, deviceName); + ICacheMNode device = store.getChild(deviceParent, deviceName); if (device == null) { - device = store.addChild(deviceParent, deviceName, new BasicMNode(deviceParent, deviceName)); + device = + store.addChild(deviceParent, deviceName, new CacheBasicMNode(deviceParent, deviceName)); } if (device.isMeasurement()) { @@ -510,20 +516,21 @@ private IMNode checkAndAutoCreateDeviceNode(String deviceName, IMNode devicePare * @param path Format: root.node(.node)+ */ @Override - public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataException { + public IMeasurementMNode deleteTimeseries(PartialPath path) + throws MetadataException { String[] nodes = path.getNodes(); if (nodes.length == 0) { throw new IllegalPathException(path.getFullPath()); } - IMeasurementMNode deletedNode = getMeasurementMNode(path); - IDeviceMNode parent = deletedNode.getParent(); + IMeasurementMNode deletedNode = getMeasurementMNode(path); + ICacheMNode parent = deletedNode.getParent(); // delete the last node of path store.deleteChild(parent, path.getMeasurement()); if (deletedNode.getAlias() != null) { - parent.deleteAliasChild(deletedNode.getAlias()); + parent.getAsEntityMNode().deleteAliasChild(deletedNode.getAlias()); } - deleteAndUnpinEmptyInternalMNode(parent); + deleteAndUnpinEmptyInternalMNode(parent.getAsEntityMNode()); return deletedNode; } @@ -533,12 +540,13 @@ public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataExcep * * @param entityMNode delete empty InternalMNode from entityMNode to storageGroupMNode */ - private void deleteAndUnpinEmptyInternalMNode(IDeviceMNode entityMNode) throws MetadataException { - IMNode curNode = entityMNode; + private void deleteAndUnpinEmptyInternalMNode(IDeviceMNode entityMNode) + throws MetadataException { + ICacheMNode curNode = entityMNode.getAsMNode(); if (!entityMNode.isUseTemplate()) { boolean hasMeasurement = false; - IMNode child; - IMNodeIterator iterator = store.getChildrenIterator(entityMNode); + ICacheMNode child; + IMNodeIterator iterator = store.getChildrenIterator(curNode); try { while (iterator.hasNext()) { child = iterator.next(); @@ -574,13 +582,12 @@ private void deleteAndUnpinEmptyInternalMNode(IDeviceMNode entityMNode) throws M unPinMNode(curNode); } - @Override - public boolean isEmptyInternalMNode(IMNode node) throws MetadataException { - IMNodeIterator iterator = store.getChildrenIterator(node); + private boolean isEmptyInternalMNode(ICacheMNode node) throws MetadataException { + IMNodeIterator iterator = store.getChildrenIterator(node); try { return !IoTDBConstant.PATH_ROOT.equals(node.getName()) && !node.isMeasurement() - && !node.isUseTemplate() + && !(node.isEntity() && node.getAsEntityMNode().isUseTemplate()) && !iterator.hasNext(); } finally { iterator.close(); @@ -677,16 +684,16 @@ public void setAlias(IMeasurementMNode measurementMNode, String alias) throws Me *

    e.g., get root.sg.d1, get or create all internal nodes and return the node of d1 */ @Override - public IMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException { + public ICacheMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException { String[] nodeNames = deviceId.getNodes(); MetaFormatUtils.checkTimeseries(deviceId); - IMNode cur = storageGroupMNode; - IMNode child; + ICacheMNode cur = storageGroupMNode; + ICacheMNode child; try { for (int i = levelOfSG + 1; i < nodeNames.length; i++) { child = store.getChild(cur, nodeNames[i]); if (child == null) { - child = store.addChild(cur, nodeNames[i], new BasicMNode(cur, nodeNames[i])); + child = store.addChild(cur, nodeNames[i], new CacheBasicMNode(cur, nodeNames[i])); } cur = child; } @@ -739,10 +746,10 @@ protected Void collectMeasurement(IMeasurementMNode node) { * @return last node in given seriesPath */ @Override - public IMNode getNodeByPath(PartialPath path) throws MetadataException { + public ICacheMNode getNodeByPath(PartialPath path) throws MetadataException { String[] nodes = path.getNodes(); - IMNode cur = storageGroupMNode; - IMNode next; + ICacheMNode cur = storageGroupMNode; + ICacheMNode next; try { for (int i = levelOfSG + 1; i < nodes.length; i++) { next = store.getChild(cur, nodes[i]); @@ -765,8 +772,9 @@ public IMNode getNodeByPath(PartialPath path) throws MetadataException { } @Override - public IMeasurementMNode getMeasurementMNode(PartialPath path) throws MetadataException { - IMNode node = getNodeByPath(path); + public IMeasurementMNode getMeasurementMNode(PartialPath path) + throws MetadataException { + ICacheMNode node = getNodeByPath(path); if (node.isMeasurement()) { return node.getAsMeasurementMNode(); } else { @@ -791,9 +799,9 @@ public long countAllMeasurement() throws MetadataException { public void activateTemplate(PartialPath activatePath, Template template) throws MetadataException { String[] nodes = activatePath.getNodes(); - IMNode cur = storageGroupMNode; - IMNode child; - IDeviceMNode entityMNode; + ICacheMNode cur = storageGroupMNode; + ICacheMNode child; + IDeviceMNode entityMNode; try { for (int i = levelOfSG + 1; i < nodes.length; i++) { @@ -811,14 +819,6 @@ public void activateTemplate(PartialPath activatePath, Template template) } } - if (cur.isUseTemplate()) { - if (template.getId() == cur.getSchemaTemplateId()) { - throw new TemplateIsInUseException(cur.getFullPath()); - } else { - throw new DifferentTemplateException(activatePath.getFullPath(), template.getName()); - } - } - if (cur.isEntity()) { entityMNode = cur.getAsEntityMNode(); } else { @@ -827,6 +827,14 @@ public void activateTemplate(PartialPath activatePath, Template template) replaceStorageGroupMNode(entityMNode.getAsDatabaseMNode()); } } + + if (entityMNode.isUseTemplate()) { + if (template.getId() == entityMNode.getSchemaTemplateId()) { + throw new TemplateIsInUseException(cur.getFullPath()); + } else { + throw new DifferentTemplateException(activatePath.getFullPath(), template.getName()); + } + } } if (!entityMNode.isAligned()) { @@ -835,7 +843,7 @@ public void activateTemplate(PartialPath activatePath, Template template) entityMNode.setUseTemplate(true); entityMNode.setSchemaTemplateId(template.getId()); - store.updateMNode(entityMNode); + store.updateMNode(entityMNode.getAsMNode()); } finally { unPinPath(cur); } @@ -934,21 +942,21 @@ public long countPathsUsingTemplate(PartialPath pathPattern, int templateId) * @param node */ // TODO: This interface should not be exposed to SchemaRegion - public void pinMNode(IMNode node) throws MetadataException { + public void pinMNode(ICacheMNode node) throws MetadataException { store.pin(node); } // TODO: This interface should not be exposed to SchemaRegion - public void unPinMNode(IMNode node) { + public void unPinMNode(ICacheMNode node) { store.unPin(node); } - private void unPinPath(IMNode node) { + private void unPinPath(ICacheMNode node) { store.unPinPath(node); } // TODO: This interface should not be exposed to SchemaRegion - public void updateMNode(IMNode node) throws MetadataException { + public void updateMNode(ICacheMNode node) throws MetadataException { store.updateMNode(node); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index c7f6e06535956..8b8a9b01ff002 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -48,6 +48,7 @@ import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementCounter; import org.apache.iotdb.db.metadata.mtree.traverser.updater.EntityUpdater; import org.apache.iotdb.db.metadata.mtree.traverser.updater.MeasurementUpdater; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; @@ -101,7 +102,7 @@ *

  • Interfaces and Implementation for Template check * */ -public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG { +public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG { // this implementation is based on memory, thus only MTree write operation must invoke MTreeStore private final MemMTreeStore store; @@ -115,7 +116,7 @@ public MTreeBelowSGMemoryImpl( PartialPath storageGroupPath, Function> tagGetter, MemSchemaRegionStatistics regionStatistics) { - store = new MemMTreeStore(storageGroupPath, true, regionStatistics); + store = new MemMTreeStore(storageGroupPath, regionStatistics); this.storageGroupMNode = store.getRoot().getAsDatabaseMNode(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; @@ -483,8 +484,7 @@ public void deleteEmptyInternalMNode(IDeviceMNode entityMNode) { } } - @Override - public boolean isEmptyInternalMNode(IMNode node) { + private boolean isEmptyInternalMNode(IMNode node) { return !IoTDBConstant.PATH_ROOT.equals(node.getName()) && !node.isMeasurement() && !node.isUseTemplate() @@ -733,7 +733,6 @@ protected void updateEntity(IDeviceMNode node) throws MetadataException { resultTemplateSetInfo.put( node.getPartialPath(), Collections.singletonList(node.getSchemaTemplateId())); node.preDeactivateTemplate(); - store.updateMNode(node); } } }) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java index ff7faf572da17..10ba03bfd30f4 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java @@ -23,18 +23,19 @@ import org.apache.iotdb.db.metadata.MetadataConstant; import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; import org.apache.iotdb.db.metadata.newnode.databasedevice.DatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; import org.apache.iotdb.db.metadata.newnode.device.DeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.AbstractMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; @@ -108,9 +109,9 @@ public static boolean createSnapshot(File snapshotDir, MemMTreeStore store) { } } - public static IMNode loadSnapshot( + public static IMemMNode loadSnapshot( File snapshotDir, - Consumer measurementProcess, + Consumer> measurementProcess, MemSchemaRegionStatistics regionStatistics) throws IOException { File snapshot = @@ -131,17 +132,17 @@ private static void serializeTo(MemMTreeStore store, OutputStream outputStream) inorderSerialize(store.getRoot(), store, outputStream); } - private static void inorderSerialize(IMNode root, MemMTreeStore store, OutputStream outputStream) - throws IOException { + private static void inorderSerialize( + IMemMNode root, MemMTreeStore store, OutputStream outputStream) throws IOException { MNodeSerializer serializer = new MNodeSerializer(); if (!root.accept(serializer, outputStream)) { throw new IOException(SERIALIZE_ERROR_INFO); } - Deque stack = new ArrayDeque<>(); + Deque> stack = new ArrayDeque<>(); stack.push(store.getChildrenIterator(root)); - IMNode node; - IMNodeIterator iterator; + IMemMNode node; + IMNodeIterator iterator; while (!stack.isEmpty()) { iterator = stack.peek(); if (iterator.hasNext()) { @@ -158,22 +159,22 @@ private static void inorderSerialize(IMNode root, MemMTreeStore store, OutputStr } } - private static IMNode deserializeFrom( + private static IMemMNode deserializeFrom( InputStream inputStream, - Consumer measurementProcess, + Consumer> measurementProcess, MemSchemaRegionStatistics regionStatistics) throws IOException { byte version = ReadWriteIOUtils.readByte(inputStream); return inorderDeserialize(inputStream, measurementProcess, regionStatistics); } - private static IMNode inorderDeserialize( + private static IMemMNode inorderDeserialize( InputStream inputStream, - Consumer measurementProcess, + Consumer> measurementProcess, MemSchemaRegionStatistics regionStatistics) throws IOException { MNodeDeserializer deserializer = new MNodeDeserializer(); - Deque ancestors = new ArrayDeque<>(); + Deque ancestors = new ArrayDeque<>(); Deque restChildrenNum = new ArrayDeque<>(); deserializeMNode( ancestors, @@ -183,7 +184,7 @@ private static IMNode inorderDeserialize( measurementProcess, regionStatistics); int childrenNum; - IMNode root = ancestors.peek(); + IMemMNode root = ancestors.peek(); while (!ancestors.isEmpty()) { childrenNum = restChildrenNum.pop(); if (childrenNum == 0) { @@ -203,15 +204,15 @@ private static IMNode inorderDeserialize( } private static void deserializeMNode( - Deque ancestors, + Deque ancestors, Deque restChildrenNum, MNodeDeserializer deserializer, InputStream inputStream, - Consumer measurementProcess, + Consumer> measurementProcess, MemSchemaRegionStatistics regionStatistics) throws IOException { byte type = ReadWriteIOUtils.readByte(inputStream); - IMNode node; + IMemMNode node; int childrenNum; switch (type) { case INTERNAL_MNODE_TYPE: @@ -256,10 +257,10 @@ private static void deserializeMNode( private static class MNodeSerializer extends MNodeVisitor { @Override - public Boolean visitInternalMNode(BasicMNode node, OutputStream outputStream) { + public Boolean visitBasicMNode(IMNode node, OutputStream outputStream) { try { ReadWriteIOUtils.write(INTERNAL_MNODE_TYPE, outputStream); - serializeInternalBasicInfo(node, outputStream); + serializeBasicMNode(node, outputStream); return true; } catch (IOException e) { logger.error(SERIALIZE_ERROR_INFO, e); @@ -268,10 +269,11 @@ public Boolean visitInternalMNode(BasicMNode node, OutputStream outputStream) { } @Override - public Boolean visitStorageGroupMNode(AbstractDatabaseMNode node, OutputStream outputStream) { + public Boolean visitDatabaseMNode( + AbstractDatabaseMNode> node, OutputStream outputStream) { try { ReadWriteIOUtils.write(STORAGE_GROUP_MNODE_TYPE, outputStream); - serializeInternalBasicInfo(node, outputStream); + serializeBasicMNode(node.getBasicMNode(), outputStream); // database node in schemaRegion doesn't store any database schema return true; } catch (IOException e) { @@ -281,11 +283,11 @@ public Boolean visitStorageGroupMNode(AbstractDatabaseMNode node, OutputStream o } @Override - public Boolean visitStorageGroupEntityMNode( - AbstractDatabaseDeviceMNode node, OutputStream outputStream) { + public Boolean visitDatabaseDeviceMNode( + AbstractDatabaseDeviceMNode> node, OutputStream outputStream) { try { ReadWriteIOUtils.write(STORAGE_GROUP_ENTITY_MNODE_TYPE, outputStream); - serializeInternalBasicInfo(node, outputStream); + serializeBasicMNode(node.getBasicMNode(), outputStream); ReadWriteIOUtils.write(node.isAligned(), outputStream); // database node in schemaRegion doesn't store any database schema return true; @@ -296,10 +298,11 @@ public Boolean visitStorageGroupEntityMNode( } @Override - public Boolean visitDeviceMNode(IDeviceMNode node, OutputStream outputStream) { + public Boolean visitDeviceMNode( + AbstractDeviceMNode> node, OutputStream outputStream) { try { ReadWriteIOUtils.write(ENTITY_MNODE_TYPE, outputStream); - serializeInternalBasicInfo(node, outputStream); + serializeBasicMNode(node.getBasicMNode(), outputStream); ReadWriteIOUtils.write(node.isAligned(), outputStream); return true; } catch (IOException e) { @@ -309,7 +312,8 @@ public Boolean visitDeviceMNode(IDeviceMNode node, OutputStream outputStream) { } @Override - public Boolean visitMeasurementMNode(IMeasurementMNode node, OutputStream outputStream) { + public Boolean visitMeasurementMNode( + AbstractMeasurementMNode> node, OutputStream outputStream) { try { ReadWriteIOUtils.write(MEASUREMENT_MNODE_TYPE, outputStream); ReadWriteIOUtils.write(node.getName(), outputStream); @@ -324,12 +328,11 @@ public Boolean visitMeasurementMNode(IMeasurementMNode node, OutputStream output } } - private void serializeInternalBasicInfo(BasicMNode node, OutputStream outputStream) - throws IOException { + private void serializeBasicMNode(IMNode node, OutputStream outputStream) throws IOException { ReadWriteIOUtils.write(node.getChildren().size(), outputStream); ReadWriteIOUtils.write(node.getName(), outputStream); - ReadWriteIOUtils.write(node.getSchemaTemplateIdWithState(), outputStream); - ReadWriteIOUtils.write(node.isUseTemplate(), outputStream); + ReadWriteIOUtils.write(0, outputStream); // for compatibly + ReadWriteIOUtils.write(false, outputStream); // for compatibly } } @@ -345,7 +348,7 @@ public BasicMNode deserializeInternalMNode(InputStream inputStream) throws IOExc public DatabaseMNode deserializeStorageGroupMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); DatabaseMNode node = new DatabaseMNode(null, name); - deserializeInternalBasicInfo(node, inputStream); + deserializeInternalBasicInfo(node.getBasicMNode(), inputStream); return node; } @@ -353,7 +356,7 @@ public DatabaseDeviceMNode deserializeStorageGroupEntityMNode(InputStream inputS throws IOException { String name = ReadWriteIOUtils.readString(inputStream); DatabaseDeviceMNode node = new DatabaseDeviceMNode(null, name, 0); - deserializeInternalBasicInfo(node, inputStream); + deserializeInternalBasicInfo(node.getBasicMNode(), inputStream); node.setAligned(ReadWriteIOUtils.readBool(inputStream)); return node; } @@ -361,7 +364,7 @@ public DatabaseDeviceMNode deserializeStorageGroupEntityMNode(InputStream inputS public DeviceMNode deserializeEntityMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); DeviceMNode node = new DeviceMNode(null, name); - deserializeInternalBasicInfo(node, inputStream); + deserializeInternalBasicInfo(node.getBasicMNode(), inputStream); node.setAligned(ReadWriteIOUtils.readBool(inputStream)); return node; } @@ -380,8 +383,8 @@ public MeasurementMNode deserializeMeasurementMNode(InputStream inputStream) private void deserializeInternalBasicInfo(BasicMNode node, InputStream inputStream) throws IOException { - node.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); - node.setUseTemplate(ReadWriteIOUtils.readBool(inputStream)); + ReadWriteIOUtils.readInt(inputStream); // for compatibly + ReadWriteIOUtils.readBool(inputStream); // for compatibly } } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java index f20edb1a501f8..2adf8146623a6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java @@ -21,14 +21,11 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; -import org.apache.iotdb.db.metadata.mnode.AboveDatabaseMNode; -import org.apache.iotdb.db.metadata.mnode.ICacheMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.estimator.ICacheMNodeSizeEstimator; +import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; import org.apache.iotdb.db.metadata.mnode.iterator.CachedTraverserIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.ICacheMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.ICacheManager; @@ -36,10 +33,9 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.abovedatabase.CacheAboveDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; @@ -56,8 +52,7 @@ import static org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer.getCachedMNodeContainer; -public class CachedMTreeStore - implements IMTreeStore { +public class CachedMTreeStore implements IMTreeStore { private static final Logger logger = LoggerFactory.getLogger(CachedMTreeStore.class); @@ -96,11 +91,11 @@ public CachedMTreeStore( public ICacheMNode generatePrefix(PartialPath storageGroupPath) { String[] nodes = storageGroupPath.getNodes(); // nodes[0] must be root - IMNode res = new AboveDatabaseMNode(null, nodes[0]); + ICacheMNode res = new CacheAboveDatabaseMNode(null, nodes[0]); ICacheMNode cur = res; ICacheMNode child; for (int i = 1; i < nodes.length - 1; i++) { - child = new AboveDatabaseMNode(cur, nodes[i]); + child = new CacheAboveDatabaseMNode(cur, nodes[i]); cur.addChild(nodes[i], child); cur = child; } @@ -226,11 +221,12 @@ private void processAlias(IDeviceMNode parent, IMeasurementMNode node) { // getChildrenIterator will take readLock, must call iterator.close() after usage @Override - public ICacheMNodeIterator getChildrenIterator(ICacheMNode parent) throws MetadataException { + public IMNodeIterator getChildrenIterator(ICacheMNode parent) + throws MetadataException { return getChildrenIterator(parent, true); } - final ICacheMNodeIterator getChildrenIterator(ICacheMNode parent, boolean needLock) + final IMNodeIterator getChildrenIterator(ICacheMNode parent, boolean needLock) throws MetadataException { try { return new CachedMNodeIterator(parent, needLock); @@ -240,13 +236,13 @@ final ICacheMNodeIterator getChildrenIterator(ICacheMNode parent, boolean needLo } @Override - public ICacheMNodeIterator getTraverserIterator( + public IMNodeIterator getTraverserIterator( ICacheMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { return getTraverserIterator(this, parent, templateMap, skipPreDeletedSchema); } - final ICacheMNodeIterator getTraverserIterator( + final IMNodeIterator getTraverserIterator( IMTreeStore store, ICacheMNode parent, Map templateMap, @@ -335,42 +331,43 @@ final void updateMNode(ICacheMNode node, boolean needLock) { } @Override - public IDeviceMNode setToEntity(ICacheMNode node) { - IDeviceMNode result = MNodeUtils.setToEntity(node); + public IDeviceMNode setToEntity(ICacheMNode node) { + IDeviceMNode result = MNodeUtils.setToEntity(node); if (result != node) { - memManager.updatePinnedSize(ICacheMNodeSizeEstimator.getEntityNodeBaseSize()); + memManager.updatePinnedSize(IMNodeSizeEstimator.getEntityNodeBaseSize()); } - updateMNode(result); + updateMNode(result.getAsMNode()); return result; } @Override - public ICacheMNode setToInternal(IDeviceMNode entityMNode) { + public ICacheMNode setToInternal(IDeviceMNode entityMNode) { ICacheMNode result = MNodeUtils.setToInternal(entityMNode); if (result != entityMNode) { - memManager.updatePinnedSize(-ICacheMNodeSizeEstimator.getEntityNodeBaseSize()); + memManager.updatePinnedSize(-IMNodeSizeEstimator.getEntityNodeBaseSize()); } updateMNode(result); return result; } @Override - public void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException { + public void setAlias(IMeasurementMNode measurementMNode, String alias) + throws MetadataException { String existingAlias = measurementMNode.getAlias(); if (existingAlias == null && alias == null) { return; } measurementMNode.setAlias(alias); - updateMNode(measurementMNode); + updateMNode(measurementMNode.getAsMNode()); if (existingAlias != null && alias != null) { memManager.updatePinnedSize(alias.length() - existingAlias.length()); } else if (alias == null) { memManager.updatePinnedSize( - -(ICacheMNodeSizeEstimator.getAliasBaseSize() + existingAlias.length())); + -(IMNodeSizeEstimator.getAliasBaseSize() + existingAlias.length())); } else { - memManager.updatePinnedSize(ICacheMNodeSizeEstimator.getAliasBaseSize() + alias.length()); + memManager.updatePinnedSize(IMNodeSizeEstimator.getAliasBaseSize() + alias.length()); } } @@ -585,7 +582,7 @@ public void flushVolatileNodes() { * Since any node R/W operation may change the memory status, thus it should be controlled during * iterating child nodes. */ - private class CachedMNodeIterator implements ICacheMNodeIterator { + private class CachedMNodeIterator implements IMNodeIterator { ICacheMNode parent; Iterator iterator; Iterator bufferIterator; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java new file mode 100644 index 0000000000000..c9d5e6b6193ec --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java @@ -0,0 +1,155 @@ +/* + * 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.metadata.mtree.store; + +import org.apache.iotdb.commons.conf.CommonDescriptor; +import org.apache.iotdb.commons.conf.IoTDBConstant; +import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.mnode.MNodeUtils; +import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; +import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; +import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; +import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; +import org.apache.iotdb.db.metadata.mnode.iterator.MemoryTraverserIterator; +import org.apache.iotdb.db.metadata.mtree.snapshot.MemMTreeSnapshotUtil; +import org.apache.iotdb.db.metadata.newnode.IConfigMNode; +import org.apache.iotdb.db.metadata.newnode.IConfigMNode; +import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; +import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; +import org.apache.iotdb.db.metadata.template.Template; + +import java.io.File; +import java.io.IOException; +import java.util.Map; +import java.util.function.Consumer; + + +/** This is a memory-based implementation of IMTreeStore. All MNodes are stored in memory. */ +public class ConfigMTreeStore implements IMTreeStore{ + + private IConfigMNode root; + + // Only used for ConfigMTree + public ConfigMTreeStore() { + this.root = new ConfigBasicMNode(null, IoTDBConstant.PATH_ROOT); + } + + @Override + public IConfigMNode generatePrefix(PartialPath storageGroupPath) { + throw new UnsupportedOperationException(); + } + + @Override + public IConfigMNode getRoot() { + return root; + } + + @Override + public boolean hasChild(IConfigMNode parent, String name) { + return parent.hasChild(name); + } + + @Override + public IConfigMNode getChild(IConfigMNode parent, String name) { + return parent.getChild(name); + } + + @Override + public IMNodeIterator getChildrenIterator(IConfigMNode parent) { + return new MNodeIterator<>(parent.getChildren().values().iterator()); + } + + @Override + public IMNodeIterator getTraverserIterator( + IConfigMNode parent, Map templateMap, boolean skipPreDeletedSchema) + throws MetadataException { + if (parent.isEntity()) { + AbstractTraverserIterator iterator = + new MemoryTraverserIterator(this, parent.getAsEntityMNode(), templateMap); + iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); + return iterator; + } else { + return getChildrenIterator(parent); + } + } + + @Override + public IConfigMNode addChild(IConfigMNode parent, String childName, IConfigMNode child) { + return parent.addChild(childName, child); + } + + @Override + public void deleteChild(IConfigMNode parent, String childName) { + parent.deleteChild(childName); + } + + @Override + public void updateMNode(IConfigMNode node) {} + + @Override + public IDeviceMNode setToEntity(IConfigMNode node) { + throw new UnsupportedOperationException(); + } + + @Override + public IConfigMNode setToInternal(IDeviceMNode entityMNode) { + throw new UnsupportedOperationException(); + } + + @Override + public void setAlias(IMeasurementMNode measurementMNode, String alias) { + String existingAlias = measurementMNode.getAlias(); + if (existingAlias == null && alias == null) { + return; + } + measurementMNode.setAlias(alias); + } + + @Override + public void pin(IConfigMNode node) {} + + @Override + public void unPin(IConfigMNode node) {} + + @Override + public void unPinPath(IConfigMNode node) {} + + @Override + public IMTreeStore getWithReentrantReadLock() { + return this; + } + + @Override + public void clear() { + root = new ConfigBasicMNode(null, IoTDBConstant.PATH_ROOT); + } + + @Override + public boolean createSnapshot(File snapshotDir) { + throw new UnsupportedOperationException(); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java index 38def6803f272..5df0b47285423 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java @@ -34,8 +34,7 @@ * *

    MTreeStore could be implemented as memory-based or disk-based for different scenarios. */ -public interface IMTreeStore< - N extends IMNode, DeviceN extends IDeviceMNode, MeasurementN extends IMeasurementMNode> { +public interface IMTreeStore> { /** * Generate the ancestor nodes of storageGroupNode @@ -64,9 +63,9 @@ public interface IMTreeStore< */ N getChild(N parent, String name) throws MetadataException; - IMNodeIterator getChildrenIterator(N parent) throws MetadataException; + IMNodeIterator getChildrenIterator(N parent) throws MetadataException; - IMNodeIterator getTraverserIterator( + IMNodeIterator getTraverserIterator( N parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException; @@ -76,11 +75,11 @@ IMNodeIterator getTraverserIterator( void updateMNode(N node) throws MetadataException; - DeviceN setToEntity(N node) throws MetadataException; + IDeviceMNode setToEntity(N node) throws MetadataException; - N setToInternal(DeviceN entityMNode) throws MetadataException; + N setToInternal(IDeviceMNode entityMNode) throws MetadataException; - void setAlias(MeasurementN measurementMNode, String alias) throws MetadataException; + void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException; void pin(N node) throws MetadataException; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index 266d66b97116d..b754e0d6596ed 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -22,9 +22,7 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.AboveDatabaseMNode; import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeUtils; import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; @@ -33,7 +31,9 @@ import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; import org.apache.iotdb.db.metadata.mnode.iterator.MemoryTraverserIterator; import org.apache.iotdb.db.metadata.mtree.snapshot.MemMTreeSnapshotUtil; -import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; @@ -45,52 +45,35 @@ import java.util.function.Consumer; /** This is a memory-based implementation of IMTreeStore. All MNodes are stored in memory. */ -public class MemMTreeStore implements IMTreeStore { +public class MemMTreeStore implements IMTreeStore { private final IMNodeSizeEstimator estimator = new BasicMNodSizeEstimator(); private MemSchemaRegionStatistics regionStatistics; - private IMNode root; - - // Only used for ConfigMTree - public MemMTreeStore(PartialPath rootPath, boolean isStorageGroup) { - if (isStorageGroup) { - this.root = - new AbstractDatabaseMNode( - null, - rootPath.getTailNode(), - CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - } else { - this.root = new BasicMNode(null, IoTDBConstant.PATH_ROOT); - } - } + private IMemMNode root; public MemMTreeStore( - PartialPath rootPath, boolean isStorageGroup, MemSchemaRegionStatistics regionStatistics) { - if (isStorageGroup) { + PartialPath rootPath, MemSchemaRegionStatistics regionStatistics) { this.root = - new AbstractDatabaseMNode( + new DatabaseMNode( null, rootPath.getTailNode(), CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - } else { - this.root = new BasicMNode(null, IoTDBConstant.PATH_ROOT); - } this.regionStatistics = regionStatistics; } - private MemMTreeStore(IMNode root, MemSchemaRegionStatistics regionStatistics) { + private MemMTreeStore(IMemMNode root, MemSchemaRegionStatistics regionStatistics) { this.root = root; this.regionStatistics = regionStatistics; } @Override - public IMNode generatePrefix(PartialPath storageGroupPath) { + public IMemMNode generatePrefix(PartialPath storageGroupPath) { String[] nodes = storageGroupPath.getNodes(); // nodes[0] must be root - IMNode res = new AboveDatabaseMNode(null, nodes[0]); - IMNode cur = res; - IMNode child; + IMemMNode res = new AboveDatabaseMNode(null, nodes[0]); + IMemMNode cur = res; + IMemMNode child; for (int i = 1; i < nodes.length - 1; i++) { child = new AboveDatabaseMNode(cur, nodes[i]); cur.addChild(nodes[i], child); @@ -103,28 +86,28 @@ public IMNode generatePrefix(PartialPath storageGroupPath) { } @Override - public IMNode getRoot() { + public IMemMNode getRoot() { return root; } @Override - public boolean hasChild(IMNode parent, String name) { + public boolean hasChild(IMemMNode parent, String name) { return parent.hasChild(name); } @Override - public IMNode getChild(IMNode parent, String name) { + public IMemMNode getChild(IMemMNode parent, String name) { return parent.getChild(name); } @Override - public IMNodeIterator getChildrenIterator(IMNode parent) { - return new MNodeIterator(parent.getChildren().values().iterator()); + public IMNodeIterator getChildrenIterator(IMemMNode parent) { + return new MNodeIterator<>(parent.getChildren().values().iterator()); } @Override - public IMNodeIterator getTraverserIterator( - IMNode parent, Map templateMap, boolean skipPreDeletedSchema) + public IMNodeIterator getTraverserIterator( + IMemMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { if (parent.isEntity()) { AbstractTraverserIterator iterator = @@ -137,8 +120,8 @@ public IMNodeIterator getTraverserIterator( } @Override - public IMNode addChild(IMNode parent, String childName, IMNode child) { - IMNode result = parent.addChild(childName, child); + public IMemMNode addChild(IMemMNode parent, String childName, IMemMNode child) { + IMemMNode result = parent.addChild(childName, child); if (result == child) { requestMemory(estimator.estimateSize(child)); } @@ -146,47 +129,47 @@ public IMNode addChild(IMNode parent, String childName, IMNode child) { } @Override - public void deleteChild(IMNode parent, String childName) { + public void deleteChild(IMemMNode parent, String childName) { releaseMemory(estimator.estimateSize(parent.deleteChild(childName))); } @Override - public void updateMNode(IMNode node) {} + public void updateMNode(IMemMNode node) {} @Override - public IDeviceMNode setToEntity(IMNode node) { - IDeviceMNode result = MNodeUtils.setToEntity(node); + public IDeviceMNode setToEntity(IMemMNode node) { + IDeviceMNode result = MNodeUtils.setToEntity(node); if (result != node) { requestMemory(IMNodeSizeEstimator.getEntityNodeBaseSize()); } if (result.isDatabase()) { - root = result; + root = result.getAsMNode(); } return result; } @Override - public IMNode setToInternal(IDeviceMNode entityMNode) { - IMNode result = MNodeUtils.setToInternal(entityMNode); + public IMemMNode setToInternal(IDeviceMNode entityMNode) { + IMemMNode result = MNodeUtils.setToInternal(entityMNode); if (result != entityMNode) { releaseMemory(IMNodeSizeEstimator.getEntityNodeBaseSize()); } if (result.isDatabase()) { root = result; + // TODO: 这里和cached不一致,记得检查 } return result; } @Override - public void setAlias(IMeasurementMNode measurementMNode, String alias) { + public void setAlias(IMeasurementMNode measurementMNode, String alias) { String existingAlias = measurementMNode.getAlias(); if (existingAlias == null && alias == null) { return; } measurementMNode.setAlias(alias); - updateMNode(measurementMNode); if (existingAlias != null && alias != null) { int delta = alias.length() - existingAlias.length(); @@ -203,13 +186,13 @@ public void setAlias(IMeasurementMNode measurementMNode, String alias) { } @Override - public void pin(IMNode node) {} + public void pin(IMemMNode node) {} @Override - public void unPin(IMNode node) {} + public void unPin(IMemMNode node) {} @Override - public void unPinPath(IMNode node) {} + public void unPinPath(IMemMNode node) {} @Override public IMTreeStore getWithReentrantReadLock() { @@ -228,7 +211,7 @@ public boolean createSnapshot(File snapshotDir) { public static MemMTreeStore loadFromSnapshot( File snapshotDir, - Consumer measurementProcess, + Consumer> measurementProcess, MemSchemaRegionStatistics regionStatistics) throws IOException { return new MemMTreeStore( diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java index 47fecfe9da58f..b979e575ac475 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java @@ -18,7 +18,7 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -37,16 +37,16 @@ public class CachedMNodeContainer implements ICachedMNodeContainer { private long segmentAddress = -1; - private Map childCache = null; - private Map newChildBuffer = null; - private Map updatedChildBuffer = null; + private Map childCache = null; + private Map newChildBuffer = null; + private Map updatedChildBuffer = null; @Override public int size() { return getSize(childCache) + getSize(newChildBuffer) + getSize(updatedChildBuffer); } - private int getSize(Map map) { + private int getSize(Map map) { return map == null ? 0 : map.size(); } @@ -55,7 +55,7 @@ public boolean isEmpty() { return isEmpty(childCache) && isEmpty(newChildBuffer) && isEmpty(updatedChildBuffer); } - private boolean isEmpty(Map map) { + private boolean isEmpty(Map map) { return map == null || map.isEmpty(); } @@ -66,7 +66,7 @@ public boolean containsKey(Object key) { || containsKey(updatedChildBuffer, key); } - private boolean containsKey(Map map, Object key) { + private boolean containsKey(Map map, Object key) { return map != null && map.containsKey(key); } @@ -77,13 +77,13 @@ public boolean containsValue(Object value) { || containsValue(updatedChildBuffer, value); } - private boolean containsValue(Map map, Object value) { + private boolean containsValue(Map map, Object value) { return map != null && map.containsValue(value); } @Override - public IMNode get(Object key) { - IMNode result = get(childCache, key); + public ICacheMNode get(Object key) { + ICacheMNode result = get(childCache, key); if (result != null) { return result; } @@ -94,13 +94,13 @@ public IMNode get(Object key) { return get(updatedChildBuffer, key); } - private IMNode get(Map map, Object key) { + private ICacheMNode get(Map map, Object key) { return map == null ? null : map.get(key); } @Nullable @Override - public synchronized IMNode put(String key, IMNode value) { + public synchronized ICacheMNode put(String key, ICacheMNode value) { if (newChildBuffer == null) { newChildBuffer = new ConcurrentHashMap<>(); } @@ -109,9 +109,9 @@ public synchronized IMNode put(String key, IMNode value) { @Nullable @Override - public synchronized IMNode putIfAbsent(String key, IMNode value) { + public synchronized ICacheMNode putIfAbsent(String key, ICacheMNode value) { - IMNode node = get(key); + ICacheMNode node = get(key); if (node == null) { if (newChildBuffer == null) { newChildBuffer = new ConcurrentHashMap<>(); @@ -123,8 +123,8 @@ public synchronized IMNode putIfAbsent(String key, IMNode value) { } @Override - public synchronized IMNode remove(Object key) { - IMNode result = remove(childCache, key); + public synchronized ICacheMNode remove(Object key) { + ICacheMNode result = remove(childCache, key); if (result == null) { result = remove(newChildBuffer, key); } @@ -134,12 +134,12 @@ public synchronized IMNode remove(Object key) { return result; } - private IMNode remove(Map map, Object key) { + private ICacheMNode remove(Map map, Object key) { return map == null ? null : map.remove(key); } @Override - public synchronized void putAll(@Nonnull Map m) { + public synchronized void putAll(@Nonnull Map m) { if (newChildBuffer == null) { newChildBuffer = new ConcurrentHashMap<>(); } @@ -163,42 +163,42 @@ public Set keySet() { return result; } - private Set keySet(Map map) { + private Set keySet(Map map) { return map == null ? Collections.emptySet() : map.keySet(); } @Nonnull @Override - public Collection values() { - Collection result = new ArrayList<>(); + public Collection values() { + Collection result = new ArrayList<>(); result.addAll(getValues(childCache)); result.addAll(getValues(newChildBuffer)); result.addAll(getValues(updatedChildBuffer)); return result; } - private Collection getValues(Map map) { + private Collection getValues(Map map) { return map == null ? Collections.emptyList() : map.values(); } @Nonnull @Override - public Set> entrySet() { - Set> result = new HashSet<>(); + public Set> entrySet() { + Set> result = new HashSet<>(); result.addAll(entrySet(childCache)); result.addAll(entrySet(newChildBuffer)); result.addAll(entrySet(updatedChildBuffer)); return result; } - private Set> entrySet(Map map) { + private Set> entrySet(Map map) { return map == null ? Collections.emptySet() : map.entrySet(); } @Nullable @Override - public synchronized IMNode replace(String key, IMNode value) { - IMNode replacedOne = replace(childCache, key, value); + public synchronized ICacheMNode replace(String key, ICacheMNode value) { + ICacheMNode replacedOne = replace(childCache, key, value); if (replacedOne == null) { replacedOne = replace(newChildBuffer, key, value); } @@ -208,7 +208,7 @@ public synchronized IMNode replace(String key, IMNode value) { return replacedOne; } - private IMNode replace(Map map, String key, IMNode value) { + private ICacheMNode replace(Map map, String key, ICacheMNode value) { return map == null ? null : map.replace(key, value); } @@ -251,37 +251,37 @@ public boolean hasChildInBuffer(String name) { } @Override - public Iterator getChildrenIterator() { + public Iterator getChildrenIterator() { return new CachedMNodeContainerIterator(); } @Override - public Iterator getChildrenBufferIterator() { + public Iterator getChildrenBufferIterator() { return new BufferIterator(); } @Override - public Iterator getNewChildBufferIterator() { + public Iterator getNewChildBufferIterator() { return getNewChildBuffer().values().iterator(); } @Override - public Map getChildCache() { + public Map getChildCache() { return childCache == null ? Collections.emptyMap() : childCache; } @Override - public Map getNewChildBuffer() { + public Map getNewChildBuffer() { return newChildBuffer == null ? Collections.emptyMap() : newChildBuffer; } @Override - public Map getUpdatedChildBuffer() { + public Map getUpdatedChildBuffer() { return updatedChildBuffer == null ? Collections.emptyMap() : updatedChildBuffer; } @Override - public synchronized void loadChildrenFromDisk(Map children) { + public synchronized void loadChildrenFromDisk(Map children) { if (childCache == null) { childCache = new ConcurrentHashMap<>(); } @@ -289,7 +289,7 @@ public synchronized void loadChildrenFromDisk(Map children) { } @Override - public synchronized void addChildToCache(IMNode node) { + public synchronized void addChildToCache(ICacheMNode node) { String name = node.getName(); if (containsKey(name)) { return; @@ -301,7 +301,7 @@ public synchronized void addChildToCache(IMNode node) { } @Override - public synchronized void appendMNode(IMNode node) { + public synchronized void appendMNode(ICacheMNode node) { if (newChildBuffer == null) { newChildBuffer = new ConcurrentHashMap<>(); } @@ -310,7 +310,7 @@ public synchronized void appendMNode(IMNode node) { @Override public synchronized void updateMNode(String name) { - IMNode node = remove(childCache, name); + ICacheMNode node = remove(childCache, name); if (node != null) { if (updatedChildBuffer == null) { updatedChildBuffer = new ConcurrentHashMap<>(); @@ -321,7 +321,7 @@ public synchronized void updateMNode(String name) { @Override public synchronized void moveMNodeToCache(String name) { - IMNode node = remove(newChildBuffer, name); + ICacheMNode node = remove(newChildBuffer, name); if (node == null) { node = remove(updatedChildBuffer, name); } @@ -340,17 +340,17 @@ public synchronized String toString() { StringBuilder builder = new StringBuilder(); builder.append("CachedMNodeContainer:{"); builder.append("childCache:["); - for (IMNode node : getValues(childCache)) { + for (ICacheMNode node : getValues(childCache)) { builder.append(node.getName()).append(","); } builder.append("];"); builder.append("newChildBuffer:["); - for (IMNode node : getValues(newChildBuffer)) { + for (ICacheMNode node : getValues(newChildBuffer)) { builder.append(node.getName()).append(","); } builder.append("];"); builder.append("updateChildBuffer:["); - for (IMNode node : getValues(updatedChildBuffer)) { + for (ICacheMNode node : getValues(updatedChildBuffer)) { builder.append(node.getName()).append(","); } builder.append("];"); @@ -358,9 +358,9 @@ public synchronized String toString() { return builder.toString(); } - private class CachedMNodeContainerIterator implements Iterator { + private class CachedMNodeContainerIterator implements Iterator { - Iterator iterator; + Iterator iterator; byte status = 0; CachedMNodeContainerIterator() { @@ -381,7 +381,7 @@ public boolean hasNext() { } @Override - public IMNode next() { + public ICacheMNode next() { return iterator.next(); } @@ -401,10 +401,10 @@ private boolean changeStatus() { } } - private class BufferIterator implements Iterator { - Iterator iterator; - Iterator newBufferIterator; - Iterator updateBufferIterator; + private class BufferIterator implements Iterator { + Iterator iterator; + Iterator newBufferIterator; + Iterator updateBufferIterator; byte status = 0; BufferIterator() { @@ -427,7 +427,7 @@ public boolean hasNext() { } @Override - public IMNode next() { + public ICacheMNode next() { return iterator.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java index 1579f98b793e4..39f4364015ab7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java @@ -18,14 +18,14 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.util.Iterator; import java.util.Map; -public interface ICachedMNodeContainer extends IMNodeContainer { +public interface ICachedMNodeContainer extends IMNodeContainer { long getSegmentAddress(); @@ -41,23 +41,23 @@ public interface ICachedMNodeContainer extends IMNodeContainer { boolean hasChildInBuffer(String name); - Iterator getChildrenIterator(); + Iterator getChildrenIterator(); - Iterator getChildrenBufferIterator(); + Iterator getChildrenBufferIterator(); - Iterator getNewChildBufferIterator(); + Iterator getNewChildBufferIterator(); - Map getChildCache(); + Map getChildCache(); - Map getNewChildBuffer(); + Map getNewChildBuffer(); - Map getUpdatedChildBuffer(); + Map getUpdatedChildBuffer(); - void loadChildrenFromDisk(Map children); + void loadChildrenFromDisk(Map children); - void addChildToCache(IMNode node); + void addChildToCache(ICacheMNode node); - void appendMNode(IMNode node); + void appendMNode(ICacheMNode node); void updateMNode(String name); @@ -65,8 +65,8 @@ public interface ICachedMNodeContainer extends IMNodeContainer { void evictMNode(String name); - static ICachedMNodeContainer getCachedMNodeContainer(IMNode node) { - IMNodeContainer container = node.getChildren(); + static ICachedMNodeContainer getCachedMNodeContainer(ICacheMNode node) { + IMNodeContainer container = node.getChildren(); if (container.equals(MNodeContainers.emptyMNodeContainer())) { container = new CachedMNodeContainer(); node.setChildren(container); @@ -74,7 +74,7 @@ static ICachedMNodeContainer getCachedMNodeContainer(IMNode node) { return (ICachedMNodeContainer) container; } - static ICachedMNodeContainer getBelongedContainer(IMNode node) { + static ICachedMNodeContainer getBelongedContainer(ICacheMNode node) { return (ICachedMNodeContainer) node.getParent().getChildren(); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java index 3f361f4753e3a..51548c3c949bc 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java @@ -23,6 +23,7 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import java.util.ArrayList; @@ -73,7 +74,7 @@ public CacheManager(MemManager memManager) { this.memManager = memManager; } - public void initRootStatus(IMNode root) { + public void initRootStatus(ICacheMNode root) { pinMNodeWithMemStatusUpdate(root); } @@ -84,7 +85,7 @@ public void initRootStatus(IMNode root) { * @param node */ @Override - public void updateCacheStatusAfterMemoryRead(IMNode node) throws MNodeNotCachedException { + public void updateCacheStatusAfterMemoryRead(ICacheMNode node) throws MNodeNotCachedException { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null) { throw new MNodeNotCachedException(); @@ -107,7 +108,7 @@ public void updateCacheStatusAfterMemoryRead(IMNode node) throws MNodeNotCachedE * @param node */ @Override - public void updateCacheStatusAfterDiskRead(IMNode node) { + public void updateCacheStatusAfterDiskRead(ICacheMNode node) { pinMNodeWithMemStatusUpdate(node); CacheEntry cacheEntry = getCacheEntry(node); getBelongedContainer(node).addChildToCache(node); @@ -121,7 +122,7 @@ public void updateCacheStatusAfterDiskRead(IMNode node) { * @param node */ @Override - public void updateCacheStatusAfterAppend(IMNode node) { + public void updateCacheStatusAfterAppend(ICacheMNode node) { pinMNodeWithMemStatusUpdate(node); CacheEntry cacheEntry = getCacheEntry(node); cacheEntry.setVolatile(true); @@ -135,9 +136,9 @@ public void updateCacheStatusAfterAppend(IMNode node) { * * @param node */ - private void addToBufferAfterAppend(IMNode node) { + private void addToBufferAfterAppend(ICacheMNode node) { removeAncestorsFromCache(node); - IMNode parent = node.getParent(); + ICacheMNode parent = node.getParent(); CacheEntry cacheEntry = getCacheEntry(parent); if (!cacheEntry.isVolatile()) { // the cacheEntry may be set to volatile concurrently, the unVolatile node should not be added @@ -154,9 +155,9 @@ private void addToBufferAfterAppend(IMNode node) { * The ancestors of volatile node should not stay in nodeCache in which the node will be evicted. * When invoking this method, all the ancestors have been pinned. */ - private void removeAncestorsFromCache(IMNode node) { - IMNode parent = node.getParent(); - IMNode current = node; + private void removeAncestorsFromCache(ICacheMNode node) { + ICacheMNode parent = node.getParent(); + ICacheMNode current = node; CacheEntry cacheEntry = getCacheEntry(parent); while (!current.isDatabase() && isInNodeCache(cacheEntry)) { removeFromNodeCache(cacheEntry); @@ -173,7 +174,7 @@ private void removeAncestorsFromCache(IMNode node) { * @param node */ @Override - public void updateCacheStatusAfterUpdate(IMNode node) { + public void updateCacheStatusAfterUpdate(ICacheMNode node) { CacheEntry cacheEntry = getCacheEntry(node); if (!cacheEntry.isVolatile()) { if (!node.isDatabase()) { @@ -199,14 +200,14 @@ public void updateCacheStatusAfterUpdate(IMNode node) { * * @param node */ - private void addToBufferAfterUpdate(IMNode node) { + private void addToBufferAfterUpdate(ICacheMNode node) { if (node.isDatabase()) { nodeBuffer.setUpdatedStorageGroupMNode(node.getAsDatabaseMNode()); return; } removeAncestorsFromCache(node); - IMNode parent = node.getParent(); + ICacheMNode parent = node.getParent(); CacheEntry cacheEntry = getCacheEntry(parent); /* @@ -235,25 +236,25 @@ private void addToBufferAfterUpdate(IMNode node) { * @param node */ @Override - public void updateCacheStatusAfterPersist(IMNode node) { - IMNode tmp = node; + public void updateCacheStatusAfterPersist(ICacheMNode node) { + ICacheMNode tmp = node; while (!tmp.isDatabase() && !isInNodeCache(getCacheEntry(tmp))) { addToNodeCache(getCacheEntry(tmp), tmp); tmp = tmp.getParent(); } ICachedMNodeContainer container = getCachedMNodeContainer(node); - Map persistedChildren = container.getNewChildBuffer(); - for (IMNode child : persistedChildren.values()) { + Map persistedChildren = container.getNewChildBuffer(); + for (ICacheMNode child : persistedChildren.values()) { updateCacheStatusAfterPersist(child, container); } persistedChildren = container.getUpdatedChildBuffer(); - for (IMNode child : persistedChildren.values()) { + for (ICacheMNode child : persistedChildren.values()) { updateCacheStatusAfterPersist(child, container); } } - private void updateCacheStatusAfterPersist(IMNode node, ICachedMNodeContainer container) { + private void updateCacheStatusAfterPersist(ICacheMNode node, ICachedMNodeContainer container) { CacheEntry cacheEntry = getCacheEntry(node); cacheEntry.setVolatile(false); container.moveMNodeToCache(node.getName()); @@ -266,8 +267,8 @@ private void updateCacheStatusAfterPersist(IMNode node, ICachedMNodeContainer co * @return null if not exist */ @Override - public IDatabaseMNode collectUpdatedStorageGroupMNodes() { - IDatabaseMNode storageGroupMNode = nodeBuffer.getUpdatedStorageGroupMNode(); + public IDatabaseMNode collectUpdatedStorageGroupMNodes() { + IDatabaseMNode storageGroupMNode = nodeBuffer.getUpdatedStorageGroupMNode(); nodeBuffer.setUpdatedStorageGroupMNode(null); return storageGroupMNode; } @@ -279,21 +280,22 @@ public IDatabaseMNode collectUpdatedStorageGroupMNodes() { * @return */ @Override - public List collectVolatileMNodes() { - List nodesToPersist = new ArrayList<>(); + public List collectVolatileMNodes() { + List nodesToPersist = new ArrayList<>(); nodeBuffer.forEachNode(node -> collectVolatileNodes(node, nodesToPersist)); nodeBuffer.clear(); return nodesToPersist; } - private void collectVolatileNodes(IMNode node, List nodesToPersist) { - Iterator bufferIterator = getCachedMNodeContainer(node).getChildrenBufferIterator(); + private void collectVolatileNodes(ICacheMNode node, List nodesToPersist) { + Iterator bufferIterator = + getCachedMNodeContainer(node).getChildrenBufferIterator(); if (bufferIterator.hasNext()) { nodesToPersist.add(node); } - IMNode child; + ICacheMNode child; while (bufferIterator.hasNext()) { child = bufferIterator.next(); collectVolatileNodes(child, nodesToPersist); @@ -301,11 +303,11 @@ private void collectVolatileNodes(IMNode node, List nodesToPersist) { } @Override - public void remove(IMNode node) { + public void remove(ICacheMNode node) { removeRecursively(node); } - private void removeOne(CacheEntry cacheEntry, IMNode node) { + private void removeOne(CacheEntry cacheEntry, ICacheMNode node) { if (cacheEntry.isVolatile()) { nodeBuffer.remove(cacheEntry); } else { @@ -320,13 +322,13 @@ private void removeOne(CacheEntry cacheEntry, IMNode node) { memManager.releaseMemResource(node); } - private void removeRecursively(IMNode node) { + private void removeRecursively(ICacheMNode node) { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null) { return; } removeOne(cacheEntry, node); - for (IMNode child : node.getChildren().values()) { + for (ICacheMNode child : node.getChildren().values()) { removeRecursively(child); } } @@ -339,7 +341,7 @@ private void removeRecursively(IMNode node) { */ @Override public synchronized boolean evict() { - IMNode node = null; + ICacheMNode node = null; CacheEntry cacheEntry = null; List evictedMNodes = new ArrayList<>(); boolean isSuccess = false; @@ -375,8 +377,8 @@ public synchronized boolean evict() { return !evictedMNodes.isEmpty(); } - private void collectEvictedMNodes(IMNode node, List evictedMNodes) { - for (IMNode child : node.getChildren().values()) { + private void collectEvictedMNodes(ICacheMNode node, List evictedMNodes) { + for (ICacheMNode child : node.getChildren().values()) { removeFromNodeCache(getCacheEntry(child)); child.setCacheEntry(null); evictedMNodes.add(child); @@ -393,7 +395,7 @@ private void collectEvictedMNodes(IMNode node, List evictedMNodes) { * @param node */ @Override - public void pinMNode(IMNode node) throws MNodeNotPinnedException { + public void pinMNode(ICacheMNode node) throws MNodeNotPinnedException { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null || !cacheEntry.isPinned()) { throw new MNodeNotPinnedException(); @@ -408,7 +410,7 @@ public void pinMNode(IMNode node) throws MNodeNotPinnedException { } } - private void pinMNodeWithMemStatusUpdate(IMNode node) { + private void pinMNodeWithMemStatusUpdate(ICacheMNode node) { CacheEntry cacheEntry = getCacheEntry(node); // update memory status first if (cacheEntry == null) { @@ -420,11 +422,11 @@ private void pinMNodeWithMemStatusUpdate(IMNode node) { doPin(node); } - private void doPin(IMNode node) { + private void doPin(ICacheMNode node) { CacheEntry cacheEntry = getCacheEntry(node); // do pin MNode in memory if (!cacheEntry.isPinned()) { - IMNode parent = node.getParent(); + ICacheMNode parent = node.getParent(); if (!node.isDatabase()) { getCacheEntry(parent).pin(); } @@ -442,7 +444,7 @@ private void doPin(IMNode node) { * @return */ @Override - public boolean unPinMNode(IMNode node) { + public boolean unPinMNode(ICacheMNode node) { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null) { return false; @@ -451,7 +453,7 @@ public boolean unPinMNode(IMNode node) { return doUnPin(node); } - private boolean doUnPin(IMNode node) { + private boolean doUnPin(ICacheMNode node) { CacheEntry cacheEntry = getCacheEntry(node); boolean isPinStatusChanged = false; @@ -471,13 +473,13 @@ private boolean doUnPin(IMNode node) { } @Override - public void clear(IMNode root) { + public void clear(ICacheMNode root) { clearMNodeInMemory(root); clearNodeCache(); nodeBuffer.clear(); } - private void clearMNodeInMemory(IMNode node) { + private void clearMNodeInMemory(ICacheMNode node) { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null) { return; @@ -488,13 +490,13 @@ private void clearMNodeInMemory(IMNode node) { } memManager.releaseMemResource(node); - Iterator iterator = getCachedMNodeContainer(node).getChildrenIterator(); + Iterator iterator = getCachedMNodeContainer(node).getChildrenIterator(); while (iterator.hasNext()) { clearMNodeInMemory(iterator.next()); } } - protected CacheEntry getCacheEntry(IMNode node) { + protected CacheEntry getCacheEntry(ICacheMNode node) { return node.getCacheEntry(); } @@ -503,7 +505,7 @@ public long getBufferNodeNum() { return nodeBuffer.getBufferNodeNum(); } - protected void initCacheEntryForNode(IMNode node) { + protected void initCacheEntryForNode(ICacheMNode node) { node.setCacheEntry(new CacheEntry()); } @@ -511,15 +513,15 @@ protected void initCacheEntryForNode(IMNode node) { // MNode update operation like node replace may reset the mapping between cacheEntry and node, // thus it should be updated - protected abstract void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, IMNode node); + protected abstract void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, ICacheMNode node); protected abstract boolean isInNodeCache(CacheEntry cacheEntry); - protected abstract void addToNodeCache(CacheEntry cacheEntry, IMNode node); + protected abstract void addToNodeCache(CacheEntry cacheEntry, ICacheMNode node); protected abstract void removeFromNodeCache(CacheEntry cacheEntry); - protected abstract IMNode getPotentialNodeTobeEvicted(); + protected abstract ICacheMNode getPotentialNodeTobeEvicted(); protected abstract void clearNodeCache(); @@ -527,8 +529,8 @@ private static class NodeBuffer { private static final int MAP_NUM = 17; - private IDatabaseMNode updatedStorageGroupMNode; - private Map[] maps = new Map[MAP_NUM]; + private IDatabaseMNode updatedStorageGroupMNode; + private Map[] maps = new Map[MAP_NUM]; NodeBuffer() { for (int i = 0; i < MAP_NUM; i++) { @@ -536,15 +538,15 @@ private static class NodeBuffer { } } - public IDatabaseMNode getUpdatedStorageGroupMNode() { + public IDatabaseMNode getUpdatedStorageGroupMNode() { return updatedStorageGroupMNode; } - public void setUpdatedStorageGroupMNode(IDatabaseMNode updatedStorageGroupMNode) { + public void setUpdatedStorageGroupMNode(IDatabaseMNode updatedStorageGroupMNode) { this.updatedStorageGroupMNode = updatedStorageGroupMNode; } - void put(CacheEntry cacheEntry, IMNode node) { + void put(CacheEntry cacheEntry, ICacheMNode node) { maps[getLoc(cacheEntry)].put(cacheEntry, node); } @@ -552,9 +554,9 @@ void remove(CacheEntry cacheEntry) { maps[getLoc(cacheEntry)].remove(cacheEntry); } - void forEachNode(Consumer action) { - for (Map map : maps) { - for (IMNode node : map.values()) { + void forEachNode(Consumer action) { + for (Map map : maps) { + for (ICacheMNode node : map.values()) { action.accept(node); } } @@ -569,7 +571,7 @@ long getBufferNodeNum() { } void clear() { - for (Map map : maps) { + for (Map map : maps) { map.clear(); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java index f6ee9e52136dd..ec7904a612a98 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java @@ -20,40 +20,40 @@ import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import java.util.List; public interface ICacheManager { - void initRootStatus(IMNode root); + void initRootStatus(ICacheMNode root); - void updateCacheStatusAfterMemoryRead(IMNode node) throws MNodeNotCachedException; + void updateCacheStatusAfterMemoryRead(ICacheMNode node) throws MNodeNotCachedException; - void updateCacheStatusAfterDiskRead(IMNode node); + void updateCacheStatusAfterDiskRead(ICacheMNode node); - void updateCacheStatusAfterAppend(IMNode node); + void updateCacheStatusAfterAppend(ICacheMNode node); - void updateCacheStatusAfterUpdate(IMNode node); + void updateCacheStatusAfterUpdate(ICacheMNode node); - void updateCacheStatusAfterPersist(IMNode node); + void updateCacheStatusAfterPersist(ICacheMNode node); - IDatabaseMNode collectUpdatedStorageGroupMNodes(); + IDatabaseMNode collectUpdatedStorageGroupMNodes(); - List collectVolatileMNodes(); + List collectVolatileMNodes(); - void remove(IMNode node); + void remove(ICacheMNode node); boolean evict(); - void pinMNode(IMNode node) throws MNodeNotPinnedException; + void pinMNode(ICacheMNode node) throws MNodeNotPinnedException; - boolean unPinMNode(IMNode node); + boolean unPinMNode(ICacheMNode node); long getBufferNodeNum(); long getCacheNodeNum(); - void clear(IMNode root); + void clear(ICacheMNode root); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java index b3605132ce09e..bf7a1cc80c5dd 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.schemafile; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import java.io.File; @@ -33,7 +33,7 @@ public interface ISchemaFile { * * @return node instance, template name as hash code */ - IMNode init() throws MetadataException; + ICacheMNode init() throws MetadataException; /** * Modify header of schema file corresponding to the database node synchronously @@ -41,16 +41,16 @@ public interface ISchemaFile { * @param sgNode node to be updated * @return true if success */ - boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException; + boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException; /** * Only database node along with its descendents could be flushed into schema file. * * @param node */ - void writeMNode(IMNode node) throws MetadataException, IOException; + void writeMNode(ICacheMNode node) throws MetadataException, IOException; - void delete(IMNode node) throws IOException, MetadataException; + void delete(ICacheMNode node) throws IOException, MetadataException; void close() throws IOException; @@ -58,9 +58,10 @@ public interface ISchemaFile { void sync() throws IOException; - IMNode getChildNode(IMNode parent, String childName) throws MetadataException, IOException; + ICacheMNode getChildNode(ICacheMNode parent, String childName) + throws MetadataException, IOException; - Iterator getChildren(IMNode parent) throws MetadataException, IOException; + Iterator getChildren(ICacheMNode parent) throws MetadataException, IOException; boolean createSnapshot(File snapshotDir); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java index e1a345251d844..72287e6fc6620 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java @@ -20,15 +20,15 @@ import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.database.CacheDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import java.io.File; @@ -44,40 +44,40 @@ public class MockSchemaFile implements ISchemaFile { private PartialPath storageGroupPath; - private IDatabaseMNode storageGroupMNode; + private IDatabaseMNode storageGroupMNode; private long fileTail = 0; - private final Map> mockFile = new HashMap<>(); + private final Map> mockFile = new HashMap<>(); public MockSchemaFile(PartialPath storageGroupPath) { this.storageGroupPath = storageGroupPath; } @Override - public IMNode init() { + public ICacheMNode init() { storageGroupMNode = - new AbstractDatabaseMNode( + new CacheDatabaseMNode( null, storageGroupPath.getTailNode(), CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - writeMNode(storageGroupMNode); - return cloneMNode(storageGroupMNode); + writeMNode(storageGroupMNode.getAsMNode()); + return cloneMNode(storageGroupMNode.getAsMNode()); } @Override - public boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException { - this.storageGroupMNode = cloneMNode(sgNode).getAsDatabaseMNode(); + public boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException { + this.storageGroupMNode = cloneMNode(sgNode.getAsMNode()).getAsDatabaseMNode(); return true; } @Override - public IMNode getChildNode(IMNode parent, String childName) { - Map segment = getSegment(parent); - IMNode result = null; + public ICacheMNode getChildNode(ICacheMNode parent, String childName) { + Map segment = getSegment(parent); + ICacheMNode result = null; if (segment != null) { result = cloneMNode(segment.get(childName)); if (result == null && parent.isEntity()) { - for (IMNode node : segment.values()) { + for (ICacheMNode node : segment.values()) { if (node.isMeasurement() && childName.equals(node.getAsMeasurementMNode().getAlias())) { result = cloneMNode(node); break; @@ -89,9 +89,9 @@ public IMNode getChildNode(IMNode parent, String childName) { } @Override - public Iterator getChildren(IMNode parent) { + public Iterator getChildren(ICacheMNode parent) { - Map segment = getSegment(parent); + Map segment = getSegment(parent); if (segment == null) { return Collections.emptyIterator(); } @@ -104,7 +104,7 @@ public boolean createSnapshot(File snapshotDir) { } @Override - public void writeMNode(IMNode parent) { + public void writeMNode(ICacheMNode parent) { ICachedMNodeContainer container = getCachedMNodeContainer(parent); long address = container.getSegmentAddress(); if (container.isVolatile()) { @@ -115,8 +115,8 @@ public void writeMNode(IMNode parent) { write(address, container.getNewChildBuffer()); } - private void write(long address, Map nodeMap) { - for (IMNode node : nodeMap.values()) { + private void write(long address, Map nodeMap) { + for (ICacheMNode node : nodeMap.values()) { if (!node.isMeasurement()) { ICachedMNodeContainer container = getCachedMNodeContainer(node); if (container.isVolatile()) { @@ -128,19 +128,19 @@ private void write(long address, Map nodeMap) { } @Override - public void delete(IMNode targetNode) { - IMNode removedNode = getSegment(targetNode.getParent()).remove(targetNode.getName()); + public void delete(ICacheMNode targetNode) { + ICacheMNode removedNode = getSegment(targetNode.getParent()).remove(targetNode.getName()); if (removedNode == null || removedNode.isMeasurement()) { return; } deleteMNodeRecursively(removedNode); } - private void deleteMNodeRecursively(IMNode node) { + private void deleteMNodeRecursively(ICacheMNode node) { ICachedMNodeContainer container = getCachedMNodeContainer(node); - Map removedSegment = mockFile.remove(container.getSegmentAddress()); + Map removedSegment = mockFile.remove(container.getSegmentAddress()); if (removedSegment != null) { - for (IMNode child : removedSegment.values()) { + for (ICacheMNode child : removedSegment.values()) { deleteMNodeRecursively(child); } } @@ -157,11 +157,11 @@ public void clear() { mockFile.clear(); } - private long getSegmentAddress(IMNode node) { + private long getSegmentAddress(ICacheMNode node) { return getCachedMNodeContainer(node).getSegmentAddress(); } - private Map getSegment(IMNode node) { + private Map getSegment(ICacheMNode node) { return mockFile.get(getSegmentAddress(node)); } @@ -171,14 +171,14 @@ private long allocateSegment() { return address; } - static IMNode cloneMNode(IMNode node) { + static ICacheMNode cloneMNode(ICacheMNode node) { if (node == null) { return null; } if (node.isMeasurement()) { - IMeasurementMNode measurementMNode = node.getAsMeasurementMNode(); - IMeasurementMNode result = - MeasurementMNode.getMeasurementMNode( + IMeasurementMNode measurementMNode = node.getAsMeasurementMNode(); + CacheMeasurementMNode result = + new CacheMeasurementMNode( null, measurementMNode.getName(), measurementMNode.getSchema(), @@ -186,41 +186,40 @@ static IMNode cloneMNode(IMNode node) { result.setOffset(measurementMNode.getOffset()); return result; } else if (node.isDatabase() && node.isEntity()) { - AbstractDatabaseDeviceMNode result = - new AbstractDatabaseDeviceMNode( + CacheDatabaseDeviceMNode result = + new CacheDatabaseDeviceMNode( null, node.getName(), node.getAsDatabaseMNode().getDataTTL()); result.setAligned(node.getAsEntityMNode().isAligned()); cloneInternalMNodeData(node, result); return result; } else if (node.isEntity()) { - IDeviceMNode result = new AbstractDeviceMNode(null, node.getName()); + CacheDeviceMNode result = new CacheDeviceMNode(null, node.getName()); result.setAligned(node.getAsEntityMNode().isAligned()); cloneInternalMNodeData(node, result); return result; } else if (node.isDatabase()) { - AbstractDatabaseMNode result = - new AbstractDatabaseMNode(null, node.getName(), node.getAsDatabaseMNode().getDataTTL()); + CacheDatabaseMNode result = + new CacheDatabaseMNode(null, node.getName(), node.getAsDatabaseMNode().getDataTTL()); cloneInternalMNodeData(node, result); return result; } else { - BasicMNode result = new BasicMNode(null, node.getName()); + CacheBasicMNode result = new CacheBasicMNode(null, node.getName()); cloneInternalMNodeData(node, result); return result; } } - private static void cloneInternalMNodeData(IMNode node, IMNode result) { - result.setUseTemplate(node.isUseTemplate()); + private static void cloneInternalMNodeData(ICacheMNode node, ICacheMNode result) { ICachedMNodeContainer container = new CachedMNodeContainer(); container.setSegmentAddress((getCachedMNodeContainer(node)).getSegmentAddress()); result.setChildren(container); } - private class MockSchemaFileIterator implements Iterator { + private class MockSchemaFileIterator implements Iterator { - Iterator iterator; + Iterator iterator; - MockSchemaFileIterator(Iterator iterator) { + MockSchemaFileIterator(Iterator iterator) { this.iterator = iterator; } @@ -230,7 +229,7 @@ public boolean hasNext() { } @Override - public IMNode next() { + public ICacheMNode next() { return cloneMNode(iterator.next()); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java index 87f409c1520c2..8a2d3bc9d8c2b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java @@ -55,4 +55,7 @@ public void setStorageGroupSchema(TDatabaseSchema schema) {} public TDatabaseSchema getStorageGroupSchema() { return null; } + + @Override + public void setSchemaTemplateId(int schemaTemplateId) {} } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/AboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java similarity index 66% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/AboveDatabaseMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java index af537151e7ff9..e7f8132e3e23d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/AboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java @@ -16,22 +16,14 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.db.metadata.newnode.abovedatabase; -/** Used to fill the link list of MNode above database in IMTreeBelowSG */ -public class AboveDatabaseMNode extends BasicMNode { - /** - * Constructor of MNode. - * - * @param parent - * @param name - */ - public AboveDatabaseMNode(IMNode parent, String name) { - super(parent, name); - } +import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; - @Override - public boolean isAboveDatabase() { - return true; +public class AboveDatabaseMNode extends AbstractAboveDatabaseMNode + implements IMemMNode { + public AboveDatabaseMNode(IMemMNode parent, String name) { + this.basicMNode = new BasicMNode(parent, name); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java new file mode 100644 index 0000000000000..1057d253e808d --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java @@ -0,0 +1,162 @@ +/* + * 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.metadata.newnode.abovedatabase; + +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; + +public class AbstractAboveDatabaseMNode, BasicNode extends IMNode> + implements IMNode { + + protected BasicNode basicMNode; + + @Override + public String getName() { + return basicMNode.getName(); + } + + @Override + public void setName(String name) { + basicMNode.setName(name); + } + + @Override + public N getParent() { + if (basicMNode.getParent() == null) { + return null; + } + return basicMNode.getParent(); + } + + @Override + public void setParent(N parent) { + basicMNode.setParent(parent); + } + + @Override + public R accept(MNodeVisitor visitor, C context) { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @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) { + return basicMNode.addChild(name, child); + } + + @Override + public N addChild(N child) { + return basicMNode.addChild(child); + } + + @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) { + // TODO + } + + @Override + public IMNodeContainer getChildren() { + return basicMNode.getChildren(); + } + + @Override + public void setChildren(IMNodeContainer children) { + basicMNode.setChildren(children); + } + + @Override + public boolean isAboveDatabase() { + return false; + } + + @Override + public boolean isDatabase() { + return false; + } + + @Override + public boolean isEntity() { + return true; + } + + @Override + public boolean isMeasurement() { + return false; + } + + @Override + public MNodeType getMNodeType(Boolean isConfig) { + return MNodeType.INTERNAL; + } + + @Override + public IDatabaseMNode getAsDatabaseMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IDeviceMNode getAsEntityMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public IMeasurementMNode getAsMeasurementMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java new file mode 100644 index 0000000000000..50045a2cc55f2 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java @@ -0,0 +1,41 @@ +/* + * 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.metadata.newnode.abovedatabase; + +import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; + +public class CacheAboveDatabaseMNode + extends AbstractAboveDatabaseMNode implements ICacheMNode { + + public CacheAboveDatabaseMNode(ICacheMNode parent, String name) { + this.basicMNode = new CacheBasicMNode(parent, name); + } + + @Override + public CacheEntry getCacheEntry() { + throw new UnsupportedOperationException("Wrong MNode Type"); + } + + @Override + public void setCacheEntry(CacheEntry cacheEntry) { + throw new UnsupportedOperationException("Wrong MNode Type"); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java index 4011d27f4516c..5c42de38d2ea8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java @@ -288,7 +288,7 @@ public IMeasurementMNode getAsMeasurementMNode() { @Override public R accept(MNodeVisitor visitor, C context) { - return visitor.visitInternalMNode(this, context); + return visitor.visitBasicMNode(this, context); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java index 7b9ddedd25ce1..f61c4cf1a76c1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java @@ -282,7 +282,7 @@ public IMeasurementMNode getAsMeasurementMNode() { @Override public R accept(MNodeVisitor visitor, C context) { - return visitor.visitInternalMNode(this, context); + return visitor.visitBasicMNode(this, context); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java index 5b15d4b996452..30404ae397272 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java @@ -39,6 +39,10 @@ public AbstractDatabaseMNode(String name) { this.databaseInfo = new DatabaseInfo(name); } + public BasicNode getBasicMNode() { + return basicMNode; + } + @Override public String getName() { return basicMNode.getName(); @@ -161,7 +165,7 @@ public IMeasurementMNode getAsMeasurementMNode() { @Override public R accept(MNodeVisitor visitor, C context) { - return visitor.visitStorageGroupMNode(this, context); + return visitor.visitDatabaseMNode(this, context); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java index a76406a57c592..9562913ea4c1b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java @@ -45,4 +45,9 @@ public CacheEntry getCacheEntry() { public void setCacheEntry(CacheEntry cacheEntry) { basicMNode.setCacheEntry(cacheEntry); } + + @Override + public ICacheMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java index 43a21e29bfa66..231920f5cfe8b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java @@ -53,4 +53,9 @@ public boolean isSchemaTemplatePreUnset() { public void unsetSchemaTemplate() { basicMNode.unsetSchemaTemplate(); } + + @Override + public IConfigMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java index 55a36fd65546a..9333c35e0655a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java @@ -21,7 +21,8 @@ import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.newnode.IMemMNode; -public class DatabaseMNode extends AbstractDatabaseMNode { +public class DatabaseMNode extends AbstractDatabaseMNode + implements IMemMNode { public DatabaseMNode(IMemMNode parent, String name) { super(name); @@ -33,4 +34,9 @@ public DatabaseMNode(IMemMNode parent, String name, long dataTTL) { this(parent, name); setDataTTL(dataTTL); } + + @Override + public IMemMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java index 8f926ba6667ad..821f84352e3ac 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java @@ -21,4 +21,6 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; /** This interface defines a DatabaseMNode's operation interfaces. */ -public interface IDatabaseMNode> extends IMNode, IDatabaseInfo {} +public interface IDatabaseMNode> extends IMNode, IDatabaseInfo { + N getAsMNode(); +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java index 3811a4d266020..85d6ef441e0a3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java @@ -41,6 +41,10 @@ public AbstractDatabaseDeviceMNode() { this.databaseDeviceInfo = new DatabaseDeviceInfo(); } + public BasicNode getBasicMNode() { + return basicMNode; + } + @Override public String getName() { return basicMNode.getName(); @@ -163,7 +167,7 @@ public IMeasurementMNode getAsMeasurementMNode() { @Override public R accept(MNodeVisitor visitor, C context) { - return visitor.visitStorageGroupEntityMNode(this, context); + return visitor.visitDatabaseDeviceMNode(this, context); } @Override @@ -223,6 +227,11 @@ public void setUseTemplate(boolean useTemplate) { databaseDeviceInfo.setUseTemplate(useTemplate); } + @Override + public void setSchemaTemplateId(int schemaTemplateId) { + databaseDeviceInfo.setSchemaTemplateId(schemaTemplateId); + } + @Override public int getSchemaTemplateId() { return databaseDeviceInfo.getSchemaTemplateId(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java index 1e89677902a4f..222586844d04f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java @@ -21,10 +21,16 @@ import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.newnode.IMemMNode; -public class DatabaseDeviceMNode extends AbstractDatabaseDeviceMNode { +public class DatabaseDeviceMNode extends AbstractDatabaseDeviceMNode + implements IMemMNode { public DatabaseDeviceMNode(IMemMNode parent, String name, long dataTTL) { super(); this.basicMNode = new BasicMNode(parent, name); setDataTTL(dataTTL); } + + @Override + public IMemMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java index a5b03bd24a550..27ec99a316efc 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java @@ -39,6 +39,10 @@ public AbstractDeviceMNode() { this.deviceInfo = new DeviceInfo(); } + public BasicNode getBasicMNode() { + return basicMNode; + } + @Override public String getName() { return basicMNode.getName(); @@ -110,12 +114,12 @@ public void moveDataToNewMNode(N newMNode) { } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { return basicMNode.getChildren(); } @Override - public void setChildren(IMNodeContainer children) { + public void setChildren(IMNodeContainer children) { basicMNode.setChildren(children); } @@ -194,6 +198,11 @@ public void setUseTemplate(boolean useTemplate) { deviceInfo.setUseTemplate(useTemplate); } + @Override + public void setSchemaTemplateId(int schemaTemplateId) { + deviceInfo.setSchemaTemplateId(schemaTemplateId); + } + @Override public int getSchemaTemplateId() { return deviceInfo.getSchemaTemplateId(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java index 855c8785f2449..459cbc9d792ba 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java @@ -38,4 +38,9 @@ public CacheEntry getCacheEntry() { public void setCacheEntry(CacheEntry cacheEntry) { basicMNode.setCacheEntry(cacheEntry); } + + @Override + public ICacheMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java index 1540ecd59b1b3..b4067eccf4a22 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java @@ -137,6 +137,11 @@ public void setUseTemplate(boolean useTemplate) { this.useTemplate = useTemplate; } + @Override + public void setSchemaTemplateId(int schemaTemplateId) { + this.schemaTemplateId = schemaTemplateId; + } + @Override public boolean isAligned() { return isAligned; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java index ae06545d68f99..8e009763e2adb 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java @@ -21,9 +21,14 @@ import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.newnode.IMemMNode; -public class DeviceMNode extends AbstractDeviceMNode { +public class DeviceMNode extends AbstractDeviceMNode implements IMemMNode { public DeviceMNode(IMemMNode parent, String name) { this.basicMNode = new BasicMNode(parent, name); } + + @Override + public IMemMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java index 6eb1309e6219f..455f0588bcaae 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java @@ -36,6 +36,8 @@ public interface IDeviceInfo { void setUseTemplate(boolean useTemplate); + void setSchemaTemplateId(int schemaTemplateId); + /** @return the logic id of template set or activated on this node, id>=-1 */ int getSchemaTemplateId(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java index bc10f76b467ca..46ac8706201b4 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java @@ -20,4 +20,6 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; -public interface IDeviceMNode> extends IMNode, IDeviceInfo {} +public interface IDeviceMNode> extends IMNode, IDeviceInfo { + N getAsMNode(); +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java index 3d7e08523da13..1aa9c549fa973 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java @@ -42,10 +42,14 @@ public abstract class AbstractMeasurementMNode, BasicNode ex protected BasicNode basicMNode; /** @param alias alias of measurementName */ - public AbstractMeasurementMNode(N parent, String name, IMeasurementSchema schema, String alias) { + public AbstractMeasurementMNode(IMeasurementSchema schema, String alias) { this.measurementInfo = new MeasurementInfo(schema, alias); } + public BasicNode getBasicMNode() { + return basicMNode; + } + @Override public String getName() { return basicMNode.getName(); @@ -214,17 +218,17 @@ public MNodeType getMNodeType(Boolean isConfig) { } @Override - public IDatabaseMNode getAsDatabaseMNode() { + public IDatabaseMNode getAsDatabaseMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsEntityMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } @Override - public IMeasurementMNode getAsMeasurementMNode() { - return this; + public IMeasurementMNode getAsMeasurementMNode() { + throw new UnsupportedOperationException("Wrong MNode Type"); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java index 7276e19b8a613..971a431a27b89 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java @@ -28,7 +28,7 @@ public class CacheMeasurementMNode extends AbstractMeasurementMNode> extends IMNode, IMeasurementInfo { - @Override - N getParent(); + N getAsMNode(); MeasurementPath getMeasurementPath(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java index 604645c7da063..26a1b35aa0221 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java @@ -22,10 +22,16 @@ import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; -public class MeasurementMNode extends AbstractMeasurementMNode { +public class MeasurementMNode extends AbstractMeasurementMNode + implements IMemMNode { public MeasurementMNode(IMemMNode parent, String name, IMeasurementSchema schema, String alias) { - super(parent, name, schema, alias); + super(schema, alias); this.basicMNode = new BasicMNode(parent, name); } + + @Override + public IMemMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java index e5eb6c78b90c7..da162443efe2d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java @@ -43,9 +43,10 @@ import org.apache.iotdb.db.metadata.logfile.SchemaLogWriter; import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; import org.apache.iotdb.db.metadata.metric.SchemaRegionCachedMetric; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGCachedImpl; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; @@ -601,7 +602,7 @@ public void createTimeseries(ICreateTimeSeriesPlan plan, long offset) throws Met try { PartialPath path = plan.getPath(); - IMeasurementMNode leafMNode; + IMeasurementMNode leafMNode; // using try-catch to restore seriesNumberMonitor's state while create failed try { SchemaUtils.checkDataTypeWithEncoding(plan.getDataType(), plan.getEncoding()); @@ -634,11 +635,11 @@ public void createTimeseries(ICreateTimeSeriesPlan plan, long offset) throws Met // info // in tagFile to recover index directly tagManager.recoverIndex(offset, leafMNode); - mtree.pinMNode(leafMNode); + mtree.pinMNode(leafMNode.getAsMNode()); } else if (plan.getTags() != null) { // tag key, tag value tagManager.addIndex(plan.getTags(), leafMNode); - mtree.pinMNode(leafMNode); + mtree.pinMNode(leafMNode.getAsMNode()); } // write log @@ -653,11 +654,11 @@ public void createTimeseries(ICreateTimeSeriesPlan plan, long offset) throws Met } if (offset != -1) { leafMNode.setOffset(offset); - mtree.updateMNode(leafMNode); + mtree.updateMNode(leafMNode.getAsMNode()); } } finally { - mtree.unPinMNode(leafMNode); + mtree.unPinMNode(leafMNode.getAsMNode()); } } catch (IOException e) { @@ -728,7 +729,7 @@ public void createAlignedTimeSeries(ICreateAlignedTimeSeriesPlan plan) throws Me List encodings = plan.getEncodings(); List> tagsList = plan.getTagsList(); List> attributesList = plan.getAttributesList(); - List measurementMNodeList; + List> measurementMNodeList; // using try-catch to restore seriesNumberMonitor's state while create failed try { for (int i = 0; i < measurements.size(); i++) { @@ -761,13 +762,13 @@ public void createAlignedTimeSeries(ICreateAlignedTimeSeriesPlan plan) throws Me if (tagOffsets != null && !plan.getTagOffsets().isEmpty() && isRecovering) { if (tagOffsets.get(i) != -1) { tagManager.recoverIndex(plan.getTagOffsets().get(i), measurementMNodeList.get(i)); - mtree.pinMNode(measurementMNodeList.get(i)); + mtree.pinMNode(measurementMNodeList.get(i).getAsMNode()); } } else if (tagsList != null && !tagsList.isEmpty()) { if (tagsList.get(i) != null) { // tag key, tag value tagManager.addIndex(tagsList.get(i), measurementMNodeList.get(i)); - mtree.pinMNode(measurementMNodeList.get(i)); + mtree.pinMNode(measurementMNodeList.get(i).getAsMNode()); } } } @@ -800,12 +801,12 @@ public void createAlignedTimeSeries(ICreateAlignedTimeSeriesPlan plan) throws Me for (int i = 0; i < measurements.size(); i++) { if (tagOffsets.get(i) != -1) { measurementMNodeList.get(i).setOffset(tagOffsets.get(i)); - mtree.updateMNode(measurementMNodeList.get(i)); + mtree.updateMNode(measurementMNodeList.get(i).getAsMNode()); } } } finally { - for (IMeasurementMNode measurementMNode : measurementMNodeList) { - mtree.unPinMNode(measurementMNode); + for (IMeasurementMNode measurementMNode : measurementMNodeList) { + mtree.unPinMNode(measurementMNode.getAsMNode()); } } } catch (IOException e) { @@ -889,7 +890,7 @@ public void deleteTimeseriesInBlackList(PathPatternTree patternTree) throws Meta private void deleteSingleTimeseriesInBlackList(PartialPath path) throws MetadataException, IOException { - IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); + IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); removeFromTagInvertedIndex(measurementMNode); regionStatistics.deleteTimeseries(1L); @@ -901,7 +902,7 @@ private void deleteSingleTimeseriesInBlackList(PartialPath path) /** @param path full path from root to leaf node */ private void deleteOneTimeseriesUpdateStatistics(PartialPath path) throws MetadataException, IOException { - IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); + IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); removeFromTagInvertedIndex(measurementMNode); regionStatistics.deleteTimeseries(1L); @@ -919,15 +920,15 @@ private void deleteOneTimeseriesUpdateStatistics(PartialPath path) * * @param path path */ - private IMNode getDeviceNodeWithAutoCreate(PartialPath path) + private ICacheMNode getDeviceNodeWithAutoCreate(PartialPath path) throws IOException, MetadataException { - IMNode node = mtree.getDeviceNodeWithAutoCreating(path); + ICacheMNode node = mtree.getDeviceNodeWithAutoCreating(path); writeToMLog(SchemaRegionWritePlanFactory.getAutoCreateDeviceMNodePlan(node.getPartialPath())); return node; } private void autoCreateDeviceMNode(IAutoCreateDeviceMNodePlan plan) throws MetadataException { - IMNode node = mtree.getDeviceNodeWithAutoCreating(plan.getPath()); + ICacheMNode node = mtree.getDeviceNodeWithAutoCreating(plan.getPath()); mtree.unPinMNode(node); try { writeToMLog(plan); @@ -961,35 +962,36 @@ public List fetchSchema( * @param offset offset in the tag file */ private void changeOffset(PartialPath path, long offset) throws MetadataException { - IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); + IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); try { measurementMNode.setOffset(offset); - mtree.updateMNode(measurementMNode); + mtree.updateMNode(measurementMNode.getAsMNode()); if (isRecovering) { try { if (tagManager.recoverIndex(offset, measurementMNode)) { - mtree.pinMNode(measurementMNode); + mtree.pinMNode(measurementMNode.getAsMNode()); } } catch (IOException e) { throw new MetadataException(e); } } } finally { - mtree.unPinMNode(measurementMNode); + mtree.unPinMNode(measurementMNode.getAsMNode()); } } private void changeAlias(PartialPath path, String alias) throws MetadataException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(path); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(path); try { + IDeviceMNode device = leafMNode.getParent().getAsEntityMNode(); if (leafMNode.getAlias() != null) { - leafMNode.getParent().deleteAliasChild(leafMNode.getAlias()); + device.deleteAliasChild(leafMNode.getAlias()); } - leafMNode.getParent().addAlias(alias, leafMNode); + device.addAlias(alias, leafMNode); mtree.setAlias(leafMNode, alias); } finally { - mtree.unPinMNode(leafMNode); + mtree.unPinMNode(leafMNode.getAsMNode()); } try { @@ -1016,7 +1018,7 @@ public void upsertAliasAndTagsAndAttributes( Map attributesMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { // upsert alias upsertAlias(alias, fullPath, leafMNode); @@ -1030,31 +1032,33 @@ public void upsertAliasAndTagsAndAttributes( long offset = tagManager.writeTagFile(tagsMap, attributesMap); writeToMLog(SchemaRegionWritePlanFactory.getChangeTagOffsetPlan(fullPath, offset)); leafMNode.setOffset(offset); - mtree.updateMNode(leafMNode); + mtree.updateMNode(leafMNode.getAsMNode()); // update inverted Index map if (tagsMap != null && !tagsMap.isEmpty()) { tagManager.addIndex(tagsMap, leafMNode); - mtree.pinMNode(leafMNode); + mtree.pinMNode(leafMNode.getAsMNode()); } return; } tagManager.updateTagsAndAttributes(tagsMap, attributesMap, leafMNode); } finally { - mtree.unPinMNode(leafMNode); + mtree.unPinMNode(leafMNode.getAsMNode()); } } - private void upsertAlias(String alias, PartialPath fullPath, IMeasurementMNode leafMNode) + private void upsertAlias( + String alias, PartialPath fullPath, IMeasurementMNode leafMNode) throws MetadataException, IOException { // upsert alias if (alias != null && !alias.equals(leafMNode.getAlias())) { - if (!leafMNode.getParent().addAlias(alias, leafMNode)) { + IDeviceMNode device = leafMNode.getParent().getAsEntityMNode(); + if (!device.addAlias(alias, leafMNode)) { throw new MetadataException("The alias already exists."); } if (leafMNode.getAlias() != null) { - leafMNode.getParent().deleteAliasChild(leafMNode.getAlias()); + device.deleteAliasChild(leafMNode.getAlias()); } mtree.setAlias(leafMNode, alias); @@ -1073,20 +1077,20 @@ private void upsertAlias(String alias, PartialPath fullPath, IMeasurementMNode l @Override public void addAttributes(Map attributesMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { // no tag or attribute, we need to add a new record in log if (leafMNode.getOffset() < 0) { long offset = tagManager.writeTagFile(Collections.emptyMap(), attributesMap); writeToMLog(SchemaRegionWritePlanFactory.getChangeTagOffsetPlan(fullPath, offset)); leafMNode.setOffset(offset); - mtree.updateMNode(leafMNode); + mtree.updateMNode(leafMNode.getAsMNode()); return; } tagManager.addAttributes(attributesMap, fullPath, leafMNode); } finally { - mtree.updateMNode(leafMNode); + mtree.updateMNode(leafMNode.getAsMNode()); } } @@ -1100,23 +1104,23 @@ public void addAttributes(Map attributesMap, PartialPath fullPat @Override public void addTags(Map tagsMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { // no tag or attribute, we need to add a new record in log if (leafMNode.getOffset() < 0) { long offset = tagManager.writeTagFile(tagsMap, Collections.emptyMap()); writeToMLog(SchemaRegionWritePlanFactory.getChangeTagOffsetPlan(fullPath, offset)); leafMNode.setOffset(offset); - mtree.updateMNode(leafMNode); + mtree.updateMNode(leafMNode.getAsMNode()); // update inverted Index map tagManager.addIndex(tagsMap, leafMNode); - mtree.pinMNode(leafMNode); + mtree.pinMNode(leafMNode.getAsMNode()); return; } tagManager.addTags(tagsMap, fullPath, leafMNode); } finally { - mtree.unPinMNode(leafMNode); + mtree.unPinMNode(leafMNode.getAsMNode()); } } @@ -1131,16 +1135,16 @@ public void addTags(Map tagsMap, PartialPath fullPath) @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public void dropTagsOrAttributes(Set keySet, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { // no tag or attribute, just do nothing. if (leafMNode.getOffset() != -1) { tagManager.dropTagsOrAttributes(keySet, fullPath, leafMNode); // when the measurementMNode was added to tagIndex, it was pinned - mtree.unPinMNode(leafMNode); + mtree.unPinMNode(leafMNode.getAsMNode()); } } finally { - mtree.unPinMNode(leafMNode); + mtree.unPinMNode(leafMNode.getAsMNode()); } } @@ -1155,7 +1159,7 @@ public void dropTagsOrAttributes(Set keySet, PartialPath fullPath) @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public void setTagsOrAttributesValue(Map alterMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { if (leafMNode.getOffset() < 0) { throw new MetadataException( @@ -1165,7 +1169,7 @@ public void setTagsOrAttributesValue(Map alterMap, PartialPath f // tags, attributes tagManager.setTagsOrAttributesValue(alterMap, fullPath, leafMNode); } finally { - mtree.unPinMNode(leafMNode); + mtree.unPinMNode(leafMNode.getAsMNode()); } } @@ -1182,7 +1186,7 @@ public void setTagsOrAttributesValue(Map alterMap, PartialPath f @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public void renameTagOrAttributeKey(String oldKey, String newKey, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { if (leafMNode.getOffset() < 0) { throw new MetadataException( @@ -1192,13 +1196,13 @@ public void renameTagOrAttributeKey(String oldKey, String newKey, PartialPath fu // tags, attributes tagManager.renameTagOrAttributeKey(oldKey, newKey, fullPath, leafMNode); } finally { - mtree.unPinMNode(leafMNode); + mtree.unPinMNode(leafMNode.getAsMNode()); } } /** remove the node from the tag inverted index */ @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning - private void removeFromTagInvertedIndex(IMeasurementMNode node) throws IOException { + private void removeFromTagInvertedIndex(IMeasurementMNode node) throws IOException { tagManager.removeFromTagInvertedIndex(node); } // endregion @@ -1209,7 +1213,7 @@ public void activateSchemaTemplate(IActivateTemplateInClusterPlan plan, Template throws MetadataException { try { - IMNode deviceNode = getDeviceNodeWithAutoCreate(plan.getActivatePath()); + ICacheMNode deviceNode = getDeviceNodeWithAutoCreate(plan.getActivatePath()); try { mtree.activateTemplate(plan.getActivatePath(), template); writeToMLog(plan); diff --git a/server/src/main/java/org/apache/iotdb/db/protocol/rest/handler/ExceptionHandler.java b/server/src/main/java/org/apache/iotdb/db/protocol/rest/handler/ExceptionHandler.java index 5cc980fcc5de5..f5aee2f325efd 100644 --- a/server/src/main/java/org/apache/iotdb/db/protocol/rest/handler/ExceptionHandler.java +++ b/server/src/main/java/org/apache/iotdb/db/protocol/rest/handler/ExceptionHandler.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.exception.IoTDBException; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.exception.StorageEngineException; -import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException; +import org.apache.iotdb.db.exception.metadata.DatabaseNotSetException; import org.apache.iotdb.db.exception.query.QueryProcessException; import org.apache.iotdb.db.exception.sql.SemanticException; import org.apache.iotdb.db.exception.sql.StatementAnalyzeException; @@ -47,9 +47,9 @@ public static ExecutionStatus tryCatchException(Exception e) { if (e instanceof QueryProcessException) { responseResult.setMessage(e.getMessage()); responseResult.setCode(((QueryProcessException) e).getErrorCode()); - } else if (e instanceof StorageGroupNotSetException) { + } else if (e instanceof DatabaseNotSetException) { responseResult.setMessage(e.getMessage()); - responseResult.setCode(((StorageGroupNotSetException) e).getErrorCode()); + responseResult.setCode(((DatabaseNotSetException) e).getErrorCode()); } else if (e instanceof StorageEngineException) { responseResult.setMessage(e.getMessage()); responseResult.setCode(((StorageEngineException) e).getErrorCode()); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java index 13dd2a7770eb4..991e1e3897ea5 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java @@ -89,17 +89,17 @@ public void testSetStorageGroupExceptionMessage() { public void testAddAndPathExist() throws MetadataException { String path1 = "root"; root.setStorageGroup(new PartialPath("root.laptop")); - assertTrue(root.isStorageGroupAlreadySet(new PartialPath(path1))); - assertTrue(root.isStorageGroupAlreadySet(new PartialPath("root.laptop"))); - assertTrue(root.isStorageGroupAlreadySet(new PartialPath("root.laptop.d1"))); + assertTrue(root.isDatabaseAlreadySet(new PartialPath(path1))); + assertTrue(root.isDatabaseAlreadySet(new PartialPath("root.laptop"))); + assertTrue(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1"))); } @Test public void testSetStorageGroup() throws IllegalPathException { try { root.setStorageGroup(new PartialPath("root.laptop.d1")); - assertTrue(root.isStorageGroupAlreadySet(new PartialPath("root.laptop.d1"))); - assertTrue(root.isStorageGroupAlreadySet(new PartialPath("root.laptop.d1.s1"))); + assertTrue(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1"))); + assertTrue(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1.s1"))); } catch (MetadataException e) { e.printStackTrace(); fail(e.getMessage()); @@ -122,9 +122,9 @@ public void testSetStorageGroup() throws IllegalPathException { e.printStackTrace(); fail(e.getMessage()); } - assertFalse(root.isStorageGroupAlreadySet(new PartialPath("root.laptop.d1"))); - assertTrue(root.isStorageGroupAlreadySet(new PartialPath("root.laptop"))); - assertTrue(root.isStorageGroupAlreadySet(new PartialPath("root.laptop.d2"))); + assertFalse(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1"))); + assertTrue(root.isDatabaseAlreadySet(new PartialPath("root.laptop"))); + assertTrue(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d2"))); } @Test @@ -255,7 +255,7 @@ public void testSerialization() throws Exception { }; for (int i = 0; i < pathList.length; i++) { root.setStorageGroup(pathList[i]); - IDatabaseMNode storageGroupMNode = root.getStorageGroupNodeByStorageGroupPath(pathList[i]); + IDatabaseMNode storageGroupMNode = root.getDatabaseNodeByDatabasePath(pathList[i]); storageGroupMNode.setDataTTL(i); storageGroupMNode.setDataReplicationFactor(i); storageGroupMNode.setSchemaReplicationFactor(i); @@ -271,7 +271,7 @@ public void testSerialization() throws Exception { for (int i = 0; i < pathList.length; i++) { TDatabaseSchema storageGroupSchema = - newTree.getStorageGroupNodeByStorageGroupPath(pathList[i]).getStorageGroupSchema(); + newTree.getDatabaseNodeByDatabasePath(pathList[i]).getStorageGroupSchema(); Assert.assertEquals(i, storageGroupSchema.getTTL()); Assert.assertEquals(i, storageGroupSchema.getSchemaReplicationFactor()); Assert.assertEquals(i, storageGroupSchema.getDataReplicationFactor()); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java index 7d2fb985e6248..2db821f7fea23 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java @@ -145,7 +145,7 @@ public void testAddLeftNodePathWithAlias() throws MetadataException { public void testSetStorageGroup() throws MetadataException { try { storageGroup = getStorageGroup(new PartialPath("root.laptop.d1")); - assertTrue(root.isStorageGroupAlreadySet(new PartialPath("root.laptop.d1"))); + assertTrue(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1"))); } catch (MetadataException e) { e.printStackTrace(); @@ -190,9 +190,9 @@ public void testSetStorageGroup() throws MetadataException { e.printStackTrace(); fail(e.getMessage()); } - assertFalse(root.isStorageGroupAlreadySet(new PartialPath("root.laptop.d1.s1"))); - assertFalse(root.isStorageGroupAlreadySet(new PartialPath("root.laptop.d1"))); - assertFalse(root.isStorageGroupAlreadySet(new PartialPath("root.laptop"))); + assertFalse(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1.s1"))); + assertFalse(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1"))); + assertFalse(root.isDatabaseAlreadySet(new PartialPath("root.laptop"))); } @Test @@ -200,7 +200,7 @@ public void testSearchStorageGroup() throws MetadataException { String path1 = "root"; String sgPath1 = "root.vehicle"; storageGroup = getStorageGroup(new PartialPath(sgPath1)); - assertTrue(root.isStorageGroupAlreadySet(new PartialPath(path1))); + assertTrue(root.isDatabaseAlreadySet(new PartialPath(path1))); try { storageGroup.createTimeseries( new PartialPath("root.vehicle.d1.s1"), From ad6f1053b9cfa06e072e964fba55f38db250120a Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Thu, 2 Mar 2023 18:12:35 +0800 Subject: [PATCH 03/26] save --- .../persistence/schema/ClusterSchemaInfo.java | 12 +- .../mnode/iterator/MNodeIterator.java | 1 - .../iotdb/db/metadata/mtree/ConfigMTree.java | 94 +++---- .../mtree/MTreeBelowSGCachedImpl.java | 133 +++++----- .../mtree/MTreeBelowSGMemoryImpl.java | 240 +++++++++--------- .../mtree/store/CachedMTreeStore.java | 2 +- .../mtree/store/ConfigMTreeStore.java | 204 +++++++-------- .../db/metadata/mtree/store/IMTreeStore.java | 2 +- .../metadata/mtree/store/MemMTreeStore.java | 15 +- .../ReentrantReadOnlyCachedMTreeStore.java | 38 +-- .../metadata/mtree/traverser/Traverser.java | 31 ++- .../TraverserWithLimitOffsetWrapper.java | 16 +- .../traverser/basic/DatabaseTraverser.java | 12 +- .../traverser/basic/EntityTraverser.java | 15 +- .../mtree/traverser/basic/MNodeTraverser.java | 19 +- .../traverser/basic/MeasurementTraverser.java | 12 +- .../collector/DatabaseCollector.java | 8 +- .../traverser/collector/EntityCollector.java | 8 +- .../collector/MNodeAboveSGCollector.java | 8 +- .../traverser/collector/MNodeCollector.java | 8 +- .../collector/MeasurementCollector.java | 16 +- .../traverser/counter/DatabaseCounter.java | 8 +- .../traverser/counter/EntityCounter.java | 7 +- .../traverser/counter/MeasurementCounter.java | 7 +- .../traverser/updater/EntityUpdater.java | 9 +- .../traverser/updater/MeasurementUpdater.java | 9 +- .../db/metadata/newnode/ConfigMNodeInfo.java | 4 + .../db/metadata/newnode/IConfigMNode.java | 3 + .../newnode/basic/ConfigBasicMNode.java | 5 + .../newnode/database/ConfigDatabaseMNode.java | 5 + .../schemaregion/SchemaRegionMemoryImpl.java | 50 ++-- .../iotdb/db/metadata/template/Template.java | 2 +- 32 files changed, 510 insertions(+), 493 deletions(-) diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java index d5996bae0530a..29933495f4bbc 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java @@ -194,9 +194,7 @@ public TSStatus alterDatabase(DatabaseSchemaPlan plan) { currentSchema.getMaxDataRegionGroupNum()); } - mTree - .getDatabaseNodeByDatabasePath(partialPathName) - .setStorageGroupSchema(currentSchema); + mTree.getDatabaseNodeByDatabasePath(partialPathName).setStorageGroupSchema(currentSchema); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); } catch (MetadataException e) { LOGGER.error(ERROR_NAME, e); @@ -263,8 +261,7 @@ public DatabaseSchemaResp getMatchedDatabaseSchemas(GetDatabasePlan plan) { List matchedPaths = mTree.getMatchedStorageGroups(patternPath, false); for (PartialPath path : matchedPaths) { schemaMap.put( - path.getFullPath(), - mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema()); + path.getFullPath(), mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema()); } result.setSchemaMap(schemaMap); result.setStatus(new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode())); @@ -287,10 +284,7 @@ public TSStatus setTTL(SetTTLPlan plan) { List matchedPaths = mTree.getBelongedStorageGroups(patternPath); if (!matchedPaths.isEmpty()) { for (PartialPath path : matchedPaths) { - mTree - .getDatabaseNodeByDatabasePath(path) - .getStorageGroupSchema() - .setTTL(plan.getTTL()); + mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema().setTTL(plan.getTTL()); } result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); } else { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java index a3a8f135b28e3..ac2676440febe 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java @@ -20,7 +20,6 @@ package org.apache.iotdb.db.metadata.mnode.iterator; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; import java.util.Iterator; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java index ef59525a29d17..4155e6e512b21 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java @@ -25,11 +25,9 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.utils.ThriftConfigNodeSerDeUtils; -import org.apache.iotdb.db.exception.metadata.PathNotExistException; import org.apache.iotdb.db.exception.metadata.DatabaseAlreadySetException; import org.apache.iotdb.db.exception.metadata.DatabaseNotSetException; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.exception.metadata.PathNotExistException; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.ConfigMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.collector.DatabaseCollector; @@ -38,7 +36,6 @@ import org.apache.iotdb.db.metadata.mtree.traverser.counter.DatabaseCounter; import org.apache.iotdb.db.metadata.newnode.IConfigMNode; import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; -import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.ConfigDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; @@ -112,12 +109,12 @@ public void setStorageGroup(PartialPath path) throws MetadataException { while (i < nodeNames.length - 1) { IConfigMNode temp = store.getChild(cur, nodeNames[i]); if (temp == null) { - store.addChild(cur, nodeNames[i], new ConfigBasicMNode(cur,nodeNames[i])); + store.addChild(cur, nodeNames[i], new ConfigBasicMNode(cur, nodeNames[i])); } else if (temp.isDatabase()) { // before create database, check whether the database already exists throw new DatabaseAlreadySetException(temp.getFullPath()); } - cur = store.getChild(cur,nodeNames[i]); + cur = store.getChild(cur, nodeNames[i]); i++; } @@ -132,9 +129,7 @@ public void setStorageGroup(PartialPath path) throws MetadataException { throw new DatabaseAlreadySetException(path.getFullPath(), true); } } else { - ConfigDatabaseMNode databaseMNode = - new ConfigDatabaseMNode( - cur, nodeNames[i]); + ConfigDatabaseMNode databaseMNode = new ConfigDatabaseMNode(cur, nodeNames[i]); databaseMNode.setDataTTL(CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); IConfigMNode result = store.addChild(cur, nodeNames[i], databaseMNode); @@ -194,10 +189,12 @@ private List collectStorageGroups( PartialPath pathPattern, boolean isPrefixMatch, boolean collectInternal) throws MetadataException { List result = new LinkedList<>(); - try (DatabaseCollector> collector = - new DatabaseCollector>(root, pathPattern, store, isPrefixMatch) { + try (DatabaseCollector collector = + new DatabaseCollector, IConfigMNode>( + root, pathPattern, store, isPrefixMatch) { + @Override - protected void collectDatabase(IDatabaseMNode node) { + protected void collectDatabase(IDatabaseMNode node) { result.add(node.getPartialPath()); } }) { @@ -236,7 +233,8 @@ public List getAllStorageGroupPaths() { */ public int getStorageGroupNum(PartialPath pathPattern, boolean isPrefixMatch) throws MetadataException { - try (DatabaseCounter counter = new DatabaseCounter(root, pathPattern, store, isPrefixMatch)) { + try (DatabaseCounter counter = + new DatabaseCounter<>(root, pathPattern, store, isPrefixMatch)) { return (int) counter.count(); } } @@ -277,7 +275,8 @@ public IDatabaseMNode getDatabaseNodeByDatabasePath(PartialPath da * device], return the MNode of root.sg Get database node, the give path don't need to be database * path. */ - public IDatabaseMNode getDatabaseNodeByPath(PartialPath path) throws MetadataException { + public IDatabaseMNode getDatabaseNodeByPath(PartialPath path) + throws MetadataException { String[] nodes = path.getNodes(); if (nodes.length == 0 || !nodes[0].equals(root.getName())) { throw new IllegalPathException(path.getFullPath()); @@ -376,10 +375,10 @@ public IConfigMNode getNodeWithAutoCreate(PartialPath path) throws DatabaseNotSe public Pair, Set> getNodesListInGivenLevel( PartialPath pathPattern, int nodeLevel, boolean isPrefixMatch) throws MetadataException { List result = new LinkedList<>(); - try (MNodeAboveSGCollector collector = - new MNodeAboveSGCollector(root, pathPattern, store, isPrefixMatch) { + try (MNodeAboveSGCollector collector = + new MNodeAboveSGCollector(root, pathPattern, store, isPrefixMatch) { @Override - protected Void collectMNode(IMNode node) { + protected Void collectMNode(IConfigMNode node) { result.add(getPartialPathFromRootToNode(node)); return null; } @@ -407,11 +406,11 @@ protected Void collectMNode(IMNode node) { public Pair, Set> getChildNodePathInNextLevel( PartialPath pathPattern) throws MetadataException { Set result = new TreeSet<>(); - try (MNodeAboveSGCollector collector = - new MNodeAboveSGCollector( + try (MNodeAboveSGCollector collector = + new MNodeAboveSGCollector( root, pathPattern.concatNode(ONE_LEVEL_PATH_WILDCARD), store, false) { @Override - protected Void collectMNode(IMNode node) { + protected Void collectMNode(IConfigMNode node) { result.add( new TSchemaNode( getPartialPathFromRootToNode(node).getFullPath(), @@ -483,10 +482,11 @@ private void checkTemplateOnSubtree(IConfigMNode node) throws MetadataException public List getPathsSetOnTemplate(int templateId, boolean filterPreUnset) throws MetadataException { List resSet = new ArrayList<>(); - try (MNodeCollector collector = - new MNodeCollector(root, new PartialPath(ALL_RESULT_NODES), store, false) { + try (MNodeCollector collector = + new MNodeCollector( + root, new PartialPath(ALL_RESULT_NODES), store, false) { @Override - protected boolean acceptFullMatchedNode(IMNode node) { + protected boolean acceptFullMatchedNode(IConfigMNode node) { if (super.acceptFullMatchedNode(node)) { // if node not set template, go on traversing if (node.getSchemaTemplateId() != NON_TEMPLATE) { @@ -502,20 +502,20 @@ protected boolean acceptFullMatchedNode(IMNode node) { } @Override - protected Void collectMNode(IMNode node) { + protected Void collectMNode(IConfigMNode node) { resSet.add(node.getFullPath()); return null; } @Override - protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfFullMatchedNode(IConfigMNode node) { // descendants of the node cannot set another template, exit from this branch return (node.getSchemaTemplateId() == NON_TEMPLATE) && super.shouldVisitSubtreeOfFullMatchedNode(node); } @Override - protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfInternalMatchedNode(IConfigMNode node) { // descendants of the node cannot set another template, exit from this branch return (node.getSchemaTemplateId() == NON_TEMPLATE) && super.shouldVisitSubtreeOfFullMatchedNode(node); @@ -530,22 +530,22 @@ protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { public Map> getTemplateSetInfo(PartialPath pathPattern) throws MetadataException { Map> result = new HashMap<>(); - try (MNodeCollector collector = - new MNodeCollector(root, pathPattern, store, false) { + try (MNodeCollector collector = + new MNodeCollector(root, pathPattern, store, false) { @Override - protected boolean acceptFullMatchedNode(IMNode node) { + protected boolean acceptFullMatchedNode(IConfigMNode node) { return (node.getSchemaTemplateId() != NON_TEMPLATE) || super.acceptFullMatchedNode(node); } @Override - protected boolean acceptInternalMatchedNode(IMNode node) { + protected boolean acceptInternalMatchedNode(IConfigMNode node) { return (node.getSchemaTemplateId() != NON_TEMPLATE) || super.acceptInternalMatchedNode(node); } @Override - protected Void collectMNode(IMNode node) { + protected Void collectMNode(IConfigMNode node) { result .computeIfAbsent(node.getSchemaTemplateId(), k -> new HashSet<>()) .add(getPartialPathFromRootToNode(node)); @@ -553,14 +553,14 @@ protected Void collectMNode(IMNode node) { } @Override - protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfFullMatchedNode(IConfigMNode node) { // descendants of the node cannot set another template, exit from this branch return (node.getSchemaTemplateId() == NON_TEMPLATE) && super.shouldVisitSubtreeOfFullMatchedNode(node); } @Override - protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfInternalMatchedNode(IConfigMNode node) { // descendants of the node cannot set another template, exit from this branch return (node.getSchemaTemplateId() == NON_TEMPLATE) && super.shouldVisitSubtreeOfFullMatchedNode(node); @@ -583,7 +583,8 @@ public void unsetTemplate(int templateId, PartialPath path) throws MetadataExcep getNodeSetTemplate(templateId, path).unsetSchemaTemplate(); } - private IConfigMNode getNodeSetTemplate(int templateId, PartialPath path) throws MetadataException { + private IConfigMNode getNodeSetTemplate(int templateId, PartialPath path) + throws MetadataException { String[] nodeNames = path.getNodes(); IConfigMNode cur = root; for (int i = 1; i < nodeNames.length; i++) { @@ -604,10 +605,10 @@ private IConfigMNode getNodeSetTemplate(int templateId, PartialPath path) throws // region Serialization and Deserialization public void serialize(OutputStream outputStream) throws IOException { - serializeInternalNode(this.root, outputStream); + serializeConfigBasicMNode(this.root, outputStream); } - private void serializeInternalNode(IConfigMNode node, OutputStream outputStream) + private void serializeConfigBasicMNode(IConfigMNode node, OutputStream outputStream) throws IOException { serializeChildren(node, outputStream); @@ -622,7 +623,7 @@ private void serializeChildren(IConfigMNode node, OutputStream outputStream) thr if (child.isDatabase()) { serializeDatabaseNode(child.getAsDatabaseMNode(), outputStream); } else { - serializeInternalNode(child, outputStream); + serializeConfigBasicMNode(child, outputStream); } } } @@ -645,10 +646,10 @@ public void deserialize(InputStream inputStream) throws IOException { return; } - AbstractDatabaseMNode databaseMNode = deserializeStorageGroupMNode(inputStream); - BasicMNode basicMNode; + ConfigDatabaseMNode databaseMNode = deserializeStorageGroupMNode(inputStream); + ConfigBasicMNode basicMNode; - Stack stack = new Stack<>(); + Stack stack = new Stack<>(); stack.push(databaseMNode); String name = databaseMNode.getName(); @@ -658,7 +659,7 @@ public void deserialize(InputStream inputStream) throws IOException { type = ReadWriteIOUtils.readByte(inputStream); switch (type) { case INTERNAL_MNODE_TYPE: - basicMNode = deserializeInternalMNode(inputStream); + basicMNode = deserializeConfigBasicMNode(inputStream); childNum = ReadWriteIOUtils.readInt(inputStream); while (childNum > 0) { basicMNode.addChild(stack.pop()); @@ -681,16 +682,17 @@ public void deserialize(InputStream inputStream) throws IOException { this.root = stack.peek(); } - private BasicMNode deserializeInternalMNode(InputStream inputStream) throws IOException { - BasicMNode basicMNode = new BasicMNode(null, ReadWriteIOUtils.readString(inputStream)); + private ConfigBasicMNode deserializeConfigBasicMNode(InputStream inputStream) throws IOException { + ConfigBasicMNode basicMNode = + new ConfigBasicMNode(null, ReadWriteIOUtils.readString(inputStream)); basicMNode.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); return basicMNode; } - private AbstractDatabaseMNode deserializeStorageGroupMNode(InputStream inputStream) + private ConfigDatabaseMNode deserializeStorageGroupMNode(InputStream inputStream) throws IOException { - AbstractDatabaseMNode databaseMNode = - new AbstractDatabaseMNode(null, ReadWriteIOUtils.readString(inputStream)); + ConfigDatabaseMNode databaseMNode = + new ConfigDatabaseMNode(null, ReadWriteIOUtils.readString(inputStream)); databaseMNode.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); databaseMNode.setStorageGroupSchema( ThriftConfigNodeSerDeUtils.deserializeTStorageGroupSchema(inputStream)); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index 71129e0b16ddf..2a657e2d7c6ff 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -34,7 +34,6 @@ import org.apache.iotdb.db.exception.metadata.template.TemplateImcompatibeException; import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.CachedMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; @@ -107,15 +106,15 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { private final CachedMTreeStore store; private volatile ICacheMNode storageGroupMNode; private final ICacheMNode rootNode; - private final Function, Map> tagGetter; + private final Function, Map> tagGetter; private final int levelOfSG; // region MTree initialization, clear and serialization public MTreeBelowSGCachedImpl( PartialPath storageGroupPath, - Function, Map> tagGetter, + Function, Map> tagGetter, Runnable flushCallback, - Consumer> measurementProcess, + Consumer> measurementProcess, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics) throws MetadataException, IOException { @@ -127,11 +126,11 @@ public MTreeBelowSGCachedImpl( levelOfSG = storageGroupPath.getNodeLength() - 1; // recover measurement - try (MeasurementCollector collector = - new MeasurementCollector( + try (MeasurementCollector collector = + new MeasurementCollector( this.rootNode, new PartialPath(storageGroupMNode.getFullPath()), this.store, true) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { measurementProcess.accept(node); regionStatistics.addTimeseries(1L); return null; @@ -145,8 +144,8 @@ protected Void collectMeasurement(IMeasurementMNode node) { private MTreeBelowSGCachedImpl( PartialPath storageGroupPath, CachedMTreeStore store, - Consumer> measurementProcess, - Function, Map> tagGetter) + Consumer> measurementProcess, + Function, Map> tagGetter) throws MetadataException { this.store = store; this.storageGroupMNode = store.getRoot(); @@ -155,11 +154,11 @@ private MTreeBelowSGCachedImpl( this.tagGetter = tagGetter; // recover measurement - try (MeasurementCollector collector = - new MeasurementCollector( + try (MeasurementCollector collector = + new MeasurementCollector( this.rootNode, new PartialPath(storageGroupMNode.getFullPath()), this.store, true) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { measurementProcess.accept(node); return null; } @@ -191,8 +190,8 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( String storageGroupFullPath, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - Consumer> measurementProcess, - Function, Map> tagGetter, + Consumer> measurementProcess, + Function, Map> tagGetter, Runnable flushCallback) throws IOException, MetadataException { return new MTreeBelowSGCachedImpl( @@ -598,13 +597,14 @@ private boolean isEmptyInternalMNode(ICacheMNode node) throws MetadataException public List constructSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); - try (MeasurementUpdater updater = - new MeasurementUpdater(rootNode, pathPattern, store, false) { + try (MeasurementUpdater updater = + new MeasurementUpdater(rootNode, pathPattern, store, false) { @Override - protected void updateMeasurement(IMeasurementMNode node) throws MetadataException { + protected void updateMeasurement(IMeasurementMNode node) + throws MetadataException { node.setPreDeleted(true); - store.updateMNode(node); - result.add(getPartialPathFromRootToNode(node)); + store.updateMNode(node.getAsMNode()); + result.add(getPartialPathFromRootToNode(node.getAsMNode())); } }) { updater.update(); @@ -616,13 +616,14 @@ protected void updateMeasurement(IMeasurementMNode node) throws MetadataExceptio public List rollbackSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); - try (MeasurementUpdater updater = - new MeasurementUpdater(rootNode, pathPattern, store, false) { + try (MeasurementUpdater updater = + new MeasurementUpdater(rootNode, pathPattern, store, false) { @Override - protected void updateMeasurement(IMeasurementMNode node) throws MetadataException { + protected void updateMeasurement(IMeasurementMNode node) + throws MetadataException { node.setPreDeleted(false); - store.updateMNode(node); - result.add(getPartialPathFromRootToNode(node)); + store.updateMNode(node.getAsMNode()); + result.add(getPartialPathFromRootToNode(node.getAsMNode())); } }) { updater.update(); @@ -634,12 +635,12 @@ protected void updateMeasurement(IMeasurementMNode node) throws MetadataExceptio public List getPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { List result = new LinkedList<>(); - try (MeasurementCollector collector = - new MeasurementCollector(rootNode, pathPattern, store, false) { + try (MeasurementCollector collector = + new MeasurementCollector(rootNode, pathPattern, store, false) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { - result.add(getPartialPathFromRootToNode(node)); + result.add(getPartialPathFromRootToNode(node.getAsMNode())); } return null; } @@ -653,12 +654,12 @@ protected Void collectMeasurement(IMeasurementMNode node) { public Set getDevicesOfPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { Set result = new HashSet<>(); - try (MeasurementCollector collector = - new MeasurementCollector(rootNode, pathPattern, store, false) { + try (MeasurementCollector collector = + new MeasurementCollector(rootNode, pathPattern, store, false) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { - result.add(getPartialPathFromRootToNode(node).getDevicePath()); + result.add(getPartialPathFromRootToNode(node.getAsMNode()).getDevicePath()); } return null; } @@ -670,7 +671,8 @@ protected Void collectMeasurement(IMeasurementMNode node) { } @Override - public void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException { + public void setAlias(IMeasurementMNode measurementMNode, String alias) + throws MetadataException { store.setAlias(measurementMNode, alias); } @@ -712,10 +714,10 @@ public List fetchSchema( PartialPath pathPattern, Map templateMap, boolean withTags) throws MetadataException { List result = new LinkedList<>(); - try (MeasurementCollector collector = - new MeasurementCollector(rootNode, pathPattern, store, false) { + try (MeasurementCollector collector = + new MeasurementCollector(rootNode, pathPattern, store, false) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { return null; } @@ -786,8 +788,8 @@ public IMeasurementMNode getMeasurementMNode(PartialPath path) @Override public long countAllMeasurement() throws MetadataException { - try (MeasurementCounter measurementCounter = - new MeasurementCounter(rootNode, MetadataConstant.ALL_MATCH_PATTERN, store, false)) { + try (MeasurementCounter measurementCounter = + new MeasurementCounter<>(rootNode, MetadataConstant.ALL_MATCH_PATTERN, store, false)) { return measurementCounter.count(); } } @@ -854,15 +856,15 @@ public Map> constructSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { - try (EntityUpdater updater = - new EntityUpdater(rootNode, entry.getKey(), store, false) { + try (EntityUpdater updater = + new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IDeviceMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId())) { resultTemplateSetInfo.put( node.getPartialPath(), Collections.singletonList(node.getSchemaTemplateId())); node.preDeactivateTemplate(); - store.updateMNode(node); + store.updateMNode(node.getAsMNode()); } } }) { @@ -877,16 +879,16 @@ public Map> rollbackSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { - try (EntityUpdater updater = - new EntityUpdater(rootNode, entry.getKey(), store, false) { + try (EntityUpdater updater = + new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IDeviceMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( node.getPartialPath(), Collections.singletonList(node.getSchemaTemplateId())); node.rollbackPreDeactivateTemplate(); - store.updateMNode(node); + store.updateMNode(node.getAsMNode()); } } }) { @@ -901,16 +903,16 @@ public Map> deactivateTemplateInBlackList( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { - try (EntityUpdater collector = - new EntityUpdater(rootNode, entry.getKey(), store, false) { + try (EntityUpdater collector = + new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IDeviceMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( node.getPartialPath(), Collections.singletonList(node.getSchemaTemplateId())); node.deactivateTemplate(); - store.updateMNode(node); + store.updateMNode(node.getAsMNode()); } } }) { @@ -926,7 +928,8 @@ protected void updateEntity(IDeviceMNode node) throws MetadataException { @Override public long countPathsUsingTemplate(PartialPath pathPattern, int templateId) throws MetadataException { - try (EntityCounter counter = new EntityCounter(rootNode, pathPattern, store, false)) { + try (EntityCounter counter = + new EntityCounter(rootNode, pathPattern, store, false)) { counter.setSchemaTemplateFilter(templateId); return counter.count(); } @@ -965,19 +968,19 @@ public void updateMNode(ICacheMNode node) throws MetadataException { // region Interfaces for schema reader public ISchemaReader getDeviceReader(IShowDevicesPlan showDevicesPlan) throws MetadataException { - EntityCollector collector = - new EntityCollector( + EntityCollector collector = + new EntityCollector( rootNode, showDevicesPlan.getPath(), store, showDevicesPlan.isPrefixMatch()) { @Override - protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { - PartialPath device = getPartialPathFromRootToNode(node); + protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { + PartialPath device = getPartialPathFromRootToNode(node.getAsMNode()); return new ShowDevicesResult(device.getFullPath(), node.isAligned()); } }; if (showDevicesPlan.usingSchemaTemplate()) { collector.setSchemaTemplateFilter(showDevicesPlan.getSchemaTemplateId()); } - TraverserWithLimitOffsetWrapper traverser = + TraverserWithLimitOffsetWrapper traverser = new TraverserWithLimitOffsetWrapper<>( collector, showDevicesPlan.getLimit(), showDevicesPlan.getOffset()); return new ISchemaReader() { @@ -1012,11 +1015,11 @@ public ISchemaReader getTimeSeriesReader( IShowTimeSeriesPlan showTimeSeriesPlan, Function, Map>> tagAndAttributeProvider) throws MetadataException { - MeasurementCollector collector = - new MeasurementCollector( + MeasurementCollector collector = + new MeasurementCollector( rootNode, showTimeSeriesPlan.getPath(), store, showTimeSeriesPlan.isPrefixMatch()) { @Override - protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) { + protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) { return new ITimeSeriesSchemaInfo() { private Pair, Map> tagAndAttribute = null; @@ -1054,19 +1057,19 @@ public boolean isUnderAlignedDevice() { @Override public String getFullPath() { - return getPartialPathFromRootToNode(node).getFullPath(); + return getPartialPathFromRootToNode(node.getAsMNode()).getFullPath(); } @Override public PartialPath getPartialPath() { - return getPartialPathFromRootToNode(node); + return getPartialPathFromRootToNode(node.getAsMNode()); } }; } }; collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate()); - Traverser traverser; + Traverser traverser; if (showTimeSeriesPlan.getLimit() > 0 || showTimeSeriesPlan.getOffset() > 0) { traverser = new TraverserWithLimitOffsetWrapper<>( @@ -1104,11 +1107,11 @@ public ITimeSeriesSchemaInfo next() { public ISchemaReader getNodeReader(IShowNodesPlan showNodesPlan) throws MetadataException { - MNodeCollector collector = - new MNodeCollector( + MNodeCollector collector = + new MNodeCollector( rootNode, showNodesPlan.getPath(), store, showNodesPlan.isPrefixMatch()) { @Override - protected INodeSchemaInfo collectMNode(IMNode node) { + protected INodeSchemaInfo collectMNode(ICacheMNode node) { return new ShowNodesResult( getPartialPathFromRootToNode(node).getFullPath(), node.getMNodeType(false)); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index 8b8a9b01ff002..fff582d43fdc5 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -35,8 +35,6 @@ import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.metadata.MetadataConstant; import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; @@ -52,6 +50,7 @@ import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; @@ -106,18 +105,18 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG { // this implementation is based on memory, thus only MTree write operation must invoke MTreeStore private final MemMTreeStore store; - private volatile IDatabaseMNode storageGroupMNode; - private final IMNode rootNode; - private final Function> tagGetter; + private volatile IMemMNode storageGroupMNode; + private final IMemMNode rootNode; + private final Function, Map> tagGetter; private final int levelOfSG; // region MTree initialization, clear and serialization public MTreeBelowSGMemoryImpl( PartialPath storageGroupPath, - Function> tagGetter, + Function, Map> tagGetter, MemSchemaRegionStatistics regionStatistics) { store = new MemMTreeStore(storageGroupPath, regionStatistics); - this.storageGroupMNode = store.getRoot().getAsDatabaseMNode(); + this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; @@ -126,9 +125,9 @@ public MTreeBelowSGMemoryImpl( private MTreeBelowSGMemoryImpl( PartialPath storageGroupPath, MemMTreeStore store, - Function> tagGetter) { + Function, Map> tagGetter) { this.store = store; - this.storageGroupMNode = store.getRoot().getAsDatabaseMNode(); + this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; @@ -140,9 +139,11 @@ public void clear() { storageGroupMNode = null; } - protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { - this.storageGroupMNode.getParent().replaceChild(this.storageGroupMNode.getName(), newMNode); - this.storageGroupMNode = newMNode; + protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { + this.storageGroupMNode + .getParent() + .replaceChild(this.storageGroupMNode.getName(), newMNode.getAsMNode()); + this.storageGroupMNode = newMNode.getAsMNode(); } @Override @@ -154,8 +155,8 @@ public static MTreeBelowSGMemoryImpl loadFromSnapshot( File snapshotDir, String storageGroupFullPath, MemSchemaRegionStatistics regionStatistics, - Consumer measurementProcess, - Function> tagGetter) + Consumer> measurementProcess, + Function, Map> tagGetter) throws IOException, IllegalPathException { return new MTreeBelowSGMemoryImpl( new PartialPath(storageGroupFullPath), @@ -179,7 +180,7 @@ public static MTreeBelowSGMemoryImpl loadFromSnapshot( * @param alias alias of measurement */ @Override - public IMeasurementMNode createTimeseries( + public IMeasurementMNode createTimeseries( PartialPath path, TSDataType dataType, TSEncoding encoding, @@ -193,12 +194,12 @@ public IMeasurementMNode createTimeseries( } MetaFormatUtils.checkTimeseries(path); PartialPath devicePath = path.getDevicePath(); - IMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); + IMemMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); // synchronize check and add, we need addChild and add Alias become atomic operation // only write on mtree will be synchronized synchronized (this) { - IMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); + IMemMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); MetaFormatUtils.checkTimeseriesProps(path.getFullPath(), props); @@ -209,7 +210,7 @@ public IMeasurementMNode createTimeseries( } if (device.hasChild(leafName)) { - IMNode node = device.getChild(leafName); + IMemMNode node = device.getChild(leafName); if (node.isMeasurement()) { if (node.getAsMeasurementMNode().isPreDeleted()) { throw new MeasurementInBlackListException(path); @@ -228,7 +229,7 @@ public IMeasurementMNode createTimeseries( device.getFullPath()); } - IDeviceMNode entityMNode; + IDeviceMNode entityMNode; if (device.isEntity()) { entityMNode = device.getAsEntityMNode(); } else { @@ -238,13 +239,13 @@ public IMeasurementMNode createTimeseries( } } - IMeasurementMNode measurementMNode = - MeasurementMNode.getMeasurementMNode( - entityMNode, + IMeasurementMNode measurementMNode = + new MeasurementMNode( + entityMNode.getAsMNode(), leafName, new MeasurementSchema(leafName, dataType, encoding, compressor, props), alias); - store.addChild(entityMNode, leafName, measurementMNode); + store.addChild(entityMNode.getAsMNode(), leafName, measurementMNode.getAsMNode()); // link alias to LeafMNode if (alias != null) { entityMNode.addAlias(alias, measurementMNode); @@ -264,7 +265,7 @@ public IMeasurementMNode createTimeseries( * @param compressors compressor */ @Override - public List createAlignedTimeseries( + public List> createAlignedTimeseries( PartialPath devicePath, List measurements, List dataTypes, @@ -272,18 +273,18 @@ public List createAlignedTimeseries( List compressors, List aliasList) throws MetadataException { - List measurementMNodeList = new ArrayList<>(); + List> measurementMNodeList = new ArrayList<>(); MetaFormatUtils.checkSchemaMeasurementNames(measurements); - IMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); + IMemMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); // synchronize check and add, we need addChild operation be atomic. // only write operations on mtree will be synchronized synchronized (this) { - IMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); + IMemMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); for (int i = 0; i < measurements.size(); i++) { if (device.hasChild(measurements.get(i))) { - IMNode node = device.getChild(measurements.get(i)); + IMemMNode node = device.getChild(measurements.get(i)); if (node.isMeasurement()) { if (node.getAsMeasurementMNode().isPreDeleted()) { throw new MeasurementInBlackListException(devicePath.concatNode(measurements.get(i))); @@ -309,7 +310,7 @@ public List createAlignedTimeseries( devicePath.getFullPath()); } - IDeviceMNode entityMNode; + IDeviceMNode entityMNode; if (device.isEntity()) { entityMNode = device.getAsEntityMNode(); } else { @@ -321,14 +322,15 @@ public List createAlignedTimeseries( } for (int i = 0; i < measurements.size(); i++) { - IMeasurementMNode measurementMNode = - MeasurementMNode.getMeasurementMNode( - entityMNode, + IMeasurementMNode measurementMNode = + new MeasurementMNode( + entityMNode.getAsMNode(), measurements.get(i), new MeasurementSchema( measurements.get(i), dataTypes.get(i), encodings.get(i), compressors.get(i)), aliasList == null ? null : aliasList.get(i)); - store.addChild(entityMNode, measurements.get(i), measurementMNode); + store.addChild( + entityMNode.getAsMNode(), measurements.get(i), measurementMNode.getAsMNode()); if (aliasList != null && aliasList.get(i) != null) { entityMNode.addAlias(aliasList.get(i), measurementMNode); } @@ -338,14 +340,15 @@ public List createAlignedTimeseries( } } - private IMNode checkAndAutoCreateInternalPath(PartialPath devicePath) throws MetadataException { + private IMemMNode checkAndAutoCreateInternalPath(PartialPath devicePath) + throws MetadataException { String[] nodeNames = devicePath.getNodes(); MetaFormatUtils.checkTimeseries(devicePath); if (nodeNames.length == levelOfSG + 1) { return null; } - IMNode cur = storageGroupMNode; - IMNode child; + IMemMNode cur = storageGroupMNode; + IMemMNode child; String childName; // e.g, path = root.sg.d1.s1, create internal nodes and set cur to sg node, parent of d1 for (int i = levelOfSG + 1; i < nodeNames.length - 1; i++) { @@ -363,13 +366,13 @@ private IMNode checkAndAutoCreateInternalPath(PartialPath devicePath) throws Met return cur; } - private IMNode checkAndAutoCreateDeviceNode(String deviceName, IMNode deviceParent) + private IMemMNode checkAndAutoCreateDeviceNode(String deviceName, IMemMNode deviceParent) throws PathAlreadyExistException { if (deviceParent == null) { // device is sg return storageGroupMNode; } - IMNode device = store.getChild(deviceParent, deviceName); + IMemMNode device = store.getChild(deviceParent, deviceName); if (device == null) { device = store.addChild(deviceParent, deviceName, new BasicMNode(deviceParent, deviceName)); } @@ -383,7 +386,7 @@ private IMNode checkAndAutoCreateDeviceNode(String deviceName, IMNode devicePare @Override public Map checkMeasurementExistence( PartialPath devicePath, List measurementList, List aliasList) { - IMNode device; + IMemMNode device; try { device = getNodeByPath(devicePath); } catch (PathNotExistException e) { @@ -396,7 +399,7 @@ public Map checkMeasurementExistence( Map failingMeasurementMap = new HashMap<>(); for (int i = 0; i < measurementList.size(); i++) { if (device.hasChild(measurementList.get(i))) { - IMNode node = device.getChild(measurementList.get(i)); + IMemMNode node = device.getChild(measurementList.get(i)); if (node.isMeasurement()) { if (node.getAsMeasurementMNode().isPreDeleted()) { failingMeasurementMap.put( @@ -431,30 +434,30 @@ public Map checkMeasurementExistence( * @param path Format: root.node(.node)+ */ @Override - public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataException { + public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataException { String[] nodes = path.getNodes(); if (nodes.length == 0) { throw new IllegalPathException(path.getFullPath()); } - IMeasurementMNode deletedNode = getMeasurementMNode(path); - IDeviceMNode parent = deletedNode.getParent(); + IMeasurementMNode deletedNode = getMeasurementMNode(path); + IMemMNode parent = deletedNode.getParent(); // delete the last node of path store.deleteChild(parent, path.getMeasurement()); if (deletedNode.getAlias() != null) { - parent.deleteAliasChild(deletedNode.getAlias()); + parent.getAsEntityMNode().deleteAliasChild(deletedNode.getAlias()); } - deleteEmptyInternalMNode(parent); + deleteEmptyInternalMNode(parent.getAsEntityMNode()); return deletedNode; } /** Used when delete timeseries or deactivate template */ - public void deleteEmptyInternalMNode(IDeviceMNode entityMNode) { - IMNode curNode = entityMNode; + public void deleteEmptyInternalMNode(IDeviceMNode entityMNode) { + IMemMNode curNode = entityMNode.getAsMNode(); if (!entityMNode.isUseTemplate()) { boolean hasMeasurement = false; - IMNode child; - IMNodeIterator iterator = store.getChildrenIterator(entityMNode); + IMemMNode child; + IMNodeIterator iterator = store.getChildrenIterator(curNode); while (iterator.hasNext()) { child = iterator.next(); if (child.isMeasurement()) { @@ -484,10 +487,10 @@ public void deleteEmptyInternalMNode(IDeviceMNode entityMNode) { } } - private boolean isEmptyInternalMNode(IMNode node) { + private boolean isEmptyInternalMNode(IMemMNode node) { return !IoTDBConstant.PATH_ROOT.equals(node.getName()) && !node.isMeasurement() - && !node.isUseTemplate() + && !(node.isEntity() && node.getAsEntityMNode().isUseTemplate()) && node.getChildren().isEmpty(); } @@ -495,12 +498,12 @@ private boolean isEmptyInternalMNode(IMNode node) { public List constructSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); - try (MeasurementUpdater updater = - new MeasurementUpdater(rootNode, pathPattern, store, false) { + try (MeasurementUpdater updater = + new MeasurementUpdater(rootNode, pathPattern, store, false) { @Override - protected void updateMeasurement(IMeasurementMNode node) { + protected void updateMeasurement(IMeasurementMNode node) { node.setPreDeleted(true); - result.add(getPartialPathFromRootToNode(node)); + result.add(getPartialPathFromRootToNode(node.getAsMNode())); } }) { updater.update(); @@ -512,12 +515,12 @@ protected void updateMeasurement(IMeasurementMNode node) { public List rollbackSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); - try (MeasurementUpdater updater = - new MeasurementUpdater(rootNode, pathPattern, store, false) { + try (MeasurementUpdater updater = + new MeasurementUpdater(rootNode, pathPattern, store, false) { @Override - protected void updateMeasurement(IMeasurementMNode node) { + protected void updateMeasurement(IMeasurementMNode node) { node.setPreDeleted(false); - result.add(getPartialPathFromRootToNode(node)); + result.add(getPartialPathFromRootToNode(node.getAsMNode())); } }) { updater.update(); @@ -529,12 +532,12 @@ protected void updateMeasurement(IMeasurementMNode node) { public List getPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { List result = new LinkedList<>(); - try (MeasurementCollector collector = - new MeasurementCollector(rootNode, pathPattern, store, false) { + try (MeasurementCollector collector = + new MeasurementCollector(rootNode, pathPattern, store, false) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { - result.add(getPartialPathFromRootToNode(node)); + result.add(getPartialPathFromRootToNode(node.getAsMNode())); } return null; } @@ -548,12 +551,12 @@ protected Void collectMeasurement(IMeasurementMNode node) { public Set getDevicesOfPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { Set result = new HashSet<>(); - try (MeasurementCollector collector = - new MeasurementCollector(rootNode, pathPattern, store, false) { + try (MeasurementCollector collector = + new MeasurementCollector(rootNode, pathPattern, store, false) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { - result.add(getPartialPathFromRootToNode(node).getDevicePath()); + result.add(getPartialPathFromRootToNode(node.getAsMNode()).getDevicePath()); } return null; } @@ -564,7 +567,8 @@ protected Void collectMeasurement(IMeasurementMNode node) { } @Override - public void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException { + public void setAlias(IMeasurementMNode measurementMNode, String alias) + throws MetadataException { store.setAlias(measurementMNode, alias); } @@ -578,11 +582,11 @@ public void setAlias(IMeasurementMNode measurementMNode, String alias) throws Me *

    e.g., get root.sg.d1, get or create all internal nodes and return the node of d1 */ @Override - public IMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException { + public IMemMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException { MetaFormatUtils.checkTimeseries(deviceId); String[] nodeNames = deviceId.getNodes(); - IMNode cur = storageGroupMNode; - IMNode child; + IMemMNode cur = storageGroupMNode; + IMemMNode child; for (int i = levelOfSG + 1; i < nodeNames.length; i++) { child = cur.getChild(nodeNames[i]); if (child == null) { @@ -601,10 +605,10 @@ public List fetchSchema( PartialPath pathPattern, Map templateMap, boolean withTags) throws MetadataException { List result = new LinkedList<>(); - try (MeasurementCollector collector = - new MeasurementCollector(rootNode, pathPattern, store, false) { + try (MeasurementCollector collector = + new MeasurementCollector(rootNode, pathPattern, store, false) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { MeasurementPath path = getCurrentMeasurementPathInTraverse(node); if (nodes[nodes.length - 1].equals(node.getAlias())) { // only when user query with alias, the alias in path will be set @@ -633,10 +637,10 @@ protected Void collectMeasurement(IMeasurementMNode node) { * @return last node in given seriesPath */ @Override - public IMNode getNodeByPath(PartialPath path) throws PathNotExistException { + public IMemMNode getNodeByPath(PartialPath path) throws PathNotExistException { String[] nodes = path.getNodes(); - IMNode cur = storageGroupMNode; - IMNode next; + IMemMNode cur = storageGroupMNode; + IMemMNode next; for (int i = levelOfSG + 1; i < nodes.length; i++) { next = cur.getChild(nodes[i]); if (next == null) { @@ -654,8 +658,9 @@ public IMNode getNodeByPath(PartialPath path) throws PathNotExistException { } @Override - public IMeasurementMNode getMeasurementMNode(PartialPath path) throws MetadataException { - IMNode node = getNodeByPath(path); + public IMeasurementMNode getMeasurementMNode(PartialPath path) + throws MetadataException { + IMemMNode node = getNodeByPath(path); if (node.isMeasurement()) { return node.getAsMeasurementMNode(); } else { @@ -666,8 +671,8 @@ public IMeasurementMNode getMeasurementMNode(PartialPath path) throws MetadataEx @Override public long countAllMeasurement() throws MetadataException { - try (MeasurementCounter measurementCounter = - new MeasurementCounter(rootNode, MetadataConstant.ALL_MATCH_PATTERN, store, false)) { + try (MeasurementCounter measurementCounter = + new MeasurementCounter<>(rootNode, MetadataConstant.ALL_MATCH_PATTERN, store, false)) { return measurementCounter.count(); } } @@ -680,12 +685,12 @@ public long countAllMeasurement() throws MetadataException { public void activateTemplate(PartialPath activatePath, Template template) throws MetadataException { String[] nodes = activatePath.getNodes(); - IMNode cur = storageGroupMNode; + IMemMNode cur = storageGroupMNode; for (int i = levelOfSG + 1; i < nodes.length; i++) { cur = cur.getChild(nodes[i]); } - IDeviceMNode entityMNode; + IDeviceMNode entityMNode; synchronized (this) { for (String measurement : template.getSchemaMap().keySet()) { @@ -695,14 +700,6 @@ public void activateTemplate(PartialPath activatePath, Template template) } } - if (cur.isUseTemplate()) { - if (template.getId() == cur.getSchemaTemplateId()) { - throw new TemplateIsInUseException(cur.getFullPath()); - } else { - throw new DifferentTemplateException(activatePath.getFullPath(), template.getName()); - } - } - if (cur.isEntity()) { entityMNode = cur.getAsEntityMNode(); } else { @@ -713,6 +710,14 @@ public void activateTemplate(PartialPath activatePath, Template template) } } + if (entityMNode.isUseTemplate()) { + if (template.getId() == entityMNode.getSchemaTemplateId()) { + throw new TemplateIsInUseException(cur.getFullPath()); + } else { + throw new DifferentTemplateException(activatePath.getFullPath(), template.getName()); + } + } + if (!entityMNode.isAligned()) { entityMNode.setAligned(template.isDirectAligned()); } @@ -725,10 +730,10 @@ public Map> constructSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { - try (EntityUpdater updater = - new EntityUpdater(rootNode, entry.getKey(), store, false) { + try (EntityUpdater updater = + new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IDeviceMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) { if (entry.getValue().contains(node.getSchemaTemplateId())) { resultTemplateSetInfo.put( node.getPartialPath(), Collections.singletonList(node.getSchemaTemplateId())); @@ -747,10 +752,10 @@ public Map> rollbackSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { - try (EntityUpdater updater = - new EntityUpdater(rootNode, entry.getKey(), store, false) { + try (EntityUpdater updater = + new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IDeviceMNode node) { + protected void updateEntity(IDeviceMNode node) { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( @@ -770,10 +775,10 @@ public Map> deactivateTemplateInBlackList( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { - try (EntityUpdater collector = - new EntityUpdater(rootNode, entry.getKey(), store, false) { + try (EntityUpdater collector = + new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IDeviceMNode node) { + protected void updateEntity(IDeviceMNode node) { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( @@ -792,12 +797,12 @@ protected void updateEntity(IDeviceMNode node) { public void activateTemplateWithoutCheck( PartialPath activatePath, int templateId, boolean isAligned) { String[] nodes = activatePath.getNodes(); - IMNode cur = storageGroupMNode; + IMemMNode cur = storageGroupMNode; for (int i = levelOfSG + 1; i < nodes.length; i++) { cur = cur.getChild(nodes[i]); } - IDeviceMNode entityMNode; + IDeviceMNode entityMNode; if (cur.isEntity()) { entityMNode = cur.getAsEntityMNode(); } else { @@ -817,7 +822,8 @@ public void activateTemplateWithoutCheck( @Override public long countPathsUsingTemplate(PartialPath pathPattern, int templateId) throws MetadataException { - try (EntityCounter counter = new EntityCounter(rootNode, pathPattern, store, false)) { + try (EntityCounter counter = + new EntityCounter<>(rootNode, pathPattern, store, false)) { counter.setSchemaTemplateFilter(templateId); return counter.count(); } @@ -829,19 +835,19 @@ public long countPathsUsingTemplate(PartialPath pathPattern, int templateId) public ISchemaReader getDeviceReader(IShowDevicesPlan showDevicesPlan) throws MetadataException { - EntityCollector collector = - new EntityCollector( + EntityCollector collector = + new EntityCollector( rootNode, showDevicesPlan.getPath(), store, showDevicesPlan.isPrefixMatch()) { @Override - protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { - PartialPath device = getPartialPathFromRootToNode(node); + protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { + PartialPath device = getPartialPathFromRootToNode(node.getAsMNode()); return new ShowDevicesResult(device.getFullPath(), node.isAligned()); } }; if (showDevicesPlan.usingSchemaTemplate()) { collector.setSchemaTemplateFilter(showDevicesPlan.getSchemaTemplateId()); } - TraverserWithLimitOffsetWrapper traverser = + TraverserWithLimitOffsetWrapper traverser = new TraverserWithLimitOffsetWrapper<>( collector, showDevicesPlan.getLimit(), showDevicesPlan.getOffset()); return new ISchemaReader() { @@ -876,11 +882,11 @@ public ISchemaReader getTimeSeriesReader( IShowTimeSeriesPlan showTimeSeriesPlan, Function, Map>> tagAndAttributeProvider) throws MetadataException { - MeasurementCollector collector = - new MeasurementCollector( + MeasurementCollector collector = + new MeasurementCollector( rootNode, showTimeSeriesPlan.getPath(), store, showTimeSeriesPlan.isPrefixMatch()) { @Override - protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) { + protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) { return new ITimeSeriesSchemaInfo() { private Pair, Map> tagAndAttribute = null; @@ -918,18 +924,18 @@ public boolean isUnderAlignedDevice() { @Override public String getFullPath() { - return getPartialPathFromRootToNode(node).getFullPath(); + return getPartialPathFromRootToNode(node.getAsMNode()).getFullPath(); } @Override public PartialPath getPartialPath() { - return getPartialPathFromRootToNode(node); + return getPartialPathFromRootToNode(node.getAsMNode()); } }; } }; collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate()); - Traverser traverser; + Traverser traverser; if (showTimeSeriesPlan.getLimit() > 0 || showTimeSeriesPlan.getOffset() > 0) { traverser = new TraverserWithLimitOffsetWrapper<>( @@ -967,11 +973,11 @@ public ITimeSeriesSchemaInfo next() { public ISchemaReader getNodeReader(IShowNodesPlan showNodesPlan) throws MetadataException { - MNodeCollector collector = - new MNodeCollector( + MNodeCollector collector = + new MNodeCollector( rootNode, showNodesPlan.getPath(), store, showNodesPlan.isPrefixMatch()) { @Override - protected INodeSchemaInfo collectMNode(IMNode node) { + protected INodeSchemaInfo collectMNode(IMemMNode node) { return new ShowNodesResult( getPartialPathFromRootToNode(node).getFullPath(), node.getMNodeType(false)); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java index 2adf8146623a6..e2adbde7961cf 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java @@ -446,7 +446,7 @@ final void stampedReadUnlock(long stamp) { } @Override - public IMTreeStore getWithReentrantReadLock() { + public IMTreeStore getWithReentrantReadLock() { return new ReentrantReadOnlyCachedMTreeStore(this); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java index c9d5e6b6193ec..2a77a10c805d7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java @@ -18,138 +18,124 @@ */ package org.apache.iotdb.db.metadata.mtree.store; -import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; -import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; import org.apache.iotdb.db.metadata.mnode.iterator.MemoryTraverserIterator; -import org.apache.iotdb.db.metadata.mtree.snapshot.MemMTreeSnapshotUtil; import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; -import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; import java.io.File; -import java.io.IOException; import java.util.Map; -import java.util.function.Consumer; - /** This is a memory-based implementation of IMTreeStore. All MNodes are stored in memory. */ -public class ConfigMTreeStore implements IMTreeStore{ - - private IConfigMNode root; - - // Only used for ConfigMTree - public ConfigMTreeStore() { - this.root = new ConfigBasicMNode(null, IoTDBConstant.PATH_ROOT); +public class ConfigMTreeStore implements IMTreeStore { + + private IConfigMNode root; + + // Only used for ConfigMTree + public ConfigMTreeStore() { + this.root = new ConfigBasicMNode(null, IoTDBConstant.PATH_ROOT); + } + + @Override + public IConfigMNode generatePrefix(PartialPath storageGroupPath) { + throw new UnsupportedOperationException(); + } + + @Override + public IConfigMNode getRoot() { + return root; + } + + @Override + public boolean hasChild(IConfigMNode parent, String name) { + return parent.hasChild(name); + } + + @Override + public IConfigMNode getChild(IConfigMNode parent, String name) { + return parent.getChild(name); + } + + @Override + public IMNodeIterator getChildrenIterator(IConfigMNode parent) { + return new MNodeIterator<>(parent.getChildren().values().iterator()); + } + + @Override + public IMNodeIterator getTraverserIterator( + IConfigMNode parent, Map templateMap, boolean skipPreDeletedSchema) + throws MetadataException { + if (parent.isEntity()) { + AbstractTraverserIterator iterator = + new MemoryTraverserIterator(this, parent.getAsEntityMNode(), templateMap); + iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); + return iterator; + } else { + return getChildrenIterator(parent); } - - @Override - public IConfigMNode generatePrefix(PartialPath storageGroupPath) { - throw new UnsupportedOperationException(); + } + + @Override + public IConfigMNode addChild(IConfigMNode parent, String childName, IConfigMNode child) { + return parent.addChild(childName, child); + } + + @Override + public void deleteChild(IConfigMNode parent, String childName) { + parent.deleteChild(childName); + } + + @Override + public void updateMNode(IConfigMNode node) {} + + @Override + public IDeviceMNode setToEntity(IConfigMNode node) { + throw new UnsupportedOperationException(); + } + + @Override + public IConfigMNode setToInternal(IDeviceMNode entityMNode) { + throw new UnsupportedOperationException(); + } + + @Override + public void setAlias(IMeasurementMNode measurementMNode, String alias) { + String existingAlias = measurementMNode.getAlias(); + if (existingAlias == null && alias == null) { + return; } + measurementMNode.setAlias(alias); + } - @Override - public IConfigMNode getRoot() { - return root; - } + @Override + public void pin(IConfigMNode node) {} - @Override - public boolean hasChild(IConfigMNode parent, String name) { - return parent.hasChild(name); - } + @Override + public void unPin(IConfigMNode node) {} - @Override - public IConfigMNode getChild(IConfigMNode parent, String name) { - return parent.getChild(name); - } + @Override + public void unPinPath(IConfigMNode node) {} - @Override - public IMNodeIterator getChildrenIterator(IConfigMNode parent) { - return new MNodeIterator<>(parent.getChildren().values().iterator()); - } - - @Override - public IMNodeIterator getTraverserIterator( - IConfigMNode parent, Map templateMap, boolean skipPreDeletedSchema) - throws MetadataException { - if (parent.isEntity()) { - AbstractTraverserIterator iterator = - new MemoryTraverserIterator(this, parent.getAsEntityMNode(), templateMap); - iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); - return iterator; - } else { - return getChildrenIterator(parent); - } - } - - @Override - public IConfigMNode addChild(IConfigMNode parent, String childName, IConfigMNode child) { - return parent.addChild(childName, child); - } - - @Override - public void deleteChild(IConfigMNode parent, String childName) { - parent.deleteChild(childName); - } + @Override + public IMTreeStore getWithReentrantReadLock() { + return this; + } - @Override - public void updateMNode(IConfigMNode node) {} + @Override + public void clear() { + root = new ConfigBasicMNode(null, IoTDBConstant.PATH_ROOT); + } - @Override - public IDeviceMNode setToEntity(IConfigMNode node) { - throw new UnsupportedOperationException(); - } - - @Override - public IConfigMNode setToInternal(IDeviceMNode entityMNode) { - throw new UnsupportedOperationException(); - } - - @Override - public void setAlias(IMeasurementMNode measurementMNode, String alias) { - String existingAlias = measurementMNode.getAlias(); - if (existingAlias == null && alias == null) { - return; - } - measurementMNode.setAlias(alias); - } - - @Override - public void pin(IConfigMNode node) {} - - @Override - public void unPin(IConfigMNode node) {} - - @Override - public void unPinPath(IConfigMNode node) {} - - @Override - public IMTreeStore getWithReentrantReadLock() { - return this; - } - - @Override - public void clear() { - root = new ConfigBasicMNode(null, IoTDBConstant.PATH_ROOT); - } - - @Override - public boolean createSnapshot(File snapshotDir) { - throw new UnsupportedOperationException(); - } + @Override + public boolean createSnapshot(File snapshotDir) { + throw new UnsupportedOperationException(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java index 5df0b47285423..71d3884fd40fd 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java @@ -87,7 +87,7 @@ IMNodeIterator getTraverserIterator( void unPinPath(N node); - IMTreeStore getWithReentrantReadLock(); + IMTreeStore getWithReentrantReadLock(); void clear(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index b754e0d6596ed..c18f7fb759c68 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -52,13 +52,12 @@ public class MemMTreeStore implements IMTreeStore { private IMemMNode root; - public MemMTreeStore( - PartialPath rootPath, MemSchemaRegionStatistics regionStatistics) { - this.root = - new DatabaseMNode( - null, - rootPath.getTailNode(), - CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + public MemMTreeStore(PartialPath rootPath, MemSchemaRegionStatistics regionStatistics) { + this.root = + new DatabaseMNode( + null, + rootPath.getTailNode(), + CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); this.regionStatistics = regionStatistics; } @@ -195,7 +194,7 @@ public void unPin(IMemMNode node) {} public void unPinPath(IMemMNode node) {} @Override - public IMTreeStore getWithReentrantReadLock() { + public IMTreeStore getWithReentrantReadLock() { return this; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java index 4642983b10a6f..3cec169bb302f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java @@ -20,8 +20,8 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.template.Template; @@ -29,7 +29,7 @@ import java.io.File; import java.util.Map; -public class ReentrantReadOnlyCachedMTreeStore implements IMTreeStore { +public class ReentrantReadOnlyCachedMTreeStore implements IMTreeStore { private final CachedMTreeStore store; private final long readLockStamp; @@ -39,84 +39,84 @@ public ReentrantReadOnlyCachedMTreeStore(CachedMTreeStore store) { } @Override - public IMNode generatePrefix(PartialPath storageGroupPath) { + public ICacheMNode generatePrefix(PartialPath storageGroupPath) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public IMNode getRoot() { + public ICacheMNode getRoot() { return store.getRoot(); } @Override - public boolean hasChild(IMNode parent, String name) throws MetadataException { + public boolean hasChild(ICacheMNode parent, String name) throws MetadataException { return store.hasChild(parent, name, false); } @Override - public IMNode getChild(IMNode parent, String name) throws MetadataException { + public ICacheMNode getChild(ICacheMNode parent, String name) throws MetadataException { return store.getChild(parent, name, false); } @Override - public IMNodeIterator getChildrenIterator(IMNode parent) throws MetadataException { + public IMNodeIterator getChildrenIterator(ICacheMNode parent) throws MetadataException { return store.getChildrenIterator(parent, false); } @Override - public IMNodeIterator getTraverserIterator( - IMNode parent, Map templateMap, boolean skipPreDeletedSchema) + public IMNodeIterator getTraverserIterator( + ICacheMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { return store.getTraverserIterator(this, parent, templateMap, skipPreDeletedSchema); } @Override - public IMNode addChild(IMNode parent, String childName, IMNode child) { + public ICacheMNode addChild(ICacheMNode parent, String childName, ICacheMNode child) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public void deleteChild(IMNode parent, String childName) { + public void deleteChild(ICacheMNode parent, String childName) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public void updateMNode(IMNode node) { + public void updateMNode(ICacheMNode node) { store.updateMNode(node, false); } @Override - public IDeviceMNode setToEntity(IMNode node) { + public IDeviceMNode setToEntity(ICacheMNode node) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public IMNode setToInternal(IDeviceMNode entityMNode) { + public ICacheMNode setToInternal(IDeviceMNode entityMNode) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public void setAlias(IMeasurementMNode measurementMNode, String alias) { + public void setAlias(IMeasurementMNode measurementMNode, String alias) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public void pin(IMNode node) throws MetadataException { + public void pin(ICacheMNode node) throws MetadataException { store.pin(node, false); } @Override - public void unPin(IMNode node) { + public void unPin(ICacheMNode node) { store.unPin(node, false); } @Override - public void unPinPath(IMNode node) { + public void unPinPath(ICacheMNode node) { store.unPinPath(node, false); } @Override - public IMTreeStore getWithReentrantReadLock() { + public IMTreeStore getWithReentrantReadLock() { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java index 7f2d5567ca8d0..11cb147a76371 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java @@ -48,13 +48,13 @@ *

  • collector: to collect customized results of the matched node or measurement * */ -public abstract class Traverser extends AbstractTreeVisitor { +public abstract class Traverser> extends AbstractTreeVisitor { private static final Logger logger = LoggerFactory.getLogger(Traverser.class); - protected IMTreeStore store; + protected IMTreeStore store; - protected IMNode startNode; + protected N startNode; protected String[] nodes; // measurement in template should be processed only if templateMap is not null @@ -77,7 +77,7 @@ protected Traverser() {} * @param isPrefixMatch prefix match or not * @throws MetadataException path does not meet the expected rules */ - protected Traverser(IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + protected Traverser(N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, isPrefixMatch); this.store = store.getWithReentrantReadLock(); @@ -107,23 +107,26 @@ public void traverse() throws MetadataException { } @Override - protected IMNode getChild(IMNode parent, String childName) throws MetadataException { - IMNode child = null; + protected N getChild(N parent, String childName) throws MetadataException { + N child = null; if (parent.isAboveDatabase()) { child = parent.getChild(childName); } else { if (templateMap != null && !templateMap.isEmpty() // this task will cover some timeseries represented by template - && parent.getSchemaTemplateId() != NON_TEMPLATE // the device is using template + && (parent.isEntity() + && parent.getAsEntityMNode().getSchemaTemplateId() + != NON_TEMPLATE) // the device is using template && !(skipPreDeletedSchema && parent .getAsEntityMNode() .isPreDeactivateTemplate())) { // the template should not skip - Template template = templateMap.get(parent.getSchemaTemplateId()); + int templateId = parent.getAsEntityMNode().getSchemaTemplateId(); + Template template = templateMap.get(templateId); // if null, it means the template on this device is not covered in this query, refer to the // mpp analyzing stage if (template != null) { - child = templateMap.get(parent.getSchemaTemplateId()).getDirectNode(childName); + child = templateMap.get(templateId).getDirectNode(childName); } } } @@ -134,7 +137,7 @@ protected IMNode getChild(IMNode parent, String childName) throws MetadataExcept } @Override - protected void releaseNode(IMNode node) { + protected void releaseNode(N node) { if (!node.isAboveDatabase() && !node.isDatabase()) { // In any case we can call store#inpin directly because the unpin method will not do anything // if it is an IMNode in template or in memory mode. @@ -143,17 +146,17 @@ protected void releaseNode(IMNode node) { } @Override - protected Iterator getChildrenIterator(IMNode parent) throws MetadataException { + protected Iterator getChildrenIterator(N parent) throws MetadataException { if (parent.isAboveDatabase()) { - return new MNodeIterator(parent.getChildren().values().iterator()); + return new MNodeIterator<>(parent.getChildren().values().iterator()); } else { return store.getTraverserIterator(parent, templateMap, skipPreDeletedSchema); } } @Override - protected void releaseNodeIterator(Iterator nodeIterator) { - ((IMNodeIterator) nodeIterator).close(); + protected void releaseNodeIterator(Iterator nodeIterator) { + ((IMNodeIterator) nodeIterator).close(); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/TraverserWithLimitOffsetWrapper.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/TraverserWithLimitOffsetWrapper.java index b6fb42b6eee78..48511fa6c9918 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/TraverserWithLimitOffsetWrapper.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/TraverserWithLimitOffsetWrapper.java @@ -24,8 +24,8 @@ import java.util.NoSuchElementException; -public class TraverserWithLimitOffsetWrapper extends Traverser { - private final Traverser traverser; +public class TraverserWithLimitOffsetWrapper> extends Traverser { + private final Traverser traverser; private final long limit; private final long offset; private final boolean hasLimit; @@ -33,7 +33,7 @@ public class TraverserWithLimitOffsetWrapper extends Traverser { private int count = 0; int curOffset = 0; - public TraverserWithLimitOffsetWrapper(Traverser traverser, long limit, long offset) { + public TraverserWithLimitOffsetWrapper(Traverser traverser, long limit, long offset) { this.traverser = traverser; this.limit = limit; this.offset = offset; @@ -84,27 +84,27 @@ public Throwable getFailure() { } @Override - protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfInternalMatchedNode(N node) { return false; } @Override - protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfFullMatchedNode(N node) { return false; } @Override - protected boolean acceptInternalMatchedNode(IMNode node) { + protected boolean acceptInternalMatchedNode(N node) { return false; } @Override - protected boolean acceptFullMatchedNode(IMNode node) { + protected boolean acceptFullMatchedNode(N node) { return false; } @Override - protected R generateResult(IMNode nextMatchedNode) { + protected R generateResult(N nextMatchedNode) { return null; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java index da05b9f15265a..af3e60f47bcaf 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java @@ -24,7 +24,7 @@ import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; -public abstract class DatabaseTraverser extends Traverser { +public abstract class DatabaseTraverser> extends Traverser { protected boolean collectInternal = false; @@ -38,28 +38,28 @@ public abstract class DatabaseTraverser extends Traverser { * @throws MetadataException path does not meet the expected rules */ public DatabaseTraverser( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected boolean acceptFullMatchedNode(IMNode node) { + protected boolean acceptFullMatchedNode(N node) { return node.isDatabase(); } @Override - protected boolean acceptInternalMatchedNode(IMNode node) { + protected boolean acceptInternalMatchedNode(N node) { return collectInternal && node.isDatabase(); } @Override - protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfFullMatchedNode(N node) { return !node.isDatabase(); } @Override - protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfInternalMatchedNode(N node) { return !node.isDatabase(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java index feafa079830c6..c0715d6a6cfa8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java @@ -24,7 +24,7 @@ import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; -public abstract class EntityTraverser extends Traverser { +public abstract class EntityTraverser> extends Traverser { private boolean usingTemplate = false; private int schemaTemplateId = -1; @@ -38,32 +38,31 @@ public abstract class EntityTraverser extends Traverser { * @param isPrefixMatch prefix match or not * @throws MetadataException path does not meet the expected rules */ - public EntityTraverser( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + public EntityTraverser(N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected boolean acceptFullMatchedNode(IMNode node) { + protected boolean acceptFullMatchedNode(N node) { if (node.isEntity()) { - return !usingTemplate || schemaTemplateId == node.getSchemaTemplateId(); + return !usingTemplate || schemaTemplateId == node.getAsEntityMNode().getSchemaTemplateId(); } return false; } @Override - protected boolean acceptInternalMatchedNode(IMNode node) { + protected boolean acceptInternalMatchedNode(N node) { return false; } @Override - protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfFullMatchedNode(N node) { return !node.isMeasurement(); } @Override - protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfInternalMatchedNode(N node) { return !node.isMeasurement(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MNodeTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MNodeTraverser.java index acf8fd8f429ee..236aa8b8a3eec 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MNodeTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MNodeTraverser.java @@ -30,11 +30,11 @@ * MNodeTraverser finds the node of the specified level on the path and process it. The same node * will not be processed more than once. If a level is not given, the current node is processed. */ -public abstract class MNodeTraverser extends Traverser { +public abstract class MNodeTraverser> extends Traverser { // Level query option started from 0. For example, level of root.sg.d1.s1 is 3. protected int targetLevel = -1; - protected IMNode lastVisitNode = null; + protected N lastVisitNode = null; /** * To traverse subtree under root.sg, e.g., init Traverser(root, "root.sg.**") @@ -45,14 +45,13 @@ public abstract class MNodeTraverser extends Traverser { * @param isPrefixMatch prefix match or not * @throws MetadataException path does not meet the expected rules */ - public MNodeTraverser( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + public MNodeTraverser(N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected boolean acceptFullMatchedNode(IMNode node) { + protected boolean acceptFullMatchedNode(N node) { if (targetLevel >= 0) { if (getSizeOfAncestor() > targetLevel) { return getAncestorNodeByLevel(targetLevel) != lastVisitNode; @@ -67,17 +66,17 @@ protected boolean acceptFullMatchedNode(IMNode node) { } @Override - protected boolean acceptInternalMatchedNode(IMNode node) { + protected boolean acceptInternalMatchedNode(N node) { return false; } @Override - protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfFullMatchedNode(N node) { return !node.isMeasurement(); } @Override - protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfInternalMatchedNode(N node) { return !node.isMeasurement(); } @@ -86,7 +85,7 @@ public void setTargetLevel(int targetLevel) { } @Override - protected final R generateResult(IMNode nextMatchedNode) { + protected final R generateResult(N nextMatchedNode) { if (targetLevel >= 0) { if (getLevelOfNextMatchedNode() == targetLevel) { lastVisitNode = nextMatchedNode; @@ -99,5 +98,5 @@ protected final R generateResult(IMNode nextMatchedNode) { } } - protected abstract R transferToResult(IMNode node); + protected abstract R transferToResult(N node); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MeasurementTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MeasurementTraverser.java index d559ff6d77ecf..a53a250c4ce5d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MeasurementTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MeasurementTraverser.java @@ -24,7 +24,7 @@ import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; -public abstract class MeasurementTraverser extends Traverser { +public abstract class MeasurementTraverser> extends Traverser { /** * To traverse subtree under root.sg, e.g., init Traverser(root, "root.sg.**") @@ -36,28 +36,28 @@ public abstract class MeasurementTraverser extends Traverser { * @throws MetadataException path does not meet the expected rules */ public MeasurementTraverser( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected boolean acceptFullMatchedNode(IMNode node) { + protected boolean acceptFullMatchedNode(N node) { return node.isMeasurement(); } @Override - protected boolean acceptInternalMatchedNode(IMNode node) { + protected boolean acceptInternalMatchedNode(N node) { return false; } @Override - protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfFullMatchedNode(N node) { return !node.isMeasurement(); } @Override - protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfInternalMatchedNode(N node) { return !node.isMeasurement(); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java index 7c4e6096b8ec2..325c7ac28521a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java @@ -26,19 +26,19 @@ import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; // This class implements database path collection function. -public abstract class DatabaseCollector extends DatabaseTraverser { +public abstract class DatabaseCollector> extends DatabaseTraverser { protected DatabaseCollector( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected R generateResult(IMNode nextMatchedNode) { + protected R generateResult(N nextMatchedNode) { collectDatabase(nextMatchedNode.getAsDatabaseMNode()); return null; } // TODO: make collectDatabase return R - protected abstract void collectDatabase(IDatabaseMNode node); + protected abstract void collectDatabase(IDatabaseMNode node); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java index 22edf16165032..a1874252d1657 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java @@ -27,18 +27,18 @@ // This class defines EntityMNode as target node and defines the Entity process framework. // TODO: set R is IDeviceSchemaInfo -public abstract class EntityCollector extends EntityTraverser { +public abstract class EntityCollector> extends EntityTraverser { protected EntityCollector( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected R generateResult(IMNode nextMatchedNode) { + protected R generateResult(N nextMatchedNode) { return collectEntity(nextMatchedNode.getAsEntityMNode()); } - protected abstract R collectEntity(IDeviceMNode node); + protected abstract R collectEntity(IDeviceMNode node); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java index 36731a0929b9a..b3df5b46ab0c1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java @@ -26,18 +26,18 @@ import java.util.HashSet; import java.util.Set; -public abstract class MNodeAboveSGCollector extends MNodeCollector { +public abstract class MNodeAboveSGCollector> extends MNodeCollector { protected Set involvedStorageGroupMNodes = new HashSet<>(); protected MNodeAboveSGCollector( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfFullMatchedNode(N node) { if (node.isDatabase()) { involvedStorageGroupMNodes.add(getParentPartialPath().concatNode(node.getName())); return false; @@ -47,7 +47,7 @@ protected boolean shouldVisitSubtreeOfFullMatchedNode(IMNode node) { } @Override - protected boolean shouldVisitSubtreeOfInternalMatchedNode(IMNode node) { + protected boolean shouldVisitSubtreeOfInternalMatchedNode(N node) { if (node.isDatabase()) { involvedStorageGroupMNodes.add(getParentPartialPath().concatNode(node.getName())); return false; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java index 5104f778b74f3..5cda0a3040c7b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java @@ -31,17 +31,17 @@ * will not be processed more than once. If a level is not given, the current node is processed. */ // TODO: set R to IMNodeInfo -public abstract class MNodeCollector extends MNodeTraverser { +public abstract class MNodeCollector> extends MNodeTraverser { protected MNodeCollector( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } - protected final R transferToResult(IMNode node) { + protected final R transferToResult(N node) { return collectMNode(node); } - protected abstract R collectMNode(IMNode node); + protected abstract R collectMNode(N node); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java index b7ed46887699f..e856aacee1902 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java @@ -28,16 +28,17 @@ // This class defines MeasurementMNode as target node and defines the measurement process framework. // TODO: set R is ITimeseriesInfo -public abstract class MeasurementCollector extends MeasurementTraverser { +public abstract class MeasurementCollector> + extends MeasurementTraverser { protected MeasurementCollector( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected R generateResult(IMNode nextMatchedNode) { + protected R generateResult(N nextMatchedNode) { return collectMeasurement(nextMatchedNode.getAsMeasurementMNode()); } @@ -46,17 +47,18 @@ protected R generateResult(IMNode nextMatchedNode) { * * @param node MeasurementMNode holding the measurement schema */ - protected abstract R collectMeasurement(IMeasurementMNode node); + protected abstract R collectMeasurement(IMeasurementMNode node); /** * When traverse goes into a template, IMNode.getPartialPath may not work as nodes in template has * no parent on MTree. So this methods will construct a path from root to node in template using a * stack traverseContext. */ - protected MeasurementPath getCurrentMeasurementPathInTraverse(IMeasurementMNode currentNode) { - IMNode par = getParentOfNextMatchedNode(); + protected MeasurementPath getCurrentMeasurementPathInTraverse(IMeasurementMNode currentNode) { + N par = getParentOfNextMatchedNode(); MeasurementPath retPath = - new MeasurementPath(getPartialPathFromRootToNode(currentNode), currentNode.getSchema()); + new MeasurementPath( + getPartialPathFromRootToNode(currentNode.getAsMNode()), currentNode.getSchema()); retPath.setUnderAlignedEntity(par.getAsEntityMNode().isAligned()); return retPath; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/DatabaseCounter.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/DatabaseCounter.java index 0e7b589317974..b3c72e9d73bfb 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/DatabaseCounter.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/DatabaseCounter.java @@ -25,18 +25,18 @@ import org.apache.iotdb.db.metadata.mtree.traverser.basic.DatabaseTraverser; // This class implement database counter. -public class DatabaseCounter extends DatabaseTraverser implements Counter { +public class DatabaseCounter> extends DatabaseTraverser + implements Counter { private int count; - public DatabaseCounter( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + public DatabaseCounter(N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected Void generateResult(IMNode nextMatchedNode) { + protected Void generateResult(N nextMatchedNode) { count++; return null; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java index 3feaa46b58139..79f4603fe67b4 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java @@ -25,16 +25,17 @@ import org.apache.iotdb.db.metadata.mtree.traverser.basic.EntityTraverser; // This class implement entity counter. -public class EntityCounter extends EntityTraverser implements Counter { +public class EntityCounter> extends EntityTraverser + implements Counter { private int count; - public EntityCounter(IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + public EntityCounter(N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected Void generateResult(IMNode nextMatchedNode) { + protected Void generateResult(N nextMatchedNode) { count++; return null; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java index 62d28646415f7..4099f89b318aa 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java @@ -25,17 +25,18 @@ import org.apache.iotdb.db.metadata.mtree.traverser.basic.MeasurementTraverser; // This class implement measurement counter. -public class MeasurementCounter extends MeasurementTraverser implements Counter { +public class MeasurementCounter> extends MeasurementTraverser + implements Counter { private int count; public MeasurementCounter( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected Void generateResult(IMNode nextMatchedNode) { + protected Void generateResult(N nextMatchedNode) { count++; return null; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java index ed93385ae83f1..9cacedddfab82 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java @@ -25,7 +25,8 @@ import org.apache.iotdb.db.metadata.mtree.traverser.basic.EntityTraverser; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -public abstract class EntityUpdater extends EntityTraverser implements Updater { +public abstract class EntityUpdater> extends EntityTraverser + implements Updater { /** * To traverse subtree under root.sg, e.g., init Traverser(root, "root.sg.**") * @@ -35,13 +36,13 @@ public abstract class EntityUpdater extends EntityTraverser implements Upd * @param isPrefixMatch prefix match or not * @throws MetadataException path does not meet the expected rules */ - public EntityUpdater(IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + public EntityUpdater(N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected Void generateResult(IMNode nextMatchedNode) { + protected Void generateResult(N nextMatchedNode) { try { updateEntity(nextMatchedNode.getAsEntityMNode()); } catch (MetadataException e) { @@ -61,5 +62,5 @@ public void update() throws MetadataException { } } - protected abstract void updateEntity(IDeviceMNode node) throws MetadataException; + protected abstract void updateEntity(IDeviceMNode node) throws MetadataException; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java index 4cb5c22ef00ab..b28aea0313606 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java @@ -25,7 +25,8 @@ import org.apache.iotdb.db.metadata.mtree.traverser.basic.MeasurementTraverser; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -public abstract class MeasurementUpdater extends MeasurementTraverser implements Updater { +public abstract class MeasurementUpdater> extends MeasurementTraverser + implements Updater { /** * To traverse subtree under root.sg, e.g., init Traverser(root, "root.sg.**") * @@ -36,13 +37,13 @@ public abstract class MeasurementUpdater extends MeasurementTraverser impl * @throws MetadataException path does not meet the expected rules */ public MeasurementUpdater( - IMNode startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) + N startNode, PartialPath path, IMTreeStore store, boolean isPrefixMatch) throws MetadataException { super(startNode, path, store, isPrefixMatch); } @Override - protected Void generateResult(IMNode nextMatchedNode) { + protected Void generateResult(N nextMatchedNode) { try { updateMeasurement(nextMatchedNode.getAsMeasurementMNode()); } catch (MetadataException e) { @@ -62,5 +63,5 @@ public void update() throws MetadataException { } } - protected abstract void updateMeasurement(IMeasurementMNode node) throws MetadataException; + protected abstract void updateMeasurement(IMeasurementMNode node) throws MetadataException; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java index 4d573f8605aa2..e120a1c537c64 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java @@ -33,6 +33,10 @@ public ConfigMNodeInfo(String name) { super(name); } + public void setSchemaTemplateId(int schemaTemplateId) { + this.schemaTemplateId = schemaTemplateId; + } + /** * In InternalMNode, schemaTemplateId represents the template set on this node. The pre unset * mechanism is implemented by making this value negative. Since value 0 and -1 are all occupied, diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java index a5a40ac87b85b..93908e70d80c0 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java @@ -21,6 +21,9 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; public interface IConfigMNode extends IMNode { + + void setSchemaTemplateId(int id); + int getSchemaTemplateId(); void preUnsetSchemaTemplate(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java index f61c4cf1a76c1..564bc3b754d1a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java @@ -285,6 +285,11 @@ public R accept(MNodeVisitor visitor, C context) { return visitor.visitBasicMNode(this, context); } + @Override + public void setSchemaTemplateId(int id) { + configMNodeInfo.setSchemaTemplateId(id); + } + @Override public int getSchemaTemplateId() { return configMNodeInfo.getSchemaTemplateId(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java index 231920f5cfe8b..a9f95b109cc3c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java @@ -29,6 +29,11 @@ public ConfigDatabaseMNode(IConfigMNode parent, String name) { this.basicMNode = new ConfigBasicMNode(parent, name); } + @Override + public void setSchemaTemplateId(int id) { + basicMNode.setSchemaTemplateId(id); + } + @Override public int getSchemaTemplateId() { return basicMNode.getSchemaTemplateId(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java index 5fdb4b4460d3d..332227facfc32 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java @@ -41,8 +41,9 @@ import org.apache.iotdb.db.metadata.logfile.SchemaLogWriter; import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; import org.apache.iotdb.db.metadata.metric.SchemaRegionMemMetric; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGMemoryImpl; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; @@ -533,7 +534,7 @@ public void createTimeseries(ICreateTimeSeriesPlan plan, long offset) throws Met } try { - IMeasurementMNode leafMNode; + IMeasurementMNode leafMNode; // using try-catch to restore seriesNumberMonitor's state while create failed try { @@ -619,7 +620,7 @@ public void createAlignedTimeSeries(ICreateAlignedTimeSeriesPlan plan) throws Me List encodings = plan.getEncodings(); List> tagsList = plan.getTagsList(); List> attributesList = plan.getAttributesList(); - List measurementMNodeList; + List> measurementMNodeList; // using try-catch to restore seriesNumberMonitor's state while create failed try { @@ -728,7 +729,7 @@ public long constructSchemaBlackList(PathPatternTree patternTree) throws Metadat } private void recoverPreDeleteTimeseries(PartialPath path) throws MetadataException { - IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); + IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); measurementMNode.setPreDeleted(true); } @@ -776,7 +777,7 @@ public void deleteTimeseriesInBlackList(PathPatternTree patternTree) throws Meta private void deleteSingleTimeseriesInBlackList(PartialPath path) throws MetadataException, IOException { - IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); + IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); removeFromTagInvertedIndex(measurementMNode); regionStatistics.deleteTimeseries(1L); @@ -786,14 +787,14 @@ private void deleteSingleTimeseriesInBlackList(PartialPath path) } private void recoverRollbackPreDeleteTimeseries(PartialPath path) throws MetadataException { - IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); + IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); measurementMNode.setPreDeleted(false); } /** @param path full path from root to leaf node */ private void deleteOneTimeseriesUpdateStatistics(PartialPath path) throws MetadataException, IOException { - IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); + IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); removeFromTagInvertedIndex(measurementMNode); regionStatistics.deleteTimeseries(1L); @@ -811,9 +812,9 @@ private void deleteOneTimeseriesUpdateStatistics(PartialPath path) * * @param path path */ - private IMNode getDeviceNodeWithAutoCreate(PartialPath path) + private IMemMNode getDeviceNodeWithAutoCreate(PartialPath path) throws IOException, MetadataException { - IMNode node = mtree.getDeviceNodeWithAutoCreating(path); + IMemMNode node = mtree.getDeviceNodeWithAutoCreating(path); writeToMLog(SchemaRegionWritePlanFactory.getAutoCreateDeviceMNodePlan(node.getPartialPath())); return node; } @@ -854,7 +855,7 @@ public List fetchSchema( * @param offset offset in the tag file */ private void changeOffset(PartialPath path, long offset) throws MetadataException { - IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); + IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); measurementMNode.setOffset(offset); if (isRecovering) { @@ -867,11 +868,12 @@ private void changeOffset(PartialPath path, long offset) throws MetadataExceptio } private void changeAlias(PartialPath path, String alias) throws MetadataException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(path); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(path); + IDeviceMNode device = leafMNode.getParent().getAsEntityMNode(); if (leafMNode.getAlias() != null) { - leafMNode.getParent().deleteAliasChild(leafMNode.getAlias()); + device.deleteAliasChild(leafMNode.getAlias()); } - leafMNode.getParent().addAlias(alias, leafMNode); + device.addAlias(alias, leafMNode); mtree.setAlias(leafMNode, alias); try { @@ -898,7 +900,7 @@ public void upsertAliasAndTagsAndAttributes( Map attributesMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); // upsert alias upsertAlias(alias, fullPath, leafMNode); @@ -922,16 +924,18 @@ public void upsertAliasAndTagsAndAttributes( tagManager.updateTagsAndAttributes(tagsMap, attributesMap, leafMNode); } - private void upsertAlias(String alias, PartialPath fullPath, IMeasurementMNode leafMNode) + private void upsertAlias( + String alias, PartialPath fullPath, IMeasurementMNode leafMNode) throws MetadataException, IOException { // upsert alias if (alias != null && !alias.equals(leafMNode.getAlias())) { - if (!leafMNode.getParent().addAlias(alias, leafMNode)) { + IDeviceMNode deviceMNode = leafMNode.getParent().getAsEntityMNode(); + if (!deviceMNode.addAlias(alias, leafMNode)) { throw new MetadataException("The alias already exists."); } if (leafMNode.getAlias() != null) { - leafMNode.getParent().deleteAliasChild(leafMNode.getAlias()); + deviceMNode.deleteAliasChild(leafMNode.getAlias()); } mtree.setAlias(leafMNode, alias); @@ -950,7 +954,7 @@ private void upsertAlias(String alias, PartialPath fullPath, IMeasurementMNode l @Override public void addAttributes(Map attributesMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); // no tag or attribute, we need to add a new record in log if (leafMNode.getOffset() < 0) { @@ -973,7 +977,7 @@ public void addAttributes(Map attributesMap, PartialPath fullPat @Override public void addTags(Map tagsMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); // no tag or attribute, we need to add a new record in log if (leafMNode.getOffset() < 0) { long offset = tagManager.writeTagFile(tagsMap, Collections.emptyMap()); @@ -998,7 +1002,7 @@ public void addTags(Map tagsMap, PartialPath fullPath) @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public void dropTagsOrAttributes(Set keySet, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); // no tag or attribute, just do nothing. if (leafMNode.getOffset() != -1) { tagManager.dropTagsOrAttributes(keySet, fullPath, leafMNode); @@ -1016,7 +1020,7 @@ public void dropTagsOrAttributes(Set keySet, PartialPath fullPath) @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public void setTagsOrAttributesValue(Map alterMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); if (leafMNode.getOffset() < 0) { throw new MetadataException( String.format("TimeSeries [%s] does not have any tag/attribute.", fullPath)); @@ -1039,7 +1043,7 @@ public void setTagsOrAttributesValue(Map alterMap, PartialPath f @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public void renameTagOrAttributeKey(String oldKey, String newKey, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); if (leafMNode.getOffset() < 0) { throw new MetadataException( String.format("TimeSeries [%s] does not have [%s] tag/attribute.", fullPath, oldKey), @@ -1051,7 +1055,7 @@ public void renameTagOrAttributeKey(String oldKey, String newKey, PartialPath fu /** remove the node from the tag inverted index */ @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning - private void removeFromTagInvertedIndex(IMeasurementMNode node) throws IOException { + private void removeFromTagInvertedIndex(IMeasurementMNode node) throws IOException { tagManager.removeFromTagInvertedIndex(node); } // endregion diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java index c8dc713b3fbba..d4d52b65923c8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java @@ -57,7 +57,7 @@ public class Template implements Serializable { private boolean isDirectAligned; private Map schemaMap; - private transient Map directNodes; + private transient Map> directNodes; private transient int rehashCode; From 3fba9bc55ab30eebfb1fea590887054f51500944 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Fri, 3 Mar 2023 15:43:02 +0800 Subject: [PATCH 04/26] save --- .../iotdb/db/metadata/mnode/MNodeUtils.java | 11 +++---- .../newnode/MemTemplateMNodeGenerator.java | 30 +++++++++++++++++++ .../generator/TemplateMNodeGenerator.java | 27 +++++++++++++++++ .../iotdb/db/metadata/template/Template.java | 4 --- 4 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/generator/TemplateMNodeGenerator.java diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java index 4ebaf95ecf833..d6d1578a446aa 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java @@ -33,8 +33,8 @@ public class MNodeUtils { * @param node node to be transformed * @return generated entityMNode */ - public static IDeviceMNode setToEntity(IMNode node) { - IDeviceMNode entityMNode; + public static> IDeviceMNode setToEntity(IMNode node) { + IDeviceMNode entityMNode; if (node.isEntity()) { entityMNode = node.getAsEntityMNode(); } else { @@ -44,6 +44,7 @@ public static IDeviceMNode setToEntity(IMNode node) { node.getParent(), node.getName(), node.getAsDatabaseMNode().getDataTTL()); node.moveDataToNewMNode(entityMNode); } else { + // basic node entityMNode = new AbstractDeviceMNode(node.getParent(), node.getName()); if (node.getParent() != null) { node.getParent().replaceChild(node.getName(), entityMNode); @@ -63,9 +64,9 @@ public static IDeviceMNode setToEntity(IMNode node) { * @param entityMNode node to be transformed * @return generated NoEntity node */ - public static IMNode setToInternal(IDeviceMNode entityMNode) { - IMNode node; - IMNode parent = entityMNode.getParent(); + public static> IMNode setToInternal(IDeviceMNode entityMNode) { + IMNode node; + IMNode parent = entityMNode.getParent(); if (entityMNode.isDatabase()) { node = new AbstractDatabaseMNode( diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java new file mode 100644 index 0000000000000..b93694f820e23 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java @@ -0,0 +1,30 @@ +/* + * 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.metadata.newnode; + +import org.apache.iotdb.db.metadata.newnode.generator.TemplateMNodeGenerator; +import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +public class MemTemplateMNodeGenerator implements TemplateMNodeGenerator { + @Override + public IMemMNode apply(IMeasurementSchema schema) { + return new MeasurementMNode(null,schema.getMeasurementId(), schema, null); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/generator/TemplateMNodeGenerator.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/generator/TemplateMNodeGenerator.java new file mode 100644 index 0000000000000..6c855cd7638ca --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/generator/TemplateMNodeGenerator.java @@ -0,0 +1,27 @@ +/* + * 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.metadata.newnode.generator; + +import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +import java.util.function.Function; + +public interface TemplateMNodeGenerator> extends Function { +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java index d4d52b65923c8..c02814f8b0ab1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java @@ -57,13 +57,10 @@ public class Template implements Serializable { private boolean isDirectAligned; private Map schemaMap; - private transient Map> directNodes; - private transient int rehashCode; public Template() { schemaMap = new HashMap<>(); - directNodes = new HashMap<>(); } public Template( @@ -88,7 +85,6 @@ public Template( schemaMap = new HashMap<>(); this.name = name; isDirectAligned = false; - directNodes = new HashMap<>(); rehashCode = 0; for (int i = 0; i < measurements.size(); i++) { From d9e9523d8639f1eb5118842427a957aca8850d64 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Mon, 6 Mar 2023 19:34:16 +0800 Subject: [PATCH 05/26] done template --- .../iotdb/db/metadata/mnode/MNodeUtils.java | 4 +- .../iterator/AbstractTraverserIterator.java | 23 ++++---- .../iterator/CachedTraverserIterator.java | 13 +++-- .../iterator/MemoryTraverserIterator.java | 11 +++- .../mtree/MTreeBelowSGCachedImpl.java | 35 +++++++++--- .../mtree/MTreeBelowSGMemoryImpl.java | 25 ++++++--- .../mtree/store/CachedMTreeStore.java | 32 ++++++++--- .../metadata/mtree/store/MemMTreeStore.java | 27 ++++++--- .../metadata/mtree/traverser/Traverser.java | 11 ++-- .../newnode/CacheTemplateMNodeGenerator.java | 56 +++++++++++++++++++ .../newnode/MemTemplateMNodeGenerator.java | 34 +++++++++-- .../generator/TemplateMNodeGenerator.java | 27 --------- .../schemaregion/SchemaRegionMemoryImpl.java | 9 ++- .../SchemaRegionSchemaFileImpl.java | 7 ++- .../template/TemplateMNodeGenerator.java | 27 +-------- .../db/metadata/mtree/MTreeBelowSGTest.java | 11 +++- 16 files changed, 233 insertions(+), 119 deletions(-) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheTemplateMNodeGenerator.java delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/generator/TemplateMNodeGenerator.java diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java index d6d1578a446aa..c0f59827d3c08 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java @@ -33,7 +33,7 @@ public class MNodeUtils { * @param node node to be transformed * @return generated entityMNode */ - public static> IDeviceMNode setToEntity(IMNode node) { + public static > IDeviceMNode setToEntity(IMNode node) { IDeviceMNode entityMNode; if (node.isEntity()) { entityMNode = node.getAsEntityMNode(); @@ -64,7 +64,7 @@ public static> IDeviceMNode setToEntity(IMNode node) { * @param entityMNode node to be transformed * @return generated NoEntity node */ - public static> IMNode setToInternal(IDeviceMNode entityMNode) { + public static > IMNode setToInternal(IDeviceMNode entityMNode) { IMNode node; IMNode parent = entityMNode.getParent(); if (entityMNode.isDatabase()) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java index f1d876f729354..c09cce0c1825d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java @@ -35,22 +35,25 @@ * TraverserIterator for traversing device node. The iterator returns the filtered child nodes in * the mtree and the child nodes in the template. */ -public abstract class AbstractTraverserIterator implements IMNodeIterator { - private final IMNodeIterator directChildrenIterator; - private Iterator templateChildrenIterator; - protected IMNode nextMatchedNode; +public abstract class AbstractTraverserIterator> implements IMNodeIterator { + private final IMNodeIterator directChildrenIterator; + private Iterator templateChildrenIterator; + protected N nextMatchedNode; protected boolean usingDirectChildrenIterator = true; // if true, the pre deleted measurement or pre deactivated template won't be processed private boolean skipPreDeletedSchema = false; protected AbstractTraverserIterator( - IMTreeStore store, IDeviceMNode parent, Map templateMap) + IMTreeStore store, + IDeviceMNode parent, + Map templateMap, + TemplateMNodeGenerator templateMNodeGenerator) throws MetadataException { - this.directChildrenIterator = store.getChildrenIterator(parent); + this.directChildrenIterator = store.getChildrenIterator(parent.getAsMNode()); if (templateMap != null && parent.isUseTemplate()) { Template template = getActivatedSchemaTemplate(parent, templateMap); if (template != null) { - templateChildrenIterator = TemplateMNodeGenerator.getChildren(template); + templateChildrenIterator = templateMNodeGenerator.getChildren(template); } } } @@ -60,7 +63,7 @@ public void setSkipPreDeletedSchema(boolean skipPreDeletedSchema) { } private Template getActivatedSchemaTemplate( - IDeviceMNode node, Map templateMap) { + IDeviceMNode node, Map templateMap) { // new cluster, the used template is directly recorded as template id in device mnode if (node.getSchemaTemplateId() != NON_TEMPLATE) { if (skipPreDeletedSchema && node.getAsEntityMNode().isPreDeactivateTemplate()) { @@ -99,11 +102,11 @@ public boolean hasNext() { } @Override - public IMNode next() { + public N next() { if (!hasNext()) { throw new NoSuchElementException(); } - IMNode result = nextMatchedNode; + N result = nextMatchedNode; nextMatchedNode = null; return result; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java index a8c635b6808fc..9580460194e2b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java @@ -20,18 +20,23 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.template.Template; +import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import java.util.Map; -public class CachedTraverserIterator extends AbstractTraverserIterator { - private final IMTreeStore store; +public class CachedTraverserIterator extends AbstractTraverserIterator { + private final IMTreeStore store; public CachedTraverserIterator( - IMTreeStore store, IDeviceMNode parent, Map templateMap) + IMTreeStore store, + IDeviceMNode parent, + Map templateMap, + TemplateMNodeGenerator templateMNodeGenerator) throws MetadataException { - super(store, parent, templateMap); + super(store, parent, templateMap, templateMNodeGenerator); this.store = store; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java index 33dd65b6618bb..6fbfc198f5b69 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java @@ -20,15 +20,20 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.template.Template; +import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import java.util.Map; -public class MemoryTraverserIterator extends AbstractTraverserIterator { +public class MemoryTraverserIterator extends AbstractTraverserIterator { public MemoryTraverserIterator( - IMTreeStore store, IDeviceMNode parent, Map templateMap) + IMTreeStore store, + IDeviceMNode parent, + Map templateMap, + TemplateMNodeGenerator templateMNodeGenerator) throws MetadataException { - super(store, parent, templateMap); + super(store, parent, templateMap, templateMNodeGenerator); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index 2a657e2d7c6ff..aa4da5ecaf5b0 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -62,6 +62,7 @@ import org.apache.iotdb.db.metadata.query.reader.ISchemaReader; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; +import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -107,6 +108,7 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { private volatile ICacheMNode storageGroupMNode; private final ICacheMNode rootNode; private final Function, Map> tagGetter; + private final TemplateMNodeGenerator templateMNodeGenerator; private final int levelOfSG; // region MTree initialization, clear and serialization @@ -116,10 +118,18 @@ public MTreeBelowSGCachedImpl( Runnable flushCallback, Consumer> measurementProcess, int schemaRegionId, - CachedSchemaRegionStatistics regionStatistics) + CachedSchemaRegionStatistics regionStatistics, + TemplateMNodeGenerator templateMNodeGenerator) throws MetadataException, IOException { this.tagGetter = tagGetter; - store = new CachedMTreeStore(storageGroupPath, schemaRegionId, regionStatistics, flushCallback); + this.templateMNodeGenerator = templateMNodeGenerator; + store = + new CachedMTreeStore( + storageGroupPath, + schemaRegionId, + regionStatistics, + flushCallback, + templateMNodeGenerator); this.storageGroupMNode = store.getRoot(); this.storageGroupMNode.setParent(storageGroupMNode.getParent()); this.rootNode = store.generatePrefix(storageGroupPath); @@ -145,13 +155,15 @@ private MTreeBelowSGCachedImpl( PartialPath storageGroupPath, CachedMTreeStore store, Consumer> measurementProcess, - Function, Map> tagGetter) + Function, Map> tagGetter, + TemplateMNodeGenerator templateMNodeGenerator) throws MetadataException { this.store = store; this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupMNode.getPartialPath().getNodeLength() - 1; this.tagGetter = tagGetter; + this.templateMNodeGenerator = templateMNodeGenerator; // recover measurement try (MeasurementCollector collector = @@ -192,14 +204,21 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( CachedSchemaRegionStatistics regionStatistics, Consumer> measurementProcess, Function, Map> tagGetter, - Runnable flushCallback) + Runnable flushCallback, + TemplateMNodeGenerator templateMNodeGenerator) throws IOException, MetadataException { return new MTreeBelowSGCachedImpl( new PartialPath(storageGroupFullPath), CachedMTreeStore.loadFromSnapshot( - snapshotDir, storageGroupFullPath, schemaRegionId, regionStatistics, flushCallback), + snapshotDir, + storageGroupFullPath, + schemaRegionId, + regionStatistics, + flushCallback, + templateMNodeGenerator), measurementProcess, - tagGetter); + tagGetter, + templateMNodeGenerator); } // endregion @@ -733,7 +752,7 @@ protected Void collectMeasurement(IMeasurementMNode node) { return null; } }) { - collector.setTemplateMap(templateMap); + collector.setTemplateMap(templateMap, templateMNodeGenerator); collector.traverse(); } return result; @@ -1068,7 +1087,7 @@ public PartialPath getPartialPath() { } }; - collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate()); + collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate(), templateMNodeGenerator); Traverser traverser; if (showTimeSeriesPlan.getLimit() > 0 || showTimeSeriesPlan.getOffset() > 0) { traverser = diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index fff582d43fdc5..50913134e67f2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -62,6 +62,7 @@ import org.apache.iotdb.db.metadata.query.reader.ISchemaReader; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; +import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -108,29 +109,34 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG { private volatile IMemMNode storageGroupMNode; private final IMemMNode rootNode; private final Function, Map> tagGetter; + private final TemplateMNodeGenerator templateMNodeGenerator; private final int levelOfSG; // region MTree initialization, clear and serialization public MTreeBelowSGMemoryImpl( PartialPath storageGroupPath, Function, Map> tagGetter, - MemSchemaRegionStatistics regionStatistics) { - store = new MemMTreeStore(storageGroupPath, regionStatistics); + MemSchemaRegionStatistics regionStatistics, + TemplateMNodeGenerator templateMNodeGenerator) { + store = new MemMTreeStore(storageGroupPath, regionStatistics, templateMNodeGenerator); this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; + this.templateMNodeGenerator = templateMNodeGenerator; } private MTreeBelowSGMemoryImpl( PartialPath storageGroupPath, MemMTreeStore store, - Function, Map> tagGetter) { + Function, Map> tagGetter, + TemplateMNodeGenerator templateMNodeGenerator) { this.store = store; this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; + this.templateMNodeGenerator = templateMNodeGenerator; } @Override @@ -156,12 +162,15 @@ public static MTreeBelowSGMemoryImpl loadFromSnapshot( String storageGroupFullPath, MemSchemaRegionStatistics regionStatistics, Consumer> measurementProcess, - Function, Map> tagGetter) + Function, Map> tagGetter, + TemplateMNodeGenerator templateMNodeGenerator) throws IOException, IllegalPathException { return new MTreeBelowSGMemoryImpl( new PartialPath(storageGroupFullPath), - MemMTreeStore.loadFromSnapshot(snapshotDir, measurementProcess, regionStatistics), - tagGetter); + MemMTreeStore.loadFromSnapshot( + snapshotDir, measurementProcess, regionStatistics, templateMNodeGenerator), + tagGetter, + templateMNodeGenerator); } // endregion @@ -621,7 +630,7 @@ protected Void collectMeasurement(IMeasurementMNode node) { return null; } }) { - collector.setTemplateMap(templateMap); + collector.setTemplateMap(templateMap, templateMNodeGenerator); collector.setSkipPreDeletedSchema(true); collector.traverse(); } @@ -934,7 +943,7 @@ public PartialPath getPartialPath() { }; } }; - collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate()); + collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate(), templateMNodeGenerator); Traverser traverser; if (showTimeSeriesPlan.getLimit() > 0 || showTimeSeriesPlan.getOffset() > 0) { traverser = diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java index e2adbde7961cf..1e89c9040425a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java @@ -39,6 +39,7 @@ import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; +import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,6 +67,8 @@ public class CachedMTreeStore implements IMTreeStore { private final Runnable flushCallback; + private final TemplateMNodeGenerator templateMNodeGenerator; + private final CachedSchemaRegionStatistics regionStatistics; private final StampedWriterPreferredLock lock = new StampedWriterPreferredLock(); @@ -74,13 +77,15 @@ public CachedMTreeStore( PartialPath storageGroup, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - Runnable flushCallback) + Runnable flushCallback, + TemplateMNodeGenerator templateMNodeGenerator) throws MetadataException, IOException { file = SchemaFile.initSchemaFile(storageGroup.getFullPath(), schemaRegionId); root = file.init(); this.regionStatistics = regionStatistics; this.memManager = new MemManager(regionStatistics); this.flushCallback = flushCallback; + this.templateMNodeGenerator = templateMNodeGenerator; this.cacheManager = CacheMemoryManager.getInstance().createLRUCacheManager(this, memManager); cacheManager.initRootStatus(root); regionStatistics.setCacheManager(cacheManager); @@ -212,7 +217,7 @@ private ICacheMNode loadChildFromDiskToParent(ICacheMNode parent, ICacheMNode no } } - private void processAlias(IDeviceMNode parent, IMeasurementMNode node) { + private void processAlias(IDeviceMNode parent, IMeasurementMNode node) { String alias = node.getAlias(); if (alias != null) { parent.addAlias(alias, node); @@ -243,14 +248,15 @@ public IMNodeIterator getTraverserIterator( } final IMNodeIterator getTraverserIterator( - IMTreeStore store, + IMTreeStore store, ICacheMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { if (parent.isEntity()) { - AbstractTraverserIterator iterator = - new CachedTraverserIterator(store, parent.getAsEntityMNode(), templateMap); + AbstractTraverserIterator iterator = + new CachedTraverserIterator( + store, parent.getAsEntityMNode(), templateMap, templateMNodeGenerator); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; } else { @@ -489,10 +495,16 @@ public static CachedMTreeStore loadFromSnapshot( String storageGroup, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - Runnable flushCallback) + Runnable flushCallback, + TemplateMNodeGenerator templateMNodeGenerator) throws IOException, MetadataException { return new CachedMTreeStore( - snapshotDir, storageGroup, schemaRegionId, regionStatistics, flushCallback); + snapshotDir, + storageGroup, + schemaRegionId, + regionStatistics, + flushCallback, + templateMNodeGenerator); } private CachedMTreeStore( @@ -500,13 +512,15 @@ private CachedMTreeStore( String storageGroup, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - Runnable flushCallback) + Runnable flushCallback, + TemplateMNodeGenerator templateMNodeGenerator) throws IOException, MetadataException { file = SchemaFile.loadSnapshot(snapshotDir, storageGroup, schemaRegionId); root = file.init(); this.regionStatistics = regionStatistics; this.memManager = new MemManager(regionStatistics); this.flushCallback = flushCallback; + this.templateMNodeGenerator = templateMNodeGenerator; this.cacheManager = CacheMemoryManager.getInstance().createLRUCacheManager(this, memManager); cacheManager.initRootStatus(root); regionStatistics.setCacheManager(cacheManager); @@ -582,7 +596,7 @@ public void flushVolatileNodes() { * Since any node R/W operation may change the memory status, thus it should be controlled during * iterating child nodes. */ - private class CachedMNodeIterator implements IMNodeIterator { + private class CachedMNodeIterator implements IMNodeIterator { ICacheMNode parent; Iterator iterator; Iterator bufferIterator; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index c18f7fb759c68..87cf02df427c1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -38,6 +38,7 @@ import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; +import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import java.io.File; import java.io.IOException; @@ -48,22 +49,31 @@ public class MemMTreeStore implements IMTreeStore { private final IMNodeSizeEstimator estimator = new BasicMNodSizeEstimator(); - private MemSchemaRegionStatistics regionStatistics; + private final MemSchemaRegionStatistics regionStatistics; + private final TemplateMNodeGenerator templateMNodeGenerator; private IMemMNode root; - public MemMTreeStore(PartialPath rootPath, MemSchemaRegionStatistics regionStatistics) { + public MemMTreeStore( + PartialPath rootPath, + MemSchemaRegionStatistics regionStatistics, + TemplateMNodeGenerator templateMNodeGenerator) { this.root = new DatabaseMNode( null, rootPath.getTailNode(), CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); this.regionStatistics = regionStatistics; + this.templateMNodeGenerator = templateMNodeGenerator; } - private MemMTreeStore(IMemMNode root, MemSchemaRegionStatistics regionStatistics) { + private MemMTreeStore( + IMemMNode root, + MemSchemaRegionStatistics regionStatistics, + TemplateMNodeGenerator templateMNodeGenerator) { this.root = root; this.regionStatistics = regionStatistics; + this.templateMNodeGenerator = templateMNodeGenerator; } @Override @@ -109,8 +119,9 @@ public IMNodeIterator getTraverserIterator( IMemMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { if (parent.isEntity()) { - AbstractTraverserIterator iterator = - new MemoryTraverserIterator(this, parent.getAsEntityMNode(), templateMap); + AbstractTraverserIterator iterator = + new MemoryTraverserIterator( + this, parent.getAsEntityMNode(), templateMap, templateMNodeGenerator); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; } else { @@ -211,11 +222,13 @@ public boolean createSnapshot(File snapshotDir) { public static MemMTreeStore loadFromSnapshot( File snapshotDir, Consumer> measurementProcess, - MemSchemaRegionStatistics regionStatistics) + MemSchemaRegionStatistics regionStatistics, + TemplateMNodeGenerator templateMNodeGenerator) throws IOException { return new MemMTreeStore( MemMTreeSnapshotUtil.loadSnapshot(snapshotDir, measurementProcess, regionStatistics), - regionStatistics); + regionStatistics, + templateMNodeGenerator); } private void requestMemory(int size) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java index a2bebeda6dff8..96e7557f181d9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java @@ -60,6 +60,7 @@ public abstract class Traverser> extends AbstractTreeVisi // measurement in template should be processed only if templateMap is not null protected Map templateMap; + protected TemplateMNodeGenerator templateMNodeGenerator; // if true, the pre deleted measurement or pre deactivated template won't be processed protected boolean skipPreDeletedSchema = false; @@ -126,10 +127,8 @@ protected N getChild(N parent, String childName) throws MetadataException { Template template = templateMap.get(templateId); // if null, it means the template on this device is not covered in this query, refer to the // mpp analyzing stage - if (template != null) { - child = - TemplateMNodeGenerator.getChild( - templateMap.get(templateId), childName); + if (template != null && templateMNodeGenerator != null) { + child = templateMNodeGenerator.getChild(templateMap.get(templateId), childName); } } } @@ -171,8 +170,10 @@ public void close() { } } - public void setTemplateMap(Map templateMap) { + public void setTemplateMap( + Map templateMap, TemplateMNodeGenerator templateMNodeGenerator) { this.templateMap = templateMap; + this.templateMNodeGenerator = templateMNodeGenerator; } public void setSkipPreDeletedSchema(boolean skipPreDeletedSchema) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheTemplateMNodeGenerator.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheTemplateMNodeGenerator.java new file mode 100644 index 0000000000000..a84297f481b81 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheTemplateMNodeGenerator.java @@ -0,0 +1,56 @@ +/* + * 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.metadata.newnode; + +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.template.Template; +import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +import java.util.Iterator; + +public class CacheTemplateMNodeGenerator implements TemplateMNodeGenerator { + + @Override + public ICacheMNode getChild(Template template, String name) { + IMeasurementSchema schema = template.getSchema(name); + return schema == null + ? null + : new CacheMeasurementMNode(null, name, template.getSchema(name), null); + } + + @Override + public Iterator getChildren(Template template) { + return new Iterator() { + private final Iterator schemas = + template.getSchemaMap().values().iterator(); + + @Override + public boolean hasNext() { + return schemas.hasNext(); + } + + @Override + public ICacheMNode next() { + IMeasurementSchema schema = schemas.next(); + return new CacheMeasurementMNode(null, schema.getMeasurementId(), schema, null); + } + }; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java index b93694f820e23..2e2fde48a8aff 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java @@ -18,13 +18,37 @@ */ package org.apache.iotdb.db.metadata.newnode; -import org.apache.iotdb.db.metadata.newnode.generator.TemplateMNodeGenerator; import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; +import org.apache.iotdb.db.metadata.template.Template; +import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; +import java.util.Iterator; + public class MemTemplateMNodeGenerator implements TemplateMNodeGenerator { - @Override - public IMemMNode apply(IMeasurementSchema schema) { - return new MeasurementMNode(null,schema.getMeasurementId(), schema, null); - } + + @Override + public IMemMNode getChild(Template template, String name) { + IMeasurementSchema schema = template.getSchema(name); + return schema == null ? null : new MeasurementMNode(null, name, template.getSchema(name), null); + } + + @Override + public Iterator getChildren(Template template) { + return new Iterator() { + private final Iterator schemas = + template.getSchemaMap().values().iterator(); + + @Override + public boolean hasNext() { + return schemas.hasNext(); + } + + @Override + public IMemMNode next() { + IMeasurementSchema schema = schemas.next(); + return new MeasurementMNode(null, schema.getMeasurementId(), schema, null); + } + }; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/generator/TemplateMNodeGenerator.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/generator/TemplateMNodeGenerator.java deleted file mode 100644 index 6c855cd7638ca..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/generator/TemplateMNodeGenerator.java +++ /dev/null @@ -1,27 +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.metadata.newnode.generator; - -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; - -import java.util.function.Function; - -public interface TemplateMNodeGenerator> extends Function { -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java index bb849db0adbdc..5b4fc3389c187 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java @@ -43,6 +43,7 @@ import org.apache.iotdb.db.metadata.metric.SchemaRegionMemMetric; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGMemoryImpl; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.MemTemplateMNodeGenerator; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; @@ -191,7 +192,10 @@ public synchronized void init() throws MetadataException { tagManager = new TagManager(schemaRegionDirPath); mtree = new MTreeBelowSGMemoryImpl( - new PartialPath(storageGroupFullPath), tagManager::readTags, regionStatistics); + new PartialPath(storageGroupFullPath), + tagManager::readTags, + regionStatistics, + new MemTemplateMNodeGenerator()); if (!(config.isClusterMode() && config @@ -477,7 +481,8 @@ public void loadSnapshot(File latestSnapshotRootDir) { schemaRegionId); } }, - tagManager::readTags); + tagManager::readTags, + new MemTemplateMNodeGenerator()); logger.info( "MTree snapshot loading of schemaRegion {} costs {}ms.", schemaRegionId, diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java index 0f4b304a5df1a..50f11b312370b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java @@ -45,6 +45,7 @@ import org.apache.iotdb.db.metadata.metric.SchemaRegionCachedMetric; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGCachedImpl; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; +import org.apache.iotdb.db.metadata.newnode.CacheTemplateMNodeGenerator; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; @@ -202,7 +203,8 @@ public synchronized void init() throws MetadataException { } }, schemaRegionId.getId(), - regionStatistics); + regionStatistics, + new CacheTemplateMNodeGenerator()); if (!(config.isClusterMode() && config @@ -518,7 +520,8 @@ public void loadSnapshot(File latestSnapshotRootDir) { } }, tagManager::readTags, - this::flushCallback); + this::flushCallback, + new CacheTemplateMNodeGenerator()); logger.info( "MTree snapshot loading of schemaRegion {} costs {}ms.", schemaRegionId, diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateMNodeGenerator.java b/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateMNodeGenerator.java index b22ed3ab3fcc6..553208acaacc1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateMNodeGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateMNodeGenerator.java @@ -19,33 +19,12 @@ package org.apache.iotdb.db.metadata.template; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; -import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; import java.util.Iterator; -// TODO: it will be generic later -public class TemplateMNodeGenerator { - public static IMNode getChild(Template template, String name) { - IMeasurementSchema schema = template.getSchema(name); - return schema == null ? null : new MeasurementMNode(null, name, template.getSchema(name), null); - } +public interface TemplateMNodeGenerator> { - public static Iterator getChildren(Template template) { - return new Iterator() { - private final Iterator schemas = - template.getSchemaMap().values().iterator(); + N getChild(Template template, String name); - @Override - public boolean hasNext() { - return schemas.hasNext(); - } - - @Override - public IMNode next() { - IMeasurementSchema schema = schemas.next(); - return new MeasurementMNode(null, schema.getMeasurementId(), schema, null); - } - }; - } + Iterator getChildren(Template template); } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java index 2db821f7fea23..a27e2605e2eab 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java @@ -24,8 +24,9 @@ import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException; import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; +import org.apache.iotdb.db.metadata.newnode.CacheTemplateMNodeGenerator; +import org.apache.iotdb.db.metadata.newnode.MemTemplateMNodeGenerator; import org.apache.iotdb.db.metadata.rescon.CachedSchemaEngineStatistics; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.rescon.MemSchemaEngineStatistics; @@ -100,11 +101,15 @@ private IMTreeBelowSG getStorageGroup(PartialPath path) throws MetadataException // do nothing }, 0, - new CachedSchemaRegionStatistics(0, new CachedSchemaEngineStatistics())); + new CachedSchemaRegionStatistics(0, new CachedSchemaEngineStatistics()), + new CacheTemplateMNodeGenerator()); } else { mtree = new MTreeBelowSGMemoryImpl( - path, null, new MemSchemaRegionStatistics(0, new MemSchemaEngineStatistics())); + path, + null, + new MemSchemaRegionStatistics(0, new MemSchemaEngineStatistics()), + new MemTemplateMNodeGenerator()); } usedMTree.add(mtree); return mtree; From d29722b887ad35225f3626cc762abdc3270f3719 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Tue, 7 Mar 2023 11:04:18 +0800 Subject: [PATCH 06/26] adapt schema file --- .../iotdb/db/metadata/mnode/BasicMNode.java | 13 +- .../iotdb/db/metadata/mnode/MNodeUtils.java | 67 ++++- .../mnode/container/ConfigMNodeContainer.java | 92 ++++++ .../container/MNodeContainerMapImpl.java | 26 -- ...Containers.java => MemMNodeContainer.java} | 41 +-- .../iterator/AbstractTraverserIterator.java | 7 +- .../iterator/CachedTraverserIterator.java | 6 +- .../iterator/MemoryTraverserIterator.java | 6 +- .../mtree/MTreeBelowSGCachedImpl.java | 28 +- .../mtree/MTreeBelowSGMemoryImpl.java | 24 +- .../mtree/store/CachedMTreeStore.java | 28 +- .../metadata/mtree/store/MemMTreeStore.java | 23 +- .../store/disk/CachedMNodeContainer.java | 64 +++++ .../store/disk/ICachedMNodeContainer.java | 3 +- .../store/disk/schemafile/ISegmentedPage.java | 8 +- .../store/disk/schemafile/RecordUtils.java | 66 +++-- .../store/disk/schemafile/SchemaFile.java | 38 +-- .../store/disk/schemafile/SegmentedPage.java | 41 +-- .../store/disk/schemafile/WrappedSegment.java | 20 +- .../schemafile/pagemgr/BTreePageManager.java | 28 +- .../disk/schemafile/pagemgr/IPageManager.java | 13 +- .../disk/schemafile/pagemgr/PageManager.java | 24 +- .../metadata/mtree/traverser/Traverser.java | 14 +- .../newnode/CacheTemplateMNodeGenerator.java | 56 ---- .../newnode/MemTemplateMNodeGenerator.java | 54 ---- .../newnode/basic/CacheBasicMNode.java | 13 +- .../newnode/basic/ConfigBasicMNode.java | 13 +- .../CacheDatabaseDeviceMNode.java | 5 + .../newnode/factory/CacheMNodeFactory.java | 58 ++++ .../factory/IMNodeFactory.java} | 20 +- .../newnode/factory/MemMNodeFactory.java | 64 +++++ .../measurement/AbstractMeasurementMNode.java | 8 +- .../measurement/CacheMeasurementMNode.java | 7 + .../newnode/measurement/MeasurementMNode.java | 7 + .../schemaregion/SchemaRegionMemoryImpl.java | 6 +- .../SchemaRegionSchemaFileImpl.java | 6 +- .../db/metadata/mtree/MTreeBelowSGTest.java | 8 +- .../mtree/schemafile/SchemaFileLogTest.java | 16 +- .../mtree/schemafile/SchemaFileTest.java | 271 +++++++++--------- 39 files changed, 738 insertions(+), 554 deletions(-) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/ConfigMNodeContainer.java delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainerMapImpl.java rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/{MNodeContainers.java => MemMNodeContainer.java} (62%) delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheTemplateMNodeGenerator.java delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java rename server/src/main/java/org/apache/iotdb/db/metadata/{template/TemplateMNodeGenerator.java => newnode/factory/IMNodeFactory.java} (52%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java index c79d6c1e5a2b1..55357e49670a2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java @@ -21,8 +21,7 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.MNodeContainerMapImpl; -import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; +import org.apache.iotdb.db.metadata.mnode.container.MemMNodeContainer; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.newnode.BasicMNodeInfo; import org.apache.iotdb.db.metadata.newnode.IMemMNode; @@ -150,7 +149,7 @@ public IMemMNode addChild(String name, IMemMNode child) { // double check, children is volatile synchronized (this) { if (children == null) { - children = new MNodeContainerMapImpl<>(); + children = new MemMNodeContainer(); } } } @@ -180,7 +179,7 @@ public IMemMNode addChild(IMemMNode child) { // double check, children is volatile synchronized (this) { if (children == null) { - children = new MNodeContainerMapImpl<>(); + children = new MemMNodeContainer(); } } } @@ -231,15 +230,15 @@ public void moveDataToNewMNode(IMemMNode newMNode) { } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { if (children == null) { - return MNodeContainers.emptyMNodeContainer(); + return MemMNodeContainer.emptyMNodeContainer(); } return children; } @Override - public void setChildren(IMNodeContainer children) { + public void setChildren(IMNodeContainer children) { this.children = children; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java index c0f59827d3c08..4de5cc419d76a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java @@ -18,10 +18,13 @@ */ package org.apache.iotdb.db.metadata.mnode; -import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; +import org.apache.iotdb.db.metadata.template.Template; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +import java.util.Iterator; public class MNodeUtils { @@ -33,19 +36,22 @@ public class MNodeUtils { * @param node node to be transformed * @return generated entityMNode */ - public static > IDeviceMNode setToEntity(IMNode node) { + public static > IDeviceMNode setToEntity( + IMNode node, IMNodeFactory nodeFactory) { IDeviceMNode entityMNode; if (node.isEntity()) { entityMNode = node.getAsEntityMNode(); } else { if (node.isDatabase()) { entityMNode = - new AbstractDatabaseDeviceMNode( - node.getParent(), node.getName(), node.getAsDatabaseMNode().getDataTTL()); + nodeFactory + .createDatabaseDeviceMNode( + node.getParent(), node.getName(), node.getAsDatabaseMNode().getDataTTL()) + .getAsEntityMNode(); node.moveDataToNewMNode(entityMNode); } else { // basic node - entityMNode = new AbstractDeviceMNode(node.getParent(), node.getName()); + entityMNode = nodeFactory.createDeviceMNode(node.getParent(), node.getName()); if (node.getParent() != null) { node.getParent().replaceChild(node.getName(), entityMNode); } else { @@ -64,15 +70,17 @@ public static > IDeviceMNode setToEntity(IMNode node) * @param entityMNode node to be transformed * @return generated NoEntity node */ - public static > IMNode setToInternal(IDeviceMNode entityMNode) { - IMNode node; - IMNode parent = entityMNode.getParent(); + public static > N setToInternal( + IDeviceMNode entityMNode, IMNodeFactory nodeFactor) { + N node; + N parent = entityMNode.getParent(); if (entityMNode.isDatabase()) { - node = - new AbstractDatabaseMNode( - parent, entityMNode.getName(), entityMNode.getAsDatabaseMNode().getDataTTL()); + IDatabaseMNode databaseMNode = + nodeFactor.createDatabaseMNode(parent, entityMNode.getName()); + databaseMNode.setDataTTL(entityMNode.getAsDatabaseMNode().getDataTTL()); + node = databaseMNode.getAsMNode(); } else { - node = new BasicMNode(parent, entityMNode.getName()); + node = nodeFactor.createBasicMNode(parent, entityMNode.getName()); } if (parent != null) { @@ -80,4 +88,35 @@ public static > IMNode setToInternal(IDeviceMNode enti } return node; } + + public static > N getChild( + Template template, String name, IMNodeFactory nodeFactor) { + IMeasurementSchema schema = template.getSchema(name); + return schema == null + ? null + : nodeFactor + .createMeasurementMNode(null, name, template.getSchema(name), null) + .getAsMNode(); + } + + public static > Iterator getChildren( + Template template, IMNodeFactory nodeFactor) { + return new Iterator() { + private final Iterator schemas = + template.getSchemaMap().values().iterator(); + + @Override + public boolean hasNext() { + return schemas.hasNext(); + } + + @Override + public N next() { + IMeasurementSchema schema = schemas.next(); + return nodeFactor + .createMeasurementMNode(null, schema.getMeasurementId(), schema, null) + .getAsMNode(); + } + }; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/ConfigMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/ConfigMNodeContainer.java new file mode 100644 index 0000000000000..1e2dda7ef8ac7 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/ConfigMNodeContainer.java @@ -0,0 +1,92 @@ +/* + * 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.metadata.mnode.container; + +import org.apache.iotdb.db.metadata.newnode.IConfigMNode; + +import org.jetbrains.annotations.NotNull; + +import java.util.AbstractMap; +import java.util.Collection; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import static java.util.Collections.emptySet; + +public class ConfigMNodeContainer extends ConcurrentHashMap + implements IMNodeContainer { + + private static final IMNodeContainer EMPTY_CONTAINER = + new ConfigMNodeContainer.EmptyContainer(); + + public static IMNodeContainer emptyMNodeContainer() { + return EMPTY_CONTAINER; + } + + private static class EmptyContainer extends AbstractMap + implements IMNodeContainer { + + @Override + public int size() { + return 0; + } + + @Override + public boolean isEmpty() { + return true; + } + + @Override + public boolean containsKey(Object key) { + return false; + } + + @Override + public boolean containsValue(Object value) { + return false; + } + + @Override + public IConfigMNode get(Object key) { + return null; + } + + @Override + @NotNull + public Set keySet() { + return emptySet(); + } + + @Override + @NotNull + public Collection values() { + return emptySet(); + } + + @NotNull + public Set> entrySet() { + return emptySet(); + } + + @Override + public boolean equals(Object o) { + return o == this; + } + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainerMapImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainerMapImpl.java deleted file mode 100644 index faba67bdd4863..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainerMapImpl.java +++ /dev/null @@ -1,26 +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.metadata.mnode.container; - -import org.apache.iotdb.db.metadata.mnode.IMNode; - -import java.util.concurrent.ConcurrentHashMap; - -public class MNodeContainerMapImpl> extends ConcurrentHashMap - implements IMNodeContainer {} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainers.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MemMNodeContainer.java similarity index 62% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainers.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MemMNodeContainer.java index ad473edac0399..69ca2d2519bee 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MNodeContainers.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MemMNodeContainer.java @@ -18,10 +18,7 @@ */ package org.apache.iotdb.db.metadata.mnode.container; -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; -import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.jetbrains.annotations.NotNull; @@ -29,36 +26,22 @@ import java.util.Collection; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import static java.util.Collections.emptySet; -public class MNodeContainers { +public class MemMNodeContainer extends ConcurrentHashMap + implements IMNodeContainer { - @SuppressWarnings("rawtypes") - private static final IMNodeContainer EMPTY_CONTAINER = new EmptyContainer(); + private static final IMNodeContainer EMPTY_CONTAINER = + new MemMNodeContainer.EmptyContainer(); - @SuppressWarnings("unchecked") - public static IMNodeContainer emptyMNodeContainer() { + public static IMNodeContainer emptyMNodeContainer() { return EMPTY_CONTAINER; } - public static boolean isEmptyContainer(IMNodeContainer container) { - return EMPTY_CONTAINER.equals(container); - } - - public static IMNodeContainer getNewMNodeContainer() { - if (IoTDBDescriptor.getInstance() - .getConfig() - .getSchemaEngineMode() - .equals(SchemaEngineMode.Schema_File.toString())) { - return new CachedMNodeContainer(); - } else { - return new MNodeContainerMapImpl(); - } - } - - private static class EmptyContainer extends AbstractMap - implements IMNodeContainer { + private static class EmptyContainer extends AbstractMap + implements IMNodeContainer { @Override public int size() { @@ -81,7 +64,7 @@ public boolean containsValue(Object value) { } @Override - public IMNode get(Object key) { + public IMemMNode get(Object key) { return null; } @@ -93,12 +76,12 @@ public Set keySet() { @Override @NotNull - public Collection values() { + public Collection values() { return emptySet(); } @NotNull - public Set> entrySet() { + public Set> entrySet() { return emptySet(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java index c09cce0c1825d..e77767e1f4855 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java @@ -20,10 +20,11 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.mnode.MNodeUtils; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import java.util.Iterator; import java.util.Map; @@ -47,13 +48,13 @@ protected AbstractTraverserIterator( IMTreeStore store, IDeviceMNode parent, Map templateMap, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws MetadataException { this.directChildrenIterator = store.getChildrenIterator(parent.getAsMNode()); if (templateMap != null && parent.isUseTemplate()) { Template template = getActivatedSchemaTemplate(parent, templateMap); if (template != null) { - templateChildrenIterator = templateMNodeGenerator.getChildren(template); + templateChildrenIterator = MNodeUtils.getChildren(template, nodeFactory); } } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java index 9580460194e2b..78f4dc1c5150a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java @@ -22,8 +22,8 @@ import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import java.util.Map; @@ -34,9 +34,9 @@ public CachedTraverserIterator( IMTreeStore store, IDeviceMNode parent, Map templateMap, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws MetadataException { - super(store, parent, templateMap, templateMNodeGenerator); + super(store, parent, templateMap, nodeFactory); this.store = store; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java index 6fbfc198f5b69..b6f36171f804c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java @@ -22,8 +22,8 @@ import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import java.util.Map; @@ -32,8 +32,8 @@ public MemoryTraverserIterator( IMTreeStore store, IDeviceMNode parent, Map templateMap, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws MetadataException { - super(store, parent, templateMap, templateMNodeGenerator); + super(store, parent, templateMap, nodeFactory); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index aa4da5ecaf5b0..ceecab05a7f46 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -49,6 +49,7 @@ import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; @@ -62,7 +63,6 @@ import org.apache.iotdb.db.metadata.query.reader.ISchemaReader; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -108,7 +108,7 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { private volatile ICacheMNode storageGroupMNode; private final ICacheMNode rootNode; private final Function, Map> tagGetter; - private final TemplateMNodeGenerator templateMNodeGenerator; + private final IMNodeFactory nodeFactory; private final int levelOfSG; // region MTree initialization, clear and serialization @@ -119,17 +119,13 @@ public MTreeBelowSGCachedImpl( Consumer> measurementProcess, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws MetadataException, IOException { this.tagGetter = tagGetter; - this.templateMNodeGenerator = templateMNodeGenerator; + this.nodeFactory = nodeFactory; store = new CachedMTreeStore( - storageGroupPath, - schemaRegionId, - regionStatistics, - flushCallback, - templateMNodeGenerator); + storageGroupPath, schemaRegionId, regionStatistics, flushCallback, nodeFactory); this.storageGroupMNode = store.getRoot(); this.storageGroupMNode.setParent(storageGroupMNode.getParent()); this.rootNode = store.generatePrefix(storageGroupPath); @@ -156,14 +152,14 @@ private MTreeBelowSGCachedImpl( CachedMTreeStore store, Consumer> measurementProcess, Function, Map> tagGetter, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws MetadataException { this.store = store; this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupMNode.getPartialPath().getNodeLength() - 1; this.tagGetter = tagGetter; - this.templateMNodeGenerator = templateMNodeGenerator; + this.nodeFactory = nodeFactory; // recover measurement try (MeasurementCollector collector = @@ -205,7 +201,7 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( Consumer> measurementProcess, Function, Map> tagGetter, Runnable flushCallback, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws IOException, MetadataException { return new MTreeBelowSGCachedImpl( new PartialPath(storageGroupFullPath), @@ -215,10 +211,10 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( schemaRegionId, regionStatistics, flushCallback, - templateMNodeGenerator), + nodeFactory), measurementProcess, tagGetter, - templateMNodeGenerator); + nodeFactory); } // endregion @@ -752,7 +748,7 @@ protected Void collectMeasurement(IMeasurementMNode node) { return null; } }) { - collector.setTemplateMap(templateMap, templateMNodeGenerator); + collector.setTemplateMap(templateMap, nodeFactory); collector.traverse(); } return result; @@ -1087,7 +1083,7 @@ public PartialPath getPartialPath() { } }; - collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate(), templateMNodeGenerator); + collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate(), nodeFactory); Traverser traverser; if (showTimeSeriesPlan.getLimit() > 0 || showTimeSeriesPlan.getOffset() > 0) { traverser = diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index 50913134e67f2..121007841a9ec 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -49,6 +49,7 @@ import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; @@ -62,7 +63,6 @@ import org.apache.iotdb.db.metadata.query.reader.ISchemaReader; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -109,7 +109,7 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG { private volatile IMemMNode storageGroupMNode; private final IMemMNode rootNode; private final Function, Map> tagGetter; - private final TemplateMNodeGenerator templateMNodeGenerator; + private final IMNodeFactory nodeFactory; private final int levelOfSG; // region MTree initialization, clear and serialization @@ -117,26 +117,26 @@ public MTreeBelowSGMemoryImpl( PartialPath storageGroupPath, Function, Map> tagGetter, MemSchemaRegionStatistics regionStatistics, - TemplateMNodeGenerator templateMNodeGenerator) { - store = new MemMTreeStore(storageGroupPath, regionStatistics, templateMNodeGenerator); + IMNodeFactory nodeFactory) { + store = new MemMTreeStore(storageGroupPath, regionStatistics, nodeFactory); this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; - this.templateMNodeGenerator = templateMNodeGenerator; + this.nodeFactory = nodeFactory; } private MTreeBelowSGMemoryImpl( PartialPath storageGroupPath, MemMTreeStore store, Function, Map> tagGetter, - TemplateMNodeGenerator templateMNodeGenerator) { + IMNodeFactory nodeFactory) { this.store = store; this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; - this.templateMNodeGenerator = templateMNodeGenerator; + this.nodeFactory = nodeFactory; } @Override @@ -163,14 +163,14 @@ public static MTreeBelowSGMemoryImpl loadFromSnapshot( MemSchemaRegionStatistics regionStatistics, Consumer> measurementProcess, Function, Map> tagGetter, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws IOException, IllegalPathException { return new MTreeBelowSGMemoryImpl( new PartialPath(storageGroupFullPath), MemMTreeStore.loadFromSnapshot( - snapshotDir, measurementProcess, regionStatistics, templateMNodeGenerator), + snapshotDir, measurementProcess, regionStatistics, nodeFactory), tagGetter, - templateMNodeGenerator); + nodeFactory); } // endregion @@ -630,7 +630,7 @@ protected Void collectMeasurement(IMeasurementMNode node) { return null; } }) { - collector.setTemplateMap(templateMap, templateMNodeGenerator); + collector.setTemplateMap(templateMap, nodeFactory); collector.setSkipPreDeletedSchema(true); collector.traverse(); } @@ -943,7 +943,7 @@ public PartialPath getPartialPath() { }; } }; - collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate(), templateMNodeGenerator); + collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate(), nodeFactory); Traverser traverser; if (showTimeSeriesPlan.getLimit() > 0 || showTimeSeriesPlan.getOffset() > 0) { traverser = diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java index 1e89c9040425a..2814009d2802c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java @@ -36,10 +36,10 @@ import org.apache.iotdb.db.metadata.newnode.abovedatabase.CacheAboveDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,7 +67,7 @@ public class CachedMTreeStore implements IMTreeStore { private final Runnable flushCallback; - private final TemplateMNodeGenerator templateMNodeGenerator; + private final IMNodeFactory nodeFactory; private final CachedSchemaRegionStatistics regionStatistics; @@ -78,14 +78,14 @@ public CachedMTreeStore( int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, Runnable flushCallback, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws MetadataException, IOException { file = SchemaFile.initSchemaFile(storageGroup.getFullPath(), schemaRegionId); root = file.init(); this.regionStatistics = regionStatistics; this.memManager = new MemManager(regionStatistics); this.flushCallback = flushCallback; - this.templateMNodeGenerator = templateMNodeGenerator; + this.nodeFactory = nodeFactory; this.cacheManager = CacheMemoryManager.getInstance().createLRUCacheManager(this, memManager); cacheManager.initRootStatus(root); regionStatistics.setCacheManager(cacheManager); @@ -255,8 +255,7 @@ final IMNodeIterator getTraverserIterator( throws MetadataException { if (parent.isEntity()) { AbstractTraverserIterator iterator = - new CachedTraverserIterator( - store, parent.getAsEntityMNode(), templateMap, templateMNodeGenerator); + new CachedTraverserIterator(store, parent.getAsEntityMNode(), templateMap, nodeFactory); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; } else { @@ -338,7 +337,7 @@ final void updateMNode(ICacheMNode node, boolean needLock) { @Override public IDeviceMNode setToEntity(ICacheMNode node) { - IDeviceMNode result = MNodeUtils.setToEntity(node); + IDeviceMNode result = MNodeUtils.setToEntity(node, nodeFactory); if (result != node) { memManager.updatePinnedSize(IMNodeSizeEstimator.getEntityNodeBaseSize()); } @@ -348,7 +347,7 @@ public IDeviceMNode setToEntity(ICacheMNode node) { @Override public ICacheMNode setToInternal(IDeviceMNode entityMNode) { - ICacheMNode result = MNodeUtils.setToInternal(entityMNode); + ICacheMNode result = MNodeUtils.setToInternal(entityMNode, nodeFactory); if (result != entityMNode) { memManager.updatePinnedSize(-IMNodeSizeEstimator.getEntityNodeBaseSize()); } @@ -496,15 +495,10 @@ public static CachedMTreeStore loadFromSnapshot( int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, Runnable flushCallback, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws IOException, MetadataException { return new CachedMTreeStore( - snapshotDir, - storageGroup, - schemaRegionId, - regionStatistics, - flushCallback, - templateMNodeGenerator); + snapshotDir, storageGroup, schemaRegionId, regionStatistics, flushCallback, nodeFactory); } private CachedMTreeStore( @@ -513,14 +507,14 @@ private CachedMTreeStore( int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, Runnable flushCallback, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws IOException, MetadataException { file = SchemaFile.loadSnapshot(snapshotDir, storageGroup, schemaRegionId); root = file.init(); this.regionStatistics = regionStatistics; this.memManager = new MemManager(regionStatistics); this.flushCallback = flushCallback; - this.templateMNodeGenerator = templateMNodeGenerator; + this.nodeFactory = nodeFactory; this.cacheManager = CacheMemoryManager.getInstance().createLRUCacheManager(this, memManager); cacheManager.initRootStatus(root); regionStatistics.setCacheManager(cacheManager); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index 87cf02df427c1..792286a5e2060 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -35,10 +35,10 @@ import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import java.io.File; import java.io.IOException; @@ -50,30 +50,30 @@ public class MemMTreeStore implements IMTreeStore { private final IMNodeSizeEstimator estimator = new BasicMNodSizeEstimator(); private final MemSchemaRegionStatistics regionStatistics; - private final TemplateMNodeGenerator templateMNodeGenerator; + private final IMNodeFactory nodeFactory; private IMemMNode root; public MemMTreeStore( PartialPath rootPath, MemSchemaRegionStatistics regionStatistics, - TemplateMNodeGenerator templateMNodeGenerator) { + IMNodeFactory nodeFactory) { this.root = new DatabaseMNode( null, rootPath.getTailNode(), CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); this.regionStatistics = regionStatistics; - this.templateMNodeGenerator = templateMNodeGenerator; + this.nodeFactory = nodeFactory; } private MemMTreeStore( IMemMNode root, MemSchemaRegionStatistics regionStatistics, - TemplateMNodeGenerator templateMNodeGenerator) { + IMNodeFactory nodeFactory) { this.root = root; this.regionStatistics = regionStatistics; - this.templateMNodeGenerator = templateMNodeGenerator; + this.nodeFactory = nodeFactory; } @Override @@ -120,8 +120,7 @@ public IMNodeIterator getTraverserIterator( throws MetadataException { if (parent.isEntity()) { AbstractTraverserIterator iterator = - new MemoryTraverserIterator( - this, parent.getAsEntityMNode(), templateMap, templateMNodeGenerator); + new MemoryTraverserIterator(this, parent.getAsEntityMNode(), templateMap, nodeFactory); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; } else { @@ -148,7 +147,7 @@ public void updateMNode(IMemMNode node) {} @Override public IDeviceMNode setToEntity(IMemMNode node) { - IDeviceMNode result = MNodeUtils.setToEntity(node); + IDeviceMNode result = MNodeUtils.setToEntity(node, nodeFactory); if (result != node) { requestMemory(IMNodeSizeEstimator.getEntityNodeBaseSize()); } @@ -161,7 +160,7 @@ public IDeviceMNode setToEntity(IMemMNode node) { @Override public IMemMNode setToInternal(IDeviceMNode entityMNode) { - IMemMNode result = MNodeUtils.setToInternal(entityMNode); + IMemMNode result = MNodeUtils.setToInternal(entityMNode, nodeFactory); if (result != entityMNode) { releaseMemory(IMNodeSizeEstimator.getEntityNodeBaseSize()); } @@ -223,12 +222,12 @@ public static MemMTreeStore loadFromSnapshot( File snapshotDir, Consumer> measurementProcess, MemSchemaRegionStatistics regionStatistics, - TemplateMNodeGenerator templateMNodeGenerator) + IMNodeFactory nodeFactory) throws IOException { return new MemMTreeStore( MemMTreeSnapshotUtil.loadSnapshot(snapshotDir, measurementProcess, regionStatistics), regionStatistics, - templateMNodeGenerator); + nodeFactory); } private void requestMemory(int size) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java index b979e575ac475..d1913af018273 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java @@ -18,11 +18,15 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.jetbrains.annotations.NotNull; + import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -33,6 +37,8 @@ import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; +import static java.util.Collections.emptySet; + public class CachedMNodeContainer implements ICachedMNodeContainer { private long segmentAddress = -1; @@ -41,6 +47,13 @@ public class CachedMNodeContainer implements ICachedMNodeContainer { private Map newChildBuffer = null; private Map updatedChildBuffer = null; + private static final IMNodeContainer EMPTY_CONTAINER = + new CachedMNodeContainer.EmptyContainer(); + + public static IMNodeContainer emptyMNodeContainer() { + return EMPTY_CONTAINER; + } + @Override public int size() { return getSize(childCache) + getSize(newChildBuffer) + getSize(updatedChildBuffer); @@ -440,4 +453,55 @@ private boolean changeStatus() { return false; } } + + private static class EmptyContainer extends AbstractMap + implements IMNodeContainer { + + @Override + public int size() { + return 0; + } + + @Override + public boolean isEmpty() { + return true; + } + + @Override + public boolean containsKey(Object key) { + return false; + } + + @Override + public boolean containsValue(Object value) { + return false; + } + + @Override + public ICacheMNode get(Object key) { + return null; + } + + @Override + @NotNull + public Set keySet() { + return emptySet(); + } + + @Override + @NotNull + public Collection values() { + return emptySet(); + } + + @NotNull + public Set> entrySet() { + return emptySet(); + } + + @Override + public boolean equals(Object o) { + return o == this; + } + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java index 39f4364015ab7..51510ee4dbf3b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java @@ -19,7 +19,6 @@ package org.apache.iotdb.db.metadata.mtree.store.disk; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.util.Iterator; @@ -67,7 +66,7 @@ public interface ICachedMNodeContainer extends IMNodeContainer { static ICachedMNodeContainer getCachedMNodeContainer(ICacheMNode node) { IMNodeContainer container = node.getChildren(); - if (container.equals(MNodeContainers.emptyMNodeContainer())) { + if (container.equals(CachedMNodeContainer.emptyMNodeContainer())) { container = new CachedMNodeContainer(); node.setChildren(container); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java index fb915084e1942..5bef46aac142f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java @@ -21,7 +21,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.exception.metadata.schemafile.SchemaPageOverflowException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentNotFoundException; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.io.IOException; import java.nio.ByteBuffer; @@ -39,9 +39,9 @@ public interface ISegmentedPage extends ISchemaPage { */ long write(short segIdx, String key, ByteBuffer buffer) throws MetadataException; - IMNode read(short segIdx, String key) throws MetadataException; + ICacheMNode read(short segIdx, String key) throws MetadataException; - IMNode readByAlias(short segIdx, String alias) throws MetadataException; + ICacheMNode readByAlias(short segIdx, String alias) throws MetadataException; /** * The record is definitely inside specified segment. {@link WrappedSegment} will compare existed @@ -52,7 +52,7 @@ public interface ISegmentedPage extends ISchemaPage { */ void update(short segIdx, String key, ByteBuffer buffer) throws MetadataException; - Queue getChildren(short segId) throws MetadataException; + Queue getChildren(short segId) throws MetadataException; void removeRecord(short segId, String key) throws SegmentNotFoundException; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java index 5093c926ece9e..0192132530ed7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java @@ -20,11 +20,12 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.utils.TestOnly; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; +import org.apache.iotdb.db.metadata.MetadataConstant; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -37,15 +38,15 @@ import java.util.Map; /** - * This class translate an IMNode into a bytebuffer, or vice versa. Expected to support record as - * entry of segment-level index further. Coupling with IMNode structure.
    + * This class translate an ICacheMNode into a bytebuffer, or vice versa. Expected to support record + * as entry of segment-level index further. Coupling with ICacheMNode structure.
    *
    * TODO: Guardian statements on higher stack NEEDED. The longest ALIAS is limited to 0x7fff(32767) * bytes for that a Short is used to record the length, hence a colossal record may collapse the * stack. */ public class RecordUtils { - // Offsets of IMNode infos in a record buffer + // Offsets of ICacheMNode infos in a record buffer private static final short INTERNAL_NODE_LENGTH = (short) 1 + 2 + 8 + 4 + 1; // always fixed length record private static final short MEASUREMENT_BASIC_LENGTH = @@ -63,7 +64,7 @@ public class RecordUtils { private static final byte ENTITY_TYPE = 1; private static final byte MEASUREMENT_TYPE = 4; - public static ByteBuffer node2Buffer(IMNode node) { + public static ByteBuffer node2Buffer(ICacheMNode node) { if (node.isMeasurement()) { return measurement2Buffer(node.getAsMeasurementMNode()); } else { @@ -93,13 +94,17 @@ public static ByteBuffer node2Buffer(IMNode node) { * @param node * @return */ - private static ByteBuffer internal2Buffer(IMNode node) { + private static ByteBuffer internal2Buffer(ICacheMNode node) { byte nodeType = INTERNAL_TYPE; boolean isAligned = false; + int schemaTemplateIdWithState = MetadataConstant.NON_TEMPLATE; + boolean isUseTemplate = false; if (node.isEntity()) { nodeType = ENTITY_TYPE; isAligned = node.getAsEntityMNode().isAligned(); + schemaTemplateIdWithState = node.getAsEntityMNode().getSchemaTemplateIdWithState(); + isUseTemplate = node.getAsEntityMNode().isUseTemplate(); } ByteBuffer buffer = ByteBuffer.allocate(INTERNAL_NODE_LENGTH); @@ -107,10 +112,10 @@ private static ByteBuffer internal2Buffer(IMNode node) { ReadWriteIOUtils.write(INTERNAL_NODE_LENGTH, buffer); ReadWriteIOUtils.write( ICachedMNodeContainer.getCachedMNodeContainer(node).getSegmentAddress(), buffer); - ReadWriteIOUtils.write(node.getSchemaTemplateIdWithState(), buffer); + ReadWriteIOUtils.write(schemaTemplateIdWithState, buffer); // encode bitwise flag - byte useAndAligned = encodeInternalStatus(node.isUseTemplate(), isAligned); + byte useAndAligned = encodeInternalStatus(isUseTemplate, isAligned); ReadWriteIOUtils.write(useAndAligned, buffer); return buffer; @@ -134,7 +139,7 @@ private static ByteBuffer internal2Buffer(IMNode node) { * *

    It doesn't use MeasurementSchema.serializeTo for duplication of measurementId */ - private static ByteBuffer measurement2Buffer(IMeasurementMNode node) { + private static ByteBuffer measurement2Buffer(IMeasurementMNode node) { int bufferLength = node.getAlias() == null ? 4 + MEASUREMENT_BASIC_LENGTH @@ -172,8 +177,9 @@ private static ByteBuffer measurement2Buffer(IMeasurementMNode node) { * @param buffer content of the node * @return node constructed from buffer */ - public static IMNode buffer2Node(String nodeName, ByteBuffer buffer) throws MetadataException { - IMNode resNode; + public static ICacheMNode buffer2Node(String nodeName, ByteBuffer buffer) + throws MetadataException { + ICacheMNode resNode; byte nodeType = ReadWriteIOUtils.readByte(buffer); if (nodeType < 2) { @@ -188,15 +194,15 @@ public static IMNode buffer2Node(String nodeName, ByteBuffer buffer) throws Meta boolean isAligned = isAligned(bitFlag); if (nodeType == 0) { - resNode = new BasicMNode(null, nodeName); + resNode = new CacheBasicMNode(null, nodeName); } else { - resNode = new AbstractDeviceMNode(null, nodeName); + resNode = new CacheDeviceMNode(null, nodeName); resNode.getAsEntityMNode().setAligned(isAligned); + resNode.getAsEntityMNode().setUseTemplate(usingTemplate); + resNode.getAsEntityMNode().setSchemaTemplateId(templateId); } ICachedMNodeContainer.getCachedMNodeContainer(resNode).setSegmentAddress(segAddr); - resNode.setUseTemplate(usingTemplate); - resNode.setSchemaTemplateId(templateId); return resNode; } else { @@ -283,7 +289,7 @@ public static void updateSegAddr(ByteBuffer recBuf, long newSegAddr) { @TestOnly public static String buffer2String(ByteBuffer buffer) throws MetadataException { StringBuilder builder = new StringBuilder("["); - IMNode node = buffer2Node("unspecified", buffer); + ICacheMNode node = buffer2Node("unspecified", buffer); if (node.isMeasurement()) { builder.append("measurementNode, "); builder.append( @@ -312,27 +318,27 @@ public static String buffer2String(ByteBuffer buffer) throws MetadataException { builder.append("not aligned, "); } - } else { - builder.append("internalNode, "); - } + if (node.getAsEntityMNode().isUseTemplate()) { + builder.append("using template.]"); + } else { + builder.append("not using template.]"); + } - if (node.isUseTemplate()) { - builder.append("using template.]"); } else { - builder.append("not using template.]"); + builder.append("internalNode, "); } return builder.toString(); } - // region padding with IMNode + // region padding with ICacheMNode /** These 2 convert methods are coupling with tag, template module respectively. */ - private static long convertTags2Long(IMeasurementMNode node) { + private static long convertTags2Long(IMeasurementMNode node) { return node.getOffset(); } /** Including schema and pre-delete flag of a measurement, could be expanded further. */ - private static long convertMeasStat2Long(IMeasurementMNode node) { + private static long convertMeasStat2Long(IMeasurementMNode node) { byte dataType = node.getSchema().getTypeInByte(); byte encoding = node.getSchema().getEncodingType().serialize(); byte compressor = node.getSchema().getCompressor().serialize(); @@ -341,7 +347,7 @@ private static long convertMeasStat2Long(IMeasurementMNode node) { return (preDelete << 24 | dataType << 16 | encoding << 8 | compressor); } - private static IMNode paddingMeasurement( + private static ICacheMNode paddingMeasurement( String nodeName, long tagIndex, long statsBytes, String alias, Map props) { byte preDel = (byte) (statsBytes >>> 24); byte dataType = (byte) (statsBytes >>> 16); @@ -356,7 +362,7 @@ private static IMNode paddingMeasurement( CompressionType.deserialize(compressor), props); - IMNode res = MeasurementMNode.getMeasurementMNode(null, nodeName, schema, alias); + ICacheMNode res = new CacheMeasurementMNode(null, nodeName, schema, alias); res.getAsMeasurementMNode().setOffset(tagIndex); if (preDel > 0) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java index b2433624c7ac8..f31c4a793086a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java @@ -25,14 +25,14 @@ import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.schemafile.SchemaFileNotExists; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.BTreePageManager; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.IPageManager; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.PageManager; -import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.database.CacheDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.slf4j.Logger; @@ -167,8 +167,8 @@ private static String getDirPath(String sgName, int schemaRegionId) { // region Interface Implementation @Override - public IMNode init() throws MetadataException { - IMNode resNode; + public ICacheMNode init() throws MetadataException { + ICacheMNode resNode; String[] sgPathNodes = storageGroupName == null ? new String[] {"noName"} @@ -176,30 +176,31 @@ public IMNode init() throws MetadataException { if (isEntity) { resNode = setNodeAddress( - new AbstractDatabaseDeviceMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), - 0L); + new CacheDatabaseDeviceMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), 0L); + resNode.getAsEntityMNode().setSchemaTemplateId(sgNodeTemplateIdWithState); + resNode.getAsEntityMNode().setUseTemplate(sgNodeTemplateIdWithState > -1); } else { resNode = setNodeAddress( - new AbstractDatabaseMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), 0L); + new CacheDatabaseMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), 0L); } resNode.setFullPath(storageGroupName); - resNode.setSchemaTemplateId(sgNodeTemplateIdWithState); - resNode.setUseTemplate(sgNodeTemplateIdWithState > -1); return resNode; } @Override - public boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException { + public boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException { this.dataTTL = sgNode.getDataTTL(); this.isEntity = sgNode.isEntity(); - this.sgNodeTemplateIdWithState = sgNode.getSchemaTemplateIdWithState(); + if (sgNode.isEntity()) { + this.sgNodeTemplateIdWithState = sgNode.getAsEntityMNode().getSchemaTemplateIdWithState(); + } updateHeaderBuffer(); return true; } @Override - public void delete(IMNode node) throws IOException, MetadataException { + public void delete(ICacheMNode node) throws IOException, MetadataException { if (node.isDatabase()) { // should clear this file clear(); @@ -209,7 +210,7 @@ public void delete(IMNode node) throws IOException, MetadataException { } @Override - public void writeMNode(IMNode node) throws MetadataException, IOException { + public void writeMNode(ICacheMNode node) throws MetadataException, IOException { long curSegAddr = getNodeAddress(node); if (node.isDatabase()) { @@ -232,13 +233,14 @@ public void writeMNode(IMNode node) throws MetadataException, IOException { } @Override - public IMNode getChildNode(IMNode parent, String childName) + public ICacheMNode getChildNode(ICacheMNode parent, String childName) throws MetadataException, IOException { return pageManager.getChildNode(parent, childName); } @Override - public Iterator getChildren(IMNode parent) throws MetadataException, IOException { + public Iterator getChildren(ICacheMNode parent) + throws MetadataException, IOException { if (parent.isMeasurement() || getNodeAddress(parent) < 0) { throw new MetadataException( String.format("Node [%s] has no child in schema file.", parent.getFullPath())); @@ -409,11 +411,11 @@ public static long getPageAddress(int pageIndex) { + SchemaFileConfig.FILE_HEADER_SIZE; } - public static long getNodeAddress(IMNode node) { + public static long getNodeAddress(ICacheMNode node) { return ICachedMNodeContainer.getCachedMNodeContainer(node).getSegmentAddress(); } - public static IMNode setNodeAddress(IMNode node, long addr) { + public static ICacheMNode setNodeAddress(ICacheMNode node, long addr) { ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(addr); return node; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java index bf9303d750f86..68742b77ad55c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java @@ -24,7 +24,7 @@ import org.apache.iotdb.db.exception.metadata.schemafile.SchemaPageOverflowException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentNotFoundException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentOverflowException; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import java.nio.ByteBuffer; @@ -42,7 +42,7 @@ public class SegmentedPage extends SchemaPage implements ISegmentedPage { // maintains leaf segment instance inside this page, lazily instantiated // map segmentIndex -> segmentInstance - private final transient Map> segCacheMap; + private final transient Map> segCacheMap; /** * This class is aimed to manage space inside one page. @@ -60,7 +60,7 @@ public class SegmentedPage extends SchemaPage implements ISegmentedPage { *

    Page Body Structure: * *

      - *
    • var length * memberNum: {@linkplain WrappedSegment} contains serialized IMNodes. + *
    • var length * memberNum: {@linkplain WrappedSegment} contains serialized ICacheMNodes. *
    • ... spare space... *
    • 2 bytes * memberNum: offset of segments, using marking deletion as {@linkplain * #deleteSegment} mentioned. @@ -81,7 +81,7 @@ public SegmentedPage(ByteBuffer pageBuffer) { @Override public long write(short segIdx, String key, ByteBuffer buffer) throws MetadataException { - ISegment tarSeg = getSegment(segIdx); + ISegment tarSeg = getSegment(segIdx); if (tarSeg.insertRecord(key, buffer) < 0) { // relocate inside page, if not enough space for new size segment, throw exception @@ -100,18 +100,18 @@ public long write(short segIdx, String key, ByteBuffer buffer) throws MetadataEx } @Override - public IMNode read(short segIdx, String key) throws MetadataException { + public ICacheMNode read(short segIdx, String key) throws MetadataException { return getSegment(segIdx).getRecordByKey(key); } @Override - public IMNode readByAlias(short segIdx, String alias) throws MetadataException { + public ICacheMNode readByAlias(short segIdx, String alias) throws MetadataException { return getSegment(segIdx).getRecordByAlias(alias); } @Override public void update(short segIdx, String key, ByteBuffer buffer) throws MetadataException { - ISegment seg = getSegment(segIdx); + ISegment seg = getSegment(segIdx); try { if (seg.updateRecord(key, buffer) < 0) { throw new MetadataException("Record to update not found."); @@ -131,7 +131,7 @@ public void update(short segIdx, String key, ByteBuffer buffer) throws MetadataE } @Override - public Queue getChildren(short segId) throws MetadataException { + public Queue getChildren(short segId) throws MetadataException { return getSegment(segId).getAllRecords(); } @@ -189,7 +189,8 @@ public void getPageBuffer(ByteBuffer dst) { @Override public synchronized short allocNewSegment(short size) throws MetadataException { - ISegment newSeg = WrappedSegment.initAsSegment(allocSpareBufferSlice(size)); + ISegment newSeg = + WrappedSegment.initAsSegment(allocSpareBufferSlice(size)); if (newSeg == null) { compactSegments(); @@ -223,7 +224,8 @@ public long transplantSegment(ISegmentedPage srcPage, short segId, short newSegS this.pageBuffer.position(spareOffset); this.pageBuffer.limit(spareOffset + newSegSize); - ISegment newSeg = WrappedSegment.loadAsSegment(this.pageBuffer.slice()); + ISegment newSeg = + WrappedSegment.loadAsSegment(this.pageBuffer.slice()); // registerNewSegment will modify page status considering the new segment return SchemaFile.getGlobalIndex(pageIndex, registerNewSegment(newSeg)); @@ -289,7 +291,7 @@ public String inspect() throws SegmentNotFoundException { @Override public synchronized void syncPageBuffer() { super.syncPageBuffer(); - for (Map.Entry> entry : segCacheMap.entrySet()) { + for (Map.Entry> entry : segCacheMap.entrySet()) { entry.getValue().syncBuffer(); } @@ -330,7 +332,8 @@ public ByteBuffer getEntireSegmentSlice() throws MetadataException { * @param index index rather than offset of the segment * @return null if InternalSegment, otherwise instance */ - private ISegment getSegment(short index) throws SegmentNotFoundException { + private ISegment getSegment(short index) + throws SegmentNotFoundException { if (segOffsetLst.size() <= index || segOffsetLst.get(index) < 0) { throw new SegmentNotFoundException(pageIndex, index); } @@ -347,7 +350,7 @@ private ISegment getSegment(short index) throws SegmentNotFo bufferR.position(getSegmentOffset(index)); bufferR.limit(bufferR.position() + WrappedSegment.getSegBufLen(bufferR)); - ISegment res; + ISegment res; try { res = WrappedSegment.loadAsSegment(bufferR.slice()); } catch (RecordDuplicatedException e) { @@ -386,7 +389,7 @@ private short getSegmentOffset(short index) throws SegmentNotFoundException { * @return reallocated segment instance * @throws SchemaPageOverflowException if this page has no enough space */ - private ISegment relocateSegment( + private ISegment relocateSegment( ISegment seg, short segIdx, short newSize) throws MetadataException { if (seg.size() == SchemaFileConfig.SEG_MAX_SIZ || getSpareSize() + seg.size() < newSize) { throw new SchemaPageOverflowException(pageIndex); @@ -401,7 +404,7 @@ private ISegment relocateSegment( // allocate buffer slice successfully seg.extendsTo(newBuffer); - ISegment newSeg = WrappedSegment.loadAsSegment(newBuffer); + ISegment newSeg = WrappedSegment.loadAsSegment(newBuffer); // since this buffer is allocated from pageSpareOffset, new spare offset can simply add size up segOffsetLst.set(segIdx, spareOffset); @@ -513,7 +516,7 @@ private synchronized void rearrangeSegments(short idx) { * @param newSize extended size * @return extended segment based on page buffer */ - private ISegment extendSegmentInPlace( + private ISegment extendSegmentInPlace( short segId, short oriSegSize, short newSize) throws MetadataException { // extend segment, modify pageSpareOffset, segCacheMap short offset = getSegmentOffset(segId); @@ -536,7 +539,7 @@ private ISegment extendSegmentInPlace( // pass page buffer slice to instantiate segment pageBuffer.position(offset); pageBuffer.limit(offset + newSize); - ISegment newSeg = WrappedSegment.loadAsSegment(pageBuffer.slice()); + ISegment newSeg = WrappedSegment.loadAsSegment(pageBuffer.slice()); // modify status segOffsetLst.set(segId, offset); @@ -549,7 +552,7 @@ private ISegment extendSegmentInPlace( public void updateRecordSegAddr(short segId, String key, long newSegAddr) throws SegmentNotFoundException { - ISegment seg = getSegment(segId); + ISegment seg = getSegment(segId); // TODO: add to interface ((WrappedSegment) seg).updateRecordSegAddr(key, newSegAddr); } @@ -561,7 +564,7 @@ public void updateRecordSegAddr(short segId, String key, long newSegAddr) * @param seg the segment to register * @return index of the segment */ - private synchronized short registerNewSegment(ISegment seg) + private synchronized short registerNewSegment(ISegment seg) throws MetadataException { short thisIndex = (short) segOffsetLst.size(); if (segCacheMap.containsKey(thisIndex)) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java index 55551d6104139..1960a4a8cf389 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.schemafile.RecordDuplicatedException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentOverflowException; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; @@ -38,11 +38,11 @@ /** * This class initiate a segment object with corresponding bytes. Implements add, get, remove - * records which is serialized IMNode.
      + * records which is serialized ICacheMNode.
      * Act like a wrapper of a bytebuffer which reflects a segment.
      * And itself is wrapped inside a SchemaPage. */ -public class WrappedSegment extends Segment { +public class WrappedSegment extends Segment { // reconstruct every initiation after keyAddressList but not write into buffer private List> aliasKeyList; @@ -86,7 +86,7 @@ public WrappedSegment(int size) throws RecordDuplicatedException { this(ByteBuffer.allocate(size)); } - public static ISegment initAsSegment(ByteBuffer buffer) + public static ISegment initAsSegment(ByteBuffer buffer) throws RecordDuplicatedException { if (buffer == null) { return null; @@ -94,7 +94,7 @@ public static ISegment initAsSegment(ByteBuffer buffer) return new WrappedSegment(buffer, true); } - public static ISegment loadAsSegment(ByteBuffer buffer) + public static ISegment loadAsSegment(ByteBuffer buffer) throws RecordDuplicatedException { if (buffer == null) { return null; @@ -168,7 +168,7 @@ public synchronized String splitByKey( } @Override - public IMNode getRecordByKey(String key) throws MetadataException { + public ICacheMNode getRecordByKey(String key) throws MetadataException { // index means order for target node in keyAddressList, NOT aliasKeyList int index = getRecordIndexByKey(key); @@ -187,7 +187,7 @@ public IMNode getRecordByKey(String key) throws MetadataException { } @Override - public IMNode getRecordByAlias(String alias) throws MetadataException { + public ICacheMNode getRecordByAlias(String alias) throws MetadataException { int ix = getRecordIndexByAlias(alias); if (ix < 0) { @@ -206,8 +206,8 @@ public boolean hasRecordAlias(String alias) { } @Override - public Queue getAllRecords() throws MetadataException { - Queue res = new ArrayDeque<>(keyAddressList.size()); + public Queue getAllRecords() throws MetadataException { + Queue res = new ArrayDeque<>(keyAddressList.size()); ByteBuffer roBuffer = this.buffer.asReadOnlyBuffer(); roBuffer.clear(); for (Pair p : keyAddressList) { @@ -274,7 +274,7 @@ public int updateRecord(String key, ByteBuffer uBuffer) public int removeRecord(String key) { int idx = getRecordIndexByKey(key); - // deletion only seeks for name of IMNode + // deletion only seeks for name of ICacheMNode if (idx < 0) { return -1; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java index 7474e2313a844..02084e53d9f21 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.exception.metadata.schemafile.ColossalRecordException; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegmentedPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.io.File; import java.io.IOException; @@ -95,7 +95,7 @@ protected void multiPageUpdateOverflowOperation( * @throws IOException */ @Override - protected void buildSubIndex(IMNode parNode) throws MetadataException, IOException { + protected void buildSubIndex(ICacheMNode parNode) throws MetadataException, IOException { ISchemaPage cursorPage = getPageInstance(getPageIndex(getNodeAddress(parNode))); if (cursorPage.getAsInternalPage() == null) { @@ -114,8 +114,8 @@ protected void buildSubIndex(IMNode parNode) throws MetadataException, IOExcepti } long nextAddr = cursorPage.getAsSegmentedPage().getNextSegAddress((short) 0); - Queue children = cursorPage.getAsSegmentedPage().getChildren((short) 0); - IMNode child; + Queue children = cursorPage.getAsSegmentedPage().getChildren((short) 0); + ICacheMNode child; // TODO: inefficient to build B+Tree up-to-bottom, improve further while (!children.isEmpty() || nextAddr != -1L) { if (children.isEmpty()) { @@ -293,7 +293,7 @@ private void insertIndexEntryRecursiveUpwards(int treeTraceIndex, String key, in } @Override - public void delete(IMNode node) throws IOException, MetadataException { + public void delete(ICacheMNode node) throws IOException, MetadataException { // remove corresponding record long recSegAddr = getNodeAddress(node.getParent()); recSegAddr = getTargetSegmentAddress(recSegAddr, node.getName()); @@ -351,7 +351,7 @@ public void delete(IMNode node) throws IOException, MetadataException { } @Override - public IMNode getChildNode(IMNode parent, String childName) + public ICacheMNode getChildNode(ICacheMNode parent, String childName) throws MetadataException, IOException { if (getNodeAddress(parent) < 0) { throw new MetadataException( @@ -360,7 +360,7 @@ public IMNode getChildNode(IMNode parent, String childName) } long actualSegAddr = getTargetSegmentAddress(getNodeAddress(parent), childName); - IMNode child = + ICacheMNode child = getPageInstance(getPageIndex(actualSegAddr)) .getAsSegmentedPage() .read(getSegIndex(actualSegAddr), childName); @@ -381,7 +381,8 @@ public IMNode getChildNode(IMNode parent, String childName) return child; } - private IMNode getChildWithAlias(IMNode par, String alias) throws IOException, MetadataException { + private ICacheMNode getChildWithAlias(ICacheMNode par, String alias) + throws IOException, MetadataException { long srtAddr = getNodeAddress(par); ISchemaPage page = getPageInstance(getPageIndex(srtAddr)); @@ -399,7 +400,8 @@ private IMNode getChildWithAlias(IMNode par, String alias) throws IOException, M } @Override - public Iterator getChildren(IMNode parent) throws MetadataException, IOException { + public Iterator getChildren(ICacheMNode parent) + throws MetadataException, IOException { int pageIdx = getPageIndex(getNodeAddress(parent)); short segId = getSegIndex(getNodeAddress(parent)); ISchemaPage page = getPageInstance(pageIdx); @@ -409,10 +411,10 @@ public Iterator getChildren(IMNode parent) throws MetadataException, IOE } long actualSegAddr = page.getAsSegmentedPage().getNextSegAddress(segId); - Queue initChildren = page.getAsSegmentedPage().getChildren(segId); - return new Iterator() { + Queue initChildren = page.getAsSegmentedPage().getChildren(segId); + return new Iterator() { long nextSeg = actualSegAddr; - Queue children = initChildren; + Queue children = initChildren; @Override public boolean hasNext() { @@ -439,7 +441,7 @@ public boolean hasNext() { } @Override - public IMNode next() { + public ICacheMNode next() { return children.poll(); } }; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java index 05fdce3f85f82..d6a2b8aebe905 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java @@ -19,9 +19,9 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaPage; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.io.IOException; import java.io.PrintWriter; @@ -38,15 +38,16 @@ */ public interface IPageManager { - void writeNewChildren(IMNode parNode) throws MetadataException, IOException; + void writeNewChildren(ICacheMNode parNode) throws MetadataException, IOException; - void writeUpdatedChildren(IMNode parNode) throws MetadataException, IOException; + void writeUpdatedChildren(ICacheMNode parNode) throws MetadataException, IOException; - void delete(IMNode node) throws IOException, MetadataException; + void delete(ICacheMNode node) throws IOException, MetadataException; - IMNode getChildNode(IMNode parent, String childName) throws MetadataException, IOException; + ICacheMNode getChildNode(ICacheMNode parent, String childName) + throws MetadataException, IOException; - Iterator getChildren(IMNode parent) throws MetadataException, IOException; + Iterator getChildren(ICacheMNode parent) throws MetadataException, IOException; void clear() throws IOException, MetadataException; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java index 853e50df7ae96..ca94e0dc6fc1a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java @@ -21,7 +21,6 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.schemafile.SchemaPageOverflowException; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegmentedPage; @@ -31,6 +30,7 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SegmentedPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.log.SchemaFileLogReader; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.log.SchemaFileLogWriter; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -150,16 +150,16 @@ private long recoverFromLog(String logPath) throws IOException, MetadataExceptio // region Framework Methods @Override - public void writeNewChildren(IMNode node) throws MetadataException, IOException { + public void writeNewChildren(ICacheMNode node) throws MetadataException, IOException { int subIndex; long curSegAddr = getNodeAddress(node); long actualAddress; // actual segment to write record - IMNode child; + ICacheMNode child; ISchemaPage curPage; ByteBuffer childBuffer; String alias; // TODO: reserve order of insert in container may be better - for (Map.Entry entry : + for (Map.Entry entry : ICachedMNodeContainer.getCachedMNodeContainer(node).getNewChildBuffer().entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toList())) { @@ -238,16 +238,16 @@ public void writeNewChildren(IMNode node) throws MetadataException, IOException } @Override - public void writeUpdatedChildren(IMNode node) throws MetadataException, IOException { + public void writeUpdatedChildren(ICacheMNode node) throws MetadataException, IOException { boolean removeOldSubEntry = false, insertNewSubEntry = false; int subIndex; long curSegAddr = getNodeAddress(node); long actualAddress; // actual segment to write record String alias, oldAlias; // key of the sub-index entry now - IMNode child, oldChild; + ICacheMNode child, oldChild; ISchemaPage curPage; ByteBuffer childBuffer; - for (Map.Entry entry : + for (Map.Entry entry : ICachedMNodeContainer.getCachedMNodeContainer(node).getUpdatedChildBuffer().entrySet()) { child = entry.getValue(); actualAddress = getTargetSegmentAddress(curSegAddr, entry.getKey()); @@ -376,7 +376,7 @@ protected abstract void multiPageUpdateOverflowOperation( * * @param parNode node needs to build subordinate index. */ - protected abstract void buildSubIndex(IMNode parNode) throws MetadataException, IOException; + protected abstract void buildSubIndex(ICacheMNode parNode) throws MetadataException, IOException; /** * Insert an entry of subordinate index of the target node. @@ -571,7 +571,7 @@ private synchronized int loadFromFile(ByteBuffer dst, int pageIndex) throws IOEx return readChannel.read(dst, getPageAddress(pageIndex)); } - private void updateParentalRecord(IMNode parent, String key, long newSegAddr) + private void updateParentalRecord(ICacheMNode parent, String key, long newSegAddr) throws IOException, MetadataException { if (parent == null || parent.getChild(key).isDatabase()) { throw new MetadataException("Root page shall not be migrated."); @@ -601,12 +601,12 @@ private static long getPageAddress(int pageIndex) { * @param node * @return */ - private static short estimateSegmentSize(IMNode node) { + private static short estimateSegmentSize(ICacheMNode node) { int childNum = node.getChildren().size(); if (childNum < SEG_SIZE_METRIC[0]) { // for record offset, length of string key int totalSize = SEG_HEADER_SIZE + 6 * childNum; - for (IMNode child : node.getChildren().values()) { + for (ICacheMNode child : node.getChildren().values()) { totalSize += child.getName().getBytes().length; if (child.isMeasurement()) { totalSize += @@ -640,7 +640,7 @@ private static short estimateSegmentSize(IMNode node) { * here. Supposed to merge with SchemaFile#reEstimateSegSize. * * @param expSize expected size calculated from next new record - * @param batchSize size of children within one {@linkplain #writeNewChildren(IMNode)} + * @param batchSize size of children within one {@linkplain #writeNewChildren(ICacheMNode)} * @return estimated size * @throws MetadataException */ diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java index 96e7557f181d9..475f68a70066a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java @@ -23,12 +23,13 @@ import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.schema.tree.AbstractTreeVisitor; import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.mnode.MNodeUtils; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.store.ReentrantReadOnlyCachedMTreeStore; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,7 +61,7 @@ public abstract class Traverser> extends AbstractTreeVisi // measurement in template should be processed only if templateMap is not null protected Map templateMap; - protected TemplateMNodeGenerator templateMNodeGenerator; + protected IMNodeFactory nodeFactory; // if true, the pre deleted measurement or pre deactivated template won't be processed protected boolean skipPreDeletedSchema = false; @@ -127,8 +128,8 @@ protected N getChild(N parent, String childName) throws MetadataException { Template template = templateMap.get(templateId); // if null, it means the template on this device is not covered in this query, refer to the // mpp analyzing stage - if (template != null && templateMNodeGenerator != null) { - child = templateMNodeGenerator.getChild(templateMap.get(templateId), childName); + if (template != null && nodeFactory != null) { + child = MNodeUtils.getChild(templateMap.get(templateId), childName, nodeFactory); } } } @@ -170,10 +171,9 @@ public void close() { } } - public void setTemplateMap( - Map templateMap, TemplateMNodeGenerator templateMNodeGenerator) { + public void setTemplateMap(Map templateMap, IMNodeFactory nodeFactory) { this.templateMap = templateMap; - this.templateMNodeGenerator = templateMNodeGenerator; + this.nodeFactory = nodeFactory; } public void setSkipPreDeletedSchema(boolean skipPreDeletedSchema) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheTemplateMNodeGenerator.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheTemplateMNodeGenerator.java deleted file mode 100644 index a84297f481b81..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheTemplateMNodeGenerator.java +++ /dev/null @@ -1,56 +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.metadata.newnode; - -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; -import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; -import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; - -import java.util.Iterator; - -public class CacheTemplateMNodeGenerator implements TemplateMNodeGenerator { - - @Override - public ICacheMNode getChild(Template template, String name) { - IMeasurementSchema schema = template.getSchema(name); - return schema == null - ? null - : new CacheMeasurementMNode(null, name, template.getSchema(name), null); - } - - @Override - public Iterator getChildren(Template template) { - return new Iterator() { - private final Iterator schemas = - template.getSchemaMap().values().iterator(); - - @Override - public boolean hasNext() { - return schemas.hasNext(); - } - - @Override - public ICacheMNode next() { - IMeasurementSchema schema = schemas.next(); - return new CacheMeasurementMNode(null, schema.getMeasurementId(), schema, null); - } - }; - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java deleted file mode 100644 index 2e2fde48a8aff..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/MemTemplateMNodeGenerator.java +++ /dev/null @@ -1,54 +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.metadata.newnode; - -import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; -import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.db.metadata.template.TemplateMNodeGenerator; -import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; - -import java.util.Iterator; - -public class MemTemplateMNodeGenerator implements TemplateMNodeGenerator { - - @Override - public IMemMNode getChild(Template template, String name) { - IMeasurementSchema schema = template.getSchema(name); - return schema == null ? null : new MeasurementMNode(null, name, template.getSchema(name), null); - } - - @Override - public Iterator getChildren(Template template) { - return new Iterator() { - private final Iterator schemas = - template.getSchemaMap().values().iterator(); - - @Override - public boolean hasNext() { - return schemas.hasNext(); - } - - @Override - public IMemMNode next() { - IMeasurementSchema schema = schemas.next(); - return new MeasurementMNode(null, schema.getMeasurementId(), schema, null); - } - }; - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java index 5c42de38d2ea8..d220d1246f624 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java @@ -23,9 +23,8 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.MNodeContainerMapImpl; -import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; import org.apache.iotdb.db.metadata.newnode.CacheMNodeInfo; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; @@ -153,7 +152,7 @@ public ICacheMNode addChild(String name, ICacheMNode child) { // double check, children is volatile synchronized (this) { if (children == null) { - children = new MNodeContainerMapImpl(); + children = new CachedMNodeContainer(); } } } @@ -183,7 +182,7 @@ public ICacheMNode addChild(ICacheMNode child) { // double check, children is volatile synchronized (this) { if (children == null) { - children = new MNodeContainerMapImpl(); + children = new CachedMNodeContainer(); } } } @@ -234,15 +233,15 @@ public void moveDataToNewMNode(ICacheMNode newMNode) { } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { if (children == null) { - return MNodeContainers.emptyMNodeContainer(); + return CachedMNodeContainer.emptyMNodeContainer(); } return children; } @Override - public void setChildren(IMNodeContainer children) { + public void setChildren(IMNodeContainer children) { this.children = children; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java index 564bc3b754d1a..c884fa48fa61d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java @@ -21,9 +21,8 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.mnode.container.ConfigMNodeContainer; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.MNodeContainerMapImpl; -import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.newnode.ConfigMNodeInfo; import org.apache.iotdb.db.metadata.newnode.IConfigMNode; @@ -147,7 +146,7 @@ public IConfigMNode addChild(String name, IConfigMNode child) { // double check, children is volatile synchronized (this) { if (children == null) { - children = new MNodeContainerMapImpl<>(); + children = new ConfigMNodeContainer(); } } } @@ -177,7 +176,7 @@ public IConfigMNode addChild(IConfigMNode child) { // double check, children is volatile synchronized (this) { if (children == null) { - children = new MNodeContainerMapImpl(); + children = new ConfigMNodeContainer(); } } } @@ -228,15 +227,15 @@ public void moveDataToNewMNode(IConfigMNode newMNode) { } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { if (children == null) { - return MNodeContainers.emptyMNodeContainer(); + return ConfigMNodeContainer.emptyMNodeContainer(); } return children; } @Override - public void setChildren(IMNodeContainer children) { + public void setChildren(IMNodeContainer children) { this.children = children; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java index d6a36e0924c76..5d78f0afec0d8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java @@ -40,4 +40,9 @@ public CacheEntry getCacheEntry() { public void setCacheEntry(CacheEntry cacheEntry) { basicMNode.setCacheEntry(cacheEntry); } + + @Override + public ICacheMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java new file mode 100644 index 0000000000000..de9cbd2128dea --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java @@ -0,0 +1,58 @@ +/* + * 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.metadata.newnode.factory; + +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +public class CacheMNodeFactory implements IMNodeFactory { + @Override + public IMeasurementMNode createMeasurementMNode( + ICacheMNode parent, String name, IMeasurementSchema schema, String alias) { + return null; + } + + @Override + public IDeviceMNode createDeviceMNode(ICacheMNode parent, String name) { + return null; + } + + @Override + public IDatabaseMNode createDatabaseMNode(ICacheMNode parent, String name) { + return null; + } + + @Override + public ICacheMNode createDatabaseDeviceMNode(ICacheMNode parent, String name, long dataTTL) { + return null; + } + + @Override + public ICacheMNode createAboveDatabaseMNode(ICacheMNode parent, String name) { + return null; + } + + @Override + public ICacheMNode createBasicMNode(ICacheMNode parent, String name) { + return null; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateMNodeGenerator.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java similarity index 52% rename from server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateMNodeGenerator.java rename to server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java index 553208acaacc1..40efc0b0e16c5 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateMNodeGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java @@ -16,15 +16,25 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.template; +package org.apache.iotdb.db.metadata.newnode.factory; import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; -import java.util.Iterator; +public interface IMNodeFactory> { + IMeasurementMNode createMeasurementMNode( + N parent, String name, IMeasurementSchema schema, String alias); -public interface TemplateMNodeGenerator> { + IDeviceMNode createDeviceMNode(N parent, String name); - N getChild(Template template, String name); + IDatabaseMNode createDatabaseMNode(N parent, String name); - Iterator getChildren(Template template); + N createDatabaseDeviceMNode(N parent, String name, long dataTTL); + + N createAboveDatabaseMNode(N parent, String name); + + N createBasicMNode(N parent, String name); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java new file mode 100644 index 0000000000000..3749449cbd618 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java @@ -0,0 +1,64 @@ +/* + * 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.metadata.newnode.factory; + +import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.DatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.DeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +public class MemMNodeFactory implements IMNodeFactory { + @Override + public IMeasurementMNode createMeasurementMNode( + IMemMNode parent, String name, IMeasurementSchema schema, String alias) { + return new MeasurementMNode(parent, name, schema, alias); + } + + @Override + public IDeviceMNode createDeviceMNode(IMemMNode parent, String name) { + return new DeviceMNode(parent, name); + } + + @Override + public IDatabaseMNode createDatabaseMNode(IMemMNode parent, String name) { + return new DatabaseMNode(parent, name); + } + + @Override + public IMemMNode createDatabaseDeviceMNode(IMemMNode parent, String name, long dataTTL) { + return new DatabaseDeviceMNode(parent, name, dataTTL); + } + + @Override + public IMemMNode createAboveDatabaseMNode(IMemMNode parent, String name) { + return new AboveDatabaseMNode(parent, name); + } + + @Override + public IMemMNode createBasicMNode(IMemMNode parent, String name) { + return new BasicMNode(parent, name); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java index 1aa9c549fa973..df0353577e188 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java @@ -23,7 +23,6 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.MNodeContainers; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; @@ -183,12 +182,7 @@ public void moveDataToNewMNode(N newMNode) { } @Override - public IMNodeContainer getChildren() { - return MNodeContainers.emptyMNodeContainer(); - } - - @Override - public void setChildren(IMNodeContainer children) { + public void setChildren(IMNodeContainer children) { // Do nothing } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java index 971a431a27b89..82101a77b7b5f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java @@ -18,6 +18,8 @@ */ package org.apache.iotdb.db.metadata.newnode.measurement; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; @@ -46,4 +48,9 @@ public void setCacheEntry(CacheEntry cacheEntry) { public ICacheMNode getAsMNode() { return this; } + + @Override + public IMNodeContainer getChildren() { + return CachedMNodeContainer.emptyMNodeContainer(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java index 26a1b35aa0221..219d266e3144b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.metadata.newnode.measurement; import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.container.MemMNodeContainer; import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; @@ -34,4 +36,9 @@ public MeasurementMNode(IMemMNode parent, String name, IMeasurementSchema schema public IMemMNode getAsMNode() { return this; } + + @Override + public IMNodeContainer getChildren() { + return MemMNodeContainer.emptyMNodeContainer(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java index 5b4fc3389c187..9e6ffa22a5b97 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java @@ -43,8 +43,8 @@ import org.apache.iotdb.db.metadata.metric.SchemaRegionMemMetric; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGMemoryImpl; import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.MemTemplateMNodeGenerator; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; @@ -195,7 +195,7 @@ public synchronized void init() throws MetadataException { new PartialPath(storageGroupFullPath), tagManager::readTags, regionStatistics, - new MemTemplateMNodeGenerator()); + new MemMNodeFactory()); if (!(config.isClusterMode() && config @@ -482,7 +482,7 @@ public void loadSnapshot(File latestSnapshotRootDir) { } }, tagManager::readTags, - new MemTemplateMNodeGenerator()); + new MemMNodeFactory()); logger.info( "MTree snapshot loading of schemaRegion {} costs {}ms.", schemaRegionId, diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java index 50f11b312370b..51bb497facb08 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java @@ -45,9 +45,9 @@ import org.apache.iotdb.db.metadata.metric.SchemaRegionCachedMetric; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGCachedImpl; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; -import org.apache.iotdb.db.metadata.newnode.CacheTemplateMNodeGenerator; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; @@ -204,7 +204,7 @@ public synchronized void init() throws MetadataException { }, schemaRegionId.getId(), regionStatistics, - new CacheTemplateMNodeGenerator()); + new CacheMNodeFactory()); if (!(config.isClusterMode() && config @@ -521,7 +521,7 @@ public void loadSnapshot(File latestSnapshotRootDir) { }, tagManager::readTags, this::flushCallback, - new CacheTemplateMNodeGenerator()); + new CacheMNodeFactory()); logger.info( "MTree snapshot loading of schemaRegion {} costs {}ms.", schemaRegionId, diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java index a27e2605e2eab..706fe2a424231 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java @@ -25,8 +25,8 @@ import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException; import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; -import org.apache.iotdb.db.metadata.newnode.CacheTemplateMNodeGenerator; -import org.apache.iotdb.db.metadata.newnode.MemTemplateMNodeGenerator; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.rescon.CachedSchemaEngineStatistics; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.rescon.MemSchemaEngineStatistics; @@ -102,14 +102,14 @@ private IMTreeBelowSG getStorageGroup(PartialPath path) throws MetadataException }, 0, new CachedSchemaRegionStatistics(0, new CachedSchemaEngineStatistics()), - new CacheTemplateMNodeGenerator()); + new CacheMNodeFactory()); } else { mtree = new MTreeBelowSGMemoryImpl( path, null, new MemSchemaRegionStatistics(0, new MemSchemaEngineStatistics()), - new MemTemplateMNodeGenerator()); + new MemMNodeFactory()); } usedMTree.add(mtree); return mtree; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java index 30fbfea0f4f41..2d34b56e83bf7 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java @@ -20,12 +20,12 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; @@ -71,15 +71,15 @@ public void tearDown() throws Exception { public void essentialLogTest() throws IOException, MetadataException { SchemaFile sf = (SchemaFile) SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - IDatabaseMNode newSGNode = new AbstractDatabaseDeviceMNode(null, "newSG", 10000L); + IDatabaseMNode newSGNode = new CacheDatabaseDeviceMNode(null, "newSG", 10000L); sf.updateStorageGroupNode(newSGNode); - IMNode root = virtualTriangleMTree(5, "root.test"); + ICacheMNode root = virtualTriangleMTree(5, "root.test"); - Iterator ite = getTreeBFT(root); - IMNode lastNode = null; + Iterator ite = getTreeBFT(root); + ICacheMNode lastNode = null; while (ite.hasNext()) { - IMNode curNode = ite.next(); + ICacheMNode curNode = ite.next(); if (!curNode.isMeasurement()) { sf.writeMNode(curNode); lastNode = curNode; @@ -94,7 +94,7 @@ public void essentialLogTest() throws IOException, MetadataException { ByteBuffer.allocate(SchemaFileConfig.PAGE_LENGTH), corruptPageIndex); // record number of children now - Iterator res = sf.getChildren(lastNode); + Iterator res = sf.getChildren(lastNode); int cnt = 0; while (res.hasNext()) { cnt++; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java index 88550176ba455..2d92347f37293 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java @@ -21,20 +21,21 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.utils.PathUtils; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.WrappedSegment; -import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.database.CacheDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; @@ -84,21 +85,21 @@ public void tearDown() throws Exception { @Test public void essentialTestSchemaFile() throws IOException, MetadataException { ISchemaFile sf = SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - IDatabaseMNode newSGNode = new AbstractDatabaseDeviceMNode(null, "newSG", 10000L); + IDatabaseMNode newSGNode = new CacheDatabaseDeviceMNode(null, "newSG", 10000L); sf.updateStorageGroupNode(newSGNode); - IMNode root = virtualTriangleMTree(5, "root.test"); - IMNode int0 = root.getChild("int0"); - IMNode int1 = root.getChild("int0").getChild("int1"); - IMNode int4 = + ICacheMNode root = virtualTriangleMTree(5, "root.test"); + ICacheMNode int0 = root.getChild("int0"); + ICacheMNode int1 = root.getChild("int0").getChild("int1"); + ICacheMNode int4 = root.getChild("int0").getChild("int1").getChild("int2").getChild("int3").getChild("int4"); ICachedMNodeContainer.getCachedMNodeContainer(int0) .getNewChildBuffer() .put("mint1", getMeasurementNode(int0, "mint1", "alas")); - Iterator ite = getTreeBFT(root); + Iterator ite = getTreeBFT(root); while (ite.hasNext()) { - IMNode curNode = ite.next(); + ICacheMNode curNode = ite.next(); if (!curNode.isMeasurement()) { sf.writeMNode(curNode); } @@ -158,22 +159,22 @@ public void essentialTestSchemaFile() throws IOException, MetadataException { @Test public void testVerticalTree() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sgvt.vt", TEST_SCHEMA_REGION_ID); - IDatabaseMNode sgNode = new AbstractDatabaseDeviceMNode(null, "sg", 11_111L); + IDatabaseMNode sgNode = new CacheDatabaseDeviceMNode(null, "sg", 11_111L); sf.updateStorageGroupNode(sgNode); - IMNode root = getVerticalTree(100, "VT"); - Iterator ite = getTreeBFT(root); + ICacheMNode root = getVerticalTree(100, "VT"); + Iterator ite = getTreeBFT(root); while (ite.hasNext()) { sf.writeMNode(ite.next()); } - IMNode vt1 = getNode(root, "root.VT_0.VT_1"); - IMNode vt4 = getNode(root, "root.VT_0.VT_1.VT_2.VT_3.VT_4"); + ICacheMNode vt1 = getNode(root, "root.VT_0.VT_1"); + ICacheMNode vt4 = getNode(root, "root.VT_0.VT_1.VT_2.VT_3.VT_4"); ICachedMNodeContainer.getCachedMNodeContainer(vt1).getNewChildBuffer().clear(); addMeasurementChild(vt1, "newM"); sf.writeMNode(vt1); - IMNode vt0 = getNode(root, "root.VT_0"); + ICacheMNode vt0 = getNode(root, "root.VT_0"); Assert.assertEquals( ICachedMNodeContainer.getCachedMNodeContainer(vt1).getSegmentAddress(), RecordUtils.getRecordSegAddr( @@ -203,8 +204,8 @@ public void testVerticalTree() throws MetadataException, IOException { nsf.close(); nsf = SchemaFile.loadSchemaFile("root.sgvt.vt", TEST_SCHEMA_REGION_ID); - Iterator vt1Children = nsf.getChildren(vt1); - Iterator vt4Children = nsf.getChildren(vt4); + Iterator vt1Children = nsf.getChildren(vt1); + Iterator vt4Children = nsf.getChildren(vt4); while (vt1Children.hasNext()) { newNodes.remove(vt1Children.next().getName()); @@ -236,19 +237,19 @@ public void testVerticalTree() throws MetadataException, IOException { public void testFaltTree() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - Iterator ite = getTreeBFT(getFlatTree(50000, "aa")); + Iterator ite = getTreeBFT(getFlatTree(50000, "aa")); while (ite.hasNext()) { - IMNode cur = ite.next(); + ICacheMNode cur = ite.next(); if (!cur.isMeasurement()) { sf.writeMNode(cur); } } - IMNode node = new BasicMNode(null, "a"); + ICacheMNode node = new CacheBasicMNode(null, "a"); ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(0L); List tryReadList = Arrays.asList(199, 1999, 2999, 3999, 4999, 5999); for (Integer rid : tryReadList) { - IMNode target = sf.getChildNode(node, "aa" + rid); + ICacheMNode target = sf.getChildNode(node, "aa" + rid); Assert.assertEquals("aa" + rid + "als", target.getAsMeasurementMNode().getAlias()); } sf.close(); @@ -258,12 +259,12 @@ public void testFaltTree() throws MetadataException, IOException { public void testGetChildren() throws MetadataException, IOException { essentialTestSchemaFile(); - IMNode node = new BasicMNode(null, "test"); + ICacheMNode node = new CacheBasicMNode(null, "test"); ICachedMNodeContainer.getCachedMNodeContainer(node) .setSegmentAddress(SchemaFile.getGlobalIndex(2, (short) 0)); ISchemaFile sf = SchemaFile.loadSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - Iterator res = sf.getChildren(node); + Iterator res = sf.getChildren(node); int cnt = 0; while (res.hasNext()) { res.next(); @@ -276,19 +277,19 @@ public void testGetChildren() throws MetadataException, IOException { @Test public void test200KMeasurement() throws MetadataException, IOException { int i = 200000, j = 20; - IMNode sgNode = new AbstractDatabaseMNode(null, "sgRoot", 11111111L); + ICacheMNode sgNode = new CacheDatabaseMNode(null, "sgRoot", 11111111L); ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); while (j >= 0) { - IMNode aDevice = new AbstractDeviceMNode(sgNode, "dev_" + j); + ICacheMNode aDevice = new CacheDeviceMNode(sgNode, "dev_" + j); sgNode.addChild(aDevice); j--; } sf.writeMNode(sgNode); - IMNode meas; - IMNode dev = sgNode.getChildren().get("dev_2"); + ICacheMNode meas; + ICacheMNode dev = sgNode.getChildren().get("dev_2"); while (i >= 0) { meas = getMeasurementNode(dev, "m_" + i, "ma_" + i); dev.addChild(meas); @@ -309,19 +310,19 @@ public void test200KMeasurement() throws MetadataException, IOException { @Test public void test10KDevices() throws MetadataException, IOException { int i = 1000; - IMNode sgNode = new AbstractDatabaseMNode(null, "sgRoot", 11111111L); + ICacheMNode sgNode = new CacheDatabaseMNode(null, "sgRoot", 11111111L); // write with empty entitiy while (i >= 0) { - IMNode aDevice = new BasicMNode(sgNode, "dev_" + i); + ICacheMNode aDevice = new CacheBasicMNode(sgNode, "dev_" + i); sgNode.addChild(aDevice); i--; } - Iterator orderedTree = getTreeBFT(sgNode); + Iterator orderedTree = getTreeBFT(sgNode); ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); ICachedMNodeContainer.getCachedMNodeContainer(sgNode).setSegmentAddress(0L); - IMNode node = null; + ICacheMNode node = null; try { while (orderedTree.hasNext()) { node = orderedTree.next(); @@ -334,7 +335,7 @@ public void test10KDevices() throws MetadataException, IOException { i = 1000; while (i >= 0) { long addr = getSegAddrInContainer(sgNode.getChild("dev_" + i)); - IMNode aDevice = new AbstractDeviceMNode(sgNode, "dev_" + i); + ICacheMNode aDevice = new CacheDeviceMNode(sgNode, "dev_" + i); sgNode.deleteChild(aDevice.getName()); sgNode.addChild(aDevice); moveToUpdateBuffer(sgNode, "dev_" + i); @@ -357,7 +358,7 @@ public void test10KDevices() throws MetadataException, IOException { } // write with few measurement - for (IMNode etn : sgNode.getChildren().values()) { + for (ICacheMNode etn : sgNode.getChildren().values()) { int j = 10; while (j >= 0) { addMeasurementChild(etn, String.format("mtc_%d_%d", i, j)); @@ -384,7 +385,7 @@ public void test10KDevices() throws MetadataException, IOException { Set resName = new HashSet<>(); // more measurement - for (IMNode etn : sgNode.getChildren().values()) { + for (ICacheMNode etn : sgNode.getChildren().values()) { int j = 1000; while (j >= 0) { addMeasurementChild(etn, String.format("mtc2_%d_%d", i, j)); @@ -397,7 +398,7 @@ public void test10KDevices() throws MetadataException, IOException { orderedTree = getTreeBFT(sgNode); sf = SchemaFile.loadSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); - List arbitraryNode = new ArrayList<>(); + List arbitraryNode = new ArrayList<>(); try { while (orderedTree.hasNext()) { node = orderedTree.next(); @@ -418,12 +419,12 @@ public void test10KDevices() throws MetadataException, IOException { sf = SchemaFile.loadSchemaFile("sgRoot", TEST_SCHEMA_REGION_ID); for (String key : resName) { - IMNode resNode = sf.getChildNode(arbitraryNode.get(arbitraryNode.size() - 3), key); + ICacheMNode resNode = sf.getChildNode(arbitraryNode.get(arbitraryNode.size() - 3), key); Assert.assertTrue( resNode.getAsMeasurementMNode().getAlias().equals(resNode.getName() + "alias")); } - Iterator res = sf.getChildren(arbitraryNode.get(arbitraryNode.size() - 1)); + Iterator res = sf.getChildren(arbitraryNode.get(arbitraryNode.size() - 1)); int i2 = 0; while (res.hasNext()) { resName.remove(res.next().getName()); @@ -436,10 +437,10 @@ public void test10KDevices() throws MetadataException, IOException { @Test public void testUpdateOnFullPageSegment() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - IMNode root = getFlatTree(783, "aa"); - Iterator ite = getTreeBFT(root); + ICacheMNode root = getFlatTree(783, "aa"); + Iterator ite = getTreeBFT(root); while (ite.hasNext()) { - IMNode cur = ite.next(); + ICacheMNode cur = ite.next(); if (!cur.isMeasurement()) { sf.writeMNode(cur); } @@ -458,9 +459,9 @@ public void testUpdateOnFullPageSegment() throws MetadataException, IOException root.getChildren().clear(); - root.addChild(new AbstractDeviceMNode(root, "ent1")); + root.addChild(new CacheDeviceMNode(root, "ent1")); - IMNode ent1 = root.getChild("ent1"); + ICacheMNode ent1 = root.getChild("ent1"); ent1.addChild(getMeasurementNode(ent1, "m1", "m1a")); sf.writeMNode(root); @@ -511,8 +512,8 @@ public void testEstimateSegSize() throws Exception { * related methods shall be merged further: {@linkplain SchemaFile#reEstimateSegSize} * ,{@linkplain PageManager#reEstimateSegSize} */ - IMNode sgNode = new AbstractDatabaseMNode(null, "mma", 111111111L); - IMNode d1 = fillChildren(sgNode, 300, "d", this::supplyEntity); + ICacheMNode sgNode = new CacheDatabaseMNode(null, "mma", 111111111L); + ICacheMNode d1 = fillChildren(sgNode, 300, "d", this::supplyEntity); ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); try { sf.writeMNode(sgNode); @@ -531,7 +532,7 @@ public void testEstimateSegSize() throws Exception { fillChildren(d1, 20, "ss", this::supplyMeasurement); sf.writeMNode(d1); - Iterator verifyChildren = sf.getChildren(d1); + Iterator verifyChildren = sf.getChildren(d1); int cnt = 0; while (verifyChildren.hasNext()) { cnt++; @@ -546,21 +547,21 @@ public void testEstimateSegSize() throws Exception { @Test public void test200KAlias() throws Exception { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - IMNode sgNode = new AbstractDatabaseMNode(null, "mma", 111111111L); + ICacheMNode sgNode = new CacheDatabaseMNode(null, "mma", 111111111L); // 5 devices, each for 200k measurements int factor20K = 20000; - List devs = new ArrayList<>(); + List devs = new ArrayList<>(); List senList = new ArrayList<>(); Map aliasAns = new HashMap<>(); try { for (int i = 0; i < 5; i++) { - devs.add(new AbstractDeviceMNode(sgNode, "d_" + i)); + devs.add(new CacheDeviceMNode(sgNode, "d_" + i)); sgNode.addChild(devs.get(i)); } - for (IMNode dev : devs) { - List sens = new ArrayList<>(); + for (ICacheMNode dev : devs) { + List sens = new ArrayList<>(); for (int i = 0; i < factor20K; i++) { sens.add(getMeasurementNode(dev, "s_" + i, null)); dev.addChild(sens.get(i)); @@ -572,9 +573,9 @@ public void test200KAlias() throws Exception { senList.add(sens); } - Iterator ite = getTreeBFT(sgNode); + Iterator ite = getTreeBFT(sgNode); - IMNode curNode; + ICacheMNode curNode; while (ite.hasNext()) { curNode = ite.next(); if (!curNode.isMeasurement()) { @@ -588,8 +589,8 @@ public void test200KAlias() throws Exception { sf = SchemaFile.loadSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); try { - IMNode dev2 = devs.get(2); - for (IMNode child : dev2.getChildren().values()) { + ICacheMNode dev2 = devs.get(2); + for (ICacheMNode child : dev2.getChildren().values()) { child.getAsMeasurementMNode().setAlias(aliasAns.get(child.getName())); } @@ -607,7 +608,7 @@ public void test200KAlias() throws Exception { Assert.assertEquals(entry.getKey(), sf.getChildNode(dev2, entry.getValue()).getName()); } - Iterator children = sf.getChildren(dev2); + Iterator children = sf.getChildren(dev2); int cnt = 0; while (children.hasNext()) { cnt++; @@ -623,12 +624,12 @@ public void test200KAlias() throws Exception { @Test public void testRearrangementWhenInsert() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - IMNode root = new AbstractDatabaseDeviceMNode(null, "sgRoot", 0L); + ICacheMNode root = new CacheDatabaseDeviceMNode(null, "sgRoot", 0L); root.getChildren().clear(); - IMNode ent2 = new AbstractDeviceMNode(root, "ent2"); - IMNode ent3 = new AbstractDeviceMNode(root, "ent3"); - IMNode ent4 = new AbstractDeviceMNode(root, "ent4"); + ICacheMNode ent2 = new CacheDeviceMNode(root, "ent2"); + ICacheMNode ent3 = new CacheDeviceMNode(root, "ent3"); + ICacheMNode ent4 = new CacheDeviceMNode(root, "ent4"); root.addChild(ent2); root.addChild(ent3); root.addChild(ent4); @@ -680,7 +681,7 @@ public void testRearrangementWhenInsert() throws MetadataException, IOException getSegAddr(sf, getSegAddrInContainer(ent4), "e4m0")); root.getChildren().clear(); - IMNode ent5 = new AbstractDeviceMNode(root, "ent5"); + ICacheMNode ent5 = new CacheDeviceMNode(root, "ent5"); root.addChild(ent5); while (ent5.getChildren().size() < 19) { ent5.addChild( @@ -748,7 +749,7 @@ public void bitwiseTest() { public void basicTest() throws IOException, MetadataException { SchemaFileConfig.INTERNAL_SPLIT_VALVE = 16000; int i = 10000; - IMNode sgNode = new AbstractDatabaseDeviceMNode(null, "sgRoot", 11111111L); + ICacheMNode sgNode = new CacheDatabaseDeviceMNode(null, "sgRoot", 11111111L); Set checkSet = new HashSet<>(); // write with empty entitiy while (i >= 0) { @@ -758,17 +759,17 @@ public void basicTest() throws IOException, MetadataException { } else if (i < 100) { name = "0" + name; } - IMNode aMeas = getMeasurementNode(sgNode, "s_" + name, null); + ICacheMNode aMeas = getMeasurementNode(sgNode, "s_" + name, null); checkSet.add(aMeas.getName()); sgNode.addChild(aMeas); i--; } - Iterator orderedTree = getTreeBFT(sgNode); + Iterator orderedTree = getTreeBFT(sgNode); ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); sf.writeMNode(sgNode); - Iterator res = sf.getChildren(sgNode); + Iterator res = sf.getChildren(sgNode); while (res.hasNext()) { checkSet.remove(res.next().getName()); } @@ -782,7 +783,7 @@ public void basicSplitTest() throws MetadataException, IOException { SchemaFileConfig.INTERNAL_SPLIT_VALVE = 16230; SchemaFileConfig.DETAIL_SKETCH = true; int i = 999; - IMNode sgNode = new AbstractDatabaseDeviceMNode(null, "sgRoot", 11111111L); + ICacheMNode sgNode = new CacheDatabaseDeviceMNode(null, "sgRoot", 11111111L); Set checkSet = new HashSet<>(); // write with empty entitiy while (i >= 0) { @@ -792,7 +793,7 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (i < 100) { name = "0" + name; } - IMNode aMeas = getMeasurementNode(sgNode, "s_" + name, null); + ICacheMNode aMeas = getMeasurementNode(sgNode, "s_" + name, null); checkSet.add(aMeas.getName()); sgNode.addChild(aMeas); i--; @@ -801,7 +802,7 @@ public void basicSplitTest() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); sf.writeMNode(sgNode); - Iterator res = sf.getChildren(sgNode); + Iterator res = sf.getChildren(sgNode); while (res.hasNext()) { checkSet.remove(res.next().getName()); @@ -817,7 +818,7 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (j < 100) { name = "0" + name; } - IMNode aMeas = new BasicMNode(sgNode, "d_" + name); + ICacheMNode aMeas = new CacheBasicMNode(sgNode, "d_" + name); sgNode.addChild(aMeas); } @@ -828,14 +829,14 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (j < 100) { name = "0" + name; } - IMNode aMeas = new BasicMNode(sgNode, "dd2_" + name); + ICacheMNode aMeas = new CacheBasicMNode(sgNode, "dd2_" + name); checkSet.add(aMeas.getName()); sgNode.getChildren().get("d_010").addChild(aMeas); } - IMNode d010 = sgNode.getChildren().get("d_010"); + ICacheMNode d010 = sgNode.getChildren().get("d_010"); d010 = MNodeUtils.setToEntity(d010); - IMNode ano = getMeasurementNode(d010, "splitover", "aliaslasialsai"); + ICacheMNode ano = getMeasurementNode(d010, "splitover", "aliaslasialsai"); d010.addChild(ano); sgNode.addChild(d010); @@ -851,7 +852,7 @@ public void basicSplitTest() throws MetadataException, IOException { sf.writeMNode(d010); int d010cs = 0; - Iterator res2 = sf.getChildren(d010); + Iterator res2 = sf.getChildren(d010); while (res2.hasNext()) { checkSet.add(res2.next().getName()); d010cs++; @@ -916,24 +917,27 @@ private static long getSegAddr(ISchemaFile sf, long curAddr, String key) { // endregion - // region IMNode Shortcut + // region ICacheMNode Shortcut - private IMNode supplyMeasurement(IMNode par, String name) { + private ICacheMNode supplyMeasurement(ICacheMNode par, String name) { return getMeasurementNode(par, name, name + "_als"); } - private IMNode supplyInternal(IMNode par, String name) { - return new BasicMNode(par, name); + private ICacheMNode supplyInternal(ICacheMNode par, String name) { + return new CacheBasicMNode(par, name); } - private IMNode supplyEntity(IMNode par, String name) { - return new AbstractDeviceMNode(par, name); + private ICacheMNode supplyEntity(ICacheMNode par, String name) { + return new CacheDeviceMNode(par, name); } - private IMNode fillChildren( - IMNode par, int number, String prefix, BiFunction nodeFactory) { + private ICacheMNode fillChildren( + ICacheMNode par, + int number, + String prefix, + BiFunction nodeFactory) { String childName; - IMNode lastChild = null; + ICacheMNode lastChild = null; for (int i = 0; i < number; i++) { childName = prefix + "_" + i; lastChild = nodeFactory.apply(par, childName); @@ -943,7 +947,7 @@ private IMNode fillChildren( } // open for package - static void addMeasurementChild(IMNode par, String mid) { + static void addMeasurementChild(ICacheMNode par, String mid) { par.addChild(getMeasurementNode(par, mid, mid + "alias")); } @@ -951,9 +955,9 @@ static IMeasurementSchema getSchema(String id) { return new MeasurementSchema(id, TSDataType.FLOAT); } - private IMNode getNode(IMNode root, String path) throws MetadataException { + private ICacheMNode getNode(ICacheMNode root, String path) throws MetadataException { String[] pathNodes = PathUtils.splitPathToDetachedNodes(path); - IMNode cur = root; + ICacheMNode cur = root; for (String node : pathNodes) { if (!node.equals("root")) { cur = cur.getChild(node); @@ -962,33 +966,31 @@ private IMNode getNode(IMNode root, String path) throws MetadataException { return cur; } - static IMNode getInternalWithSegAddr(IMNode par, String name, long segAddr) { - IMNode node = new AbstractDeviceMNode(par, name); + static ICacheMNode getInternalWithSegAddr(ICacheMNode par, String name, long segAddr) { + ICacheMNode node = new CacheDeviceMNode(par, name); ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(segAddr); return node; } - static IMNode getMeasurementNode(IMNode par, String name, String alias) { + static ICacheMNode getMeasurementNode(ICacheMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); - IMeasurementMNode mNode = - MeasurementMNode.getMeasurementMNode(par.getAsEntityMNode(), name, schema, alias); - return mNode; + return new CacheMeasurementMNode(par, name, schema, alias); } - static void addNodeToUpdateBuffer(IMNode par, IMNode child) { + static void addNodeToUpdateBuffer(ICacheMNode par, ICacheMNode child) { ICachedMNodeContainer.getCachedMNodeContainer(par).remove(child.getName()); ICachedMNodeContainer.getCachedMNodeContainer(par).appendMNode(child); ICachedMNodeContainer.getCachedMNodeContainer(par).moveMNodeToCache(child.getName()); ICachedMNodeContainer.getCachedMNodeContainer(par).updateMNode(child.getName()); } - static void moveToUpdateBuffer(IMNode par, String childName) { + static void moveToUpdateBuffer(ICacheMNode par, String childName) { ICachedMNodeContainer.getCachedMNodeContainer(par).appendMNode(par.getChild(childName)); ICachedMNodeContainer.getCachedMNodeContainer(par).moveMNodeToCache(childName); ICachedMNodeContainer.getCachedMNodeContainer(par).updateMNode(childName); } - static void moveAllToUpdate(IMNode par) { + static void moveAllToUpdate(ICacheMNode par) { List childNames = par.getChildren().values().stream().map(IMNode::getName).collect(Collectors.toList()); for (String name : childNames) { @@ -997,7 +999,7 @@ static void moveAllToUpdate(IMNode par) { } } - static void moveAllToBuffer(IMNode par) { + static void moveAllToBuffer(ICacheMNode par) { List childNames = par.getChildren().values().stream().map(IMNode::getName).collect(Collectors.toList()); for (String name : childNames) { @@ -1005,7 +1007,7 @@ static void moveAllToBuffer(IMNode par) { } } - static long getSegAddrInContainer(IMNode par) { + static long getSegAddrInContainer(ICacheMNode par) { return ICachedMNodeContainer.getCachedMNodeContainer(par).getSegmentAddress(); } @@ -1013,74 +1015,69 @@ static long getSegAddrInContainer(IMNode par) { // region Tree Constructor - static IMNode virtualTriangleMTree(int size, String sgPath) throws MetadataException { + static ICacheMNode virtualTriangleMTree(int size, String sgPath) throws MetadataException { String[] sgPathNodes = PathUtils.splitPathToDetachedNodes(sgPath); - IMNode upperNode = null; + ICacheMNode upperNode = null; for (String name : sgPathNodes) { - IMNode child = new BasicMNode(upperNode, name); - upperNode = child; + upperNode = new CacheBasicMNode(upperNode, name); } - IMNode internalNode = new AbstractDatabaseDeviceMNode(upperNode, "vRoot1", 0L); + ICacheMNode internalNode = new CacheDatabaseDeviceMNode(upperNode, "vRoot1", 0L); for (int idx = 0; idx < size; idx++) { String measurementId = "mid" + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); - IMeasurementMNode mNode = - MeasurementMNode.getMeasurementMNode( - internalNode.getAsEntityMNode(), measurementId, schema, measurementId + "als"); - internalNode.addChild(mNode); + IMeasurementMNode mNode = + new CacheMeasurementMNode(internalNode, measurementId, schema, measurementId + "als"); + internalNode.addChild(mNode.getAsMNode()); } - IMNode curNode = internalNode; + ICacheMNode curNode = internalNode; for (int idx = 0; idx < size; idx++) { String nodeName = "int" + idx; - IMNode newNode = new AbstractDeviceMNode(curNode, nodeName); + ICacheMNode newNode = new CacheDeviceMNode(curNode, nodeName); curNode.addChild(newNode); curNode = newNode; } for (int idx = 0; idx < 1000; idx++) { IMeasurementSchema schema = new MeasurementSchema("finalM" + idx, TSDataType.FLOAT); - IMeasurementMNode mNode = - MeasurementMNode.getMeasurementMNode( - internalNode.getAsEntityMNode(), "finalM" + idx, schema, "finalals" + idx); - curNode.addChild(mNode); + IMeasurementMNode mNode = + new CacheMeasurementMNode(internalNode, "finalM" + idx, schema, "finalals" + idx); + curNode.addChild(mNode.getAsMNode()); } IMeasurementSchema schema = new MeasurementSchema("finalM", TSDataType.FLOAT); - IMeasurementMNode mNode = - MeasurementMNode.getMeasurementMNode( - internalNode.getAsEntityMNode(), "finalM", schema, "finalals"); - curNode.addChild(mNode); + IMeasurementMNode mNode = + new CacheMeasurementMNode(internalNode, "finalM", schema, "finalals"); + curNode.addChild(mNode.getAsMNode()); upperNode.addChild(internalNode); return internalNode; } - static IMNode getFlatTree(int flatSize, String id) { - IMNode root = new BasicMNode(null, "root"); - IMNode test = new BasicMNode(root, "test"); - IMNode internalNode = new AbstractDatabaseDeviceMNode(null, "vRoot1", 0L); + static ICacheMNode getFlatTree(int flatSize, String id) { + ICacheMNode root = new CacheBasicMNode(null, "root"); + ICacheMNode test = new CacheBasicMNode(root, "test"); + ICacheMNode internalNode = new CacheDatabaseDeviceMNode(null, "vRoot1", 0L); for (int idx = 0; idx < flatSize; idx++) { String measurementId = id + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); - IMeasurementMNode mNode = - MeasurementMNode.getMeasurementMNode( - internalNode.getAsEntityMNode(), measurementId, schema, measurementId + "als"); - internalNode.addChild(mNode); + IMeasurementMNode mNode = + new CacheMeasurementMNode(internalNode, measurementId, schema, measurementId + "als"); + internalNode.addChild(mNode.getAsMNode()); } test.addChild(internalNode); return internalNode; } - static IMNode getVerticalTree(int height, String id) { - IMNode trueRoot = new BasicMNode(null, "root"); - trueRoot.addChild(new BasicMNode(trueRoot, "sgvt")); - IMNode root = new AbstractDatabaseDeviceMNode(null, "vt", 0L); + static ICacheMNode getVerticalTree(int height, String id) { + ICacheMNode trueRoot = new CacheBasicMNode(null, "root"); + trueRoot.addChild(new CacheBasicMNode(trueRoot, "sgvt")); + ICacheMNode root = new CacheDatabaseDeviceMNode(null, "vt", 0L); int cnt = 0; - IMNode cur = root; + ICacheMNode cur = root; while (cnt < height) { - cur.addChild(new AbstractDeviceMNode(cur, id + "_" + cnt)); + cur.addChild(new CacheDeviceMNode(cur, id + "_" + cnt)); cur = cur.getChild(id + "_" + cnt); cnt++; } @@ -1088,9 +1085,9 @@ static IMNode getVerticalTree(int height, String id) { return root; } - static Iterator getTreeBFT(IMNode root) { - return new Iterator() { - Queue queue = new LinkedList(); + static Iterator getTreeBFT(ICacheMNode root) { + return new Iterator() { + final Queue queue = new LinkedList<>(); { this.queue.add(root); @@ -1102,10 +1099,10 @@ public boolean hasNext() { } @Override - public IMNode next() { - IMNode curNode = queue.poll(); + public ICacheMNode next() { + ICacheMNode curNode = queue.poll(); if (!curNode.isMeasurement() && curNode.getChildren().size() > 0) { - for (IMNode child : curNode.getChildren().values()) { + for (ICacheMNode child : curNode.getChildren().values()) { queue.add(child); } } From a3ec02ca0437a1ca92add04886f5e49f74f441cc Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Tue, 7 Mar 2023 11:34:00 +0800 Subject: [PATCH 07/26] done MNodeUtils --- .../rocksdb/mnode/RDatabaseMNode.java | 2 +- .../rocksdb/mnode/RDeviceMNode.java | 18 +++++++++-- .../schemaregion/rocksdb/mnode/RMNode.java | 6 ++-- .../rocksdb/mnode/RMeasurementMNode.java | 2 +- .../idtable/entry/InsertMeasurementMNode.java | 4 +-- .../iotdb/db/metadata/mnode/BasicMNode.java | 4 +-- .../iotdb/db/metadata/mnode/IMNode.java | 4 +-- .../iotdb/db/metadata/mnode/MNodeUtils.java | 12 ++++---- .../estimator/BasicMNodSizeEstimator.java | 2 +- .../iterator/AbstractTraverserIterator.java | 2 +- .../mtree/MTreeBelowSGCachedImpl.java | 28 ++++++++--------- .../mtree/MTreeBelowSGMemoryImpl.java | 30 +++++++++---------- .../mtree/store/CachedMTreeStore.java | 6 ++-- .../mtree/store/ConfigMTreeStore.java | 4 +-- .../metadata/mtree/store/MemMTreeStore.java | 4 +-- .../mtree/store/disk/cache/CacheManager.java | 2 +- .../memcontrol/CachedMNodeSizeEstimator.java | 2 +- .../store/disk/schemafile/MockSchemaFile.java | 10 +++---- .../store/disk/schemafile/RecordUtils.java | 20 ++++++------- .../store/disk/schemafile/SchemaFile.java | 12 ++++---- .../schemafile/pagemgr/BTreePageManager.java | 2 +- .../disk/schemafile/pagemgr/PageManager.java | 6 ++-- .../metadata/mtree/traverser/Traverser.java | 8 ++--- .../traverser/basic/EntityTraverser.java | 4 +-- .../traverser/collector/EntityCollector.java | 2 +- .../collector/MeasurementCollector.java | 2 +- .../traverser/updater/EntityUpdater.java | 2 +- .../metadata/newnode/DatabaseDeviceInfo.java | 5 ++++ .../AbstractAboveDatabaseMNode.java | 6 ++-- .../newnode/basic/CacheBasicMNode.java | 7 ++--- .../newnode/basic/ConfigBasicMNode.java | 4 +-- .../database/AbstractDatabaseMNode.java | 13 ++++---- .../newnode/database/DatabaseInfo.java | 4 +++ .../AbstractDatabaseDeviceMNode.java | 24 +++++++++------ .../newnode/device/AbstractDeviceMNode.java | 17 ++++++----- .../metadata/newnode/device/DeviceInfo.java | 15 +++++++--- .../metadata/newnode/device/IDeviceInfo.java | 6 ++-- .../measurement/AbstractMeasurementMNode.java | 14 +++++++-- .../newnode/measurement/IMeasurementInfo.java | 2 ++ .../newnode/measurement/MeasurementInfo.java | 14 ++++++++- .../schemaregion/SchemaRegionMemoryImpl.java | 4 +-- .../SchemaRegionSchemaFileImpl.java | 4 +-- .../mtree/schemafile/SchemaPageTest.java | 2 +- .../mtree/schemafile/WrappedSegmentTest.java | 4 +-- .../iotdb/db/tools/SchemaFileSketchTest.java | 2 +- 45 files changed, 204 insertions(+), 143 deletions(-) diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java index f60b2165c27c9..169c139c5cfbc 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java @@ -73,7 +73,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return false; } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java index 9f5784f69bc94..b744f94e3e241 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java @@ -20,7 +20,9 @@ package org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; @@ -76,12 +78,12 @@ public void deleteAliasChild(String alias) { } @Override - public Map getAliasChildren() { + public Map> getAliasChildren() { throw new UnsupportedOperationException(); } @Override - public void setAliasChildren(Map aliasChildren) { + public void setAliasChildren(Map> aliasChildren) { throw new UnsupportedOperationException(); } @@ -123,7 +125,7 @@ private void deserialize(byte[] value) { } @Override - public boolean isEntity() { + public boolean isDevice() { return true; } @@ -131,4 +133,14 @@ public boolean isEntity() { public MNodeType getMNodeType(Boolean isConfig) { return MNodeType.DEVICE; } + + @Override + public Object accept(MNodeVisitor visitor, Object context) { + throw new UnsupportedOperationException(); + } + + @Override + public IMNode getAsMNode() { + throw new UnsupportedOperationException(); + } } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java index b24558eaef42b..bd02e86b773cc 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java @@ -194,7 +194,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return false; } @@ -213,8 +213,8 @@ public IDatabaseMNode getAsDatabaseMNode() { } @Override - public IDeviceMNode getAsEntityMNode() { - if (isEntity()) { + public IDeviceMNode getAsDeviceMNode() { + if (isDevice()) { return (IDeviceMNode) this; } else { throw new UnsupportedOperationException("Wrong MNode Type"); diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java index b64c0ebe400e4..0c13ef17f8f88 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java @@ -83,7 +83,7 @@ public IDeviceMNode getParent() { if (super.getParent() == null) { return null; } - return parent.getAsEntityMNode(); + return parent.getAsDeviceMNode(); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java index 389dd70cb86f3..bbe29bc7b483f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java @@ -216,7 +216,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); } @@ -236,7 +236,7 @@ public IDatabaseMNode getAsDatabaseMNode() { } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsDeviceMNode() { throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java index 55357e49670a2..c4b51e88d6cd9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java @@ -253,7 +253,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return false; } @@ -273,7 +273,7 @@ public IDatabaseMNode getAsDatabaseMNode() { } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsDeviceMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java index 57b406e5f54a6..11607fc4bd79a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java @@ -68,7 +68,7 @@ public interface IMNode> extends ITreeNode { boolean isDatabase(); - boolean isEntity(); + boolean isDevice(); boolean isMeasurement(); @@ -76,7 +76,7 @@ public interface IMNode> extends ITreeNode { IDatabaseMNode getAsDatabaseMNode(); - IDeviceMNode getAsEntityMNode(); + IDeviceMNode getAsDeviceMNode(); IMeasurementMNode getAsMeasurementMNode(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java index 4de5cc419d76a..f9ff0e77e53e2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java @@ -39,23 +39,23 @@ public class MNodeUtils { public static > IDeviceMNode setToEntity( IMNode node, IMNodeFactory nodeFactory) { IDeviceMNode entityMNode; - if (node.isEntity()) { - entityMNode = node.getAsEntityMNode(); + if (node.isDevice()) { + entityMNode = node.getAsDeviceMNode(); } else { if (node.isDatabase()) { entityMNode = nodeFactory .createDatabaseDeviceMNode( node.getParent(), node.getName(), node.getAsDatabaseMNode().getDataTTL()) - .getAsEntityMNode(); - node.moveDataToNewMNode(entityMNode); + .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); + node.getParent().replaceChild(node.getName(), entityMNode.getAsMNode()); } else { - node.moveDataToNewMNode(entityMNode); + node.moveDataToNewMNode(entityMNode.getAsMNode()); } } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java index 091d7e2faf6e2..cc0fea6bcfc12 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java @@ -104,7 +104,7 @@ public int estimateSize(IMNode node) { size += node.getAsDatabaseMNode().getFullPath().length(); } - if (node.isEntity()) { + if (node.isDevice()) { size += ENTITY_NODE_BASE_SIZE; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java index e77767e1f4855..30f7ca0cb997e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java @@ -67,7 +67,7 @@ private Template getActivatedSchemaTemplate( IDeviceMNode node, Map templateMap) { // new cluster, the used template is directly recorded as template id in device mnode if (node.getSchemaTemplateId() != NON_TEMPLATE) { - if (skipPreDeletedSchema && node.getAsEntityMNode().isPreDeactivateTemplate()) { + if (skipPreDeletedSchema && node.getAsDeviceMNode().isPreDeactivateTemplate()) { // skip this pre deactivated template, the invoker will skip this return null; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index ceecab05a7f46..416f31f04221d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -282,15 +282,15 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( throw new PathAlreadyExistException(path.getFullPath()); } - if (device.isEntity() && device.getAsEntityMNode().isAligned()) { + if (device.isDevice() && device.getAsDeviceMNode().isAligned()) { throw new AlignedTimeseriesException( "timeseries under this entity is aligned, please use createAlignedTimeseries or change entity.", device.getFullPath()); } IDeviceMNode entityMNode; - if (device.isEntity()) { - entityMNode = device.getAsEntityMNode(); + if (device.isDevice()) { + entityMNode = device.getAsDeviceMNode(); } else { entityMNode = store.setToEntity(device); if (entityMNode.isDatabase()) { @@ -365,15 +365,15 @@ public List> createAlignedTimeseries( } } - if (device.isEntity() && !device.getAsEntityMNode().isAligned()) { + if (device.isDevice() && !device.getAsDeviceMNode().isAligned()) { throw new AlignedTimeseriesException( "Timeseries under this entity is not aligned, please use createTimeseries or change entity.", devicePath.getFullPath()); } IDeviceMNode entityMNode; - if (device.isEntity()) { - entityMNode = device.getAsEntityMNode(); + if (device.isDevice()) { + entityMNode = device.getAsDeviceMNode(); } else { entityMNode = store.setToEntity(device); entityMNode.setAligned(true); @@ -423,7 +423,7 @@ public Map checkMeasurementExistence( return Collections.emptyMap(); } try { - if (!device.isEntity()) { + if (!device.isDevice()) { return Collections.emptyMap(); } Map failingMeasurementMap = new HashMap<>(); @@ -542,9 +542,9 @@ public IMeasurementMNode deleteTimeseries(PartialPath path) // delete the last node of path store.deleteChild(parent, path.getMeasurement()); if (deletedNode.getAlias() != null) { - parent.getAsEntityMNode().deleteAliasChild(deletedNode.getAlias()); + parent.getAsDeviceMNode().deleteAliasChild(deletedNode.getAlias()); } - deleteAndUnpinEmptyInternalMNode(parent.getAsEntityMNode()); + deleteAndUnpinEmptyInternalMNode(parent.getAsDeviceMNode()); return deletedNode; } @@ -601,7 +601,7 @@ private boolean isEmptyInternalMNode(ICacheMNode node) throws MetadataException try { return !IoTDBConstant.PATH_ROOT.equals(node.getName()) && !node.isMeasurement() - && !(node.isEntity() && node.getAsEntityMNode().isUseTemplate()) + && !(node.isDevice() && node.getAsDeviceMNode().isUseTemplate()) && !iterator.hasNext(); } finally { iterator.close(); @@ -836,8 +836,8 @@ public void activateTemplate(PartialPath activatePath, Template template) } } - if (cur.isEntity()) { - entityMNode = cur.getAsEntityMNode(); + if (cur.isDevice()) { + entityMNode = cur.getAsDeviceMNode(); } else { entityMNode = store.setToEntity(cur); if (entityMNode.isDatabase()) { @@ -935,7 +935,7 @@ protected void updateEntity(IDeviceMNode node) throws MetadataExcep } } for (PartialPath path : resultTemplateSetInfo.keySet()) { - deleteAndUnpinEmptyInternalMNode(getNodeByPath(path).getAsEntityMNode()); + deleteAndUnpinEmptyInternalMNode(getNodeByPath(path).getAsDeviceMNode()); } return resultTemplateSetInfo; } @@ -1067,7 +1067,7 @@ public Map getAttributes() { @Override public boolean isUnderAlignedDevice() { - return getParentOfNextMatchedNode().getAsEntityMNode().isAligned(); + return getParentOfNextMatchedNode().getAsDeviceMNode().isAligned(); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index 121007841a9ec..94db839b3b375 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -232,15 +232,15 @@ public IMeasurementMNode createTimeseries( } } - if (device.isEntity() && device.getAsEntityMNode().isAligned()) { + if (device.isDevice() && device.getAsDeviceMNode().isAligned()) { throw new AlignedTimeseriesException( "timeseries under this entity is aligned, please use createAlignedTimeseries or change entity.", device.getFullPath()); } IDeviceMNode entityMNode; - if (device.isEntity()) { - entityMNode = device.getAsEntityMNode(); + if (device.isDevice()) { + entityMNode = device.getAsDeviceMNode(); } else { entityMNode = store.setToEntity(device); if (entityMNode.isDatabase()) { @@ -313,15 +313,15 @@ public List> createAlignedTimeseries( } } - if (device.isEntity() && !device.getAsEntityMNode().isAligned()) { + if (device.isDevice() && !device.getAsDeviceMNode().isAligned()) { throw new AlignedTimeseriesException( "Timeseries under this entity is not aligned, please use createTimeseries or change entity.", devicePath.getFullPath()); } IDeviceMNode entityMNode; - if (device.isEntity()) { - entityMNode = device.getAsEntityMNode(); + if (device.isDevice()) { + entityMNode = device.getAsDeviceMNode(); } else { entityMNode = store.setToEntity(device); entityMNode.setAligned(true); @@ -402,7 +402,7 @@ public Map checkMeasurementExistence( return Collections.emptyMap(); } - if (!device.isEntity()) { + if (!device.isDevice()) { return Collections.emptyMap(); } Map failingMeasurementMap = new HashMap<>(); @@ -454,9 +454,9 @@ public IMeasurementMNode deleteTimeseries(PartialPath path) throws Me // delete the last node of path store.deleteChild(parent, path.getMeasurement()); if (deletedNode.getAlias() != null) { - parent.getAsEntityMNode().deleteAliasChild(deletedNode.getAlias()); + parent.getAsDeviceMNode().deleteAliasChild(deletedNode.getAlias()); } - deleteEmptyInternalMNode(parent.getAsEntityMNode()); + deleteEmptyInternalMNode(parent.getAsDeviceMNode()); return deletedNode; } @@ -499,7 +499,7 @@ public void deleteEmptyInternalMNode(IDeviceMNode entityMNode) { private boolean isEmptyInternalMNode(IMemMNode node) { return !IoTDBConstant.PATH_ROOT.equals(node.getName()) && !node.isMeasurement() - && !(node.isEntity() && node.getAsEntityMNode().isUseTemplate()) + && !(node.isDevice() && node.getAsDeviceMNode().isUseTemplate()) && node.getChildren().isEmpty(); } @@ -709,8 +709,8 @@ public void activateTemplate(PartialPath activatePath, Template template) } } - if (cur.isEntity()) { - entityMNode = cur.getAsEntityMNode(); + if (cur.isDevice()) { + entityMNode = cur.getAsDeviceMNode(); } else { entityMNode = store.setToEntity(cur); if (entityMNode.isDatabase()) { @@ -812,8 +812,8 @@ public void activateTemplateWithoutCheck( } IDeviceMNode entityMNode; - if (cur.isEntity()) { - entityMNode = cur.getAsEntityMNode(); + if (cur.isDevice()) { + entityMNode = cur.getAsDeviceMNode(); } else { entityMNode = store.setToEntity(cur); if (entityMNode.isDatabase()) { @@ -928,7 +928,7 @@ public Map getAttributes() { @Override public boolean isUnderAlignedDevice() { - return getParentOfNextMatchedNode().getAsEntityMNode().isAligned(); + return getParentOfNextMatchedNode().getAsDeviceMNode().isAligned(); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java index 2814009d2802c..a9193c25620af 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java @@ -173,7 +173,7 @@ protected final ICacheMNode getChild(ICacheMNode parent, String name, boolean ne } } if (node != null && node.isMeasurement()) { - processAlias(parent.getAsEntityMNode(), node.getAsMeasurementMNode()); + processAlias(parent.getAsDeviceMNode(), node.getAsMeasurementMNode()); } return node; @@ -253,9 +253,9 @@ final IMNodeIterator getTraverserIterator( Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { - if (parent.isEntity()) { + if (parent.isDevice()) { AbstractTraverserIterator iterator = - new CachedTraverserIterator(store, parent.getAsEntityMNode(), templateMap, nodeFactory); + new CachedTraverserIterator(store, parent.getAsDeviceMNode(), templateMap, nodeFactory); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; } else { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java index 2a77a10c805d7..0c14bfd2a8e04 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java @@ -73,9 +73,9 @@ public IMNodeIterator getChildrenIterator(IConfigMNode parent) { public IMNodeIterator getTraverserIterator( IConfigMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { - if (parent.isEntity()) { + if (parent.isDevice()) { AbstractTraverserIterator iterator = - new MemoryTraverserIterator(this, parent.getAsEntityMNode(), templateMap); + new MemoryTraverserIterator(this, parent.getAsDeviceMNode(), templateMap); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; } else { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index 792286a5e2060..2309fbe12f8cf 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -118,9 +118,9 @@ public IMNodeIterator getChildrenIterator(IMemMNode parent) { public IMNodeIterator getTraverserIterator( IMemMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { - if (parent.isEntity()) { + if (parent.isDevice()) { AbstractTraverserIterator iterator = - new MemoryTraverserIterator(this, parent.getAsEntityMNode(), templateMap, nodeFactory); + new MemoryTraverserIterator(this, parent.getAsDeviceMNode(), templateMap, nodeFactory); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; } else { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java index 51548c3c949bc..755b9fbef63d9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java @@ -358,7 +358,7 @@ public synchronized boolean evict() { if (node.isMeasurement()) { String alias = node.getAsMeasurementMNode().getAlias(); if (alias != null) { - node.getParent().getAsEntityMNode().deleteAliasChild(alias); + node.getParent().getAsDeviceMNode().deleteAliasChild(alias); } } removeFromNodeCache(getCacheEntry(node)); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java index 6739a568ea3e9..70a9efd8df153 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java @@ -62,7 +62,7 @@ public int estimateSize(IMNode node) { size += node.getAsDatabaseMNode().getFullPath().length(); } - if (node.isEntity()) { + if (node.isDevice()) { size += ENTITY_NODE_BASE_SIZE; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java index 72287e6fc6620..e3f13fb159e79 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java @@ -76,7 +76,7 @@ public ICacheMNode getChildNode(ICacheMNode parent, String childName) { ICacheMNode result = null; if (segment != null) { result = cloneMNode(segment.get(childName)); - if (result == null && parent.isEntity()) { + if (result == null && parent.isDevice()) { for (ICacheMNode node : segment.values()) { if (node.isMeasurement() && childName.equals(node.getAsMeasurementMNode().getAlias())) { result = cloneMNode(node); @@ -185,16 +185,16 @@ static ICacheMNode cloneMNode(ICacheMNode node) { measurementMNode.getAlias()); result.setOffset(measurementMNode.getOffset()); return result; - } else if (node.isDatabase() && node.isEntity()) { + } else if (node.isDatabase() && node.isDevice()) { CacheDatabaseDeviceMNode result = new CacheDatabaseDeviceMNode( null, node.getName(), node.getAsDatabaseMNode().getDataTTL()); - result.setAligned(node.getAsEntityMNode().isAligned()); + result.setAligned(node.getAsDeviceMNode().isAligned()); cloneInternalMNodeData(node, result); return result; - } else if (node.isEntity()) { + } else if (node.isDevice()) { CacheDeviceMNode result = new CacheDeviceMNode(null, node.getName()); - result.setAligned(node.getAsEntityMNode().isAligned()); + result.setAligned(node.getAsDeviceMNode().isAligned()); cloneInternalMNodeData(node, result); return result; } else if (node.isDatabase()) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java index 0192132530ed7..6fe899bdec3a2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java @@ -100,11 +100,11 @@ private static ByteBuffer internal2Buffer(ICacheMNode node) { int schemaTemplateIdWithState = MetadataConstant.NON_TEMPLATE; boolean isUseTemplate = false; - if (node.isEntity()) { + if (node.isDevice()) { nodeType = ENTITY_TYPE; - isAligned = node.getAsEntityMNode().isAligned(); - schemaTemplateIdWithState = node.getAsEntityMNode().getSchemaTemplateIdWithState(); - isUseTemplate = node.getAsEntityMNode().isUseTemplate(); + isAligned = node.getAsDeviceMNode().isAligned(); + schemaTemplateIdWithState = node.getAsDeviceMNode().getSchemaTemplateIdWithState(); + isUseTemplate = node.getAsDeviceMNode().isUseTemplate(); } ByteBuffer buffer = ByteBuffer.allocate(INTERNAL_NODE_LENGTH); @@ -197,9 +197,9 @@ public static ICacheMNode buffer2Node(String nodeName, ByteBuffer buffer) resNode = new CacheBasicMNode(null, nodeName); } else { resNode = new CacheDeviceMNode(null, nodeName); - resNode.getAsEntityMNode().setAligned(isAligned); - resNode.getAsEntityMNode().setUseTemplate(usingTemplate); - resNode.getAsEntityMNode().setSchemaTemplateId(templateId); + resNode.getAsDeviceMNode().setAligned(isAligned); + resNode.getAsDeviceMNode().setUseTemplate(usingTemplate); + resNode.getAsDeviceMNode().setSchemaTemplateId(templateId); } ICachedMNodeContainer.getCachedMNodeContainer(resNode).setSegmentAddress(segAddr); @@ -309,16 +309,16 @@ public static String buffer2String(ByteBuffer buffer) throws MetadataException { "compressor: %s]", node.getAsMeasurementMNode().getSchema().getCompressor().toString())); return builder.toString(); - } else if (node.isEntity()) { + } else if (node.isDevice()) { builder.append("entityNode, "); - if (node.getAsEntityMNode().isAligned()) { + if (node.getAsDeviceMNode().isAligned()) { builder.append("aligned, "); } else { builder.append("not aligned, "); } - if (node.getAsEntityMNode().isUseTemplate()) { + if (node.getAsDeviceMNode().isUseTemplate()) { builder.append("using template.]"); } else { builder.append("not using template.]"); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java index f31c4a793086a..77ffea6942ba6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java @@ -177,8 +177,8 @@ public ICacheMNode init() throws MetadataException { resNode = setNodeAddress( new CacheDatabaseDeviceMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), 0L); - resNode.getAsEntityMNode().setSchemaTemplateId(sgNodeTemplateIdWithState); - resNode.getAsEntityMNode().setUseTemplate(sgNodeTemplateIdWithState > -1); + resNode.getAsDeviceMNode().setSchemaTemplateId(sgNodeTemplateIdWithState); + resNode.getAsDeviceMNode().setUseTemplate(sgNodeTemplateIdWithState > -1); } else { resNode = setNodeAddress( @@ -191,9 +191,9 @@ public ICacheMNode init() throws MetadataException { @Override public boolean updateStorageGroupNode(IDatabaseMNode sgNode) throws IOException { this.dataTTL = sgNode.getDataTTL(); - this.isEntity = sgNode.isEntity(); - if (sgNode.isEntity()) { - this.sgNodeTemplateIdWithState = sgNode.getAsEntityMNode().getSchemaTemplateIdWithState(); + this.isEntity = sgNode.isDevice(); + if (sgNode.isDevice()) { + this.sgNodeTemplateIdWithState = sgNode.getAsDeviceMNode().getSchemaTemplateIdWithState(); } updateHeaderBuffer(); return true; @@ -214,7 +214,7 @@ public void writeMNode(ICacheMNode node) throws MetadataException, IOException { long curSegAddr = getNodeAddress(node); if (node.isDatabase()) { - isEntity = node.isEntity(); + isEntity = node.isDevice(); setNodeAddress(node, lastSGAddr); } else { if (curSegAddr < 0L) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java index 02084e53d9f21..803a4a2d883d2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java @@ -365,7 +365,7 @@ public ICacheMNode getChildNode(ICacheMNode parent, String childName) .getAsSegmentedPage() .read(getSegIndex(actualSegAddr), childName); - if (child == null && parent.isEntity()) { + if (child == null && parent.isDevice()) { // try read alias directly first child = getPageInstance(getPageIndex(actualSegAddr)) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java index ca94e0dc6fc1a..8ce0a94540107 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java @@ -204,7 +204,7 @@ public void writeNewChildren(ICacheMNode node) throws MetadataException, IOExcep multiPageInsertOverflowOperation(curPage, entry.getKey(), childBuffer); subIndex = subIndexRootPage(curSegAddr); - if (node.isEntity() && subIndex < 0) { + if (node.isDevice() && subIndex < 0) { // the record occurred overflow had been inserted already buildSubIndex(node); } else if (alias != null) { @@ -266,7 +266,7 @@ public void writeUpdatedChildren(ICacheMNode node) throws MetadataException, IOE } else { alias = null; } - if (node.isEntity()) { + if (node.isDevice()) { oldChild = curPage.getAsSegmentedPage().read(getSegIndex(actualAddress), entry.getKey()); oldAlias = oldChild.isMeasurement() ? oldChild.getAsMeasurementMNode().getAlias() : null; } else { @@ -312,7 +312,7 @@ public void writeUpdatedChildren(ICacheMNode node) throws MetadataException, IOE multiPageUpdateOverflowOperation(curPage, entry.getKey(), childBuffer); subIndex = subIndexRootPage(curSegAddr); - if (node.isEntity() && subIndex < 0) { + if (node.isDevice() && subIndex < 0) { buildSubIndex(node); } else if (insertNewSubEntry || removeOldSubEntry) { if (removeOldSubEntry) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java index 475f68a70066a..fd341a3c62ace 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java @@ -117,14 +117,14 @@ protected N getChild(N parent, String childName) throws MetadataException { } else { if (templateMap != null && !templateMap.isEmpty() // this task will cover some timeseries represented by template - && (parent.isEntity() - && parent.getAsEntityMNode().getSchemaTemplateId() + && (parent.isDevice() + && parent.getAsDeviceMNode().getSchemaTemplateId() != NON_TEMPLATE) // the device is using template && !(skipPreDeletedSchema && parent - .getAsEntityMNode() + .getAsDeviceMNode() .isPreDeactivateTemplate())) { // the template should not skip - int templateId = parent.getAsEntityMNode().getSchemaTemplateId(); + int templateId = parent.getAsDeviceMNode().getSchemaTemplateId(); Template template = templateMap.get(templateId); // if null, it means the template on this device is not covered in this query, refer to the // mpp analyzing stage diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java index c0715d6a6cfa8..7fab2244839c2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java @@ -45,8 +45,8 @@ public EntityTraverser(N startNode, PartialPath path, IMTreeStore store, bool @Override protected boolean acceptFullMatchedNode(N node) { - if (node.isEntity()) { - return !usingTemplate || schemaTemplateId == node.getAsEntityMNode().getSchemaTemplateId(); + if (node.isDevice()) { + return !usingTemplate || schemaTemplateId == node.getAsDeviceMNode().getSchemaTemplateId(); } return false; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java index a1874252d1657..96a956d188a02 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java @@ -37,7 +37,7 @@ protected EntityCollector( @Override protected R generateResult(N nextMatchedNode) { - return collectEntity(nextMatchedNode.getAsEntityMNode()); + return collectEntity(nextMatchedNode.getAsDeviceMNode()); } protected abstract R collectEntity(IDeviceMNode node); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java index e856aacee1902..d2b5e832f3266 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java @@ -59,7 +59,7 @@ protected MeasurementPath getCurrentMeasurementPathInTraverse(IMeasurementMNode< MeasurementPath retPath = new MeasurementPath( getPartialPathFromRootToNode(currentNode.getAsMNode()), currentNode.getSchema()); - retPath.setUnderAlignedEntity(par.getAsEntityMNode().isAligned()); + retPath.setUnderAlignedEntity(par.getAsDeviceMNode().isAligned()); return retPath; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java index 9cacedddfab82..a693c20b72905 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java @@ -44,7 +44,7 @@ public EntityUpdater(N startNode, PartialPath path, IMTreeStore store, boolea @Override protected Void generateResult(N nextMatchedNode) { try { - updateEntity(nextMatchedNode.getAsEntityMNode()); + updateEntity(nextMatchedNode.getAsDeviceMNode()); } catch (MetadataException e) { setFailure(e); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java index 8a2d3bc9d8c2b..b974d29b6e449 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java @@ -20,6 +20,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseInfo; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.DeviceInfo; public class DatabaseDeviceInfo extends DeviceInfo implements IDatabaseInfo { @@ -29,6 +30,10 @@ public class DatabaseDeviceInfo extends DeviceInfo implements IDatabaseInfo { */ private long dataTTL; + public void moveDataToNewMNode(IDatabaseMNode newMNode) { + newMNode.setDataTTL(dataTTL); + } + @Override public long getDataTTL() { return dataTTL; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java index 1057d253e808d..7a6b6d828ff0a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java @@ -107,7 +107,7 @@ public void replaceChild(String oldChildName, N newChildNode) { @Override public void moveDataToNewMNode(N newMNode) { - // TODO + basicMNode.moveDataToNewMNode(newMNode); } @Override @@ -131,7 +131,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return true; } @@ -151,7 +151,7 @@ public IDatabaseMNode getAsDatabaseMNode() { } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsDeviceMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java index d220d1246f624..14909b0080fc6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java @@ -20,7 +20,6 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; @@ -212,7 +211,7 @@ public synchronized void replaceChild(String oldChildName, ICacheMNode newChildN if (!oldChildName.equals(newChildNode.getName())) { throw new RuntimeException("New child's name must be the same as old child's name!"); } - IMNode oldChildNode = this.getChild(oldChildName); + ICacheMNode oldChildNode = this.getChild(oldChildName); if (oldChildNode == null) { return; } @@ -256,7 +255,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return false; } @@ -276,7 +275,7 @@ public IDatabaseMNode getAsDatabaseMNode() { } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsDeviceMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java index c884fa48fa61d..35443fe65445b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java @@ -250,7 +250,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return false; } @@ -270,7 +270,7 @@ public IDatabaseMNode getAsDatabaseMNode() { } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsDeviceMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java index 30404ae397272..b8b105b63b0f9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java @@ -110,16 +110,19 @@ public void replaceChild(String oldChildName, N newChildNode) { @Override public void moveDataToNewMNode(N newMNode) { - // TODO + basicMNode.moveDataToNewMNode(newMNode); + if (newMNode.isDatabase()) { + databaseInfo.moveDataToNewMNode(newMNode.getAsDatabaseMNode()); + } } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { return basicMNode.getChildren(); } @Override - public void setChildren(IMNodeContainer children) { + public void setChildren(IMNodeContainer children) { basicMNode.setChildren(children); } @@ -134,7 +137,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return false; } @@ -154,7 +157,7 @@ public IDatabaseMNode getAsDatabaseMNode() { } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsDeviceMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java index 35891495c08a2..8a18836a5944e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java @@ -28,6 +28,10 @@ public DatabaseInfo(String name) { this.schema = new TDatabaseSchema(name); } + public void moveDataToNewMNode(IDatabaseMNode newMNode) { + newMNode.setStorageGroupSchema(schema); + } + @Override public long getDataTTL() { return schema.getTTL(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java index 85d6ef441e0a3..3dd2545c2d0a6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java @@ -112,16 +112,22 @@ public void replaceChild(String oldChildName, N newChildNode) { @Override public void moveDataToNewMNode(N newMNode) { - // TODO + basicMNode.moveDataToNewMNode(newMNode); + if (newMNode.isDevice()) { + databaseDeviceInfo.moveDataToNewMNode(newMNode.getAsDeviceMNode()); + } + if (newMNode.isDatabase()) { + databaseDeviceInfo.moveDataToNewMNode(newMNode.getAsDatabaseMNode()); + } } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { return basicMNode.getChildren(); } @Override - public void setChildren(IMNodeContainer children) { + public void setChildren(IMNodeContainer children) { basicMNode.setChildren(children); } @@ -136,7 +142,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return true; } @@ -151,17 +157,17 @@ public MNodeType getMNodeType(Boolean isConfig) { } @Override - public IDatabaseMNode getAsDatabaseMNode() { + public IDatabaseMNode getAsDatabaseMNode() { return this; } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsDeviceMNode() { return this; } @Override - public IMeasurementMNode getAsMeasurementMNode() { + public IMeasurementMNode getAsMeasurementMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } @@ -208,12 +214,12 @@ public void deleteAliasChild(String alias) { } @Override - public Map getAliasChildren() { + public Map> getAliasChildren() { return databaseDeviceInfo.getAliasChildren(); } @Override - public void setAliasChildren(Map aliasChildren) { + public void setAliasChildren(Map> aliasChildren) { databaseDeviceInfo.setAliasChildren(aliasChildren); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java index 27ec99a316efc..e808bcf784492 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java @@ -31,7 +31,7 @@ public abstract class AbstractDeviceMNode, BasicNode extends IMNode> implements IDeviceMNode { - private final IDeviceInfo deviceInfo; + private final DeviceInfo deviceInfo; protected BasicNode basicMNode; /** Constructor of MNode. */ @@ -110,7 +110,10 @@ public void replaceChild(String oldChildName, N newChildNode) { @Override public void moveDataToNewMNode(N newMNode) { - // TODO + basicMNode.moveDataToNewMNode(newMNode); + if (newMNode.isDevice()) { + deviceInfo.moveDataToNewMNode(newMNode.getAsDeviceMNode()); + } } @Override @@ -134,7 +137,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return true; } @@ -154,7 +157,7 @@ public IDatabaseMNode getAsDatabaseMNode() { } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsDeviceMNode() { return this; } @@ -169,7 +172,7 @@ public R accept(MNodeVisitor visitor, C context) { } @Override - public boolean addAlias(String alias, IMeasurementMNode child) { + public boolean addAlias(String alias, IMeasurementMNode child) { return deviceInfo.addAlias(alias, child); } @@ -179,12 +182,12 @@ public void deleteAliasChild(String alias) { } @Override - public Map getAliasChildren() { + public Map> getAliasChildren() { return deviceInfo.getAliasChildren(); } @Override - public void setAliasChildren(Map aliasChildren) { + public void setAliasChildren(Map> aliasChildren) { deviceInfo.setAliasChildren(aliasChildren); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java index b4067eccf4a22..a2640589c64aa 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java @@ -44,13 +44,20 @@ public class DeviceInfo implements IDeviceInfo { *

      This will be a ConcurrentHashMap instance */ @SuppressWarnings("squid:S3077") - private transient volatile Map aliasChildren = null; + private transient volatile Map> aliasChildren = null; private volatile boolean isAligned = false; + public void moveDataToNewMNode(IDeviceMNode newMNode) { + newMNode.setSchemaTemplateId(schemaTemplateId); + newMNode.setUseTemplate(useTemplate); + newMNode.setAliasChildren(aliasChildren); + newMNode.setAligned(isAligned); + } + /** add an alias */ @Override - public boolean addAlias(String alias, IMeasurementMNode child) { + public boolean addAlias(String alias, IMeasurementMNode child) { if (aliasChildren == null) { // double check, alias children volatile synchronized (this) { @@ -72,7 +79,7 @@ public void deleteAliasChild(String alias) { } @Override - public Map getAliasChildren() { + public Map> getAliasChildren() { if (aliasChildren == null) { return Collections.emptyMap(); } @@ -80,7 +87,7 @@ public Map getAliasChildren() { } @Override - public void setAliasChildren(Map aliasChildren) { + public void setAliasChildren(Map> aliasChildren) { this.aliasChildren = aliasChildren; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java index 455f0588bcaae..5bf9559d09596 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java @@ -24,13 +24,13 @@ public interface IDeviceInfo { - boolean addAlias(String alias, IMeasurementMNode child); + boolean addAlias(String alias, IMeasurementMNode child); void deleteAliasChild(String alias); - Map getAliasChildren(); + Map> getAliasChildren(); - void setAliasChildren(Map aliasChildren); + void setAliasChildren(Map> aliasChildren); boolean isUseTemplate(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java index df0353577e188..f43a8c0500b9d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java @@ -80,7 +80,7 @@ public void setParent(N parent) { @Override public MeasurementPath getMeasurementPath() { MeasurementPath result = new MeasurementPath(getPartialPath(), getSchema()); - result.setUnderAlignedEntity(getParent().getAsEntityMNode().isAligned()); + result.setUnderAlignedEntity(getParent().getAsDeviceMNode().isAligned()); return result; } @@ -89,6 +89,11 @@ public IMeasurementSchema getSchema() { return measurementInfo.getSchema(); } + @Override + public void setSchema(IMeasurementSchema schema) { + measurementInfo.setSchema(schema); + } + @Override public TSDataType getDataType() { return measurementInfo.getDataType(); @@ -179,6 +184,9 @@ public void replaceChild(String oldChildName, N newChildNode) {} @Override public void moveDataToNewMNode(N newMNode) { basicMNode.moveDataToNewMNode(newMNode); + if (newMNode.isMeasurement()) { + measurementInfo.moveDataToNewMNode(newMNode.getAsMeasurementMNode()); + } } @Override @@ -197,7 +205,7 @@ public boolean isDatabase() { } @Override - public boolean isEntity() { + public boolean isDevice() { return false; } @@ -217,7 +225,7 @@ public IDatabaseMNode getAsDatabaseMNode() { } @Override - public IDeviceMNode getAsEntityMNode() { + public IDeviceMNode getAsDeviceMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java index 01e606296070b..d7741411bea55 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java @@ -25,6 +25,8 @@ public interface IMeasurementInfo { IMeasurementSchema getSchema(); + void setSchema(IMeasurementSchema schema); + TSDataType getDataType(); String getAlias(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java index bdba108a3efb4..04d4903486fbb 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java @@ -28,7 +28,7 @@ public class MeasurementInfo implements IMeasurementInfo { /** tag/attribute's start offset in tag file */ private long offset = -1; /** measurement's Schema for one timeseries represented by current leaf node */ - private final IMeasurementSchema schema; + private IMeasurementSchema schema; /** whether this measurement is pre deleted and considered in black list */ private boolean preDeleted = false; @@ -37,11 +37,23 @@ public MeasurementInfo(IMeasurementSchema schema, String alias) { this.alias = alias; } + public void moveDataToNewMNode(IMeasurementMNode newMNode) { + newMNode.setSchema(schema); + newMNode.setAlias(alias); + newMNode.setOffset(offset); + newMNode.setPreDeleted(preDeleted); + } + @Override public IMeasurementSchema getSchema() { return schema; } + @Override + public void setSchema(IMeasurementSchema schema) { + this.schema = schema; + } + @Override public TSDataType getDataType() { return schema.getType(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java index 9e6ffa22a5b97..a7f67b7598a2d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java @@ -871,7 +871,7 @@ private void changeOffset(PartialPath path, long offset) throws MetadataExceptio private void changeAlias(PartialPath path, String alias) throws MetadataException { IMeasurementMNode leafMNode = mtree.getMeasurementMNode(path); - IDeviceMNode device = leafMNode.getParent().getAsEntityMNode(); + IDeviceMNode device = leafMNode.getParent().getAsDeviceMNode(); if (leafMNode.getAlias() != null) { device.deleteAliasChild(leafMNode.getAlias()); } @@ -931,7 +931,7 @@ private void upsertAlias( throws MetadataException, IOException { // upsert alias if (alias != null && !alias.equals(leafMNode.getAlias())) { - IDeviceMNode deviceMNode = leafMNode.getParent().getAsEntityMNode(); + IDeviceMNode deviceMNode = leafMNode.getParent().getAsDeviceMNode(); if (!deviceMNode.addAlias(alias, leafMNode)) { throw new MetadataException("The alias already exists."); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java index 51bb497facb08..261dde53af50a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java @@ -984,7 +984,7 @@ private void changeOffset(PartialPath path, long offset) throws MetadataExceptio private void changeAlias(PartialPath path, String alias) throws MetadataException { IMeasurementMNode leafMNode = mtree.getMeasurementMNode(path); try { - IDeviceMNode device = leafMNode.getParent().getAsEntityMNode(); + IDeviceMNode device = leafMNode.getParent().getAsDeviceMNode(); if (leafMNode.getAlias() != null) { device.deleteAliasChild(leafMNode.getAlias()); } @@ -1052,7 +1052,7 @@ private void upsertAlias( throws MetadataException, IOException { // upsert alias if (alias != null && !alias.equals(leafMNode.getAlias())) { - IDeviceMNode device = leafMNode.getParent().getAsEntityMNode(); + IDeviceMNode device = leafMNode.getParent().getAsDeviceMNode(); if (!device.addAlias(alias, leafMNode)) { throw new MetadataException("The alias already exists."); } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java index dfe2b9dbc7171..aa210e4840b47 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java @@ -112,7 +112,7 @@ private IMNode virtualFlatMTree(int childSize) { IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); IMeasurementMNode mNode = MeasurementMNode.getMeasurementMNode( - internalNode.getAsEntityMNode(), measurementId, schema, measurementId + "als"); + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); internalNode.addChild(mNode); } return internalNode; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java index 612b0ea7dafbc..77ea78ea830ed 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java @@ -109,7 +109,7 @@ private IMNode virtualFlatMTree(int childSize) { IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); IMeasurementMNode mNode = MeasurementMNode.getMeasurementMNode( - internalNode.getAsEntityMNode(), measurementId, schema, measurementId + "als"); + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); internalNode.addChild(mNode); } return internalNode; @@ -242,7 +242,7 @@ private IMNode getMeasurementNode(IMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); IMeasurementMNode mNode = MeasurementMNode.getMeasurementMNode( - par != null ? par.getAsEntityMNode() : null, name, schema, alias); + par != null ? par.getAsDeviceMNode() : null, name, schema, alias); return mNode; } } diff --git a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java index f6d36f48cd28e..c8d8fda4b6ed2 100644 --- a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java +++ b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java @@ -154,7 +154,7 @@ private IMNode getFlatTree(int flatSize, String id) { IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); IMeasurementMNode mNode = MeasurementMNode.getMeasurementMNode( - internalNode.getAsEntityMNode(), measurementId, schema, measurementId + "als"); + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); internalNode.addChild(mNode); } From 0f3dca2df6250923e3d4155eedfc5057279de755 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Tue, 7 Mar 2023 12:16:14 +0800 Subject: [PATCH 08/26] save --- .../iterator/MemoryTraverserIterator.java | 11 +- .../iotdb/db/metadata/mtree/ConfigMTree.java | 6 +- .../mtree/store/ConfigMTreeStore.java | 11 +- .../metadata/mtree/store/MemMTreeStore.java | 2 +- .../store/disk/cache/LRUCacheManager.java | 24 +- .../store/disk/cache/PlainCacheManager.java | 10 +- .../newnode/factory/CacheMNodeFactory.java | 18 +- .../newnode/factory/ConfigMNodeFactory.java | 60 ++++ .../iotdb/db/metadata/tag/TagManager.java | 51 ++-- .../db/metadata/mtree/ConfigMTreeTest.java | 4 +- .../db/metadata/mtree/MTreeBelowSGTest.java | 262 ------------------ .../mtree/multimode/MTreeDiskModeTest.java | 42 --- .../mtree/multimode/MTreeFullMemoryTest.java | 28 -- .../mtree/multimode/MTreeMemoryModeTest.java | 35 --- .../mtree/multimode/MTreeNonMemoryTest.java | 28 -- .../multimode/MTreePartialMemoryTest.java | 28 -- .../mtree/schemafile/SchemaFileTest.java | 3 +- .../mtree/schemafile/WrappedSegmentTest.java | 42 ++- 18 files changed, 157 insertions(+), 508 deletions(-) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java delete mode 100644 server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java delete mode 100644 server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeDiskModeTest.java delete mode 100644 server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeFullMemoryTest.java delete mode 100644 server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeMemoryModeTest.java delete mode 100644 server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeNonMemoryTest.java delete mode 100644 server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreePartialMemoryTest.java diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java index b6f36171f804c..aa54adc0ccc0b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java @@ -19,20 +19,21 @@ package org.apache.iotdb.db.metadata.mnode.iterator; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; import java.util.Map; -public class MemoryTraverserIterator extends AbstractTraverserIterator { +// only use for IConfigMNode and IMemMNode +public class MemoryTraverserIterator> extends AbstractTraverserIterator { public MemoryTraverserIterator( - IMTreeStore store, - IDeviceMNode parent, + IMTreeStore store, + IDeviceMNode parent, Map templateMap, - IMNodeFactory nodeFactory) + IMNodeFactory nodeFactory) throws MetadataException { super(store, parent, templateMap, nodeFactory); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java index 4155e6e512b21..8744dcd83d85f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java @@ -38,6 +38,8 @@ import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; import org.apache.iotdb.db.metadata.newnode.database.ConfigDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.factory.ConfigMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; import org.apache.iotdb.tsfile.utils.Pair; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; @@ -78,8 +80,10 @@ public class ConfigMTree { // this store is only used for traverser invoking private final ConfigMTreeStore store; + private final IMNodeFactory nodeFactory = new ConfigMNodeFactory(); + public ConfigMTree() throws MetadataException { - store = new ConfigMTreeStore(); + store = new ConfigMTreeStore(nodeFactory); root = store.getRoot(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java index 0c14bfd2a8e04..2bab3279bd525 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java @@ -28,6 +28,7 @@ import org.apache.iotdb.db.metadata.newnode.IConfigMNode; import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.template.Template; @@ -38,10 +39,12 @@ public class ConfigMTreeStore implements IMTreeStore { private IConfigMNode root; + private final IMNodeFactory nodeFactory; // Only used for ConfigMTree - public ConfigMTreeStore() { - this.root = new ConfigBasicMNode(null, IoTDBConstant.PATH_ROOT); + public ConfigMTreeStore(IMNodeFactory nodeFactory) { + this.root = nodeFactory.createBasicMNode(null, IoTDBConstant.PATH_ROOT); + this.nodeFactory = nodeFactory; } @Override @@ -74,8 +77,8 @@ public IMNodeIterator getTraverserIterator( IConfigMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { if (parent.isDevice()) { - AbstractTraverserIterator iterator = - new MemoryTraverserIterator(this, parent.getAsDeviceMNode(), templateMap); + AbstractTraverserIterator iterator = + new MemoryTraverserIterator<>(this, parent.getAsDeviceMNode(), templateMap, nodeFactory); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; } else { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index 2309fbe12f8cf..075930b571d15 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -120,7 +120,7 @@ public IMNodeIterator getTraverserIterator( throws MetadataException { if (parent.isDevice()) { AbstractTraverserIterator iterator = - new MemoryTraverserIterator(this, parent.getAsDeviceMNode(), templateMap, nodeFactory); + new MemoryTraverserIterator<>(this, parent.getAsDeviceMNode(), templateMap, nodeFactory); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; } else { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java index ae21c836c70cb..135a64dabefe1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java @@ -18,8 +18,8 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk.cache; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Lock; @@ -47,12 +47,12 @@ public void updateCacheStatusAfterAccess(CacheEntry cacheEntry) { // MNode update operation like node replace may reset the mapping between cacheEntry and node, // thus it should be updated @Override - protected void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, IMNode node) { + protected void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, ICacheMNode node) { getAsLRUCacheEntry(cacheEntry).setNode(node); } @Override - protected void initCacheEntryForNode(IMNode node) { + protected void initCacheEntryForNode(ICacheMNode node) { LRUCacheEntry cacheEntry = new LRUCacheEntry(node); node.setCacheEntry(cacheEntry); } @@ -64,7 +64,7 @@ protected boolean isInNodeCache(CacheEntry cacheEntry) { } @Override - protected void addToNodeCache(CacheEntry cacheEntry, IMNode node) { + protected void addToNodeCache(CacheEntry cacheEntry, ICacheMNode node) { LRUCacheEntry lruCacheEntry = getAsLRUCacheEntry(cacheEntry); getTargetCacheList(lruCacheEntry).addToCacheList(lruCacheEntry, node); } @@ -76,8 +76,8 @@ protected void removeFromNodeCache(CacheEntry cacheEntry) { } @Override - protected IMNode getPotentialNodeTobeEvicted() { - IMNode result = null; + protected ICacheMNode getPotentialNodeTobeEvicted() { + ICacheMNode result = null; for (LRUCacheList cacheList : lruCacheLists) { result = cacheList.getPotentialNodeTobeEvicted(); if (result != null) { @@ -120,21 +120,21 @@ private static class LRUCacheEntry extends CacheEntry { // although the node instance may be replaced, the name and full path of the node won't be // changed, which means the cacheEntry always map to only one logic node - protected volatile IMNode node; + protected volatile ICacheMNode node; private volatile LRUCacheEntry pre = null; private volatile LRUCacheEntry next = null; - public LRUCacheEntry(IMNode node) { + public LRUCacheEntry(ICacheMNode node) { this.node = node; } - public IMNode getNode() { + public ICacheMNode getNode() { return node; } - public void setNode(IMNode node) { + public void setNode(ICacheMNode node) { this.node = node; } @@ -181,7 +181,7 @@ private void updateCacheStatusAfterAccess(LRUCacheEntry lruCacheEntry) { } } - private void addToCacheList(LRUCacheEntry lruCacheEntry, IMNode node) { + private void addToCacheList(LRUCacheEntry lruCacheEntry, ICacheMNode node) { lock.lock(); try { lruCacheEntry.setNode(node); @@ -202,7 +202,7 @@ private void removeFromCacheList(LRUCacheEntry lruCacheEntry) { } } - private IMNode getPotentialNodeTobeEvicted() { + private ICacheMNode getPotentialNodeTobeEvicted() { lock.lock(); try { LRUCacheEntry target = last; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java index 33cd944aa979a..8e8beb6472e42 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java @@ -18,8 +18,8 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk.cache; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -29,7 +29,7 @@ public class PlainCacheManager extends CacheManager { // The nodes in nodeCache are all evictable if not pinned and may be selected to be evicted during // cache // eviction. - private volatile Map nodeCache = new ConcurrentHashMap<>(); + private volatile Map nodeCache = new ConcurrentHashMap<>(); public PlainCacheManager(MemManager memManager) { super(memManager); @@ -41,7 +41,7 @@ protected void updateCacheStatusAfterAccess(CacheEntry cacheEntry) {} // MNode update operation like node replace may reset the mapping between cacheEntry and node, // thus it should be updated @Override - protected void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, IMNode node) { + protected void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, ICacheMNode node) { nodeCache.replace(cacheEntry, node); } @@ -51,7 +51,7 @@ protected boolean isInNodeCache(CacheEntry cacheEntry) { } @Override - protected void addToNodeCache(CacheEntry cacheEntry, IMNode node) { + protected void addToNodeCache(CacheEntry cacheEntry, ICacheMNode node) { nodeCache.put(cacheEntry, node); } @@ -61,7 +61,7 @@ protected void removeFromNodeCache(CacheEntry cacheEntry) { } @Override - protected IMNode getPotentialNodeTobeEvicted() { + protected ICacheMNode getPotentialNodeTobeEvicted() { for (CacheEntry cacheEntry : nodeCache.keySet()) { if (!cacheEntry.isPinned()) { return nodeCache.get(cacheEntry); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java index de9cbd2128dea..0ef00b292f7fe 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java @@ -19,8 +19,14 @@ package org.apache.iotdb.db.metadata.newnode.factory; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.abovedatabase.CacheAboveDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.database.CacheDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; @@ -28,31 +34,31 @@ public class CacheMNodeFactory implements IMNodeFactory { @Override public IMeasurementMNode createMeasurementMNode( ICacheMNode parent, String name, IMeasurementSchema schema, String alias) { - return null; + return new CacheMeasurementMNode(parent, name, schema, alias); } @Override public IDeviceMNode createDeviceMNode(ICacheMNode parent, String name) { - return null; + return new CacheDeviceMNode(parent, name); } @Override public IDatabaseMNode createDatabaseMNode(ICacheMNode parent, String name) { - return null; + return new CacheDatabaseMNode(parent, name); } @Override public ICacheMNode createDatabaseDeviceMNode(ICacheMNode parent, String name, long dataTTL) { - return null; + return new CacheDatabaseDeviceMNode(parent, name, dataTTL); } @Override public ICacheMNode createAboveDatabaseMNode(ICacheMNode parent, String name) { - return null; + return new CacheAboveDatabaseMNode(parent, name); } @Override public ICacheMNode createBasicMNode(ICacheMNode parent, String name) { - return null; + return new CacheBasicMNode(parent, name); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java new file mode 100644 index 0000000000000..77ee594802fe8 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java @@ -0,0 +1,60 @@ +/* + * 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.metadata.newnode.factory; + +import org.apache.iotdb.db.metadata.newnode.IConfigMNode; +import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; +import org.apache.iotdb.db.metadata.newnode.database.ConfigDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +public class ConfigMNodeFactory implements IMNodeFactory { + @Override + public IMeasurementMNode createMeasurementMNode( + IConfigMNode parent, String name, IMeasurementSchema schema, String alias) { + throw new UnsupportedOperationException(); + } + + @Override + public IDeviceMNode createDeviceMNode(IConfigMNode parent, String name) { + throw new UnsupportedOperationException(); + } + + @Override + public IDatabaseMNode createDatabaseMNode(IConfigMNode parent, String name) { + return new ConfigDatabaseMNode(parent, name); + } + + @Override + public IConfigMNode createDatabaseDeviceMNode(IConfigMNode parent, String name, long dataTTL) { + throw new UnsupportedOperationException(); + } + + @Override + public IConfigMNode createAboveDatabaseMNode(IConfigMNode parent, String name) { + throw new UnsupportedOperationException(); + } + + @Override + public IConfigMNode createBasicMNode(IConfigMNode parent, String name) { + return new ConfigBasicMNode(parent, name); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java index 44e86ea06d113..51ba5a1ec57a6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java @@ -68,7 +68,7 @@ public class TagManager { private String sgSchemaDirPath; private TagLogFile tagLogFile; // tag key -> tag value -> LeafMNode - private Map>> tagIndex = new ConcurrentHashMap<>(); + private Map>>> tagIndex = new ConcurrentHashMap<>(); public TagManager(String sgSchemaDirPath) throws IOException { this.sgSchemaDirPath = sgSchemaDirPath; @@ -125,7 +125,8 @@ public static TagManager loadFromSnapshot(File snapshotDir, String sgSchemaDirPa } } - public boolean recoverIndex(long offset, IMeasurementMNode measurementMNode) throws IOException { + public boolean recoverIndex(long offset, IMeasurementMNode measurementMNode) + throws IOException { Map tags = tagLogFile.readTag(config.getTagAttributeTotalSize(), offset); if (tags == null || tags.isEmpty()) { return false; @@ -135,7 +136,7 @@ public boolean recoverIndex(long offset, IMeasurementMNode measurementMNode) thr } } - public void addIndex(String tagKey, String tagValue, IMeasurementMNode measurementMNode) { + public void addIndex(String tagKey, String tagValue, IMeasurementMNode measurementMNode) { if (tagKey == null || tagValue == null || measurementMNode == null) { return; } @@ -145,7 +146,7 @@ public void addIndex(String tagKey, String tagValue, IMeasurementMNode measureme .add(measurementMNode); } - public void addIndex(Map tagsMap, IMeasurementMNode measurementMNode) { + public void addIndex(Map tagsMap, IMeasurementMNode measurementMNode) { if (tagsMap != null && measurementMNode != null) { for (Map.Entry entry : tagsMap.entrySet()) { addIndex(entry.getKey(), entry.getValue(), measurementMNode); @@ -153,25 +154,25 @@ public void addIndex(Map tagsMap, IMeasurementMNode measurementM } } - public void removeIndex(String tagKey, String tagValue, IMeasurementMNode measurementMNode) { + public void removeIndex(String tagKey, String tagValue, IMeasurementMNode measurementMNode) { tagIndex.get(tagKey).get(tagValue).remove(measurementMNode); if (tagIndex.get(tagKey).get(tagValue).isEmpty()) { tagIndex.get(tagKey).remove(tagValue); } } - private List getMatchedTimeseriesInIndex(IShowTimeSeriesPlan plan) { + private List> getMatchedTimeseriesInIndex(IShowTimeSeriesPlan plan) { if (!tagIndex.containsKey(plan.getKey())) { return Collections.emptyList(); } - Map> value2Node = tagIndex.get(plan.getKey()); + Map>> value2Node = tagIndex.get(plan.getKey()); if (value2Node.isEmpty()) { return Collections.emptyList(); } - List allMatchedNodes = new ArrayList<>(); + List> allMatchedNodes = new ArrayList<>(); if (plan.isContains()) { - for (Map.Entry> entry : value2Node.entrySet()) { + for (Map.Entry>> entry : value2Node.entrySet()) { if (entry.getKey() == null || entry.getValue() == null) { continue; } @@ -181,7 +182,7 @@ private List getMatchedTimeseriesInIndex(IShowTimeSeriesPlan } } } else { - for (Map.Entry> entry : value2Node.entrySet()) { + for (Map.Entry>> entry : value2Node.entrySet()) { if (entry.getKey() == null || entry.getValue() == null) { continue; } @@ -202,7 +203,7 @@ private List getMatchedTimeseriesInIndex(IShowTimeSeriesPlan public ISchemaReader getTimeSeriesReaderWithIndex( IShowTimeSeriesPlan plan) { - Iterator allMatchedNodes = getMatchedTimeseriesInIndex(plan).iterator(); + Iterator> allMatchedNodes = getMatchedTimeseriesInIndex(plan).iterator(); PartialPath pathPattern = plan.getPath(); int curOffset = 0; int count = 0; @@ -210,7 +211,7 @@ public ISchemaReader getTimeSeriesReaderWithIndex( long offset = plan.getOffset(); boolean hasLimit = limit > 0 || offset > 0; while (curOffset < offset && allMatchedNodes.hasNext()) { - IMeasurementMNode node = allMatchedNodes.next(); + IMeasurementMNode node = allMatchedNodes.next(); if (plan.isPrefixMatch() ? pathPattern.prefixMatchFullPath(node.getPartialPath()) : pathPattern.matchFullPath(node.getPartialPath())) { @@ -263,7 +264,7 @@ public ITimeSeriesSchemaInfo next() { private void getNext() throws IOException { nextMatched = null; while (allMatchedNodes.hasNext()) { - IMeasurementMNode node = allMatchedNodes.next(); + IMeasurementMNode node = allMatchedNodes.next(); if (plan.isPrefixMatch() ? pathPattern.prefixMatchFullPath(node.getPartialPath()) : pathPattern.matchFullPath(node.getPartialPath())) { @@ -276,7 +277,7 @@ private void getNext() throws IOException { (MeasurementSchema) node.getSchema(), tagAndAttributePair.left, tagAndAttributePair.right, - node.getParent().isAligned()); + node.getParent().getAsDeviceMNode().isAligned()); break; } } @@ -285,7 +286,7 @@ private void getNext() throws IOException { } /** remove the node from the tag inverted index */ - public void removeFromTagInvertedIndex(IMeasurementMNode node) throws IOException { + public void removeFromTagInvertedIndex(IMeasurementMNode node) throws IOException { if (node.getOffset() < 0) { return; } @@ -330,7 +331,9 @@ public void removeFromTagInvertedIndex(IMeasurementMNode node) throws IOExceptio * new value to update it. */ public void updateTagsAndAttributes( - Map tagsMap, Map attributesMap, IMeasurementMNode leafMNode) + Map tagsMap, + Map attributesMap, + IMeasurementMNode leafMNode) throws MetadataException, IOException { Pair, Map> pair = @@ -394,7 +397,7 @@ public void updateTagsAndAttributes( * @throws MetadataException tagLogFile write error or attributes already exist */ public void addAttributes( - Map attributesMap, PartialPath fullPath, IMeasurementMNode leafMNode) + Map attributesMap, PartialPath fullPath, IMeasurementMNode leafMNode) throws MetadataException, IOException { Pair, Map> pair = @@ -422,7 +425,7 @@ public void addAttributes( * @throws MetadataException tagLogFile write error or tag already exists */ public void addTags( - Map tagsMap, PartialPath fullPath, IMeasurementMNode leafMNode) + Map tagsMap, PartialPath fullPath, IMeasurementMNode leafMNode) throws MetadataException, IOException { Pair, Map> pair = @@ -452,7 +455,7 @@ public void addTags( * @param keySet tags key or attributes key */ public void dropTagsOrAttributes( - Set keySet, PartialPath fullPath, IMeasurementMNode leafMNode) + Set keySet, PartialPath fullPath, IMeasurementMNode leafMNode) throws MetadataException, IOException { Pair, Map> pair = tagLogFile.read(config.getTagAttributeTotalSize(), leafMNode.getOffset()); @@ -475,8 +478,8 @@ public void dropTagsOrAttributes( // persist the change to disk tagLogFile.write(pair.left, pair.right, leafMNode.getOffset()); - Map> tagVal2LeafMNodeSet; - Set MMNodes; + Map>> tagVal2LeafMNodeSet; + Set> MMNodes; for (Map.Entry entry : deleteTag.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); @@ -523,7 +526,7 @@ public void dropTagsOrAttributes( * @throws MetadataException tagLogFile write error or tags/attributes do not exist */ public void setTagsOrAttributesValue( - Map alterMap, PartialPath fullPath, IMeasurementMNode leafMNode) + Map alterMap, PartialPath fullPath, IMeasurementMNode leafMNode) throws MetadataException, IOException { // tags, attributes Pair, Map> pair = @@ -593,7 +596,7 @@ public void setTagsOrAttributesValue( * a tag/attribute named newKey */ public void renameTagOrAttributeKey( - String oldKey, String newKey, PartialPath fullPath, IMeasurementMNode leafMNode) + String oldKey, String newKey, PartialPath fullPath, IMeasurementMNode leafMNode) throws MetadataException, IOException { // tags, attributes Pair, Map> pair = @@ -669,7 +672,7 @@ public Pair, Map> readTagFile(long tagFileOf * @return the tag key-value map. * @throws RuntimeException If any IOException happens. */ - public Map readTags(IMeasurementMNode node) { + public Map readTags(IMeasurementMNode node) { try { return readTagFile(node.getOffset()).getLeft(); } catch (IOException e) { diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java index 991e1e3897ea5..bc37061182163 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.IConfigMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.utils.Pair; @@ -296,7 +296,7 @@ public void testSetTemplate() throws MetadataException { fail(); } - IMNode node = root.getNodeWithAutoCreate(path); + IConfigMNode node = root.getNodeWithAutoCreate(path); node.setSchemaTemplateId(0); try { diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java deleted file mode 100644 index 706fe2a424231..0000000000000 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java +++ /dev/null @@ -1,262 +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.metadata.mtree; - -import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException; -import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; -import org.apache.iotdb.db.metadata.rescon.CachedSchemaEngineStatistics; -import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; -import org.apache.iotdb.db.metadata.rescon.MemSchemaEngineStatistics; -import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; -import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; -import org.apache.iotdb.db.utils.EnvironmentUtils; -import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; -import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; -import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; - -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -public abstract class MTreeBelowSGTest { - - ConfigMTree root; - IMTreeBelowSG storageGroup; - - Set usedMTree = new HashSet<>(); - - protected abstract void setConfig(); - - protected abstract void rollBackConfig(); - - @Before - public void setUp() throws Exception { - setConfig(); - EnvironmentUtils.envSetUp(); - root = new ConfigMTree(); - } - - @After - public void tearDown() throws Exception { - CacheMemoryManager.getInstance().clear(); - root.clear(); - root = null; - for (IMTreeBelowSG mtree : usedMTree) { - mtree.clear(); - } - usedMTree.clear(); - storageGroup = null; - EnvironmentUtils.cleanEnv(); - rollBackConfig(); - } - - private IMTreeBelowSG getStorageGroup(PartialPath path) throws MetadataException { - try { - root.setStorageGroup(path); - IMTreeBelowSG mtree; - if (SchemaEngineMode.valueOf(IoTDBDescriptor.getInstance().getConfig().getSchemaEngineMode()) - .equals(SchemaEngineMode.Schema_File)) { - mtree = - new MTreeBelowSGCachedImpl( - path, - null, - () -> { - // do nothing - }, - node -> { - // do nothing - }, - 0, - new CachedSchemaRegionStatistics(0, new CachedSchemaEngineStatistics()), - new CacheMNodeFactory()); - } else { - mtree = - new MTreeBelowSGMemoryImpl( - path, - null, - new MemSchemaRegionStatistics(0, new MemSchemaEngineStatistics()), - new MemMNodeFactory()); - } - usedMTree.add(mtree); - return mtree; - } catch (IOException e) { - throw new MetadataException(e); - } - } - - @Test - public void testAddLeftNodePathWithAlias() throws MetadataException { - storageGroup = getStorageGroup(new PartialPath("root.laptop")); - try { - storageGroup.createTimeseries( - new PartialPath("root.laptop.d1.s1"), - TSDataType.INT32, - TSEncoding.RLE, - TSFileDescriptor.getInstance().getConfig().getCompressor(), - Collections.emptyMap(), - "status"); - } catch (MetadataException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - try { - storageGroup.createTimeseries( - new PartialPath("root.laptop.d1.s2"), - TSDataType.INT32, - TSEncoding.RLE, - TSFileDescriptor.getInstance().getConfig().getCompressor(), - Collections.emptyMap(), - "status"); - } catch (MetadataException e) { - assertTrue(e instanceof AliasAlreadyExistException); - } - } - - @Test - public void testSetStorageGroup() throws MetadataException { - try { - storageGroup = getStorageGroup(new PartialPath("root.laptop.d1")); - assertTrue(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1"))); - - } catch (MetadataException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - try { - root.setStorageGroup(new PartialPath("root.laptop")); - } catch (MetadataException e) { - Assert.assertEquals( - "some children of root.laptop have already been created as database", e.getMessage()); - } - - try { - storageGroup.createTimeseries( - new PartialPath("root.laptop.d1.s0"), - TSDataType.INT32, - TSEncoding.RLE, - TSFileDescriptor.getInstance().getConfig().getCompressor(), - Collections.emptyMap(), - null); - storageGroup.createTimeseries( - new PartialPath("root.laptop.d1.s1"), - TSDataType.INT32, - TSEncoding.RLE, - TSFileDescriptor.getInstance().getConfig().getCompressor(), - Collections.emptyMap(), - null); - } catch (MetadataException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - try { - storageGroup.deleteTimeseries(new PartialPath("root.laptop.d1.s0")); - } catch (MetadataException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - - try { - root.deleteStorageGroup(new PartialPath("root.laptop.d1")); - } catch (MetadataException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - assertFalse(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1.s1"))); - assertFalse(root.isDatabaseAlreadySet(new PartialPath("root.laptop.d1"))); - assertFalse(root.isDatabaseAlreadySet(new PartialPath("root.laptop"))); - } - - @Test - public void testSearchStorageGroup() throws MetadataException { - String path1 = "root"; - String sgPath1 = "root.vehicle"; - storageGroup = getStorageGroup(new PartialPath(sgPath1)); - assertTrue(root.isDatabaseAlreadySet(new PartialPath(path1))); - try { - storageGroup.createTimeseries( - new PartialPath("root.vehicle.d1.s1"), - TSDataType.INT32, - TSEncoding.RLE, - TSFileDescriptor.getInstance().getConfig().getCompressor(), - Collections.emptyMap(), - null); - storageGroup.createTimeseries( - new PartialPath("root.vehicle.d1.s2"), - TSDataType.INT32, - TSEncoding.RLE, - TSFileDescriptor.getInstance().getConfig().getCompressor(), - Collections.emptyMap(), - null); - } catch (MetadataException e1) { - fail(e1.getMessage()); - } - - assertEquals( - root.getBelongedStorageGroups(new PartialPath("root.vehicle.d1.s1")), - Collections.singletonList(new PartialPath(sgPath1))); - } - - @Test - public void testCreateTimeseries() throws MetadataException { - String sgPath = "root.sg1"; - storageGroup = getStorageGroup(new PartialPath(sgPath)); - - storageGroup.createTimeseries( - new PartialPath("root.sg1.a.b.c"), - TSDataType.INT32, - TSEncoding.RLE, - TSFileDescriptor.getInstance().getConfig().getCompressor(), - Collections.emptyMap(), - null); - - try { - // mtree doesn't support nested timeseries which means MeasurementMNode is leaf of the tree. - storageGroup.createTimeseries( - new PartialPath("root.sg1.a.b"), - TSDataType.INT32, - TSEncoding.RLE, - TSFileDescriptor.getInstance().getConfig().getCompressor(), - Collections.emptyMap(), - null); - } catch (PathAlreadyExistException e) { - assertEquals("Path [root.sg1.a.b] already exist", e.getMessage()); - } - - IMNode node = storageGroup.getNodeByPath(new PartialPath("root.sg1.a.b")); - assertFalse(node instanceof MeasurementMNode); - } -} diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeDiskModeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeDiskModeTest.java deleted file mode 100644 index 7629d8de12440..0000000000000 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeDiskModeTest.java +++ /dev/null @@ -1,42 +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.metadata.mtree.multimode; - -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGTest; -import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; - -public abstract class MTreeDiskModeTest extends MTreeBelowSGTest { - @Override - protected void setConfig() { - IoTDBDescriptor.getInstance() - .getConfig() - .setSchemaEngineMode(SchemaEngineMode.Schema_File.toString()); - setMemSize(); - } - - @Override - protected void rollBackConfig() { - IoTDBDescriptor.getInstance() - .getConfig() - .setSchemaEngineMode(SchemaEngineMode.Memory.toString()); - } - - protected abstract void setMemSize(); -} diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeFullMemoryTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeFullMemoryTest.java deleted file mode 100644 index e7f58836bc3cc..0000000000000 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeFullMemoryTest.java +++ /dev/null @@ -1,28 +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.metadata.mtree.multimode; - -import org.apache.iotdb.db.conf.IoTDBDescriptor; - -public class MTreeFullMemoryTest extends MTreeDiskModeTest { - @Override - protected void setMemSize() { - IoTDBDescriptor.getInstance().getConfig().setCachedMNodeSizeInSchemaFileMode(10000); - } -} diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeMemoryModeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeMemoryModeTest.java deleted file mode 100644 index 0156e6c6f0eb5..0000000000000 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeMemoryModeTest.java +++ /dev/null @@ -1,35 +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.metadata.mtree.multimode; - -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGTest; -import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; - -public class MTreeMemoryModeTest extends MTreeBelowSGTest { - @Override - protected void setConfig() { - IoTDBDescriptor.getInstance() - .getConfig() - .setSchemaEngineMode(SchemaEngineMode.Memory.toString()); - } - - @Override - protected void rollBackConfig() {} -} diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeNonMemoryTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeNonMemoryTest.java deleted file mode 100644 index 2de16968af571..0000000000000 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreeNonMemoryTest.java +++ /dev/null @@ -1,28 +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.metadata.mtree.multimode; - -import org.apache.iotdb.db.conf.IoTDBDescriptor; - -public class MTreeNonMemoryTest extends MTreeDiskModeTest { - @Override - protected void setMemSize() { - IoTDBDescriptor.getInstance().getConfig().setCachedMNodeSizeInSchemaFileMode(0); - } -} diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreePartialMemoryTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreePartialMemoryTest.java deleted file mode 100644 index d15840c280506..0000000000000 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/multimode/MTreePartialMemoryTest.java +++ /dev/null @@ -1,28 +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.metadata.mtree.multimode; - -import org.apache.iotdb.db.conf.IoTDBDescriptor; - -public class MTreePartialMemoryTest extends MTreeDiskModeTest { - @Override - protected void setMemSize() { - IoTDBDescriptor.getInstance().getConfig().setCachedMNodeSizeInSchemaFileMode(3); - } -} diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java index 2d92347f37293..7edd715e70555 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java @@ -35,6 +35,7 @@ import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; @@ -835,7 +836,7 @@ public void basicSplitTest() throws MetadataException, IOException { } ICacheMNode d010 = sgNode.getChildren().get("d_010"); - d010 = MNodeUtils.setToEntity(d010); + d010 = MNodeUtils.setToEntity(d010, new CacheMNodeFactory()).getAsMNode(); ICacheMNode ano = getMeasurementNode(d010, "splitover", "aliaslasialsai"); d010.addChild(ano); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java index 77ea78ea830ed..2e93be68b0bfc 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java @@ -20,15 +20,14 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegment; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.WrappedSegment; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -63,8 +62,8 @@ public void tearDown() throws Exception { @Test public void flatTreeInsert() throws MetadataException { WrappedSegment sf = new WrappedSegment(500); - IMNode rNode = virtualFlatMTree(10); - for (IMNode node : rNode.getChildren().values()) { + ICacheMNode rNode = virtualFlatMTree(10); + for (ICacheMNode node : rNode.getChildren().values()) { sf.insertRecord(node.getName(), RecordUtils.node2Buffer(node)); } sf.syncBuffer(); @@ -101,16 +100,14 @@ public void flatTreeInsert() throws MetadataException { Assert.assertEquals(sf.getRecord("aaa"), nsf.getRecord("aaa")); } - private IMNode virtualFlatMTree(int childSize) { - IMNode internalNode = new AbstractDeviceMNode(null, "vRoot1"); + private ICacheMNode virtualFlatMTree(int childSize) { + ICacheMNode internalNode = new CacheDeviceMNode(null, "vRoot1"); for (int idx = 0; idx < childSize; idx++) { String measurementId = "mid" + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); - IMeasurementMNode mNode = - MeasurementMNode.getMeasurementMNode( - internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); - internalNode.addChild(mNode); + internalNode.addChild( + new CacheMeasurementMNode(internalNode, measurementId, schema, measurementId + "als")); } return internalNode; } @@ -118,9 +115,9 @@ private IMNode virtualFlatMTree(int childSize) { @Test public void evenSplitTest() throws MetadataException { ByteBuffer buffer = ByteBuffer.allocate(500); - ISegment seg = WrappedSegment.initAsSegment(buffer); + ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9"}; - IMNode mNode = getMeasurementNode(null, "m", null); + ICacheMNode mNode = getMeasurementNode(null, "m", null); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = 0; i < test.length; i++) { @@ -155,9 +152,9 @@ public void evenSplitTest() throws MetadataException { public void increasingSplitTest() throws MetadataException { ByteBuffer buffer = ByteBuffer.allocate(500); ByteBuffer buf2 = ByteBuffer.allocate(500); - ISegment seg = WrappedSegment.initAsSegment(buffer); + ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8"}; - IMNode mNode = new BasicMNode(null, "m"); + ICacheMNode mNode = new CacheBasicMNode(null, "m"); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = 0; i < test.length; i++) { @@ -189,9 +186,9 @@ public void increasingSplitTest() throws MetadataException { public void decreasingSplitTest() throws MetadataException { ByteBuffer buffer = ByteBuffer.allocate(500); ByteBuffer buf2 = ByteBuffer.allocate(500); - ISegment seg = WrappedSegment.initAsSegment(buffer); + ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8"}; - IMNode mNode = new BasicMNode(null, "m"); + ICacheMNode mNode = new CacheBasicMNode(null, "m"); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = test.length - 1; i >= 0; i--) { @@ -238,11 +235,8 @@ public void print(Object s) { System.out.println(s); } - private IMNode getMeasurementNode(IMNode par, String name, String alias) { + private ICacheMNode getMeasurementNode(ICacheMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); - IMeasurementMNode mNode = - MeasurementMNode.getMeasurementMNode( - par != null ? par.getAsDeviceMNode() : null, name, schema, alias); - return mNode; + return new CacheMeasurementMNode(par, name, schema, alias); } } From 15854749cd6ff54f7ca29401f786206c0ccb114d Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Wed, 8 Mar 2023 15:11:03 +0800 Subject: [PATCH 09/26] fix add child --- .../rocksdb/RSchemaReadWriteHandler.java | 2 +- .../rocksdb/mnode/RDatabaseMNode.java | 21 +- .../rocksdb/mnode/RDeviceMNode.java | 33 +- .../rocksdb/mnode/RInternalMNode.java | 28 +- .../schemaregion/rocksdb/mnode/RMNode.java | 69 +---- .../rocksdb/mnode/RMeasurementMNode.java | 36 ++- .../idtable/entry/InsertMeasurementMNode.java | 287 ------------------ .../mtree/MTreeBelowSGCachedImpl.java | 4 +- .../mtree/MTreeBelowSGMemoryImpl.java | 4 +- .../abovedatabase/AboveDatabaseMNode.java | 5 + .../AbstractAboveDatabaseMNode.java | 18 +- .../CacheAboveDatabaseMNode.java | 5 + .../abovedatabase/IAboveDatabaseMNode.java | 8 + .../database/AbstractDatabaseMNode.java | 14 +- .../AbstractDatabaseDeviceMNode.java | 14 +- .../newnode/device/AbstractDeviceMNode.java | 14 +- .../newnode/factory/CacheMNodeFactory.java | 2 +- .../newnode/factory/ConfigMNodeFactory.java | 2 +- .../newnode/factory/IMNodeFactory.java | 2 +- .../newnode/factory/MemMNodeFactory.java | 2 +- .../measurement/AbstractMeasurementMNode.java | 2 +- .../measurement/CacheMeasurementMNode.java | 5 +- .../newnode/measurement/MeasurementMNode.java | 6 +- .../iotdb/db/metadata/mnode/MNodeTest.java | 33 +- .../mtree/disk/CachedMNodeContainerTest.java | 20 +- .../mtree/schemafile/RecordUtilTests.java | 28 +- .../mtree/schemafile/SchemaFileTest.java | 13 +- .../mtree/schemafile/SchemaPageTest.java | 22 +- .../mtree/schemafile/WrappedSegmentTest.java | 5 +- .../schemaRegion/SchemaStatisticsTest.java | 228 +++++++------- .../iotdb/db/tools/SchemaFileSketchTest.java | 40 ++- 31 files changed, 357 insertions(+), 615 deletions(-) delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/IAboveDatabaseMNode.java diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java index 6d961cc6753db..f7de3390ae404 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java @@ -24,8 +24,8 @@ import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RMNodeType; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java index 169c139c5cfbc..a3442495b2bdf 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java @@ -23,6 +23,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; @@ -30,7 +31,7 @@ import org.rocksdb.RocksDBException; -public class RDatabaseMNode extends RInternalMNode implements IDatabaseMNode { +public class RDatabaseMNode extends RInternalMNode implements IDatabaseMNode { private long dataTTL; @@ -67,6 +68,19 @@ void updateChildNode(String childName, int childNameMaxLevel) throws MetadataExc } } + @Override + public IMemMNode addChild(String name, IMemMNode child) { + return null; + } + + @Override + public IMemMNode addChild(IMemMNode child) { + return null; + } + + @Override + public void replaceChild(String oldChildName, IMemMNode newChildNode) {} + @Override public boolean isDatabase() { return true; @@ -113,4 +127,9 @@ public void setStorageGroupSchema(TDatabaseSchema schema) {} public TDatabaseSchema getStorageGroupSchema() { return null; } + + @Override + public IMemMNode getAsMNode() { + return null; + } } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java index b744f94e3e241..36d7c1e342675 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java @@ -20,9 +20,9 @@ package org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; @@ -35,7 +35,7 @@ import java.nio.ByteBuffer; import java.util.Map; -public class RDeviceMNode extends RInternalMNode implements IDeviceMNode { +public class RDeviceMNode extends RInternalMNode implements IDeviceMNode { private volatile boolean isAligned = false; @@ -87,6 +87,31 @@ public void setAliasChildren(Map> aliasChildren) { throw new UnsupportedOperationException(); } + @Override + public boolean isUseTemplate() { + throw new UnsupportedOperationException(); + } + + @Override + public void setUseTemplate(boolean useTemplate) { + throw new UnsupportedOperationException(); + } + + @Override + public void setSchemaTemplateId(int schemaTemplateId) { + throw new UnsupportedOperationException(); + } + + @Override + public int getSchemaTemplateId() { + throw new UnsupportedOperationException(); + } + + @Override + public int getSchemaTemplateIdWithState() { + throw new UnsupportedOperationException(); + } + @Override public boolean isPreDeactivateTemplate() { throw new UnsupportedOperationException(); @@ -140,7 +165,7 @@ public Object accept(MNodeVisitor visitor, Object context) { } @Override - public IMNode getAsMNode() { - throw new UnsupportedOperationException(); + public IMemMNode getAsMNode() { + return this; } } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java index cff6733d21044..96db9c2c37a4b 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java @@ -20,16 +20,16 @@ package org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; import org.rocksdb.RocksDBException; -public class RInternalMNode extends RMNode { +public class RInternalMNode extends RMNode implements IMemMNode { private volatile boolean useTemplate = false; @@ -58,13 +58,13 @@ void updateChildNode(String childName, int childNameMaxLevel) throws MetadataExc @Override public boolean hasChild(String name) { String childPathName = fullPath.concat(RSchemaConstants.PATH_SEPARATOR).concat(name); - IMNode node = getNodeBySpecifiedPath(childPathName); + IMemMNode node = getNodeBySpecifiedPath(childPathName); return node != null; } /** get the child with the name */ @Override - public IMNode getChild(String name) { + public IMemMNode getChild(String name) { String childPathName = fullPath.concat(RSchemaConstants.PATH_SEPARATOR).concat(name); return getNodeBySpecifiedPath(childPathName); } @@ -77,7 +77,7 @@ public IMNode getChild(String name) { * @return */ @Override - public IMNode addChild(String name, IMNode child) { + public IMemMNode addChild(String name, IMemMNode child) { child.setParent(this); String childName = fullPath.concat(RSchemaConstants.PATH_SEPARATOR).concat(name); int childNameMaxLevel = RSchemaUtils.getLevelByPartialPath(childName); @@ -105,14 +105,14 @@ public IMNode addChild(String name, IMNode child) { * @return return the MNode already added */ @Override - public IMNode addChild(IMNode child) { + public IMemMNode addChild(IMemMNode child) { addChild(child.getName(), child); return child; } /** delete a child */ @Override - public IMNode deleteChild(String name) { + public IMemMNode deleteChild(String name) { String childPathName = fullPath.concat(RSchemaConstants.PATH_SEPARATOR).concat(name); int nodeNameMaxLevel = RSchemaUtils.getLevelByPartialPath(childPathName); for (RMNodeType type : RMNodeType.values()) { @@ -141,7 +141,7 @@ public IMNode deleteChild(String name) { * @param newChildNode new child node */ @Override - public void replaceChild(String oldChildName, IMNode newChildNode) { + public 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!"); } @@ -150,7 +150,7 @@ public void replaceChild(String oldChildName, IMNode newChildNode) { } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { throw new UnsupportedOperationException(); } @@ -158,14 +158,4 @@ public IMNodeContainer getChildren() { public MNodeType getMNodeType(Boolean isConfig) { return isConfig ? MNodeType.SG_INTERNAL : MNodeType.INTERNAL; } - - @Override - public boolean isUseTemplate() { - return useTemplate; - } - - @Override - public void setUseTemplate(boolean useTemplate) { - this.useTemplate = useTemplate; - } } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java index bd02e86b773cc..0bdf825b069b4 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java @@ -25,7 +25,7 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; @@ -39,13 +39,13 @@ import java.util.Objects; -public abstract class RMNode implements IMNode { +public abstract class RMNode implements IMNode { /** from root to this node, only be set when used once for InternalMNode */ protected String fullPath; protected RSchemaReadWriteHandler readWriteHandler; - protected IMNode parent; + protected IMemMNode parent; protected String name; @@ -71,7 +71,7 @@ public void setName(String name) { } @Override - public IMNode getParent() { + public IMemMNode getParent() { if (parent != null) { return parent; } @@ -81,9 +81,9 @@ public IMNode getParent() { return parent; } - protected IMNode getNodeBySpecifiedPath(String keyName) { + protected IMemMNode getNodeBySpecifiedPath(String keyName) { byte[] value = null; - IMNode node; + IMemMNode node; int nodeNameMaxLevel = RSchemaUtils.getLevelByPartialPath(keyName); for (RMNodeType type : RMNodeType.values()) { String parentInnerName = @@ -114,7 +114,7 @@ protected IMNode getNodeBySpecifiedPath(String keyName) { } @Override - public void setParent(IMNode parent) { + public void setParent(IMemMNode parent) { this.parent = parent; } @@ -143,46 +143,6 @@ public void setFullPath(String fullPath) { this.fullPath = fullPath; } - @Override - public boolean isUseTemplate() { - return false; - } - - @Override - public int getSchemaTemplateId() { - throw new UnsupportedOperationException(); - } - - @Override - public int getSchemaTemplateIdWithState() { - throw new UnsupportedOperationException(); - } - - @Override - public void setSchemaTemplateId(int schemaTemplateId) { - throw new UnsupportedOperationException(); - } - - @Override - public void preUnsetSchemaTemplate() { - throw new UnsupportedOperationException(); - } - - @Override - public void rollbackUnsetSchemaTemplate() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isSchemaTemplatePreUnset() { - throw new UnsupportedOperationException(); - } - - @Override - public void unsetSchemaTemplate() { - throw new UnsupportedOperationException(); - } - @Override public boolean isAboveDatabase() { return false; @@ -253,17 +213,7 @@ public String toString() { } @Override - public void moveDataToNewMNode(IMNode newMNode) { - throw new UnsupportedOperationException("Temporarily unsupported"); - } - - @Override - public CacheEntry getCacheEntry() { - throw new UnsupportedOperationException("Temporarily unsupported"); - } - - @Override - public void setCacheEntry(CacheEntry cacheEntry) { + public void moveDataToNewMNode(IMemMNode newMNode) { throw new UnsupportedOperationException("Temporarily unsupported"); } @@ -274,8 +224,7 @@ public void setChildren(IMNodeContainer children) { @Override public R accept(MNodeVisitor visitor, C context) { - throw new UnsupportedOperationException("RMNode doesn't support this method"); + throw new UnsupportedOperationException("Wrong MNode Type"); } - // end } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java index 0c13ef17f8f88..6688b65e3bd27 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java @@ -21,10 +21,9 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.MeasurementPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; @@ -40,7 +39,7 @@ import java.nio.ByteBuffer; import java.util.Map; -public class RMeasurementMNode extends RMNode implements IMeasurementMNode { +public class RMeasurementMNode extends RMNode implements IMeasurementMNode, IMemMNode { protected String alias; @@ -79,17 +78,22 @@ public RMeasurementMNode( } @Override - public IDeviceMNode getParent() { + public IMemMNode getParent() { if (super.getParent() == null) { return null; } - return parent.getAsDeviceMNode(); + return parent; + } + + @Override + public IMemMNode getAsMNode() { + return null; } @Override public MeasurementPath getMeasurementPath() { MeasurementPath result = new MeasurementPath(super.getPartialPath(), schema); - result.setUnderAlignedEntity(getParent().isAligned()); + result.setUnderAlignedEntity(getParent().getAsDeviceMNode().isAligned()); if (alias != null && !alias.isEmpty()) { result.setMeasurementAlias(alias); } @@ -102,7 +106,12 @@ public IMeasurementSchema getSchema() { } @Override - public TSDataType getDataType(String measurementId) { + public void setSchema(IMeasurementSchema schema) { + this.schema = schema; + } + + @Override + public TSDataType getDataType() { return schema.getType(); } @@ -167,40 +176,37 @@ public boolean hasChild(String name) { } @Override - public IMNode getChild(String name) { + public IMemMNode getChild(String name) { throw new RuntimeException( String.format( "current node %s is a MeasurementMNode, can not get child %s", super.name, name)); } @Override - public IMNode addChild(String name, IMNode child) { + public IMemMNode addChild(String name, IMemMNode child) { // Do nothing return child; } @Override - public IMNode addChild(IMNode child) { + public IMemMNode addChild(IMemMNode child) { return null; } @Override - public IMNode deleteChild(String name) { + public IMemMNode deleteChild(String name) { // Do nothing return null; } @Override - public void replaceChild(String oldChildName, IMNode newChildNode) {} + public void replaceChild(String oldChildName, IMemMNode newChildNode) {} @Override public IMNodeContainer getChildren() { throw new UnsupportedOperationException(); } - @Override - public void setUseTemplate(boolean useTemplate) {} - @Override public boolean isMeasurement() { return true; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java deleted file mode 100644 index bbe29bc7b483f..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/InsertMeasurementMNode.java +++ /dev/null @@ -1,287 +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.metadata.idtable.entry; - -import org.apache.iotdb.commons.path.MeasurementPath; -import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; -import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; -import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; - -/** - * Generated entity implements IMeasurementMNode interface to unify insert logic through id table - * and SchemaProcessor - */ -public class InsertMeasurementMNode implements IMeasurementMNode { - SchemaEntry schemaEntry; - - IMeasurementSchema schema; - - public InsertMeasurementMNode(String measurementId, SchemaEntry schemaEntry) { - this.schemaEntry = schemaEntry; - schema = - new MeasurementSchema( - measurementId, - schemaEntry.getTSDataType(), - schemaEntry.getTSEncoding(), - schemaEntry.getCompressionType()); - } - - // region support methods - - @Override - public boolean isPreDeleted() { - return false; - } - - @Override - public void setPreDeleted(boolean preDeleted) {} - - @Override - public IMeasurementSchema getSchema() { - return schema; - } - - @Override - public TSDataType getDataType(String measurementId) { - return schemaEntry.getTSDataType(); - } - - @Override - public IDeviceMNode getParent() { - return null; - } - - @Override - public String toString() { - return schema.getMeasurementId(); - } - - // endregion - - // region unsupported methods - @Override - public String getName() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void setName(String name) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void setParent(IMNode parent) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public String getFullPath() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void setFullPath(String fullPath) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public PartialPath getPartialPath() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public boolean hasChild(String name) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public IMNode getChild(String name) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public IMNode addChild(String name, IMNode child) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public IMNode addChild(IMNode child) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public IMNode deleteChild(String name) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void replaceChild(String oldChildName, IMNode newChildNode) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void moveDataToNewMNode(IMNode newMNode) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public IMNodeContainer getChildren() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void setChildren(IMNodeContainer children) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public boolean isUseTemplate() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void setUseTemplate(boolean useTemplate) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public int getSchemaTemplateId() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public int getSchemaTemplateIdWithState() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void setSchemaTemplateId(int schemaTemplateId) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void preUnsetSchemaTemplate() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void rollbackUnsetSchemaTemplate() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public boolean isSchemaTemplatePreUnset() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void unsetSchemaTemplate() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public boolean isAboveDatabase() { - return false; - } - - @Override - public boolean isDatabase() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public boolean isDevice() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public boolean isMeasurement() { - return true; - } - - @Override - public MNodeType getMNodeType(Boolean isConfig) { - return MNodeType.MEASUREMENT; - } - - @Override - public IDatabaseMNode getAsDatabaseMNode() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public IDeviceMNode getAsDeviceMNode() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public IMeasurementMNode getAsMeasurementMNode() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public CacheEntry getCacheEntry() { - return null; - } - - @Override - public void setCacheEntry(CacheEntry cacheEntry) {} - - @Override - public R accept(MNodeVisitor visitor, C context) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public MeasurementPath getMeasurementPath() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public String getAlias() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void setAlias(String alias) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public long getOffset() { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - @Override - public void setOffset(long offset) { - throw new UnsupportedOperationException("insert measurement mnode doesn't support this method"); - } - - // endregion -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index 416f31f04221d..892631ee7eca8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -301,7 +301,7 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( IMeasurementMNode measurementMNode = new CacheMeasurementMNode( - entityMNode.getAsMNode(), + entityMNode, leafName, new MeasurementSchema(leafName, dataType, encoding, compressor, props), alias); @@ -386,7 +386,7 @@ public List> createAlignedTimeseries( for (int i = 0; i < measurements.size(); i++) { IMeasurementMNode measurementMNode = new CacheMeasurementMNode( - entityMNode.getAsMNode(), + entityMNode, measurements.get(i), new MeasurementSchema( measurements.get(i), diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index 94db839b3b375..4649c28595428 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -250,7 +250,7 @@ public IMeasurementMNode createTimeseries( IMeasurementMNode measurementMNode = new MeasurementMNode( - entityMNode.getAsMNode(), + entityMNode, leafName, new MeasurementSchema(leafName, dataType, encoding, compressor, props), alias); @@ -333,7 +333,7 @@ public List> createAlignedTimeseries( for (int i = 0; i < measurements.size(); i++) { IMeasurementMNode measurementMNode = new MeasurementMNode( - entityMNode.getAsMNode(), + entityMNode, measurements.get(i), new MeasurementSchema( measurements.get(i), dataTypes.get(i), encodings.get(i), compressors.get(i)), diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java index e7f8132e3e23d..79bd6a849eb1c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java @@ -26,4 +26,9 @@ public class AboveDatabaseMNode extends AbstractAboveDatabaseMNode, BasicNode extends IMNode> - implements IMNode { +public abstract class AbstractAboveDatabaseMNode, BasicNode extends IMNode> + implements IAboveDatabaseMNode { protected BasicNode basicMNode; @@ -87,12 +87,20 @@ public N getChild(String name) { @Override public N addChild(String name, N child) { - return basicMNode.addChild(name, child); + N res = basicMNode.addChild(name, child); + if(res==child){ + child.setParent(this.getAsMNode()); + } + return res; } @Override public N addChild(N child) { - return basicMNode.addChild(child); + N res = basicMNode.addChild(child); + if(res==child){ + child.setParent(this.getAsMNode()); + } + return res; } @Override @@ -132,7 +140,7 @@ public boolean isDatabase() { @Override public boolean isDevice() { - return true; + return false; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java index 50045a2cc55f2..5febc28be320e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java @@ -38,4 +38,9 @@ public CacheEntry getCacheEntry() { public void setCacheEntry(CacheEntry cacheEntry) { throw new UnsupportedOperationException("Wrong MNode Type"); } + + @Override + public ICacheMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/IAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/IAboveDatabaseMNode.java new file mode 100644 index 0000000000000..844cb5fecddc5 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/IAboveDatabaseMNode.java @@ -0,0 +1,8 @@ +package org.apache.iotdb.db.metadata.newnode.abovedatabase; + +import org.apache.iotdb.db.metadata.mnode.IMNode; + +/** This interface defines a DatabaseMNode's operation interfaces. */ +public interface IAboveDatabaseMNode> extends IMNode { + N getAsMNode(); +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java index b8b105b63b0f9..7b36bae878786 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java @@ -27,7 +27,7 @@ import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -public abstract class AbstractDatabaseMNode, BasicNode extends IMNode> +public abstract class AbstractDatabaseMNode, BasicNode extends IMNode> implements IDatabaseMNode { private static final long serialVersionUID = 7999036474525817732L; @@ -90,12 +90,20 @@ public N getChild(String name) { @Override public N addChild(String name, N child) { - return basicMNode.addChild(name, child); + N res = basicMNode.addChild(name, child); + if (res == child) { + child.setParent(this.getAsMNode()); + } + return res; } @Override public N addChild(N child) { - return basicMNode.addChild(child); + N res = basicMNode.addChild(child); + if (res == child) { + child.setParent(this.getAsMNode()); + } + return res; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java index 3dd2545c2d0a6..db71e3b674f53 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java @@ -31,7 +31,7 @@ import java.util.Map; -public abstract class AbstractDatabaseDeviceMNode, BasicNode extends IMNode> +public abstract class AbstractDatabaseDeviceMNode, BasicNode extends IMNode> implements IDatabaseMNode, IDeviceMNode { private DatabaseDeviceInfo databaseDeviceInfo; @@ -92,12 +92,20 @@ public N getChild(String name) { @Override public N addChild(String name, N child) { - return basicMNode.addChild(name, child); + N res = basicMNode.addChild(name, child); + if (res == child) { + child.setParent(this.getAsMNode()); + } + return res; } @Override public N addChild(N child) { - return basicMNode.addChild(child); + N res = basicMNode.addChild(child); + if (res == child) { + child.setParent(this.getAsMNode()); + } + return res; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java index e808bcf784492..d943ce2fabf88 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java @@ -28,7 +28,7 @@ import java.util.Map; -public abstract class AbstractDeviceMNode, BasicNode extends IMNode> +public abstract class AbstractDeviceMNode, BasicNode extends IMNode> implements IDeviceMNode { private final DeviceInfo deviceInfo; @@ -90,12 +90,20 @@ public N getChild(String name) { @Override public N addChild(String name, N child) { - return basicMNode.addChild(name, child); + N res = basicMNode.addChild(name, child); + if (res == child) { + child.setParent(this.getAsMNode()); + } + return res; } @Override public N addChild(N child) { - return basicMNode.addChild(child); + N res = basicMNode.addChild(child); + if (res == child) { + child.setParent(this.getAsMNode()); + } + return res; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java index 0ef00b292f7fe..3f620f7bb9e03 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java @@ -33,7 +33,7 @@ public class CacheMNodeFactory implements IMNodeFactory { @Override public IMeasurementMNode createMeasurementMNode( - ICacheMNode parent, String name, IMeasurementSchema schema, String alias) { + IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { return new CacheMeasurementMNode(parent, name, schema, alias); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java index 77ee594802fe8..313552a4738b7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java @@ -29,7 +29,7 @@ public class ConfigMNodeFactory implements IMNodeFactory { @Override public IMeasurementMNode createMeasurementMNode( - IConfigMNode parent, String name, IMeasurementSchema schema, String alias) { + IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { throw new UnsupportedOperationException(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java index 40efc0b0e16c5..99a7a5ce109a2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java @@ -26,7 +26,7 @@ public interface IMNodeFactory> { IMeasurementMNode createMeasurementMNode( - N parent, String name, IMeasurementSchema schema, String alias); + IDeviceMNode parent, String name, IMeasurementSchema schema, String alias); IDeviceMNode createDeviceMNode(N parent, String name); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java index 3749449cbd618..4d58ebf5530e8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java @@ -33,7 +33,7 @@ public class MemMNodeFactory implements IMNodeFactory { @Override public IMeasurementMNode createMeasurementMNode( - IMemMNode parent, String name, IMeasurementSchema schema, String alias) { + IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { return new MeasurementMNode(parent, name, schema, alias); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java index f43a8c0500b9d..bd772768cfb2a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java @@ -231,6 +231,6 @@ public IDeviceMNode getAsDeviceMNode() { @Override public IMeasurementMNode getAsMeasurementMNode() { - throw new UnsupportedOperationException("Wrong MNode Type"); + return this; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java index 82101a77b7b5f..a6b098faa326b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java @@ -23,15 +23,16 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class CacheMeasurementMNode extends AbstractMeasurementMNode implements ICacheMNode { public CacheMeasurementMNode( - ICacheMNode parent, String name, IMeasurementSchema schema, String alias) { + IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { super(schema, alias); - this.basicMNode = new CacheBasicMNode(parent, name); + this.basicMNode = new CacheBasicMNode(parent.getAsMNode(), name); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java index 219d266e3144b..82bbbd4f15356 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java @@ -22,14 +22,16 @@ import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.container.MemMNodeContainer; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class MeasurementMNode extends AbstractMeasurementMNode implements IMemMNode { - public MeasurementMNode(IMemMNode parent, String name, IMeasurementSchema schema, String alias) { + public MeasurementMNode( + IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { super(schema, alias); - this.basicMNode = new BasicMNode(parent, name); + this.basicMNode = new BasicMNode(parent.getAsMNode(), name); } @Override diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java index d40dd79967d27..7702c72719484 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java @@ -18,48 +18,37 @@ */ package org.apache.iotdb.db.metadata.mnode; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.device.DeviceMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.utils.MetaUtils; -import com.google.common.util.concurrent.ThreadFactoryBuilder; -import org.junit.Before; import org.junit.Test; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; public class MNodeTest { - private static ExecutorService service; - - @Before - public void setUp() throws Exception { - service = - Executors.newFixedThreadPool( - Runtime.getRuntime().availableProcessors(), - new ThreadFactoryBuilder().setDaemon(false).setNameFormat("replaceChild-%d").build()); - } @Test public void testReplaceChild() { BasicMNode rootNode = new BasicMNode(null, "root"); - IDeviceMNode aNode = new AbstractDeviceMNode(rootNode, "a"); - rootNode.addChild(aNode.getName(), aNode); + IDeviceMNode aNode = new DeviceMNode(rootNode, "a"); + rootNode.addChild(aNode.getName(), aNode.getAsMNode()); - IMeasurementMNode bNode = MeasurementMNode.getMeasurementMNode(aNode, "b", null, null); + IMeasurementMNode bNode = new MeasurementMNode(aNode, "b", null, null); - aNode.addChild(bNode.getName(), bNode); + aNode.addChild(bNode.getName(), bNode.getAsMNode()); aNode.addAlias("aliasOfb", bNode); - IDeviceMNode newANode = new AbstractDeviceMNode(null, "a"); - rootNode.replaceChild(aNode.getName(), newANode); + IDeviceMNode newANode = new DeviceMNode(null, "a"); + rootNode.replaceChild(aNode.getName(), newANode.getAsMNode()); List multiFullPaths = MetaUtils.getMultiFullPaths(rootNode); assertEquals("root.a.b", multiFullPaths.get(0)); @@ -72,7 +61,7 @@ public void testReplaceChild() { public void testAddChild() { BasicMNode rootNode = new BasicMNode(null, "root"); - IMNode speedNode = + IMNode speedNode = rootNode .addChild(new BasicMNode(null, "sg1")) .addChild(new BasicMNode(null, "a")) @@ -83,7 +72,7 @@ public void testAddChild() { .addChild(new BasicMNode(null, "speed")); assertEquals("root.sg1.a.b.c.d.device.speed", speedNode.getFullPath()); - IMNode temperatureNode = + IMNode temperatureNode = rootNode .getChild("sg1") .addChild(new BasicMNode(null, "aa")) diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java index 37d966c34d1f7..5a1de119c8c4b 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java @@ -18,9 +18,9 @@ */ package org.apache.iotdb.db.metadata.mtree.disk; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; import org.junit.Test; @@ -33,17 +33,17 @@ public class CachedMNodeContainerTest { @Test public void testIterator() { CachedMNodeContainer container = new CachedMNodeContainer(); - Map childCache = new HashMap<>(); - childCache.put("1", new BasicMNode(null, "1")); - childCache.put("2", new BasicMNode(null, "2")); - childCache.put("5", new BasicMNode(null, "5")); + Map childCache = new HashMap<>(); + childCache.put("1", new CacheBasicMNode(null, "1")); + childCache.put("2", new CacheBasicMNode(null, "2")); + childCache.put("5", new CacheBasicMNode(null, "5")); container.loadChildrenFromDisk(childCache); - container.put("3", new BasicMNode(null, "3")); - container.put("4", new BasicMNode(null, "4")); - container.put("6", new BasicMNode(null, "6")); + container.put("3", new CacheBasicMNode(null, "3")); + container.put("4", new CacheBasicMNode(null, "4")); + container.put("6", new CacheBasicMNode(null, "6")); container.updateMNode("5"); container.updateMNode("6"); - Iterator iterator = container.getChildrenIterator(); + Iterator iterator = container.getChildrenIterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java index 39d37e32b8a6d..4d63db08bb210 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java @@ -19,11 +19,12 @@ package org.apache.iotdb.db.metadata.mtree.schemafile; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -54,15 +55,22 @@ public void tearDown() throws Exception { @Test public void internalNodeTest() throws MetadataException { - IMNode oneNode = new BasicMNode(null, "abcd"); + ICacheMNode oneNode = new CacheBasicMNode(null, "abcd"); + ICacheMNode twoNode = new CacheDeviceMNode(null, "efgh"); ICachedMNodeContainer.getCachedMNodeContainer(oneNode).setSegmentAddress(1234567L); - oneNode.setUseTemplate(true); + ICachedMNodeContainer.getCachedMNodeContainer(twoNode).setSegmentAddress(66666L); + twoNode.getAsDeviceMNode().setUseTemplate(true); ByteBuffer buffer = RecordUtils.node2Buffer(oneNode); buffer.clear(); - IMNode node2 = RecordUtils.buffer2Node("abcd", buffer); + ICacheMNode node1 = RecordUtils.buffer2Node("abcd", buffer); Assert.assertEquals( - ICachedMNodeContainer.getCachedMNodeContainer(node2).getSegmentAddress(), 1234567L); - Assert.assertEquals(node2.isUseTemplate(), oneNode.isUseTemplate()); + ICachedMNodeContainer.getCachedMNodeContainer(node1).getSegmentAddress(), 1234567L); + buffer = RecordUtils.node2Buffer(twoNode); + buffer.clear(); + node1 = RecordUtils.buffer2Node("efgh", buffer); + Assert.assertEquals( + ICachedMNodeContainer.getCachedMNodeContainer(node1).getSegmentAddress(), 66666L); + Assert.assertTrue(node1.getAsDeviceMNode().isUseTemplate()); } @Test @@ -74,7 +82,7 @@ public void measurementTest() throws MetadataException { IMeasurementSchema schema = new MeasurementSchema( "amn", TSDataType.FLOAT, TSEncoding.BITMAP, CompressionType.GZIP, props); - IMNode amn = MeasurementMNode.getMeasurementMNode(null, "amn", schema, "anothername"); + ICacheMNode amn = new CacheMeasurementMNode(null, "amn", schema, "anothername"); ByteBuffer tBuf = RecordUtils.node2Buffer(amn); tBuf.clear(); @@ -89,7 +97,7 @@ public void measurementTest() throws MetadataException { ByteBuffer buffer = RecordUtils.node2Buffer(amn); buffer.clear(); - IMNode node2 = RecordUtils.buffer2Node("amn", buffer); + ICacheMNode node2 = RecordUtils.buffer2Node("amn", buffer); Assert.assertTrue( amn.getAsMeasurementMNode().getSchema().equals(node2.getAsMeasurementMNode().getSchema())); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java index 7edd715e70555..387af361e3349 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java @@ -975,7 +975,7 @@ static ICacheMNode getInternalWithSegAddr(ICacheMNode par, String name, long seg static ICacheMNode getMeasurementNode(ICacheMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); - return new CacheMeasurementMNode(par, name, schema, alias); + return new CacheMeasurementMNode(par.getAsDeviceMNode(), name, schema, alias); } static void addNodeToUpdateBuffer(ICacheMNode par, ICacheMNode child) { @@ -1028,7 +1028,8 @@ static ICacheMNode virtualTriangleMTree(int size, String sgPath) throws Metadata String measurementId = "mid" + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); IMeasurementMNode mNode = - new CacheMeasurementMNode(internalNode, measurementId, schema, measurementId + "als"); + new CacheMeasurementMNode( + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); internalNode.addChild(mNode.getAsMNode()); } @@ -1043,12 +1044,13 @@ static ICacheMNode virtualTriangleMTree(int size, String sgPath) throws Metadata for (int idx = 0; idx < 1000; idx++) { IMeasurementSchema schema = new MeasurementSchema("finalM" + idx, TSDataType.FLOAT); IMeasurementMNode mNode = - new CacheMeasurementMNode(internalNode, "finalM" + idx, schema, "finalals" + idx); + new CacheMeasurementMNode( + internalNode.getAsDeviceMNode(), "finalM" + idx, schema, "finalals" + idx); curNode.addChild(mNode.getAsMNode()); } IMeasurementSchema schema = new MeasurementSchema("finalM", TSDataType.FLOAT); IMeasurementMNode mNode = - new CacheMeasurementMNode(internalNode, "finalM", schema, "finalals"); + new CacheMeasurementMNode(internalNode.getAsDeviceMNode(), "finalM", schema, "finalals"); curNode.addChild(mNode.getAsMNode()); upperNode.addChild(internalNode); return internalNode; @@ -1063,7 +1065,8 @@ static ICacheMNode getFlatTree(int flatSize, String id) { String measurementId = id + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); IMeasurementMNode mNode = - new CacheMeasurementMNode(internalNode, measurementId, schema, measurementId + "als"); + new CacheMeasurementMNode( + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); internalNode.addChild(mNode.getAsMNode()); } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java index aa210e4840b47..3083fdd9078f0 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java @@ -19,14 +19,13 @@ package org.apache.iotdb.db.metadata.mtree.schemafile; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaPage; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; @@ -56,11 +55,11 @@ public void tearDown() throws Exception { public void flatTreeInsert() throws IOException, MetadataException { ISchemaPage page = ISchemaPage.initSegmentedPage(ByteBuffer.allocate(SchemaFileConfig.PAGE_LENGTH), 0); - IMNode root = virtualFlatMTree(15); + ICacheMNode root = virtualFlatMTree(15); for (int i = 0; i < 7; i++) { page.getAsSegmentedPage().allocNewSegment(SchemaFileConfig.SEG_SIZE_LST[0]); int cnt = 0; - for (IMNode child : root.getChildren().values()) { + for (ICacheMNode child : root.getChildren().values()) { cnt++; try { page.getAsSegmentedPage() @@ -104,16 +103,15 @@ public void essentialPageTest() throws MetadataException, IOException { Assert.assertEquals(256, (int) nPage.getAsInternalPage().getRecordByKey("aab")); } - private IMNode virtualFlatMTree(int childSize) { - IMNode internalNode = new AbstractDeviceMNode(null, "vRoot1"); + private ICacheMNode virtualFlatMTree(int childSize) { + ICacheMNode internalNode = new CacheDeviceMNode(null, "vRoot1"); for (int idx = 0; idx < childSize; idx++) { String measurementId = "mid" + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); - IMeasurementMNode mNode = - MeasurementMNode.getMeasurementMNode( - internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); - internalNode.addChild(mNode); + internalNode.addChild( + new CacheMeasurementMNode( + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als")); } return internalNode; } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java index 2e93be68b0bfc..a10bd23cd3405 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java @@ -107,7 +107,8 @@ private ICacheMNode virtualFlatMTree(int childSize) { String measurementId = "mid" + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); internalNode.addChild( - new CacheMeasurementMNode(internalNode, measurementId, schema, measurementId + "als")); + new CacheMeasurementMNode( + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als")); } return internalNode; } @@ -237,6 +238,6 @@ public void print(Object s) { private ICacheMNode getMeasurementNode(ICacheMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); - return new CacheMeasurementMNode(par, name, schema, alias); + return new CacheMeasurementMNode(par.getAsDeviceMNode(), name, schema, alias); } } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java index 2f61939bc3fab..9b8edce08606f 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java @@ -18,27 +18,13 @@ */ package org.apache.iotdb.db.metadata.schemaRegion; -import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.path.PathPatternTree; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; -import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; -import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; -import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.CachedMNodeSizeEstimator; -import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaEngineStatistics; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.rescon.ISchemaEngineStatistics; import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngine; -import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; -import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; -import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; -import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; import org.junit.Assert; import org.junit.Test; @@ -50,111 +36,115 @@ public class SchemaStatisticsTest extends AbstractSchemaRegionTest { public SchemaStatisticsTest(AbstractSchemaRegionTest.SchemaRegionTestParams testParams) { super(testParams); } - - @Test - public void testMemoryStatistics() throws Exception { - ISchemaRegion schemaRegion1 = getSchemaRegion("root.sg1", 0); - ISchemaRegion schemaRegion2 = getSchemaRegion("root.sg2", 1); - ISchemaEngineStatistics engineStatistics = - SchemaEngine.getInstance().getSchemaEngineStatistics(); - - SchemaRegionTestUtil.createSimpleTimeseriesByList( - schemaRegion1, Arrays.asList("root.sg1.d0", "root.sg1.d1.s1", "root.sg1.d1.s2.t1")); - SchemaRegionTestUtil.createSimpleTimeseriesByList( - schemaRegion2, Arrays.asList("root.sg2.d1.s3", "root.sg2.d2.s1", "root.sg2.d2.s2")); - PathPatternTree patternTree = new PathPatternTree(); - patternTree.appendPathPattern(new PartialPath("root.**.s1")); - patternTree.constructTree(); - Assert.assertTrue(schemaRegion1.constructSchemaBlackList(patternTree) >= 1); - Assert.assertTrue(schemaRegion2.constructSchemaBlackList(patternTree) >= 1); - schemaRegion1.deleteTimeseriesInBlackList(patternTree); - schemaRegion2.deleteTimeseriesInBlackList(patternTree); - - if (testParams.getTestModeName().equals("SchemaFile-PartialMemory") - || testParams.getTestModeName().equals("SchemaFile-NonMemory")) { - // wait release and flush task - Thread.sleep(1000); - IMNodeSizeEstimator estimator = new CachedMNodeSizeEstimator(); - // schemaRegion1 - IMNode sg1 = - new AbstractDatabaseDeviceMNode( - null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - sg1.setFullPath("root.sg1"); - long size1 = estimator.estimateSize(sg1); - Assert.assertEquals(size1, schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); - // schemaRegion2 - IMNode sg2 = - new AbstractDatabaseMNode( - null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - sg2.setFullPath("root.sg2"); - long size2 = estimator.estimateSize(sg2); - Assert.assertEquals(size2, schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); - Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); - } else { - IMNodeSizeEstimator estimator = - testParams.getSchemaEngineMode().equals("Memory") - ? new BasicMNodSizeEstimator() - : new CachedMNodeSizeEstimator(); - // schemaRegion1 - IMNode sg1 = - new AbstractDatabaseDeviceMNode( - null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - sg1.setFullPath("root.sg1"); - long size1 = estimator.estimateSize(sg1); - IMNode tmp = - new MeasurementMNode( - sg1, - "d0", - new MeasurementSchema( - "d0", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), - null); - size1 += estimator.estimateSize(tmp); - tmp = new BasicMNode(sg1, "d1"); - size1 += estimator.estimateSize(tmp); - tmp = new AbstractDeviceMNode(tmp, "s2"); - size1 += estimator.estimateSize(tmp); - size1 += - estimator.estimateSize( - new MeasurementMNode( - tmp, - "t1", - new MeasurementSchema( - "t1", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), - null)); - Assert.assertEquals(size1, schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); - // schemaRegion2 - IMNode sg2 = - new AbstractDatabaseMNode( - null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - sg2.setFullPath("root.sg2"); - long size2 = estimator.estimateSize(sg2); - tmp = new AbstractDeviceMNode(sg2, "d1"); - size2 += estimator.estimateSize(tmp); - size2 += - estimator.estimateSize( - new MeasurementMNode( - tmp, - "s3", - new MeasurementSchema( - "s3", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), - null)); - tmp = new AbstractDeviceMNode(sg2, "d2"); - size2 += estimator.estimateSize(tmp); - size2 += - estimator.estimateSize( - new MeasurementMNode( - tmp, - "s2", - new MeasurementSchema( - "s2", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), - null)); - Assert.assertEquals(size2, schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); - Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); - } - Assert.assertEquals(0, schemaRegion1.getSchemaRegionStatistics().getSchemaRegionId()); - Assert.assertEquals(1, schemaRegion2.getSchemaRegionStatistics().getSchemaRegionId()); - checkSchemaFileStatistics(engineStatistics); - } + // + // @Test + // public void testMemoryStatistics() throws Exception { + // ISchemaRegion schemaRegion1 = getSchemaRegion("root.sg1", 0); + // ISchemaRegion schemaRegion2 = getSchemaRegion("root.sg2", 1); + // ISchemaEngineStatistics engineStatistics = + // SchemaEngine.getInstance().getSchemaEngineStatistics(); + // + // SchemaRegionTestUtil.createSimpleTimeseriesByList( + // schemaRegion1, Arrays.asList("root.sg1.d0", "root.sg1.d1.s1", "root.sg1.d1.s2.t1")); + // SchemaRegionTestUtil.createSimpleTimeseriesByList( + // schemaRegion2, Arrays.asList("root.sg2.d1.s3", "root.sg2.d2.s1", "root.sg2.d2.s2")); + // PathPatternTree patternTree = new PathPatternTree(); + // patternTree.appendPathPattern(new PartialPath("root.**.s1")); + // patternTree.constructTree(); + // Assert.assertTrue(schemaRegion1.constructSchemaBlackList(patternTree) >= 1); + // Assert.assertTrue(schemaRegion2.constructSchemaBlackList(patternTree) >= 1); + // schemaRegion1.deleteTimeseriesInBlackList(patternTree); + // schemaRegion2.deleteTimeseriesInBlackList(patternTree); + // + // if (testParams.getTestModeName().equals("SchemaFile-PartialMemory") + // || testParams.getTestModeName().equals("SchemaFile-NonMemory")) { + // // wait release and flush task + // Thread.sleep(1000); + // IMNodeSizeEstimator estimator = new CachedMNodeSizeEstimator(); + // // schemaRegion1 + // IMNode sg1 = + // new AbstractDatabaseDeviceMNode( + // null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + // sg1.setFullPath("root.sg1"); + // long size1 = estimator.estimateSize(sg1); + // Assert.assertEquals(size1, + // schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); + // // schemaRegion2 + // IMNode sg2 = + // new AbstractDatabaseMNode( + // null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + // sg2.setFullPath("root.sg2"); + // long size2 = estimator.estimateSize(sg2); + // Assert.assertEquals(size2, + // schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); + // Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); + // } else { + // IMNodeSizeEstimator estimator = + // testParams.getSchemaEngineMode().equals("Memory") + // ? new BasicMNodSizeEstimator() + // : new CachedMNodeSizeEstimator(); + // // schemaRegion1 + // IMNode sg1 = + // new AbstractDatabaseDeviceMNode( + // null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + // sg1.setFullPath("root.sg1"); + // long size1 = estimator.estimateSize(sg1); + // IMNode tmp = + // new MeasurementMNode( + // sg1, + // "d0", + // new MeasurementSchema( + // "d0", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), + // null); + // size1 += estimator.estimateSize(tmp); + // tmp = new BasicMNode(sg1, "d1"); + // size1 += estimator.estimateSize(tmp); + // tmp = new AbstractDeviceMNode(tmp, "s2"); + // size1 += estimator.estimateSize(tmp); + // size1 += + // estimator.estimateSize( + // new MeasurementMNode( + // tmp, + // "t1", + // new MeasurementSchema( + // "t1", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), + // null)); + // Assert.assertEquals(size1, + // schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); + // // schemaRegion2 + // IMNode sg2 = + // new AbstractDatabaseMNode( + // null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + // sg2.setFullPath("root.sg2"); + // long size2 = estimator.estimateSize(sg2); + // tmp = new AbstractDeviceMNode(sg2, "d1"); + // size2 += estimator.estimateSize(tmp); + // size2 += + // estimator.estimateSize( + // new MeasurementMNode( + // tmp, + // "s3", + // new MeasurementSchema( + // "s3", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), + // null)); + // tmp = new AbstractDeviceMNode(sg2, "d2"); + // size2 += estimator.estimateSize(tmp); + // size2 += + // estimator.estimateSize( + // new MeasurementMNode( + // tmp, + // "s2", + // new MeasurementSchema( + // "s2", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), + // null)); + // Assert.assertEquals(size2, + // schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); + // Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); + // } + // Assert.assertEquals(0, schemaRegion1.getSchemaRegionStatistics().getSchemaRegionId()); + // Assert.assertEquals(1, schemaRegion2.getSchemaRegionStatistics().getSchemaRegionId()); + // checkSchemaFileStatistics(engineStatistics); + // } private void checkSchemaFileStatistics(ISchemaEngineStatistics engineStatistics) { if (engineStatistics instanceof CachedSchemaEngineStatistics) { diff --git a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java index c8d8fda4b6ed2..91f67a400c8d1 100644 --- a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java +++ b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java @@ -22,13 +22,12 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; -import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.tools.schema.SchemaFileSketchTool; import org.apache.iotdb.db.utils.EnvironmentUtils; @@ -75,9 +74,9 @@ private void prepareData() throws IOException, MetadataException { int TEST_SCHEMA_REGION_ID = 0; ISchemaFile sf = SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - Iterator ite = getTreeBFT(getFlatTree(500, "aa")); + Iterator ite = getTreeBFT(getFlatTree(500, "aa")); while (ite.hasNext()) { - IMNode cur = ite.next(); + ICacheMNode cur = ite.next(); if (!cur.isMeasurement()) { sf.writeMNode(cur); } @@ -118,9 +117,9 @@ public void testSchemaFileSketch() throws Exception { } } - private Iterator getTreeBFT(IMNode root) { - return new Iterator() { - Queue queue = new LinkedList(); + private Iterator getTreeBFT(ICacheMNode root) { + return new Iterator() { + Queue queue = new LinkedList<>(); { this.queue.add(root); @@ -132,10 +131,10 @@ public boolean hasNext() { } @Override - public IMNode next() { - IMNode curNode = queue.poll(); + public ICacheMNode next() { + ICacheMNode curNode = queue.poll(); if (!curNode.isMeasurement() && curNode.getChildren().size() > 0) { - for (IMNode child : curNode.getChildren().values()) { + for (ICacheMNode child : curNode.getChildren().values()) { queue.add(child); } } @@ -144,18 +143,17 @@ public IMNode next() { }; } - private IMNode getFlatTree(int flatSize, String id) { - IMNode root = new BasicMNode(null, "root"); - IMNode test = new BasicMNode(root, "test"); - IMNode internalNode = new AbstractDatabaseDeviceMNode(null, "vRoot1", 0L); + private ICacheMNode getFlatTree(int flatSize, String id) { + ICacheMNode root = new CacheBasicMNode(null, "root"); + ICacheMNode test = new CacheBasicMNode(root, "test"); + ICacheMNode internalNode = new CacheDatabaseDeviceMNode(null, "vRoot1", 0L); for (int idx = 0; idx < flatSize; idx++) { String measurementId = id + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); - IMeasurementMNode mNode = - MeasurementMNode.getMeasurementMNode( - internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); - internalNode.addChild(mNode); + internalNode.addChild( + new CacheMeasurementMNode( + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als")); } test.addChild(internalNode); From 10785e6b034e086d94602a9337aa423e0635d3ef Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Wed, 8 Mar 2023 15:49:11 +0800 Subject: [PATCH 10/26] fix NPE --- .../rocksdb/mnode/RDeviceMNode.java | 4 ++-- .../iotdb/db/metadata/mnode/IMNode.java | 2 +- .../db/metadata/mtree/IMTreeBelowSG.java | 2 +- .../db/metadata/mtree/store/IMTreeStore.java | 2 +- .../metadata/newnode/DatabaseDeviceInfo.java | 4 +++- .../AbstractAboveDatabaseMNode.java | 12 ++++++---- .../abovedatabase/IAboveDatabaseMNode.java | 8 ------- .../newnode/database/IDatabaseMNode.java | 2 +- .../AbstractDatabaseDeviceMNode.java | 10 ++++---- .../newnode/device/AbstractDeviceMNode.java | 18 ++++++++------ .../metadata/newnode/device/DeviceInfo.java | 24 ++++++++++++++----- .../metadata/newnode/device/IDeviceInfo.java | 9 +++---- .../metadata/newnode/device/IDeviceMNode.java | 2 +- .../measurement/AbstractMeasurementMNode.java | 2 +- .../measurement/CacheMeasurementMNode.java | 2 +- .../measurement/IMeasurementMNode.java | 2 +- .../newnode/measurement/MeasurementMNode.java | 2 +- .../mtree/schemafile/WrappedSegmentTest.java | 3 ++- 18 files changed, 62 insertions(+), 48 deletions(-) delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/IAboveDatabaseMNode.java diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java index 36d7c1e342675..8ce0e3e3fdb9d 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java @@ -78,12 +78,12 @@ public void deleteAliasChild(String alias) { } @Override - public Map> getAliasChildren() { + public Map> getAliasChildren() { throw new UnsupportedOperationException(); } @Override - public void setAliasChildren(Map> aliasChildren) { + public void setAliasChildren(Map> aliasChildren) { throw new UnsupportedOperationException(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java index 11607fc4bd79a..578e76a783564 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java @@ -27,7 +27,7 @@ import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; /** This interface defines a MNode's operation interfaces. */ -public interface IMNode> extends ITreeNode { +public interface IMNode> extends ITreeNode { String getName(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java index 86fe812cd26fc..4f791920fd866 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java @@ -33,7 +33,7 @@ import java.util.Map; import java.util.Set; -public interface IMTreeBelowSG> { +public interface IMTreeBelowSG> { void clear(); /** diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java index 71d3884fd40fd..77cabfa622c52 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java @@ -34,7 +34,7 @@ * *

      MTreeStore could be implemented as memory-based or disk-based for different scenarios. */ -public interface IMTreeStore> { +public interface IMTreeStore> { /** * Generate the ancestor nodes of storageGroupNode diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java index b974d29b6e449..e54a9416e161d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java @@ -19,11 +19,13 @@ package org.apache.iotdb.db.metadata.newnode; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; +import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseInfo; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.DeviceInfo; -public class DatabaseDeviceInfo extends DeviceInfo implements IDatabaseInfo { +public class DatabaseDeviceInfo> extends DeviceInfo + implements IDatabaseInfo { /** * when the data file in a database is older than dataTTL, it is considered invalid and will be * eventually deleted. diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java index f32c8cf7e54e5..14840fc3cba6d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java @@ -28,7 +28,7 @@ import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; public abstract class AbstractAboveDatabaseMNode, BasicNode extends IMNode> - implements IAboveDatabaseMNode { + implements IMNode { protected BasicNode basicMNode; @@ -87,8 +87,8 @@ public N getChild(String name) { @Override public N addChild(String name, N child) { - N res = basicMNode.addChild(name, child); - if(res==child){ + N res = basicMNode.addChild(name, child); + if (res == child) { child.setParent(this.getAsMNode()); } return res; @@ -96,8 +96,8 @@ public N addChild(String name, N child) { @Override public N addChild(N child) { - N res = basicMNode.addChild(child); - if(res==child){ + N res = basicMNode.addChild(child); + if (res == child) { child.setParent(this.getAsMNode()); } return res; @@ -167,4 +167,6 @@ public IDeviceMNode getAsDeviceMNode() { public IMeasurementMNode getAsMeasurementMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } + + abstract N getAsMNode(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/IAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/IAboveDatabaseMNode.java deleted file mode 100644 index 844cb5fecddc5..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/IAboveDatabaseMNode.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.apache.iotdb.db.metadata.newnode.abovedatabase; - -import org.apache.iotdb.db.metadata.mnode.IMNode; - -/** This interface defines a DatabaseMNode's operation interfaces. */ -public interface IAboveDatabaseMNode> extends IMNode { - N getAsMNode(); -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java index 821f84352e3ac..a11efc2139163 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java @@ -21,6 +21,6 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; /** This interface defines a DatabaseMNode's operation interfaces. */ -public interface IDatabaseMNode> extends IMNode, IDatabaseInfo { +public interface IDatabaseMNode> extends IMNode, IDatabaseInfo { N getAsMNode(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java index db71e3b674f53..f6bbf1b80090c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java @@ -34,11 +34,11 @@ public abstract class AbstractDatabaseDeviceMNode, BasicNode extends IMNode> implements IDatabaseMNode, IDeviceMNode { - private DatabaseDeviceInfo databaseDeviceInfo; + private DatabaseDeviceInfo databaseDeviceInfo; protected BasicNode basicMNode; public AbstractDatabaseDeviceMNode() { - this.databaseDeviceInfo = new DatabaseDeviceInfo(); + this.databaseDeviceInfo = new DatabaseDeviceInfo<>(); } public BasicNode getBasicMNode() { @@ -212,7 +212,7 @@ public TDatabaseSchema getStorageGroupSchema() { } @Override - public boolean addAlias(String alias, IMeasurementMNode child) { + public boolean addAlias(String alias, IMeasurementMNode child) { return databaseDeviceInfo.addAlias(alias, child); } @@ -222,12 +222,12 @@ public void deleteAliasChild(String alias) { } @Override - public Map> getAliasChildren() { + public Map> getAliasChildren() { return databaseDeviceInfo.getAliasChildren(); } @Override - public void setAliasChildren(Map> aliasChildren) { + public void setAliasChildren(Map> aliasChildren) { databaseDeviceInfo.setAliasChildren(aliasChildren); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java index d943ce2fabf88..75ab17ff55cb4 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java @@ -31,12 +31,12 @@ public abstract class AbstractDeviceMNode, BasicNode extends IMNode> implements IDeviceMNode { - private final DeviceInfo deviceInfo; + private final DeviceInfo deviceInfo; protected BasicNode basicMNode; /** Constructor of MNode. */ public AbstractDeviceMNode() { - this.deviceInfo = new DeviceInfo(); + this.deviceInfo = new DeviceInfo<>(); } public BasicNode getBasicMNode() { @@ -80,12 +80,16 @@ public PartialPath getPartialPath() { @Override public boolean hasChild(String name) { - return basicMNode.hasChild(name); + return basicMNode.hasChild(name) || deviceInfo.hasAliasChild(name); } @Override public N getChild(String name) { - return basicMNode.getChild(name); + N res = basicMNode.getChild(name); + if (res == null) { + res = deviceInfo.getAliasChild(name).getAsMNode(); + } + return res; } @Override @@ -180,7 +184,7 @@ public R accept(MNodeVisitor visitor, C context) { } @Override - public boolean addAlias(String alias, IMeasurementMNode child) { + public boolean addAlias(String alias, IMeasurementMNode child) { return deviceInfo.addAlias(alias, child); } @@ -190,12 +194,12 @@ public void deleteAliasChild(String alias) { } @Override - public Map> getAliasChildren() { + public Map> getAliasChildren() { return deviceInfo.getAliasChildren(); } @Override - public void setAliasChildren(Map> aliasChildren) { + public void setAliasChildren(Map> aliasChildren) { deviceInfo.setAliasChildren(aliasChildren); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java index a2640589c64aa..0eb98bc948d23 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java @@ -18,6 +18,7 @@ */ package org.apache.iotdb.db.metadata.newnode.device; +import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import java.util.Collections; @@ -26,7 +27,7 @@ import static org.apache.iotdb.db.metadata.MetadataConstant.NON_TEMPLATE; -public class DeviceInfo implements IDeviceInfo { +public class DeviceInfo> implements IDeviceInfo { /** * In EntityMNode of MTree in SchemaRegion, this field represents the template activated on this @@ -44,11 +45,11 @@ public class DeviceInfo implements IDeviceInfo { *

      This will be a ConcurrentHashMap instance */ @SuppressWarnings("squid:S3077") - private transient volatile Map> aliasChildren = null; + private transient volatile Map> aliasChildren = null; private volatile boolean isAligned = false; - public void moveDataToNewMNode(IDeviceMNode newMNode) { + public void moveDataToNewMNode(IDeviceMNode newMNode) { newMNode.setSchemaTemplateId(schemaTemplateId); newMNode.setUseTemplate(useTemplate); newMNode.setAliasChildren(aliasChildren); @@ -57,7 +58,7 @@ public void moveDataToNewMNode(IDeviceMNode newMNode) { /** add an alias */ @Override - public boolean addAlias(String alias, IMeasurementMNode child) { + public boolean addAlias(String alias, IMeasurementMNode child) { if (aliasChildren == null) { // double check, alias children volatile synchronized (this) { @@ -79,7 +80,7 @@ public void deleteAliasChild(String alias) { } @Override - public Map> getAliasChildren() { + public Map> getAliasChildren() { if (aliasChildren == null) { return Collections.emptyMap(); } @@ -87,10 +88,21 @@ public Map> getAliasChildren() { } @Override - public void setAliasChildren(Map> aliasChildren) { + public void setAliasChildren(Map> aliasChildren) { this.aliasChildren = aliasChildren; } + public boolean hasAliasChild(String name) { + return aliasChildren != null && aliasChildren.containsKey(name); + } + + public IMeasurementMNode getAliasChild(String name) { + if (aliasChildren != null) { + return aliasChildren.get(name); + } + return null; + } + /** * In EntityMNode(device node), schemaTemplateId represents the template activated on this node. * The pre deactivation mechanism is implemented by making this value negative. Since value 0 and diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java index 5bf9559d09596..605bcd2a1d8ae 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java @@ -18,19 +18,20 @@ */ package org.apache.iotdb.db.metadata.newnode.device; +import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import java.util.Map; -public interface IDeviceInfo { +public interface IDeviceInfo> { - boolean addAlias(String alias, IMeasurementMNode child); + boolean addAlias(String alias, IMeasurementMNode child); void deleteAliasChild(String alias); - Map> getAliasChildren(); + Map> getAliasChildren(); - void setAliasChildren(Map> aliasChildren); + void setAliasChildren(Map> aliasChildren); boolean isUseTemplate(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java index 46ac8706201b4..b863fb4bd189f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java @@ -20,6 +20,6 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; -public interface IDeviceMNode> extends IMNode, IDeviceInfo { +public interface IDeviceMNode> extends IMNode, IDeviceInfo { N getAsMNode(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java index bd772768cfb2a..483060ddc6fd3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java @@ -32,7 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AbstractMeasurementMNode, BasicNode extends IMNode> +public abstract class AbstractMeasurementMNode, BasicNode extends IMNode> implements IMeasurementMNode { private static final Logger logger = LoggerFactory.getLogger(AbstractMeasurementMNode.class); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java index a6b098faa326b..30f852252b67d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java @@ -32,7 +32,7 @@ public class CacheMeasurementMNode extends AbstractMeasurementMNode parent, String name, IMeasurementSchema schema, String alias) { super(schema, alias); - this.basicMNode = new CacheBasicMNode(parent.getAsMNode(), name); + this.basicMNode = new CacheBasicMNode(parent == null ? null : parent.getAsMNode(), name); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java index 6621218ac40e2..ad62d5d2b84ba 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java @@ -22,7 +22,7 @@ import org.apache.iotdb.db.metadata.mnode.IMNode; /** This interface defines a MeasurementMNode's operation interfaces. */ -public interface IMeasurementMNode> extends IMNode, IMeasurementInfo { +public interface IMeasurementMNode> extends IMNode, IMeasurementInfo { N getAsMNode(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java index 82bbbd4f15356..444b0afa044af 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java @@ -31,7 +31,7 @@ public class MeasurementMNode extends AbstractMeasurementMNode parent, String name, IMeasurementSchema schema, String alias) { super(schema, alias); - this.basicMNode = new BasicMNode(parent.getAsMNode(), name); + this.basicMNode = new BasicMNode(parent == null ? null : parent.getAsMNode(), name); } @Override diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java index a10bd23cd3405..1d35f9307c2d9 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java @@ -238,6 +238,7 @@ public void print(Object s) { private ICacheMNode getMeasurementNode(ICacheMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); - return new CacheMeasurementMNode(par.getAsDeviceMNode(), name, schema, alias); + return new CacheMeasurementMNode( + par == null ? null : par.getAsDeviceMNode(), name, schema, alias); } } From 6232e28b5521e31fc1f20b00e73b4cb4012814c8 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Wed, 8 Mar 2023 16:30:54 +0800 Subject: [PATCH 11/26] fix moveData --- .../iotdb/db/metadata/newnode/basic/CacheBasicMNode.java | 1 + .../iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java | 1 + .../db/metadata/newnode/device/AbstractDeviceMNode.java | 2 +- .../apache/iotdb/db/metadata/newnode/device/DeviceInfo.java | 5 +++-- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java index 14909b0080fc6..91dbda2a19e1a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java @@ -224,6 +224,7 @@ public synchronized void replaceChild(String oldChildName, ICacheMNode newChildN @Override public void moveDataToNewMNode(ICacheMNode newMNode) { newMNode.setParent(parent); + newMNode.setCacheEntry(getCacheEntry()); if (children != null) { newMNode.setChildren(children); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java index 35443fe65445b..ffdace0c72526 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java @@ -219,6 +219,7 @@ public synchronized void replaceChild(String oldChildName, IConfigMNode newChild @Override public void moveDataToNewMNode(IConfigMNode newMNode) { newMNode.setParent(parent); + newMNode.setSchemaTemplateId(configMNodeInfo.getSchemaTemplateIdWithState()); if (children != null) { newMNode.setChildren(children); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java index 75ab17ff55cb4..ff904812fd1ce 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java @@ -87,7 +87,7 @@ public boolean hasChild(String name) { public N getChild(String name) { N res = basicMNode.getChild(name); if (res == null) { - res = deviceInfo.getAliasChild(name).getAsMNode(); + res = deviceInfo.getAliasChild(name); } return res; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java index 0eb98bc948d23..716d59ed715d8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java @@ -96,9 +96,10 @@ public boolean hasAliasChild(String name) { return aliasChildren != null && aliasChildren.containsKey(name); } - public IMeasurementMNode getAliasChild(String name) { + public N getAliasChild(String name) { if (aliasChildren != null) { - return aliasChildren.get(name); + IMeasurementMNode child = aliasChildren.get(name); + return child == null ? null : child.getAsMNode(); } return null; } From 7dab0d0e9b9a015b81cb3e66f1b1b5a69a3e7437 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Wed, 8 Mar 2023 16:49:47 +0800 Subject: [PATCH 12/26] fix snapshot --- .../mtree/snapshot/MemMTreeSnapshotUtil.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java index 10ba03bfd30f4..a3f27612b07b5 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java @@ -261,6 +261,8 @@ 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 return true; } catch (IOException e) { logger.error(SERIALIZE_ERROR_INFO, e); @@ -274,6 +276,8 @@ public Boolean visitDatabaseMNode( 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) { @@ -288,6 +292,8 @@ public Boolean visitDatabaseDeviceMNode( 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.isAligned(), outputStream); // database node in schemaRegion doesn't store any database schema return true; @@ -303,6 +309,8 @@ public Boolean visitDeviceMNode( try { ReadWriteIOUtils.write(ENTITY_MNODE_TYPE, outputStream); serializeBasicMNode(node.getBasicMNode(), outputStream); + ReadWriteIOUtils.write(node.getSchemaTemplateIdWithState(), outputStream); + ReadWriteIOUtils.write(node.isUseTemplate(), outputStream); ReadWriteIOUtils.write(node.isAligned(), outputStream); return true; } catch (IOException e) { @@ -331,8 +339,6 @@ public Boolean visitMeasurementMNode( private void serializeBasicMNode(IMNode node, OutputStream outputStream) throws IOException { ReadWriteIOUtils.write(node.getChildren().size(), outputStream); ReadWriteIOUtils.write(node.getName(), outputStream); - ReadWriteIOUtils.write(0, outputStream); // for compatibly - ReadWriteIOUtils.write(false, outputStream); // for compatibly } } @@ -341,14 +347,16 @@ private static class MNodeDeserializer { public BasicMNode deserializeInternalMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); BasicMNode node = new BasicMNode(null, name); - deserializeInternalBasicInfo(node, inputStream); + int templateId = ReadWriteIOUtils.readInt(inputStream); + boolean useTemplate = ReadWriteIOUtils.readBool(inputStream); return node; } public DatabaseMNode deserializeStorageGroupMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); DatabaseMNode node = new DatabaseMNode(null, name); - deserializeInternalBasicInfo(node.getBasicMNode(), inputStream); + int templateId = ReadWriteIOUtils.readInt(inputStream); + boolean useTemplate = ReadWriteIOUtils.readBool(inputStream); return node; } @@ -356,7 +364,8 @@ public DatabaseDeviceMNode deserializeStorageGroupEntityMNode(InputStream inputS throws IOException { String name = ReadWriteIOUtils.readString(inputStream); DatabaseDeviceMNode node = new DatabaseDeviceMNode(null, name, 0); - deserializeInternalBasicInfo(node.getBasicMNode(), inputStream); + node.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); + node.setUseTemplate(ReadWriteIOUtils.readBool(inputStream)); node.setAligned(ReadWriteIOUtils.readBool(inputStream)); return node; } @@ -364,7 +373,8 @@ public DatabaseDeviceMNode deserializeStorageGroupEntityMNode(InputStream inputS public DeviceMNode deserializeEntityMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); DeviceMNode node = new DeviceMNode(null, name); - deserializeInternalBasicInfo(node.getBasicMNode(), inputStream); + node.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); + node.setUseTemplate(ReadWriteIOUtils.readBool(inputStream)); node.setAligned(ReadWriteIOUtils.readBool(inputStream)); return node; } @@ -380,11 +390,5 @@ public MeasurementMNode deserializeMeasurementMNode(InputStream inputStream) node.setPreDeleted(ReadWriteIOUtils.readBool(inputStream)); return node; } - - private void deserializeInternalBasicInfo(BasicMNode node, InputStream inputStream) - throws IOException { - ReadWriteIOUtils.readInt(inputStream); // for compatibly - ReadWriteIOUtils.readBool(inputStream); // for compatibly - } } } From aaf50460483d9c54296f9b2f14fdfd9c06f82524 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Wed, 8 Mar 2023 20:22:33 +0800 Subject: [PATCH 13/26] fix IT --- .../newnode/abovedatabase/CacheAboveDatabaseMNode.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java index 5febc28be320e..eb306a5be39fe 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java @@ -31,12 +31,12 @@ public CacheAboveDatabaseMNode(ICacheMNode parent, String name) { @Override public CacheEntry getCacheEntry() { - throw new UnsupportedOperationException("Wrong MNode Type"); + return basicMNode.getCacheEntry(); } @Override public void setCacheEntry(CacheEntry cacheEntry) { - throw new UnsupportedOperationException("Wrong MNode Type"); + basicMNode.setCacheEntry(cacheEntry); } @Override From 1b468a92b2fecbe18f10778fa808aea4f29e7671 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Thu, 9 Mar 2023 00:52:46 +0800 Subject: [PATCH 14/26] fix IT --- .../newnode/abovedatabase/AbstractAboveDatabaseMNode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java index 14840fc3cba6d..e0da5c10a9066 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java @@ -130,7 +130,7 @@ public void setChildren(IMNodeContainer children) { @Override public boolean isAboveDatabase() { - return false; + return true; } @Override From df08caf48925f202c856b5e0f6e034b74b8d2205 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Thu, 9 Mar 2023 12:01:18 +0800 Subject: [PATCH 15/26] constructor --- .../iotdb/db/metadata/mnode/IMNode.java | 4 + .../iotdb/db/metadata/mnode/MNodeUtils.java | 2 +- .../mtree/MTreeBelowSGMemoryImpl.java | 2 +- .../mtree/snapshot/MemMTreeSnapshotUtil.java | 2 +- .../mtree/store/ConfigMTreeStore.java | 2 +- .../metadata/mtree/store/MemMTreeStore.java | 2 +- .../db/metadata/newnode/BasicMNodeInfo.java | 6 + .../db/metadata/newnode/CacheMNodeInfo.java | 6 + .../db/metadata/newnode/ConfigMNodeInfo.java | 6 + .../metadata/newnode/DatabaseDeviceInfo.java | 12 +- .../abovedatabase/AboveDatabaseMNode.java | 5 +- .../AbstractAboveDatabaseMNode.java | 23 ++- .../CacheAboveDatabaseMNode.java | 3 +- .../newnode/basic/BasicInternalMNode.java | 180 +++++++++++++++++ .../{mnode => newnode/basic}/BasicMNode.java | 115 ++++------- .../basic/CacheBasicInternalMNode.java | 190 ++++++++++++++++++ .../newnode/basic/CacheBasicMNode.java | 110 ++++------ .../basic/ConfigBasicInternalMNode.java | 180 +++++++++++++++++ .../newnode/basic/ConfigBasicMNode.java | 110 ++++------ .../database/AbstractDatabaseMNode.java | 27 ++- .../newnode/database/CacheDatabaseMNode.java | 4 +- .../newnode/database/ConfigDatabaseMNode.java | 4 +- .../newnode/database/DatabaseInfo.java | 15 ++ .../newnode/database/DatabaseMNode.java | 6 +- .../newnode/database/IDatabaseInfo.java | 5 + .../newnode/database/IDatabaseMNode.java | 17 +- .../AbstractDatabaseDeviceMNode.java | 28 ++- .../CacheDatabaseDeviceMNode.java | 5 +- .../databasedevice/DatabaseDeviceMNode.java | 7 +- .../newnode/device/AbstractDeviceMNode.java | 28 ++- .../newnode/device/CacheDeviceMNode.java | 3 +- .../metadata/newnode/device/DeviceInfo.java | 19 ++ .../metadata/newnode/device/DeviceMNode.java | 5 +- .../metadata/newnode/device/IDeviceInfo.java | 8 + .../metadata/newnode/device/IDeviceMNode.java | 37 +++- .../newnode/factory/CacheMNodeFactory.java | 2 +- .../newnode/factory/ConfigMNodeFactory.java | 2 +- .../newnode/factory/IMNodeFactory.java | 2 +- .../newnode/factory/MemMNodeFactory.java | 7 +- .../measurement/AbstractMeasurementMNode.java | 28 ++- .../measurement/CacheMeasurementMNode.java | 5 +- .../newnode/measurement/IMeasurementInfo.java | 4 + .../measurement/IMeasurementMNode.java | 22 +- .../newnode/measurement/MeasurementInfo.java | 20 ++ .../newnode/measurement/MeasurementMNode.java | 7 +- .../iotdb/db/metadata/MetaUtilsTest.java | 2 +- .../iotdb/db/metadata/mnode/MNodeTest.java | 39 ++-- 47 files changed, 1015 insertions(+), 303 deletions(-) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicInternalMNode.java rename server/src/main/java/org/apache/iotdb/db/metadata/{mnode => newnode/basic}/BasicMNode.java (71%) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicInternalMNode.java create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicInternalMNode.java diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java index 578e76a783564..0bd4420f57ff3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java @@ -81,4 +81,8 @@ public interface IMNode> extends ITreeNode { IMeasurementMNode getAsMeasurementMNode(); R accept(MNodeVisitor visitor, C context); + + int estimateSize(); + + N getAsMNode(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java index f9ff0e77e53e2..3665e802b6520 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java @@ -80,7 +80,7 @@ public static > N setToInternal( databaseMNode.setDataTTL(entityMNode.getAsDatabaseMNode().getDataTTL()); node = databaseMNode.getAsMNode(); } else { - node = nodeFactor.createBasicMNode(parent, entityMNode.getName()); + node = nodeFactor.createInternalMNode(parent, entityMNode.getName()); } if (parent != null) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index 4649c28595428..574cd3eeeefe7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -34,7 +34,6 @@ import org.apache.iotdb.db.exception.metadata.template.TemplateImcompatibeException; import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; @@ -47,6 +46,7 @@ import org.apache.iotdb.db.metadata.mtree.traverser.updater.EntityUpdater; import org.apache.iotdb.db.metadata.mtree.traverser.updater.MeasurementUpdater; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java index a3f27612b07b5..3010a968f6843 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java @@ -21,7 +21,6 @@ import org.apache.iotdb.commons.file.SystemFileFactory; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; @@ -29,6 +28,7 @@ import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java index 2bab3279bd525..fabb851dec3db 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java @@ -43,7 +43,7 @@ public class ConfigMTreeStore implements IMTreeStore { // Only used for ConfigMTree public ConfigMTreeStore(IMNodeFactory nodeFactory) { - this.root = nodeFactory.createBasicMNode(null, IoTDBConstant.PATH_ROOT); + this.root = nodeFactory.createInternalMNode(null, IoTDBConstant.PATH_ROOT); this.nodeFactory = nodeFactory; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index 075930b571d15..4dec3f7b4afae 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -22,7 +22,6 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.MNodeUtils; import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; @@ -33,6 +32,7 @@ import org.apache.iotdb.db.metadata.mtree.snapshot.MemMTreeSnapshotUtil; import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java index 8a31e49d68f0c..444a940d7d056 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java @@ -32,4 +32,10 @@ public String getName() { public void setName(String name) { this.name = name; } + + public int estimateSize() { + // object header, 8B + // name reference, name length and name hash code, 8 + 4 + 4 = 16B + return 8 + 16; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java index 134d983024ead..5a7a90b6a66ad 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java @@ -35,4 +35,10 @@ public CacheEntry getCacheEntry() { public void setCacheEntry(CacheEntry cacheEntry) { this.cacheEntry = cacheEntry; } + + @Override + public int estimateSize() { + // Estimated size of CacheEntry = 40 + return super.estimateSize() + 40; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java index e120a1c537c64..a3659169ccdda 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java @@ -71,4 +71,10 @@ public boolean isSchemaTemplatePreUnset() { public void unsetSchemaTemplate() { this.schemaTemplateId = -1; } + + @Override + public int estimateSize() { + // int schemaTemplateId, 4B + return super.estimateSize() + 4; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java index e54a9416e161d..95023f69af7fd 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java @@ -32,6 +32,7 @@ public class DatabaseDeviceInfo> extends DeviceInfo */ private long dataTTL; + @Override public void moveDataToNewMNode(IDatabaseMNode newMNode) { newMNode.setDataTTL(dataTTL); } @@ -63,6 +64,15 @@ public TDatabaseSchema getStorageGroupSchema() { return null; } + /** + * The memory occupied by an DatabaseDeviceInfo based occupation + * + *

        + *
      1. long dataTTL, 8B + *
      + */ @Override - public void setSchemaTemplateId(int schemaTemplateId) {} + public int estimateSize() { + return super.estimateSize() + 8; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java index 79bd6a849eb1c..503868dd37d0f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java @@ -18,13 +18,14 @@ */ package org.apache.iotdb.db.metadata.newnode.abovedatabase; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; public class AboveDatabaseMNode extends AbstractAboveDatabaseMNode implements IMemMNode { public AboveDatabaseMNode(IMemMNode parent, String name) { - this.basicMNode = new BasicMNode(parent, name); + super(new BasicInternalMNode(parent, name)); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java index e0da5c10a9066..e0662cdc40995 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java @@ -30,7 +30,11 @@ public abstract class AbstractAboveDatabaseMNode, BasicNode extends IMNode> implements IMNode { - protected BasicNode basicMNode; + protected final BasicNode basicMNode; + + public AbstractAboveDatabaseMNode(BasicNode basicMNode) { + this.basicMNode = basicMNode; + } @Override public String getName() { @@ -168,5 +172,20 @@ public IMeasurementMNode getAsMeasurementMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } - abstract N getAsMNode(); + /** + * The basic memory occupied by any AbstractDatabaseDeviceMNode object + * + *
        + *
      1. object header, 8B + *
      2. node attributes + *
          + *
        1. basicMNode reference, 8B + *
        + *
      3. MapEntry in parent + *
      + */ + @Override + public int estimateSize() { + return 8 + basicMNode.estimateSize(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java index eb306a5be39fe..3fb45599c186b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java @@ -20,13 +20,14 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; public class CacheAboveDatabaseMNode extends AbstractAboveDatabaseMNode implements ICacheMNode { public CacheAboveDatabaseMNode(ICacheMNode parent, String name) { - this.basicMNode = new CacheBasicMNode(parent, name); + super(new CacheBasicInternalMNode(parent, name)); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicInternalMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicInternalMNode.java new file mode 100644 index 0000000000000..63dbeb30431a4 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicInternalMNode.java @@ -0,0 +1,180 @@ +/* + * 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.metadata.newnode.basic; + +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.container.MemMNodeContainer; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; + +/** + * This class is the implementation of Metadata Node. One MNode instance represents one node in the + * Metadata Tree + */ +public class BasicInternalMNode extends BasicMNode { + + /** + * suppress warnings reason: volatile for double synchronized check + * + *

      This will be a ConcurrentHashMap instance + */ + @SuppressWarnings("squid:S3077") + private transient volatile IMNodeContainer children = null; + + /** Constructor of MNode. */ + public BasicInternalMNode(IMemMNode parent, String name) { + super(parent, name); + } + + /** check whether the MNode has a child with the name */ + @Override + public boolean hasChild(String name) { + return (children != null && children.containsKey(name)); + } + + /** get the child with the name */ + @Override + public IMemMNode getChild(String name) { + IMemMNode child = null; + if (children != null) { + child = children.get(name); + } + return child; + } + + /** + * add a child to current mnode + * + * @param name child's name + * @param child child's node + * @return the child of this node after addChild + */ + @Override + public IMemMNode addChild(String name, IMemMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new MemMNodeContainer(); + } + } + } + child.setParent(this); + IMemMNode existingChild = children.putIfAbsent(name, child); + return existingChild == null ? child : existingChild; + } + + /** + * Add a child to the current mnode. + * + *

      This method will not take the child's name as one of the inputs and will also make this + * Mnode be child node's parent. All is to reduce the probability of mistaken by users and be more + * convenient for users to use. And the return of this method is used to conveniently construct a + * chain of time series for users. + * + * @param child child's node + * @return return the MNode already added + */ + @Override + public IMemMNode addChild(IMemMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new MemMNodeContainer(); + } + } + } + + child.setParent(this); + children.putIfAbsent(child.getName(), child); + return child; + } + + /** delete a child */ + @Override + public IMemMNode deleteChild(String name) { + if (children != null) { + return children.remove(name); + } + 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; + } + + oldChildNode.moveDataToNewMNode(newChildNode); + + children.replace(newChildNode.getName(), newChildNode); + } + + @Override + public void moveDataToNewMNode(IMemMNode newMNode) { + super.moveDataToNewMNode(newMNode); + + if (children != null) { + newMNode.setChildren(children); + children.forEach((childName, childNode) -> childNode.setParent(newMNode)); + } + } + + @Override + public IMNodeContainer getChildren() { + if (children == null) { + return MemMNodeContainer.emptyMNodeContainer(); + } + return children; + } + + @Override + public void setChildren(IMNodeContainer children) { + this.children = children; + } + + /** MNodeContainer reference and basic occupation, 8 + 80B */ + @Override + public int estimateSize() { + return 8 + 80 + super.estimateSize(); + } + + @Override + public IMemMNode getAsMNode() { + return this; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java similarity index 71% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java index c4b51e88d6cd9..b8cd4c3144282 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/BasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java @@ -16,10 +16,11 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.db.metadata.newnode.basic; import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.container.MemMNodeContainer; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; @@ -40,15 +41,6 @@ public class BasicMNode implements IMemMNode { private static final long serialVersionUID = -770028375899514063L; - /** - * use in Measurement Node so it's protected suppress warnings reason: volatile for double - * synchronized check - * - *

      This will be a ConcurrentHashMap instance - */ - @SuppressWarnings("squid:S3077") - protected transient volatile IMNodeContainer children = null; - private IMemMNode parent; private BasicMNodeInfo basicMNodeInfo; @@ -56,7 +48,7 @@ public class BasicMNode implements IMemMNode { private String fullPath; /** Constructor of MNode. */ - public BasicMNode(IMemMNode parent, String name) { + protected BasicMNode(IMemMNode parent, String name) { this.parent = parent; this.basicMNodeInfo = new BasicMNodeInfo(name); } @@ -119,17 +111,13 @@ public PartialPath getPartialPath() { /** check whether the MNode has a child with the name */ @Override public boolean hasChild(String name) { - return (children != null && children.containsKey(name)); + return false; } /** get the child with the name */ @Override public IMemMNode getChild(String name) { - IMemMNode child = null; - if (children != null) { - child = children.get(name); - } - return child; + return null; } /** @@ -141,21 +129,7 @@ public IMemMNode getChild(String name) { */ @Override public IMemMNode addChild(String name, IMemMNode child) { - /* use cpu time to exchange memory - * measurementNode's children should be null to save memory - * add child method will only be called when writing MTree, which is not a frequent operation - */ - if (children == null) { - // double check, children is volatile - synchronized (this) { - if (children == null) { - children = new MemMNodeContainer(); - } - } - } - child.setParent(this); - IMemMNode existingChild = children.putIfAbsent(name, child); - return existingChild == null ? child : existingChild; + return null; } /** @@ -171,30 +145,12 @@ public IMemMNode addChild(String name, IMemMNode child) { */ @Override public IMemMNode addChild(IMemMNode child) { - /* use cpu time to exchange memory - * measurementNode's children should be null to save memory - * add child method will only be called when writing MTree, which is not a frequent operation - */ - if (children == null) { - // double check, children is volatile - synchronized (this) { - if (children == null) { - children = new MemMNodeContainer(); - } - } - } - - child.setParent(this); - children.putIfAbsent(child.getName(), child); - return child; + return null; } /** delete a child */ @Override public IMemMNode deleteChild(String name) { - if (children != null) { - return children.remove(name); - } return null; } @@ -205,42 +161,20 @@ public IMemMNode deleteChild(String 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; - } - - oldChildNode.moveDataToNewMNode(newChildNode); - - children.replace(newChildNode.getName(), newChildNode); - } + public synchronized void replaceChild(String oldChildName, IMemMNode newChildNode) {} @Override public void moveDataToNewMNode(IMemMNode newMNode) { newMNode.setParent(parent); - - if (children != null) { - newMNode.setChildren(children); - children.forEach((childName, childNode) -> childNode.setParent(newMNode)); - } } @Override public IMNodeContainer getChildren() { - if (children == null) { - return MemMNodeContainer.emptyMNodeContainer(); - } - return children; + return MemMNodeContainer.emptyMNodeContainer(); } @Override - public void setChildren(IMNodeContainer children) { - this.children = children; - } + public void setChildren(IMNodeContainer children) {} @Override public boolean isAboveDatabase() { @@ -286,4 +220,33 @@ public IMeasurementMNode getAsMeasurementMNode() { public R accept(MNodeVisitor visitor, C context) { return visitor.visitBasicMNode(this, context); } + + /** + * The basic memory occupied by any BasicMNode object + * + *

        + *
      1. object header, 8B + *
      2. node attributes + *
          + *
        1. basicMNodeInfo reference, 8B + *
        2. parent reference, 8B + *
        3. fullPath reference, 8B + *
        + *
      3. MapEntry in parent + *
          + *
        1. key reference, 8B + *
        2. value reference, 8B + *
        3. entry size, see ConcurrentHashMap.Node, 28 + *
        + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + 8 + 8 + 8 + 8 + 28 + basicMNodeInfo.estimateSize(); + } + + @Override + public IMemMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicInternalMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicInternalMNode.java new file mode 100644 index 0000000000000..84f324e7446a3 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicInternalMNode.java @@ -0,0 +1,190 @@ +/* + * 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.metadata.newnode.basic; + +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; + +/** + * This class is the implementation of Metadata Node. One MNode instance represents one node in the + * Metadata Tree + */ +public class CacheBasicInternalMNode extends CacheBasicMNode { + + /** + * suppress warnings reason: volatile for double synchronized check + * + *

      This will be a ConcurrentHashMap instance + */ + @SuppressWarnings("squid:S3077") + private transient volatile IMNodeContainer children = null; + + /** Constructor of MNode. */ + public CacheBasicInternalMNode(ICacheMNode parent, String name) { + super(parent, name); + } + + /** check whether the MNode has a child with the name */ + @Override + public boolean hasChild(String name) { + return (children != null && children.containsKey(name)); + } + + /** get the child with the name */ + @Override + public ICacheMNode getChild(String name) { + ICacheMNode child = null; + if (children != null) { + child = children.get(name); + } + return child; + } + + /** + * add a child to current mnode + * + * @param name child's name + * @param child child's node + * @return the child of this node after addChild + */ + @Override + public ICacheMNode addChild(String name, ICacheMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new CachedMNodeContainer(); + } + } + } + child.setParent(this); + ICacheMNode existingChild = children.putIfAbsent(name, child); + return existingChild == null ? child : existingChild; + } + + /** + * Add a child to the current mnode. + * + *

      This method will not take the child's name as one of the inputs and will also make this + * Mnode be child node's parent. All is to reduce the probability of mistaken by users and be more + * convenient for users to use. And the return of this method is used to conveniently construct a + * chain of time series for users. + * + * @param child child's node + * @return return the MNode already added + */ + @Override + public ICacheMNode addChild(ICacheMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new CachedMNodeContainer(); + } + } + } + + child.setParent(this); + children.putIfAbsent(child.getName(), child); + return child; + } + + /** delete a child */ + @Override + public ICacheMNode deleteChild(String name) { + if (children != null) { + return children.remove(name); + } + 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, ICacheMNode newChildNode) { + if (!oldChildName.equals(newChildNode.getName())) { + throw new RuntimeException("New child's name must be the same as old child's name!"); + } + ICacheMNode oldChildNode = this.getChild(oldChildName); + if (oldChildNode == null) { + return; + } + + oldChildNode.moveDataToNewMNode(newChildNode); + + children.replace(newChildNode.getName(), newChildNode); + } + + @Override + public void moveDataToNewMNode(ICacheMNode newMNode) { + super.moveDataToNewMNode(newMNode); + + if (children != null) { + newMNode.setChildren(children); + children.forEach((childName, childNode) -> childNode.setParent(newMNode)); + } + } + + @Override + public IMNodeContainer getChildren() { + if (children == null) { + return CachedMNodeContainer.emptyMNodeContainer(); + } + return children; + } + + @Override + public void setChildren(IMNodeContainer children) { + this.children = children; + } + + /** + * MNodeContainer reference and basic occupation, 8 + 80B. + * + *

        + * Estimated delta size of CachedMNodeContainer compared with other MNodeContainer. + *
      1. address, 8B + *
      2. three map reference (1 cache and 2 buffer), 8 * 3 = 24B + *
      3. estimate occupation of map implementation, minus the basic container occupation, 80 * 3 - + * 80 = 160B + *
      + */ + @Override + public int estimateSize() { + return 8 + 80 + 192 + super.estimateSize(); + } + + @Override + public ICacheMNode getAsMNode() { + return this; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java index 91dbda2a19e1a..1301e62590950 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java @@ -42,15 +42,6 @@ public class CacheBasicMNode implements ICacheMNode { private static final long serialVersionUID = -770028375899514063L; - /** - * use in Measurement Node so it's protected suppress warnings reason: volatile for double - * synchronized check - * - *

      This will be a ConcurrentHashMap instance - */ - @SuppressWarnings("squid:S3077") - protected transient volatile IMNodeContainer children = null; - private ICacheMNode parent; private CacheMNodeInfo cacheMNodeInfo; @@ -121,17 +112,13 @@ public PartialPath getPartialPath() { /** check whether the MNode has a child with the name */ @Override public boolean hasChild(String name) { - return (children != null && children.containsKey(name)); + return false; } /** get the child with the name */ @Override public ICacheMNode getChild(String name) { - ICacheMNode child = null; - if (children != null) { - child = children.get(name); - } - return child; + return null; } /** @@ -143,21 +130,7 @@ public ICacheMNode getChild(String name) { */ @Override public ICacheMNode addChild(String name, ICacheMNode child) { - /* use cpu time to exchange memory - * measurementNode's children should be null to save memory - * add child method will only be called when writing MTree, which is not a frequent operation - */ - if (children == null) { - // double check, children is volatile - synchronized (this) { - if (children == null) { - children = new CachedMNodeContainer(); - } - } - } - child.setParent(this); - ICacheMNode existingChild = children.putIfAbsent(name, child); - return existingChild == null ? child : existingChild; + return null; } /** @@ -173,30 +146,12 @@ public ICacheMNode addChild(String name, ICacheMNode child) { */ @Override public ICacheMNode addChild(ICacheMNode child) { - /* use cpu time to exchange memory - * measurementNode's children should be null to save memory - * add child method will only be called when writing MTree, which is not a frequent operation - */ - if (children == null) { - // double check, children is volatile - synchronized (this) { - if (children == null) { - children = new CachedMNodeContainer(); - } - } - } - - child.setParent(this); - children.putIfAbsent(child.getName(), child); - return child; + return null; } /** delete a child */ @Override public ICacheMNode deleteChild(String name) { - if (children != null) { - return children.remove(name); - } return null; } @@ -207,43 +162,21 @@ public ICacheMNode deleteChild(String name) { * @param newChildNode new child node */ @Override - public synchronized void replaceChild(String oldChildName, ICacheMNode newChildNode) { - if (!oldChildName.equals(newChildNode.getName())) { - throw new RuntimeException("New child's name must be the same as old child's name!"); - } - ICacheMNode oldChildNode = this.getChild(oldChildName); - if (oldChildNode == null) { - return; - } - - oldChildNode.moveDataToNewMNode(newChildNode); - - children.replace(newChildNode.getName(), newChildNode); - } + public synchronized void replaceChild(String oldChildName, ICacheMNode newChildNode) {} @Override public void moveDataToNewMNode(ICacheMNode newMNode) { newMNode.setParent(parent); newMNode.setCacheEntry(getCacheEntry()); - - if (children != null) { - newMNode.setChildren(children); - children.forEach((childName, childNode) -> childNode.setParent(newMNode)); - } } @Override public IMNodeContainer getChildren() { - if (children == null) { - return CachedMNodeContainer.emptyMNodeContainer(); - } - return children; + return CachedMNodeContainer.emptyMNodeContainer(); } @Override - public void setChildren(IMNodeContainer children) { - this.children = children; - } + public void setChildren(IMNodeContainer children) {} @Override public boolean isAboveDatabase() { @@ -299,4 +232,33 @@ public CacheEntry getCacheEntry() { public void setCacheEntry(CacheEntry cacheEntry) { cacheMNodeInfo.setCacheEntry(cacheEntry); } + + /** + * The basic memory occupied by any CacheBasicMNode object + * + *

        + *
      1. object header, 8B + *
      2. node attributes + *
          + *
        1. basicMNodeInfo reference, 8B + *
        2. parent reference, 8B + *
        3. fullPath reference, 8B + *
        + *
      3. MapEntry in parent + *
          + *
        1. key reference, 8B + *
        2. value reference, 8B + *
        3. entry size, see ConcurrentHashMap.Node, 28 + *
        + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + 8 + 8 + 8 + 8 + 28 + cacheMNodeInfo.estimateSize(); + } + + @Override + public ICacheMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicInternalMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicInternalMNode.java new file mode 100644 index 0000000000000..3bd97da0c872e --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicInternalMNode.java @@ -0,0 +1,180 @@ +/* + * 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.metadata.newnode.basic; + +import org.apache.iotdb.db.metadata.mnode.container.ConfigMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; +import org.apache.iotdb.db.metadata.newnode.IConfigMNode; + +/** + * This class is the implementation of Metadata Node. One MNode instance represents one node in the + * Metadata Tree + */ +public class ConfigBasicInternalMNode extends ConfigBasicMNode { + + /** + * suppress warnings reason: volatile for double synchronized check + * + *

      This will be a ConcurrentHashMap instance + */ + @SuppressWarnings("squid:S3077") + private transient volatile IMNodeContainer children = null; + + /** Constructor of MNode. */ + public ConfigBasicInternalMNode(IConfigMNode parent, String name) { + super(parent, name); + } + + /** check whether the MNode has a child with the name */ + @Override + public boolean hasChild(String name) { + return (children != null && children.containsKey(name)); + } + + /** get the child with the name */ + @Override + public IConfigMNode getChild(String name) { + IConfigMNode child = null; + if (children != null) { + child = children.get(name); + } + return child; + } + + /** + * add a child to current mnode + * + * @param name child's name + * @param child child's node + * @return the child of this node after addChild + */ + @Override + public IConfigMNode addChild(String name, IConfigMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new ConfigMNodeContainer(); + } + } + } + child.setParent(this); + IConfigMNode existingChild = children.putIfAbsent(name, child); + return existingChild == null ? child : existingChild; + } + + /** + * Add a child to the current mnode. + * + *

      This method will not take the child's name as one of the inputs and will also make this + * Mnode be child node's parent. All is to reduce the probability of mistaken by users and be more + * convenient for users to use. And the return of this method is used to conveniently construct a + * chain of time series for users. + * + * @param child child's node + * @return return the MNode already added + */ + @Override + public IConfigMNode addChild(IConfigMNode child) { + /* use cpu time to exchange memory + * measurementNode's children should be null to save memory + * add child method will only be called when writing MTree, which is not a frequent operation + */ + if (children == null) { + // double check, children is volatile + synchronized (this) { + if (children == null) { + children = new ConfigMNodeContainer(); + } + } + } + + child.setParent(this); + children.putIfAbsent(child.getName(), child); + return child; + } + + /** delete a child */ + @Override + public IConfigMNode deleteChild(String name) { + if (children != null) { + return children.remove(name); + } + 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 getChildren() { + if (children == null) { + return ConfigMNodeContainer.emptyMNodeContainer(); + } + return children; + } + + @Override + public void setChildren(IMNodeContainer children) { + this.children = children; + } + + /** MNodeContainer reference and basic occupation, 8 + 80B */ + @Override + public int estimateSize() { + return 8 + 80 + super.estimateSize(); + } + + @Override + public IConfigMNode getAsMNode() { + return this; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java index ffdace0c72526..79b0526754515 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java @@ -37,15 +37,6 @@ public class ConfigBasicMNode implements IConfigMNode { private static final long serialVersionUID = -770028375899514063L; - /** - * use in Measurement Node so it's protected suppress warnings reason: volatile for double - * synchronized check - * - *

      This will be a ConcurrentHashMap instance - */ - @SuppressWarnings("squid:S3077") - protected transient volatile IMNodeContainer children = null; - private IConfigMNode parent; private ConfigMNodeInfo configMNodeInfo; @@ -116,17 +107,13 @@ public PartialPath getPartialPath() { /** check whether the MNode has a child with the name */ @Override public boolean hasChild(String name) { - return (children != null && children.containsKey(name)); + return false; } /** get the child with the name */ @Override public IConfigMNode getChild(String name) { - IConfigMNode child = null; - if (children != null) { - child = children.get(name); - } - return child; + return null; } /** @@ -138,21 +125,7 @@ public IConfigMNode getChild(String name) { */ @Override public IConfigMNode addChild(String name, IConfigMNode child) { - /* use cpu time to exchange memory - * measurementNode's children should be null to save memory - * add child method will only be called when writing MTree, which is not a frequent operation - */ - if (children == null) { - // double check, children is volatile - synchronized (this) { - if (children == null) { - children = new ConfigMNodeContainer(); - } - } - } - child.setParent(this); - IConfigMNode existingChild = children.putIfAbsent(name, child); - return existingChild == null ? child : existingChild; + return null; } /** @@ -168,30 +141,12 @@ public IConfigMNode addChild(String name, IConfigMNode child) { */ @Override public IConfigMNode addChild(IConfigMNode child) { - /* use cpu time to exchange memory - * measurementNode's children should be null to save memory - * add child method will only be called when writing MTree, which is not a frequent operation - */ - if (children == null) { - // double check, children is volatile - synchronized (this) { - if (children == null) { - children = new ConfigMNodeContainer(); - } - } - } - - child.setParent(this); - children.putIfAbsent(child.getName(), child); - return child; + return null; } /** delete a child */ @Override public IConfigMNode deleteChild(String name) { - if (children != null) { - return children.remove(name); - } return null; } @@ -202,43 +157,21 @@ public IConfigMNode deleteChild(String 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); - } + public synchronized void replaceChild(String oldChildName, IConfigMNode newChildNode) {} @Override public void moveDataToNewMNode(IConfigMNode newMNode) { newMNode.setParent(parent); newMNode.setSchemaTemplateId(configMNodeInfo.getSchemaTemplateIdWithState()); - - if (children != null) { - newMNode.setChildren(children); - children.forEach((childName, childNode) -> childNode.setParent(newMNode)); - } } @Override public IMNodeContainer getChildren() { - if (children == null) { - return ConfigMNodeContainer.emptyMNodeContainer(); - } - return children; + return ConfigMNodeContainer.emptyMNodeContainer(); } @Override - public void setChildren(IMNodeContainer children) { - this.children = children; - } + public void setChildren(IMNodeContainer children) {} @Override public boolean isAboveDatabase() { @@ -314,4 +247,33 @@ public boolean isSchemaTemplatePreUnset() { public void unsetSchemaTemplate() { configMNodeInfo.unsetSchemaTemplate(); } + + /** + * The basic memory occupied by any ConfigBasicMNode object + * + *

        + *
      1. object header, 8B + *
      2. node attributes + *
          + *
        1. basicMNodeInfo reference, 8B + *
        2. parent reference, 8B + *
        3. fullPath reference, 8B + *
        + *
      3. MapEntry in parent + *
          + *
        1. key reference, 8B + *
        2. value reference, 8B + *
        3. entry size, see ConcurrentHashMap.Node, 28 + *
        + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + 8 + 8 + 8 + 8 + 28 + configMNodeInfo.estimateSize(); + } + + @Override + public IConfigMNode getAsMNode() { + return this; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java index 7b36bae878786..e6193ac049dbb 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java @@ -32,11 +32,12 @@ public abstract class AbstractDatabaseMNode, BasicNode exten private static final long serialVersionUID = 7999036474525817732L; - private final DatabaseInfo databaseInfo; - protected BasicNode basicMNode; + private final IDatabaseInfo databaseInfo; + protected final BasicNode basicMNode; - public AbstractDatabaseMNode(String name) { - this.databaseInfo = new DatabaseInfo(name); + public AbstractDatabaseMNode(BasicNode basicMNode, IDatabaseInfo databaseInfo) { + this.basicMNode = basicMNode; + this.databaseInfo = databaseInfo; } public BasicNode getBasicMNode() { @@ -213,4 +214,22 @@ public void setStorageGroupSchema(TDatabaseSchema schema) { public TDatabaseSchema getStorageGroupSchema() { return databaseInfo.getStorageGroupSchema(); } + + /** + * The basic memory occupied by any AbstractDatabaseMNode object + * + *
        + *
      1. object header, 8B + *
      2. node attributes + *
          + *
        1. databaseInfo reference, 8B + *
        2. basicMNode reference, 8B + *
        + *
      3. MapEntry in parent + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + databaseInfo.estimateSize() + basicMNode.estimateSize(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java index 9562913ea4c1b..c50a8e1f0e255 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java @@ -20,14 +20,14 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; public class CacheDatabaseMNode extends AbstractDatabaseMNode implements ICacheMNode { public CacheDatabaseMNode(ICacheMNode parent, String name) { - super(name); - this.basicMNode = new CacheBasicMNode(parent, name); + super(new CacheBasicInternalMNode(parent, name), new DatabaseInfo(name)); } // TODO: @yukun, remove this constructor diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java index a9f95b109cc3c..cfc4fe3e6b4b0 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java @@ -19,14 +19,14 @@ package org.apache.iotdb.db.metadata.newnode.database; import org.apache.iotdb.db.metadata.newnode.IConfigMNode; +import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicInternalMNode; import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; public class ConfigDatabaseMNode extends AbstractDatabaseMNode implements IConfigMNode { public ConfigDatabaseMNode(IConfigMNode parent, String name) { - super(name); - this.basicMNode = new ConfigBasicMNode(parent, name); + super(new ConfigBasicInternalMNode(parent, name), new DatabaseInfo(name)); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java index 8a18836a5944e..4da80fdd1bc55 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java @@ -28,6 +28,7 @@ public DatabaseInfo(String name) { this.schema = new TDatabaseSchema(name); } + @Override public void moveDataToNewMNode(IDatabaseMNode newMNode) { newMNode.setStorageGroupSchema(schema); } @@ -66,4 +67,18 @@ public void setStorageGroupSchema(TDatabaseSchema schema) { public TDatabaseSchema getStorageGroupSchema() { return schema; } + + /** + * The memory occupied by an DatabaseDeviceInfo based occupation + * + *
        + *
      1. object header, 8B + *
      2. reference schema, 8B + *
      3. object TDatabaseSchema, 112B (calculated by RamUsageEstimator) + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + 112; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java index 9333c35e0655a..ed7589a2f63cc 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java @@ -18,15 +18,15 @@ */ package org.apache.iotdb.db.metadata.newnode.database; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; public class DatabaseMNode extends AbstractDatabaseMNode implements IMemMNode { public DatabaseMNode(IMemMNode parent, String name) { - super(name); - this.basicMNode = new BasicMNode(parent, name); + super(new BasicInternalMNode(parent, name), new DatabaseInfo(name)); } // TODO: @yukun, remove this constructor diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java index 6761db212ddad..1fbef8b4e459b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java @@ -21,6 +21,9 @@ import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; public interface IDatabaseInfo { + + void moveDataToNewMNode(IDatabaseMNode newMNode); + long getDataTTL(); void setDataTTL(long dataTTL); @@ -34,4 +37,6 @@ public interface IDatabaseInfo { void setStorageGroupSchema(TDatabaseSchema schema); TDatabaseSchema getStorageGroupSchema(); + + int estimateSize(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java index a11efc2139163..80fa13370ff8f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java @@ -18,9 +18,22 @@ */ package org.apache.iotdb.db.metadata.newnode.database; +import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; import org.apache.iotdb.db.metadata.mnode.IMNode; /** This interface defines a DatabaseMNode's operation interfaces. */ -public interface IDatabaseMNode> extends IMNode, IDatabaseInfo { - N getAsMNode(); +public interface IDatabaseMNode> extends IMNode { + long getDataTTL(); + + void setDataTTL(long dataTTL); + + void setSchemaReplicationFactor(int schemaReplicationFactor); + + void setDataReplicationFactor(int dataReplicationFactor); + + void setTimePartitionInterval(long timePartitionInterval); + + void setStorageGroupSchema(TDatabaseSchema schema); + + TDatabaseSchema getStorageGroupSchema(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java index f6bbf1b80090c..d8f7219bd3558 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java @@ -34,11 +34,13 @@ public abstract class AbstractDatabaseDeviceMNode, BasicNode extends IMNode> implements IDatabaseMNode, IDeviceMNode { - private DatabaseDeviceInfo databaseDeviceInfo; - protected BasicNode basicMNode; + private final DatabaseDeviceInfo databaseDeviceInfo; + protected final BasicNode basicMNode; - public AbstractDatabaseDeviceMNode() { - this.databaseDeviceInfo = new DatabaseDeviceInfo<>(); + public AbstractDatabaseDeviceMNode( + BasicNode basicMNode, DatabaseDeviceInfo databaseDeviceInfo) { + this.basicMNode = basicMNode; + this.databaseDeviceInfo = databaseDeviceInfo; } public BasicNode getBasicMNode() { @@ -285,4 +287,22 @@ public boolean isAligned() { public void setAligned(boolean isAligned) { databaseDeviceInfo.setAligned(isAligned); } + + /** + * The basic memory occupied by any AbstractDatabaseDeviceMNode object + * + *
        + *
      1. object header, 8B + *
      2. node attributes + *
          + *
        1. databaseDeviceInfo reference, 8B + *
        2. basicMNode reference, 8B + *
        + *
      3. MapEntry in parent + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + databaseDeviceInfo.estimateSize() + basicMNode.estimateSize(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java index 5d78f0afec0d8..403150a08e2d6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java @@ -19,15 +19,16 @@ package org.apache.iotdb.db.metadata.newnode.databasedevice; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; +import org.apache.iotdb.db.metadata.newnode.DatabaseDeviceInfo; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; public class CacheDatabaseDeviceMNode extends AbstractDatabaseDeviceMNode implements ICacheMNode { public CacheDatabaseDeviceMNode(ICacheMNode parent, String name, long dataTTL) { - super(); - this.basicMNode = new CacheBasicMNode(parent, name); + super(new CacheBasicInternalMNode(parent, name), new DatabaseDeviceInfo<>()); setDataTTL(dataTTL); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java index 222586844d04f..2b6b581bc878f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java @@ -18,14 +18,15 @@ */ package org.apache.iotdb.db.metadata.newnode.databasedevice; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.DatabaseDeviceInfo; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; public class DatabaseDeviceMNode extends AbstractDatabaseDeviceMNode implements IMemMNode { public DatabaseDeviceMNode(IMemMNode parent, String name, long dataTTL) { - super(); - this.basicMNode = new BasicMNode(parent, name); + super(new BasicInternalMNode(parent, name), new DatabaseDeviceInfo<>()); setDataTTL(dataTTL); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java index ff904812fd1ce..312552465130b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java @@ -31,12 +31,12 @@ public abstract class AbstractDeviceMNode, BasicNode extends IMNode> implements IDeviceMNode { - private final DeviceInfo deviceInfo; - protected BasicNode basicMNode; + private final IDeviceInfo deviceInfo; + protected final BasicNode basicMNode; - /** Constructor of MNode. */ - public AbstractDeviceMNode() { - this.deviceInfo = new DeviceInfo<>(); + public AbstractDeviceMNode(BasicNode basicMNode, IDeviceInfo deviceInfo) { + this.basicMNode = basicMNode; + this.deviceInfo = deviceInfo; } public BasicNode getBasicMNode() { @@ -257,4 +257,22 @@ public boolean isAligned() { public void setAligned(boolean isAligned) { deviceInfo.setAligned(isAligned); } + + /** + * The basic memory occupied by any AbstractDeviceMNode object + * + *
        + *
      1. object header, 8B + *
      2. node attributes + *
          + *
        1. deviceInfo reference, 8B + *
        2. basicMNode reference, 8B + *
        + *
      3. MapEntry in parent + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + deviceInfo.estimateSize() + basicMNode.estimateSize(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java index 459cbc9d792ba..e0b3ea50bd4ce 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java @@ -20,13 +20,14 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; public class CacheDeviceMNode extends AbstractDeviceMNode implements ICacheMNode { public CacheDeviceMNode(ICacheMNode parent, String name) { - this.basicMNode = new CacheBasicMNode(parent, name); + super(new CacheBasicInternalMNode(parent, name), new DeviceInfo<>()); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java index 716d59ed715d8..a1918192a2a3c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java @@ -49,6 +49,7 @@ public class DeviceInfo> implements IDeviceInfo { private volatile boolean isAligned = false; + @Override public void moveDataToNewMNode(IDeviceMNode newMNode) { newMNode.setSchemaTemplateId(schemaTemplateId); newMNode.setUseTemplate(useTemplate); @@ -92,10 +93,12 @@ public void setAliasChildren(Map> aliasChildren) { this.aliasChildren = aliasChildren; } + @Override public boolean hasAliasChild(String name) { return aliasChildren != null && aliasChildren.containsKey(name); } + @Override public N getAliasChild(String name) { if (aliasChildren != null) { IMeasurementMNode child = aliasChildren.get(name); @@ -171,4 +174,20 @@ public boolean isAligned() { public void setAligned(boolean isAligned) { this.isAligned = isAligned; } + + /** + * The memory occupied by an DeviceInfo based occupation + * + *
        + *
      1. object header, 8B + *
      2. int schemaTemplateId, 4B + *
      3. boolean useTemplate, 1B + *
      4. boolean isAligned, 1B + *
      5. aliasChildren reference, 8B + *
      + */ + @Override + public int estimateSize() { + return 8 + 4 + 1 + 1 + 8; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java index 8e009763e2adb..c2aaaa95e7379 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java @@ -18,13 +18,14 @@ */ package org.apache.iotdb.db.metadata.newnode.device; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; public class DeviceMNode extends AbstractDeviceMNode implements IMemMNode { public DeviceMNode(IMemMNode parent, String name) { - this.basicMNode = new BasicMNode(parent, name); + super(new BasicInternalMNode(parent, name), new DeviceInfo<>()); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java index 605bcd2a1d8ae..85e0a2da8be65 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java @@ -25,6 +25,8 @@ public interface IDeviceInfo> { + void moveDataToNewMNode(IDeviceMNode newMNode); + boolean addAlias(String alias, IMeasurementMNode child); void deleteAliasChild(String alias); @@ -33,6 +35,10 @@ public interface IDeviceInfo> { void setAliasChildren(Map> aliasChildren); + boolean hasAliasChild(String name); + + N getAliasChild(String name); + boolean isUseTemplate(); void setUseTemplate(boolean useTemplate); @@ -56,4 +62,6 @@ public interface IDeviceInfo> { boolean isAligned(); void setAligned(boolean isAligned); + + int estimateSize(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java index b863fb4bd189f..f60da8ad9af49 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java @@ -19,7 +19,40 @@ package org.apache.iotdb.db.metadata.newnode.device; import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -public interface IDeviceMNode> extends IMNode, IDeviceInfo { - N getAsMNode(); +import java.util.Map; + +public interface IDeviceMNode> extends IMNode { + boolean addAlias(String alias, IMeasurementMNode child); + + void deleteAliasChild(String alias); + + Map> getAliasChildren(); + + void setAliasChildren(Map> aliasChildren); + + boolean isUseTemplate(); + + void setUseTemplate(boolean useTemplate); + + void setSchemaTemplateId(int schemaTemplateId); + + /** @return the logic id of template set or activated on this node, id>=-1 */ + int getSchemaTemplateId(); + + /** @return the template id with current state, may be negative since unset or deactivation */ + int getSchemaTemplateIdWithState(); + + boolean isPreDeactivateTemplate(); + + void preDeactivateTemplate(); + + void rollbackPreDeactivateTemplate(); + + void deactivateTemplate(); + + boolean isAligned(); + + void setAligned(boolean isAligned); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java index 3f620f7bb9e03..21922ab7bcadc 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java @@ -58,7 +58,7 @@ public ICacheMNode createAboveDatabaseMNode(ICacheMNode parent, String name) { } @Override - public ICacheMNode createBasicMNode(ICacheMNode parent, String name) { + public ICacheMNode createInternalMNode(ICacheMNode parent, String name) { return new CacheBasicMNode(parent, name); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java index 313552a4738b7..9b4a6ed4aa163 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java @@ -54,7 +54,7 @@ public IConfigMNode createAboveDatabaseMNode(IConfigMNode parent, String name) { } @Override - public IConfigMNode createBasicMNode(IConfigMNode parent, String name) { + public IConfigMNode createInternalMNode(IConfigMNode parent, String name) { return new ConfigBasicMNode(parent, name); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java index 99a7a5ce109a2..1ceb9fef6f74e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java @@ -36,5 +36,5 @@ IMeasurementMNode createMeasurementMNode( N createAboveDatabaseMNode(N parent, String name); - N createBasicMNode(N parent, String name); + N createInternalMNode(N parent, String name); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java index 4d58ebf5530e8..de32aba860648 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java @@ -18,9 +18,10 @@ */ package org.apache.iotdb.db.metadata.newnode.factory; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.databasedevice.DatabaseDeviceMNode; @@ -58,7 +59,7 @@ public IMemMNode createAboveDatabaseMNode(IMemMNode parent, String name) { } @Override - public IMemMNode createBasicMNode(IMemMNode parent, String name) { - return new BasicMNode(parent, name); + public IMemMNode createInternalMNode(IMemMNode parent, String name) { + return new BasicInternalMNode(parent, name); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java index 483060ddc6fd3..73d126fbf6466 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java @@ -37,12 +37,12 @@ public abstract class AbstractMeasurementMNode, BasicNode ex private static final Logger logger = LoggerFactory.getLogger(AbstractMeasurementMNode.class); - private final MeasurementInfo measurementInfo; - protected BasicNode basicMNode; + private final IMeasurementInfo measurementInfo; + protected final BasicNode basicMNode; - /** @param alias alias of measurementName */ - public AbstractMeasurementMNode(IMeasurementSchema schema, String alias) { - this.measurementInfo = new MeasurementInfo(schema, alias); + public AbstractMeasurementMNode(BasicNode basicMNode, IMeasurementInfo measurementInfo) { + this.basicMNode = basicMNode; + this.measurementInfo = measurementInfo; } public BasicNode getBasicMNode() { @@ -233,4 +233,22 @@ public IDeviceMNode getAsDeviceMNode() { public IMeasurementMNode getAsMeasurementMNode() { return this; } + + /** + * The basic memory occupied by any AbstractMeasurementMNode object + * + *
        + *
      1. object header, 8B + *
      2. node attributes + *
          + *
        1. measurementInfo reference, 8B + *
        2. basicMNode reference, 8B + *
        + *
      3. MapEntry in parent + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + measurementInfo.estimateSize() + basicMNode.estimateSize(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java index 30f852252b67d..7e6c2d296fd7d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java @@ -31,8 +31,9 @@ public class CacheMeasurementMNode extends AbstractMeasurementMNode parent, String name, IMeasurementSchema schema, String alias) { - super(schema, alias); - this.basicMNode = new CacheBasicMNode(parent == null ? null : parent.getAsMNode(), name); + super( + new CacheBasicMNode(parent == null ? null : parent.getAsMNode(), name), + new MeasurementInfo(schema, alias)); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java index d7741411bea55..716e78af92b94 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java @@ -40,4 +40,8 @@ public interface IMeasurementInfo { boolean isPreDeleted(); void setPreDeleted(boolean preDeleted); + + int estimateSize(); + + void moveDataToNewMNode(IMeasurementMNode newMNode); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java index ad62d5d2b84ba..c4a395a16bb10 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java @@ -20,11 +20,29 @@ import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; /** This interface defines a MeasurementMNode's operation interfaces. */ -public interface IMeasurementMNode> extends IMNode, IMeasurementInfo { +public interface IMeasurementMNode> extends IMNode { - N getAsMNode(); + IMeasurementSchema getSchema(); + + void setSchema(IMeasurementSchema schema); + + TSDataType getDataType(); + + String getAlias(); + + void setAlias(String alias); + + long getOffset(); + + void setOffset(long offset); + + boolean isPreDeleted(); + + void setPreDeleted(boolean preDeleted); MeasurementPath getMeasurementPath(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java index 04d4903486fbb..b0c2094de3de3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java @@ -32,11 +32,15 @@ public class MeasurementInfo implements IMeasurementInfo { /** whether this measurement is pre deleted and considered in black list */ private boolean preDeleted = false; + // alias length, hashCode and occupation in aliasMap, 4 + 4 + 44 = 52B + private static final int ALIAS_BASE_SIZE = 52; + public MeasurementInfo(IMeasurementSchema schema, String alias) { this.schema = schema; this.alias = alias; } + @Override public void moveDataToNewMNode(IMeasurementMNode newMNode) { newMNode.setSchema(schema); newMNode.setAlias(alias); @@ -88,4 +92,20 @@ public boolean isPreDeleted() { public void setPreDeleted(boolean preDeleted) { this.preDeleted = preDeleted; } + + /** + * The memory occupied by an MeasurementInfo based occupation + * + *
        + *
      1. object header, 8B + *
      2. alias reference, 8B + *
      3. long tagOffset, 8B + *
      4. boolean preDeleted, 1B + *
      5. estimated schema size, 32B + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + 8 + 1 + 32 + (alias == null ? 0 : ALIAS_BASE_SIZE + alias.length()); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java index 444b0afa044af..3061507a0cf70 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java @@ -18,10 +18,10 @@ */ package org.apache.iotdb.db.metadata.newnode.measurement; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.container.MemMNodeContainer; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; @@ -30,8 +30,9 @@ public class MeasurementMNode extends AbstractMeasurementMNode parent, String name, IMeasurementSchema schema, String alias) { - super(schema, alias); - this.basicMNode = new BasicMNode(parent == null ? null : parent.getAsMNode(), name); + super( + new BasicMNode(parent == null ? null : parent.getAsMNode(), name), + new MeasurementInfo(schema, alias)); } @Override diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java index 03671b68085e2..dbd0a0bc71de9 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.path.AlignedPath; import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.utils.MetaUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.Pair; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java index 7702c72719484..5a68c0cd4cad9 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java @@ -19,8 +19,11 @@ package org.apache.iotdb.db.metadata.mnode; import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.newnode.device.DeviceMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.utils.MetaUtils; @@ -34,10 +37,12 @@ import static org.junit.Assert.assertSame; public class MNodeTest { + + private final IMNodeFactory nodeFactory = new MemMNodeFactory(); @Test public void testReplaceChild() { - BasicMNode rootNode = new BasicMNode(null, "root"); + IMemMNode rootNode = nodeFactory.createInternalMNode(null, "root"); IDeviceMNode aNode = new DeviceMNode(rootNode, "a"); rootNode.addChild(aNode.getName(), aNode.getAsMNode()); @@ -59,28 +64,28 @@ public void testReplaceChild() { @Test public void testAddChild() { - BasicMNode rootNode = new BasicMNode(null, "root"); + IMemMNode rootNode = nodeFactory.createInternalMNode(null, "root"); - IMNode speedNode = + IMemMNode speedNode = rootNode - .addChild(new BasicMNode(null, "sg1")) - .addChild(new BasicMNode(null, "a")) - .addChild(new BasicMNode(null, "b")) - .addChild(new BasicMNode(null, "c")) - .addChild(new BasicMNode(null, "d")) - .addChild(new BasicMNode(null, "device")) - .addChild(new BasicMNode(null, "speed")); + .addChild(nodeFactory.createInternalMNode(null, "sg1")) + .addChild(nodeFactory.createInternalMNode(null, "a")) + .addChild(nodeFactory.createInternalMNode(null, "b")) + .addChild(nodeFactory.createInternalMNode(null, "c")) + .addChild(nodeFactory.createInternalMNode(null, "d")) + .addChild(nodeFactory.createInternalMNode(null, "device")) + .addChild(nodeFactory.createInternalMNode(null, "speed")); assertEquals("root.sg1.a.b.c.d.device.speed", speedNode.getFullPath()); - IMNode temperatureNode = + IMemMNode temperatureNode = rootNode .getChild("sg1") - .addChild(new BasicMNode(null, "aa")) - .addChild(new BasicMNode(null, "bb")) - .addChild(new BasicMNode(null, "cc")) - .addChild(new BasicMNode(null, "dd")) - .addChild(new BasicMNode(null, "device11")) - .addChild(new BasicMNode(null, "temperature")); + .addChild(nodeFactory.createInternalMNode(null, "aa")) + .addChild(nodeFactory.createInternalMNode(null, "bb")) + .addChild(nodeFactory.createInternalMNode(null, "cc")) + .addChild(nodeFactory.createInternalMNode(null, "dd")) + .addChild(nodeFactory.createInternalMNode(null, "device11")) + .addChild(nodeFactory.createInternalMNode(null, "temperature")); assertEquals("root.sg1.aa.bb.cc.dd.device11.temperature", temperatureNode.getFullPath()); } } From 4ad201f0d2eb1af2cfed2209e63757456a841f23 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Thu, 9 Mar 2023 19:31:47 +0800 Subject: [PATCH 16/26] done factory and size --- .../estimator/BasicMNodSizeEstimator.java | 114 --------- ...Estimator.java => MNodeSizeEstimator.java} | 16 +- .../iotdb/db/metadata/mtree/ConfigMTree.java | 37 ++- .../mtree/MTreeBelowSGCachedImpl.java | 42 ++-- .../mtree/MTreeBelowSGMemoryImpl.java | 37 ++- .../mtree/snapshot/MemMTreeSnapshotUtil.java | 46 ++-- .../mtree/store/CachedMTreeStore.java | 34 ++- .../mtree/store/ConfigMTreeStore.java | 3 +- .../metadata/mtree/store/MemMTreeStore.java | 58 ++--- .../mtree/store/disk/cache/CacheManager.java | 5 +- .../memcontrol/CachedMNodeSizeEstimator.java | 72 ------ .../store/disk/memcontrol/MemManager.java | 26 +- .../store/disk/schemafile/MockSchemaFile.java | 44 ++-- .../store/disk/schemafile/RecordUtils.java | 14 +- .../store/disk/schemafile/SchemaFile.java | 16 +- .../db/metadata/newnode/basic/BasicMNode.java | 2 +- .../newnode/factory/CacheMNodeFactory.java | 23 +- .../newnode/factory/ConfigMNodeFactory.java | 24 +- .../newnode/factory/IMNodeFactory.java | 2 + .../newnode/factory/MemMNodeFactory.java | 20 +- .../schemaregion/SchemaRegionMemoryImpl.java | 9 +- .../SchemaRegionSchemaFileImpl.java | 7 +- .../iotdb/db/metadata/MetaUtilsTest.java | 18 +- .../iotdb/db/metadata/mnode/MNodeTest.java | 13 +- .../mtree/disk/CachedMNodeContainerTest.java | 17 +- .../mtree/schemafile/RecordUtilTests.java | 14 +- .../mtree/schemafile/SchemaFileLogTest.java | 7 +- .../mtree/schemafile/SchemaFileTest.java | 94 ++++---- .../mtree/schemafile/SchemaPageTest.java | 14 +- .../mtree/schemafile/WrappedSegmentTest.java | 24 +- .../schemaRegion/SchemaStatisticsTest.java | 228 +++++++++--------- .../iotdb/db/tools/SchemaFileSketchTest.java | 19 +- 32 files changed, 477 insertions(+), 622 deletions(-) delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/{IMNodeSizeEstimator.java => MNodeSizeEstimator.java} (67%) delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java deleted file mode 100644 index cc0fea6bcfc12..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/BasicMNodSizeEstimator.java +++ /dev/null @@ -1,114 +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.metadata.mnode.estimator; - -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; - -public class BasicMNodSizeEstimator implements IMNodeSizeEstimator { - /** - * The basic memory occupied by any MNode object - * - *
        - *
      1. object header, 8B - *
      2. node attributes - *
          - *
        1. name reference, name length and name hash code, 8 + 4 + 4 = 16B - *
        2. parent reference, 8B - *
        3. fullPath reference, 8B - *
        4. cacheEntry reference, 8B - *
        - *
      3. MapEntry in parent - *
          - *
        1. key reference, 8B - *
        2. value reference, 8B - *
        3. entry size, see ConcurrentHashMap.Node, 28 - *
        - *
      - */ - protected static final int NODE_BASE_SIZE = 92; - - /** - * The basic extra memory occupied by an InternalMNode based on MNode occupation - * - *
        - *
      1. template reference, 8B - *
      2. boolean useTemplate, 1B - *
      3. MNodeContainer reference and basic occupation, 8 + 80B - *
      - */ - protected static final int INTERNAL_NODE_BASE_SIZE = 97; - - /** - * The basic extra memory occupied by an StorageGroupMNode based on InternalMNode occupation - * - *
        - *
      1. dataTTL, 8B - *
      2. fullPath length and hashCode, 4 + 4 = 8B - *
      - */ - protected static final int STORAGE_GROUP_NODE_BASE_SIZE = 16; - - /** - * The basic extra memory occupied by an EntityMNode based on InternalMNode occupation - * - *
        - *
      1. isAligned, 1B - *
      2. aliasChildren reference, 8B - *
      - */ - protected static final int ENTITY_NODE_BASE_SIZE = 9; - - /** - * The basic extra memory occupied by an MeasurementMNode based on MNode occupation - * - *
        - *
      1. alias reference, 8B - *
      2. tagOffset, 8B - *
      3. estimated schema size, 32B - *
      - */ - protected static final int MEASUREMENT_NODE_BASE_SIZE = 48; - // alias length, hashCode and occupation in aliasMap, 4 + 4 + 44 = 52B - protected static final int ALIAS_BASE_SIZE = 52; - - public int estimateSize(IMNode node) { - int size = NODE_BASE_SIZE + node.getName().length(); - if (node.isMeasurement()) { - size += MEASUREMENT_NODE_BASE_SIZE; - IMeasurementMNode measurementMNode = node.getAsMeasurementMNode(); - if (measurementMNode.getAlias() != null) { - size += ALIAS_BASE_SIZE + measurementMNode.getAlias().length(); - } - } else { - size += INTERNAL_NODE_BASE_SIZE; - if (node.isDatabase()) { - size += STORAGE_GROUP_NODE_BASE_SIZE; - size += node.getAsDatabaseMNode().getFullPath().length(); - } - - if (node.isDevice()) { - size += ENTITY_NODE_BASE_SIZE; - } - } - - return size; - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/IMNodeSizeEstimator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/MNodeSizeEstimator.java similarity index 67% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/IMNodeSizeEstimator.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/MNodeSizeEstimator.java index e9ecfd4cd849b..b7e4fe7c1637a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/IMNodeSizeEstimator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/MNodeSizeEstimator.java @@ -19,20 +19,10 @@ package org.apache.iotdb.db.metadata.mnode.estimator; -import org.apache.iotdb.db.metadata.mnode.IMNode; +public class MNodeSizeEstimator { + private static int ALIAS_BASE_SIZE = 52; -import static org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator.ALIAS_BASE_SIZE; -import static org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator.ENTITY_NODE_BASE_SIZE; - -public interface IMNodeSizeEstimator { - - int estimateSize(IMNode node); - - static int getEntityNodeBaseSize() { - return ENTITY_NODE_BASE_SIZE; - } - - static int getAliasBaseSize() { + public static int getAliasBaseSize() { return ALIAS_BASE_SIZE; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java index 8744dcd83d85f..47211a8f2485d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java @@ -35,8 +35,6 @@ import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeCollector; import org.apache.iotdb.db.metadata.mtree.traverser.counter.DatabaseCounter; import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; -import org.apache.iotdb.db.metadata.newnode.database.ConfigDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.factory.ConfigMNodeFactory; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; @@ -80,7 +78,7 @@ public class ConfigMTree { // this store is only used for traverser invoking private final ConfigMTreeStore store; - private final IMNodeFactory nodeFactory = new ConfigMNodeFactory(); + private final IMNodeFactory nodeFactory = ConfigMNodeFactory.getInstance(); public ConfigMTree() throws MetadataException { store = new ConfigMTreeStore(nodeFactory); @@ -113,7 +111,7 @@ public void setStorageGroup(PartialPath path) throws MetadataException { while (i < nodeNames.length - 1) { IConfigMNode temp = store.getChild(cur, nodeNames[i]); if (temp == null) { - store.addChild(cur, nodeNames[i], new ConfigBasicMNode(cur, nodeNames[i])); + store.addChild(cur, nodeNames[i], nodeFactory.createInternalMNode(cur, nodeNames[i])); } else if (temp.isDatabase()) { // before create database, check whether the database already exists throw new DatabaseAlreadySetException(temp.getFullPath()); @@ -133,10 +131,11 @@ public void setStorageGroup(PartialPath path) throws MetadataException { throw new DatabaseAlreadySetException(path.getFullPath(), true); } } else { - ConfigDatabaseMNode databaseMNode = new ConfigDatabaseMNode(cur, nodeNames[i]); + IDatabaseMNode databaseMNode = + nodeFactory.createDatabaseMNode(cur, nodeNames[i]); databaseMNode.setDataTTL(CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - IConfigMNode result = store.addChild(cur, nodeNames[i], databaseMNode); + IConfigMNode result = store.addChild(cur, nodeNames[i], databaseMNode.getAsMNode()); if (result != databaseMNode) { throw new DatabaseAlreadySetException(path.getFullPath(), true); @@ -359,7 +358,8 @@ public IConfigMNode getNodeWithAutoCreate(PartialPath path) throws DatabaseNotSe child = store.getChild(cur, nodeNames[i]); if (child == null) { if (hasStorageGroup) { - child = store.addChild(cur, nodeNames[i], new ConfigBasicMNode(cur, nodeNames[i])); + child = + store.addChild(cur, nodeNames[i], nodeFactory.createInternalMNode(cur, nodeNames[i])); } else { throw new DatabaseNotSetException(path.getFullPath()); } @@ -650,8 +650,8 @@ public void deserialize(InputStream inputStream) throws IOException { return; } - ConfigDatabaseMNode databaseMNode = deserializeStorageGroupMNode(inputStream); - ConfigBasicMNode basicMNode; + IConfigMNode databaseMNode = deserializeStorageGroupMNode(inputStream).getAsMNode(); + IConfigMNode basicMNode; Stack stack = new Stack<>(); stack.push(databaseMNode); @@ -673,7 +673,7 @@ public void deserialize(InputStream inputStream) throws IOException { name = basicMNode.getName(); break; case STORAGE_GROUP_MNODE_TYPE: - databaseMNode = deserializeStorageGroupMNode(inputStream); + databaseMNode = deserializeStorageGroupMNode(inputStream).getAsMNode(); childNum = 0; stack.push(databaseMNode); name = databaseMNode.getName(); @@ -686,21 +686,20 @@ public void deserialize(InputStream inputStream) throws IOException { this.root = stack.peek(); } - private ConfigBasicMNode deserializeConfigBasicMNode(InputStream inputStream) throws IOException { - ConfigBasicMNode basicMNode = - new ConfigBasicMNode(null, ReadWriteIOUtils.readString(inputStream)); + private IConfigMNode deserializeConfigBasicMNode(InputStream inputStream) throws IOException { + IConfigMNode basicMNode = + nodeFactory.createInternalMNode(null, ReadWriteIOUtils.readString(inputStream)); basicMNode.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); return basicMNode; } - private ConfigDatabaseMNode deserializeStorageGroupMNode(InputStream inputStream) - throws IOException { - ConfigDatabaseMNode databaseMNode = - new ConfigDatabaseMNode(null, ReadWriteIOUtils.readString(inputStream)); - databaseMNode.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); + private IConfigMNode deserializeStorageGroupMNode(InputStream inputStream) throws IOException { + IDatabaseMNode databaseMNode = + nodeFactory.createDatabaseMNode(null, ReadWriteIOUtils.readString(inputStream)); + databaseMNode.getAsMNode().setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); databaseMNode.setStorageGroupSchema( ThriftConfigNodeSerDeUtils.deserializeTStorageGroupSchema(inputStream)); - return databaseMNode; + return databaseMNode.getAsMNode(); } // endregion diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index 892631ee7eca8..ed90d3efcd79d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -46,11 +46,10 @@ import org.apache.iotdb.db.metadata.mtree.traverser.updater.EntityUpdater; import org.apache.iotdb.db.metadata.mtree.traverser.updater.MeasurementUpdater; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; @@ -108,7 +107,7 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { private volatile ICacheMNode storageGroupMNode; private final ICacheMNode rootNode; private final Function, Map> tagGetter; - private final IMNodeFactory nodeFactory; + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); private final int levelOfSG; // region MTree initialization, clear and serialization @@ -118,14 +117,10 @@ public MTreeBelowSGCachedImpl( Runnable flushCallback, Consumer> measurementProcess, int schemaRegionId, - CachedSchemaRegionStatistics regionStatistics, - IMNodeFactory nodeFactory) + CachedSchemaRegionStatistics regionStatistics) throws MetadataException, IOException { this.tagGetter = tagGetter; - this.nodeFactory = nodeFactory; - store = - new CachedMTreeStore( - storageGroupPath, schemaRegionId, regionStatistics, flushCallback, nodeFactory); + store = new CachedMTreeStore(storageGroupPath, schemaRegionId, regionStatistics, flushCallback); this.storageGroupMNode = store.getRoot(); this.storageGroupMNode.setParent(storageGroupMNode.getParent()); this.rootNode = store.generatePrefix(storageGroupPath); @@ -151,15 +146,13 @@ private MTreeBelowSGCachedImpl( PartialPath storageGroupPath, CachedMTreeStore store, Consumer> measurementProcess, - Function, Map> tagGetter, - IMNodeFactory nodeFactory) + Function, Map> tagGetter) throws MetadataException { this.store = store; this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupMNode.getPartialPath().getNodeLength() - 1; this.tagGetter = tagGetter; - this.nodeFactory = nodeFactory; // recover measurement try (MeasurementCollector collector = @@ -200,21 +193,14 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( CachedSchemaRegionStatistics regionStatistics, Consumer> measurementProcess, Function, Map> tagGetter, - Runnable flushCallback, - IMNodeFactory nodeFactory) + Runnable flushCallback) throws IOException, MetadataException { return new MTreeBelowSGCachedImpl( new PartialPath(storageGroupFullPath), CachedMTreeStore.loadFromSnapshot( - snapshotDir, - storageGroupFullPath, - schemaRegionId, - regionStatistics, - flushCallback, - nodeFactory), + snapshotDir, storageGroupFullPath, schemaRegionId, regionStatistics, flushCallback), measurementProcess, - tagGetter, - nodeFactory); + tagGetter); } // endregion @@ -300,7 +286,7 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( } IMeasurementMNode measurementMNode = - new CacheMeasurementMNode( + nodeFactory.createMeasurementMNode( entityMNode, leafName, new MeasurementSchema(leafName, dataType, encoding, compressor, props), @@ -385,7 +371,7 @@ public List> createAlignedTimeseries( for (int i = 0; i < measurements.size(); i++) { IMeasurementMNode measurementMNode = - new CacheMeasurementMNode( + nodeFactory.createMeasurementMNode( entityMNode, measurements.get(i), new MeasurementSchema( @@ -490,7 +476,7 @@ private ICacheMNode checkAndAutoCreateInternalPath(PartialPath devicePath) childName = nodeNames[i]; child = store.getChild(cur, childName); if (child == null) { - child = store.addChild(cur, childName, new CacheBasicMNode(cur, childName)); + child = store.addChild(cur, childName, nodeFactory.createInternalMNode(cur, childName)); } cur = child; @@ -515,7 +501,8 @@ private ICacheMNode checkAndAutoCreateDeviceNode(String deviceName, ICacheMNode ICacheMNode device = store.getChild(deviceParent, deviceName); if (device == null) { device = - store.addChild(deviceParent, deviceName, new CacheBasicMNode(deviceParent, deviceName)); + store.addChild( + deviceParent, deviceName, nodeFactory.createInternalMNode(deviceParent, deviceName)); } if (device.isMeasurement()) { @@ -710,7 +697,8 @@ public ICacheMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws Me for (int i = levelOfSG + 1; i < nodeNames.length; i++) { child = store.getChild(cur, nodeNames[i]); if (child == null) { - child = store.addChild(cur, nodeNames[i], new CacheBasicMNode(cur, nodeNames[i])); + child = + store.addChild(cur, nodeNames[i], nodeFactory.createInternalMNode(cur, nodeNames[i])); } cur = child; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index 574cd3eeeefe7..3b53acdc8e9c1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -46,12 +46,11 @@ import org.apache.iotdb.db.metadata.mtree.traverser.updater.EntityUpdater; import org.apache.iotdb.db.metadata.mtree.traverser.updater.MeasurementUpdater; import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; @@ -109,34 +108,30 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG { private volatile IMemMNode storageGroupMNode; private final IMemMNode rootNode; private final Function, Map> tagGetter; - private final IMNodeFactory nodeFactory; + private final IMNodeFactory nodeFactory = MemMNodeFactory.getInstance(); private final int levelOfSG; // region MTree initialization, clear and serialization public MTreeBelowSGMemoryImpl( PartialPath storageGroupPath, Function, Map> tagGetter, - MemSchemaRegionStatistics regionStatistics, - IMNodeFactory nodeFactory) { - store = new MemMTreeStore(storageGroupPath, regionStatistics, nodeFactory); + MemSchemaRegionStatistics regionStatistics) { + store = new MemMTreeStore(storageGroupPath, regionStatistics); this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; - this.nodeFactory = nodeFactory; } private MTreeBelowSGMemoryImpl( PartialPath storageGroupPath, MemMTreeStore store, - Function, Map> tagGetter, - IMNodeFactory nodeFactory) { + Function, Map> tagGetter) { this.store = store; this.storageGroupMNode = store.getRoot(); this.rootNode = store.generatePrefix(storageGroupPath); levelOfSG = storageGroupPath.getNodeLength() - 1; this.tagGetter = tagGetter; - this.nodeFactory = nodeFactory; } @Override @@ -162,15 +157,12 @@ public static MTreeBelowSGMemoryImpl loadFromSnapshot( String storageGroupFullPath, MemSchemaRegionStatistics regionStatistics, Consumer> measurementProcess, - Function, Map> tagGetter, - IMNodeFactory nodeFactory) + Function, Map> tagGetter) throws IOException, IllegalPathException { return new MTreeBelowSGMemoryImpl( new PartialPath(storageGroupFullPath), - MemMTreeStore.loadFromSnapshot( - snapshotDir, measurementProcess, regionStatistics, nodeFactory), - tagGetter, - nodeFactory); + MemMTreeStore.loadFromSnapshot(snapshotDir, measurementProcess, regionStatistics), + tagGetter); } // endregion @@ -249,7 +241,7 @@ public IMeasurementMNode createTimeseries( } IMeasurementMNode measurementMNode = - new MeasurementMNode( + nodeFactory.createMeasurementMNode( entityMNode, leafName, new MeasurementSchema(leafName, dataType, encoding, compressor, props), @@ -332,7 +324,7 @@ public List> createAlignedTimeseries( for (int i = 0; i < measurements.size(); i++) { IMeasurementMNode measurementMNode = - new MeasurementMNode( + nodeFactory.createMeasurementMNode( entityMNode, measurements.get(i), new MeasurementSchema( @@ -364,7 +356,7 @@ private IMemMNode checkAndAutoCreateInternalPath(PartialPath devicePath) childName = nodeNames[i]; child = cur.getChild(childName); if (child == null) { - child = store.addChild(cur, childName, new BasicMNode(cur, childName)); + child = store.addChild(cur, childName, nodeFactory.createInternalMNode(cur, childName)); } cur = child; @@ -383,7 +375,9 @@ private IMemMNode checkAndAutoCreateDeviceNode(String deviceName, IMemMNode devi } IMemMNode device = store.getChild(deviceParent, deviceName); if (device == null) { - device = store.addChild(deviceParent, deviceName, new BasicMNode(deviceParent, deviceName)); + device = + store.addChild( + deviceParent, deviceName, nodeFactory.createInternalMNode(deviceParent, deviceName)); } if (device.isMeasurement()) { @@ -599,7 +593,8 @@ public IMemMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws Meta for (int i = levelOfSG + 1; i < nodeNames.length; i++) { child = cur.getChild(nodeNames[i]); if (child == null) { - child = store.addChild(cur, nodeNames[i], new BasicMNode(cur, nodeNames[i])); + child = + store.addChild(cur, nodeNames[i], nodeFactory.createInternalMNode(cur, nodeNames[i])); } cur = child; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java index 3010a968f6843..83f91391abf9f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java @@ -22,22 +22,18 @@ import org.apache.iotdb.commons.file.SystemFileFactory; import org.apache.iotdb.db.metadata.MetadataConstant; import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; -import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.DatabaseDeviceMNode; import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.DeviceMNode; +import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.AbstractMeasurementMNode; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; @@ -72,7 +68,7 @@ public class MemMTreeSnapshotUtil { "Error occurred during deserializing MemMTree."; private static final byte VERSION = 0; - private static final IMNodeSizeEstimator ESTIMATOR = new BasicMNodSizeEstimator(); + private static final IMNodeFactory nodeFactory = MemMNodeFactory.getInstance(); public static boolean createSnapshot(File snapshotDir, MemMTreeStore store) { File snapshotTmp = @@ -240,7 +236,7 @@ private static void deserializeMNode( throw new IOException("Unrecognized MNode type " + type); } - regionStatistics.requestMemory(ESTIMATOR.estimateSize(node)); + regionStatistics.requestMemory(node.estimateSize()); if (!ancestors.isEmpty()) { node.setParent(ancestors.peek()); @@ -344,51 +340,51 @@ private void serializeBasicMNode(IMNode node, OutputStream outputStream) thro private static class MNodeDeserializer { - public BasicMNode deserializeInternalMNode(InputStream inputStream) throws IOException { + public IMemMNode deserializeInternalMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); - BasicMNode node = new BasicMNode(null, name); + IMemMNode node = nodeFactory.createInternalMNode(null, name); int templateId = ReadWriteIOUtils.readInt(inputStream); boolean useTemplate = ReadWriteIOUtils.readBool(inputStream); return node; } - public DatabaseMNode deserializeStorageGroupMNode(InputStream inputStream) throws IOException { + public IMemMNode deserializeStorageGroupMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); - DatabaseMNode node = new DatabaseMNode(null, name); + IMemMNode node = nodeFactory.createDatabaseMNode(null, name).getAsMNode(); int templateId = ReadWriteIOUtils.readInt(inputStream); boolean useTemplate = ReadWriteIOUtils.readBool(inputStream); return node; } - public DatabaseDeviceMNode deserializeStorageGroupEntityMNode(InputStream inputStream) + public IMemMNode deserializeStorageGroupEntityMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); - DatabaseDeviceMNode node = new DatabaseDeviceMNode(null, name, 0); - node.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); - node.setUseTemplate(ReadWriteIOUtils.readBool(inputStream)); - node.setAligned(ReadWriteIOUtils.readBool(inputStream)); + IMemMNode node = nodeFactory.createDatabaseDeviceMNode(null, name, 0); + node.getAsDeviceMNode().setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); + node.getAsDeviceMNode().setUseTemplate(ReadWriteIOUtils.readBool(inputStream)); + node.getAsDeviceMNode().setAligned(ReadWriteIOUtils.readBool(inputStream)); return node; } - public DeviceMNode deserializeEntityMNode(InputStream inputStream) throws IOException { + public IMemMNode deserializeEntityMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); - DeviceMNode node = new DeviceMNode(null, name); + IDeviceMNode node = nodeFactory.createDeviceMNode(null, name); node.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); node.setUseTemplate(ReadWriteIOUtils.readBool(inputStream)); node.setAligned(ReadWriteIOUtils.readBool(inputStream)); - return node; + return node.getAsMNode(); } - public MeasurementMNode deserializeMeasurementMNode(InputStream inputStream) - throws IOException { + public IMemMNode deserializeMeasurementMNode(InputStream inputStream) throws IOException { String name = ReadWriteIOUtils.readString(inputStream); MeasurementSchema schema = MeasurementSchema.deserializeFrom(inputStream); String alias = ReadWriteIOUtils.readString(inputStream); long tagOffset = ReadWriteIOUtils.readLong(inputStream); - MeasurementMNode node = new MeasurementMNode(null, name, schema, alias); + IMeasurementMNode node = + nodeFactory.createMeasurementMNode(null, name, schema, alias); node.setOffset(tagOffset); node.setPreDeleted(ReadWriteIOUtils.readBool(inputStream)); - return node; + return node.getAsMNode(); } } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java index a9193c25620af..608cb36226c26 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; +import org.apache.iotdb.db.metadata.mnode.estimator.MNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; import org.apache.iotdb.db.metadata.mnode.iterator.CachedTraverserIterator; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; @@ -33,9 +33,9 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.abovedatabase.CacheAboveDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; @@ -67,7 +67,7 @@ public class CachedMTreeStore implements IMTreeStore { private final Runnable flushCallback; - private final IMNodeFactory nodeFactory; + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); private final CachedSchemaRegionStatistics regionStatistics; @@ -77,15 +77,13 @@ public CachedMTreeStore( PartialPath storageGroup, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - Runnable flushCallback, - IMNodeFactory nodeFactory) + Runnable flushCallback) throws MetadataException, IOException { file = SchemaFile.initSchemaFile(storageGroup.getFullPath(), schemaRegionId); root = file.init(); this.regionStatistics = regionStatistics; this.memManager = new MemManager(regionStatistics); this.flushCallback = flushCallback; - this.nodeFactory = nodeFactory; this.cacheManager = CacheMemoryManager.getInstance().createLRUCacheManager(this, memManager); cacheManager.initRootStatus(root); regionStatistics.setCacheManager(cacheManager); @@ -96,11 +94,11 @@ public CachedMTreeStore( public ICacheMNode generatePrefix(PartialPath storageGroupPath) { String[] nodes = storageGroupPath.getNodes(); // nodes[0] must be root - ICacheMNode res = new CacheAboveDatabaseMNode(null, nodes[0]); + ICacheMNode res = nodeFactory.createAboveDatabaseMNode(null, nodes[0]); ICacheMNode cur = res; ICacheMNode child; for (int i = 1; i < nodes.length - 1; i++) { - child = new CacheAboveDatabaseMNode(cur, nodes[i]); + child = nodeFactory.createAboveDatabaseMNode(cur, nodes[i]); cur.addChild(nodes[i], child); cur = child; } @@ -339,7 +337,7 @@ final void updateMNode(ICacheMNode node, boolean needLock) { public IDeviceMNode setToEntity(ICacheMNode node) { IDeviceMNode result = MNodeUtils.setToEntity(node, nodeFactory); if (result != node) { - memManager.updatePinnedSize(IMNodeSizeEstimator.getEntityNodeBaseSize()); + memManager.updatePinnedSize(result.estimateSize() - node.estimateSize()); } updateMNode(result.getAsMNode()); return result; @@ -349,7 +347,7 @@ public IDeviceMNode setToEntity(ICacheMNode node) { public ICacheMNode setToInternal(IDeviceMNode entityMNode) { ICacheMNode result = MNodeUtils.setToInternal(entityMNode, nodeFactory); if (result != entityMNode) { - memManager.updatePinnedSize(-IMNodeSizeEstimator.getEntityNodeBaseSize()); + memManager.updatePinnedSize(result.estimateSize() - entityMNode.estimateSize()); } updateMNode(result); return result; @@ -370,9 +368,9 @@ public void setAlias(IMeasurementMNode measurementMNode, String ali memManager.updatePinnedSize(alias.length() - existingAlias.length()); } else if (alias == null) { memManager.updatePinnedSize( - -(IMNodeSizeEstimator.getAliasBaseSize() + existingAlias.length())); + -(MNodeSizeEstimator.getAliasBaseSize() + existingAlias.length())); } else { - memManager.updatePinnedSize(IMNodeSizeEstimator.getAliasBaseSize() + alias.length()); + memManager.updatePinnedSize(MNodeSizeEstimator.getAliasBaseSize() + alias.length()); } } @@ -494,11 +492,10 @@ public static CachedMTreeStore loadFromSnapshot( String storageGroup, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - Runnable flushCallback, - IMNodeFactory nodeFactory) + Runnable flushCallback) throws IOException, MetadataException { return new CachedMTreeStore( - snapshotDir, storageGroup, schemaRegionId, regionStatistics, flushCallback, nodeFactory); + snapshotDir, storageGroup, schemaRegionId, regionStatistics, flushCallback); } private CachedMTreeStore( @@ -506,15 +503,13 @@ private CachedMTreeStore( String storageGroup, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - Runnable flushCallback, - IMNodeFactory nodeFactory) + Runnable flushCallback) throws IOException, MetadataException { file = SchemaFile.loadSnapshot(snapshotDir, storageGroup, schemaRegionId); root = file.init(); this.regionStatistics = regionStatistics; this.memManager = new MemManager(regionStatistics); this.flushCallback = flushCallback; - this.nodeFactory = nodeFactory; this.cacheManager = CacheMemoryManager.getInstance().createLRUCacheManager(this, memManager); cacheManager.initRootStatus(root); regionStatistics.setCacheManager(cacheManager); @@ -549,7 +544,8 @@ public boolean executeMemoryRelease() { /** Sync all volatile nodes to schemaFile and execute memory release after flush. */ public void flushVolatileNodes() { try { - IDatabaseMNode updatedStorageGroupMNode = cacheManager.collectUpdatedStorageGroupMNodes(); + IDatabaseMNode updatedStorageGroupMNode = + cacheManager.collectUpdatedStorageGroupMNodes(); if (updatedStorageGroupMNode != null) { try { file.updateStorageGroupNode(updatedStorageGroupMNode); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java index fabb851dec3db..5821fe0a2f6ee 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java @@ -26,7 +26,6 @@ import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; import org.apache.iotdb.db.metadata.mnode.iterator.MemoryTraverserIterator; import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; @@ -134,7 +133,7 @@ public IMTreeStore getWithReentrantReadLock() { @Override public void clear() { - root = new ConfigBasicMNode(null, IoTDBConstant.PATH_ROOT); + root = nodeFactory.createInternalMNode(null, IoTDBConstant.PATH_ROOT); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index 4dec3f7b4afae..6879cde06ed21 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -23,19 +23,16 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; -import org.apache.iotdb.db.metadata.mnode.estimator.IMNodeSizeEstimator; +import org.apache.iotdb.db.metadata.mnode.estimator.MNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; import org.apache.iotdb.db.metadata.mnode.iterator.MemoryTraverserIterator; import org.apache.iotdb.db.metadata.mtree.snapshot.MemMTreeSnapshotUtil; import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; -import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; @@ -48,49 +45,42 @@ /** This is a memory-based implementation of IMTreeStore. All MNodes are stored in memory. */ public class MemMTreeStore implements IMTreeStore { - private final IMNodeSizeEstimator estimator = new BasicMNodSizeEstimator(); private final MemSchemaRegionStatistics regionStatistics; - private final IMNodeFactory nodeFactory; + private final IMNodeFactory nodeFactory = MemMNodeFactory.getInstance(); private IMemMNode root; - public MemMTreeStore( - PartialPath rootPath, - MemSchemaRegionStatistics regionStatistics, - IMNodeFactory nodeFactory) { + public MemMTreeStore(PartialPath rootPath, MemSchemaRegionStatistics regionStatistics) { this.root = - new DatabaseMNode( - null, - rootPath.getTailNode(), - CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + nodeFactory + .createDatabaseMNode( + null, + rootPath.getTailNode(), + CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()) + .getAsMNode(); this.regionStatistics = regionStatistics; - this.nodeFactory = nodeFactory; } - private MemMTreeStore( - IMemMNode root, - MemSchemaRegionStatistics regionStatistics, - IMNodeFactory nodeFactory) { + private MemMTreeStore(IMemMNode root, MemSchemaRegionStatistics regionStatistics) { this.root = root; this.regionStatistics = regionStatistics; - this.nodeFactory = nodeFactory; } @Override public IMemMNode generatePrefix(PartialPath storageGroupPath) { String[] nodes = storageGroupPath.getNodes(); // nodes[0] must be root - IMemMNode res = new AboveDatabaseMNode(null, nodes[0]); + IMemMNode res = nodeFactory.createAboveDatabaseMNode(null, nodes[0]); IMemMNode cur = res; IMemMNode child; for (int i = 1; i < nodes.length - 1; i++) { - child = new AboveDatabaseMNode(cur, nodes[i]); + child = nodeFactory.createAboveDatabaseMNode(cur, nodes[i]); cur.addChild(nodes[i], child); cur = child; } root.setParent(cur); cur.addChild(root); - requestMemory(estimator.estimateSize(root)); + requestMemory(root.estimateSize()); return res; } @@ -132,14 +122,14 @@ public IMNodeIterator getTraverserIterator( public IMemMNode addChild(IMemMNode parent, String childName, IMemMNode child) { IMemMNode result = parent.addChild(childName, child); if (result == child) { - requestMemory(estimator.estimateSize(child)); + requestMemory(child.estimateSize()); } return result; } @Override public void deleteChild(IMemMNode parent, String childName) { - releaseMemory(estimator.estimateSize(parent.deleteChild(childName))); + releaseMemory(parent.deleteChild(childName).estimateSize()); } @Override @@ -149,7 +139,7 @@ public void updateMNode(IMemMNode node) {} public IDeviceMNode setToEntity(IMemMNode node) { IDeviceMNode result = MNodeUtils.setToEntity(node, nodeFactory); if (result != node) { - requestMemory(IMNodeSizeEstimator.getEntityNodeBaseSize()); + requestMemory(result.estimateSize() - node.estimateSize()); } if (result.isDatabase()) { @@ -162,7 +152,7 @@ public IDeviceMNode setToEntity(IMemMNode node) { public IMemMNode setToInternal(IDeviceMNode entityMNode) { IMemMNode result = MNodeUtils.setToInternal(entityMNode, nodeFactory); if (result != entityMNode) { - releaseMemory(IMNodeSizeEstimator.getEntityNodeBaseSize()); + releaseMemory(entityMNode.estimateSize() - result.estimateSize()); } if (result.isDatabase()) { root = result; @@ -188,9 +178,9 @@ public void setAlias(IMeasurementMNode measurementMNode, String alias releaseMemory(-delta); } } else if (alias == null) { - releaseMemory(IMNodeSizeEstimator.getAliasBaseSize() + existingAlias.length()); + releaseMemory(MNodeSizeEstimator.getAliasBaseSize() + existingAlias.length()); } else { - requestMemory(IMNodeSizeEstimator.getAliasBaseSize() + alias.length()); + requestMemory(MNodeSizeEstimator.getAliasBaseSize() + alias.length()); } } @@ -210,7 +200,7 @@ public IMTreeStore getWithReentrantReadLock() { @Override public void clear() { - root = new BasicMNode(null, IoTDBConstant.PATH_ROOT); + root = nodeFactory.createInternalMNode(null, IoTDBConstant.PATH_ROOT); } @Override @@ -221,13 +211,11 @@ public boolean createSnapshot(File snapshotDir) { public static MemMTreeStore loadFromSnapshot( File snapshotDir, Consumer> measurementProcess, - MemSchemaRegionStatistics regionStatistics, - IMNodeFactory nodeFactory) + MemSchemaRegionStatistics regionStatistics) throws IOException { return new MemMTreeStore( MemMTreeSnapshotUtil.loadSnapshot(snapshotDir, measurementProcess, regionStatistics), - regionStatistics, - nodeFactory); + regionStatistics); } private void requestMemory(int size) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java index 755b9fbef63d9..35d0073dd8731 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java @@ -20,7 +20,6 @@ import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; @@ -343,7 +342,7 @@ private void removeRecursively(ICacheMNode node) { public synchronized boolean evict() { ICacheMNode node = null; CacheEntry cacheEntry = null; - List evictedMNodes = new ArrayList<>(); + List evictedMNodes = new ArrayList<>(); boolean isSuccess = false; while (!isSuccess) { node = getPotentialNodeTobeEvicted(); @@ -377,7 +376,7 @@ public synchronized boolean evict() { return !evictedMNodes.isEmpty(); } - private void collectEvictedMNodes(ICacheMNode node, List evictedMNodes) { + private void collectEvictedMNodes(ICacheMNode node, List evictedMNodes) { for (ICacheMNode child : node.getChildren().values()) { removeFromNodeCache(getCacheEntry(child)); child.setCacheEntry(null); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java deleted file mode 100644 index 70a9efd8df153..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/CachedMNodeSizeEstimator.java +++ /dev/null @@ -1,72 +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.metadata.mtree.store.disk.memcontrol; - -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.estimator.BasicMNodSizeEstimator; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; - -public class CachedMNodeSizeEstimator extends BasicMNodSizeEstimator { - - /** Estimated size of CacheEntry */ - private static final int CACHE_ENTRY_SIZE = 40; - - /** - * Estimated delta size of CachedMNodeContainer compared with MNodeContainerMapImpl - * - *
        - *
      1. address, 8B - *
      2. three map reference (1 cache and 2 buffer), 8 * 3 = 24B - *
      3. estimate occupation of map implementation, minus the basic container occupation, 80 * 3 - - * 80 = 160B - *
      - */ - private static final int CACHED_MNODE_CONTAINER_SIZE_DELTA = 192; - - private static final int NODE_BASE_SIZE = - BasicMNodSizeEstimator.NODE_BASE_SIZE + CACHE_ENTRY_SIZE; - - private static final int INTERNAL_NODE_BASE_SIZE = - BasicMNodSizeEstimator.INTERNAL_NODE_BASE_SIZE + CACHED_MNODE_CONTAINER_SIZE_DELTA; - - @Override - public int estimateSize(IMNode node) { - int size = NODE_BASE_SIZE + node.getName().length(); - if (node.isMeasurement()) { - size += MEASUREMENT_NODE_BASE_SIZE; - IMeasurementMNode measurementMNode = node.getAsMeasurementMNode(); - if (measurementMNode.getAlias() != null) { - size += ALIAS_BASE_SIZE + measurementMNode.getAlias().length(); - } - } else { - size += INTERNAL_NODE_BASE_SIZE; - if (node.isDatabase()) { - size += STORAGE_GROUP_NODE_BASE_SIZE; - size += node.getAsDatabaseMNode().getFullPath().length(); - } - - if (node.isDevice()) { - size += ENTITY_NODE_BASE_SIZE; - } - } - - return size; - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java index a8216725d4f94..0ec1cc891579d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import java.util.List; @@ -29,46 +29,44 @@ public class MemManager { private final CachedSchemaRegionStatistics regionStatistics; - private final CachedMNodeSizeEstimator estimator = new CachedMNodeSizeEstimator(); - public MemManager(CachedSchemaRegionStatistics regionStatistics) { this.regionStatistics = regionStatistics; } - public void requestPinnedMemResource(IMNode node) { - int size = estimator.estimateSize(node); + public void requestPinnedMemResource(ICacheMNode node) { + int size = node.estimateSize(); regionStatistics.requestMemory(size); regionStatistics.updatePinnedMemorySize(size); regionStatistics.updatePinnedMNodeNum(1); } - public void upgradeMemResource(IMNode node) { - int size = estimator.estimateSize(node); + public void upgradeMemResource(ICacheMNode node) { + int size = node.estimateSize(); regionStatistics.updatePinnedMemorySize(size); regionStatistics.updatePinnedMNodeNum(1); regionStatistics.updateUnpinnedMemorySize(-size); regionStatistics.updateUnpinnedMNodeNum(-1); } - public void releasePinnedMemResource(IMNode node) { - int size = estimator.estimateSize(node); + public void releasePinnedMemResource(ICacheMNode node) { + int size = node.estimateSize(); regionStatistics.updateUnpinnedMemorySize(size); regionStatistics.updateUnpinnedMNodeNum(1); regionStatistics.updatePinnedMemorySize(-size); regionStatistics.updatePinnedMNodeNum(-1); } - public void releaseMemResource(IMNode node) { - int size = estimator.estimateSize(node); + public void releaseMemResource(ICacheMNode node) { + int size = node.estimateSize(); regionStatistics.updateUnpinnedMemorySize(-size); regionStatistics.updateUnpinnedMNodeNum(-1); regionStatistics.releaseMemory(size); } - public void releaseMemResource(List evictedNodes) { + public void releaseMemResource(List evictedNodes) { int size = 0; - for (IMNode node : evictedNodes) { - size += estimator.estimateSize(node); + for (ICacheMNode node : evictedNodes) { + size += node.estimateSize(); } regionStatistics.updateUnpinnedMNodeNum(-evictedNodes.size()); regionStatistics.updateUnpinnedMemorySize(-size); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java index e3f13fb159e79..ec1ceea9ac33d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java @@ -23,12 +23,9 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; -import org.apache.iotdb.db.metadata.newnode.database.CacheDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import java.io.File; @@ -45,6 +42,7 @@ public class MockSchemaFile implements ISchemaFile { private PartialPath storageGroupPath; private IDatabaseMNode storageGroupMNode; + private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); private long fileTail = 0; private final Map> mockFile = new HashMap<>(); @@ -56,7 +54,7 @@ public MockSchemaFile(PartialPath storageGroupPath) { @Override public ICacheMNode init() { storageGroupMNode = - new CacheDatabaseMNode( + nodeFactory.createDatabaseMNode( null, storageGroupPath.getTailNode(), CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); @@ -177,33 +175,37 @@ static ICacheMNode cloneMNode(ICacheMNode node) { } if (node.isMeasurement()) { IMeasurementMNode measurementMNode = node.getAsMeasurementMNode(); - CacheMeasurementMNode result = - new CacheMeasurementMNode( - null, - measurementMNode.getName(), - measurementMNode.getSchema(), - measurementMNode.getAlias()); - result.setOffset(measurementMNode.getOffset()); + ICacheMNode result = + nodeFactory + .createMeasurementMNode( + null, + measurementMNode.getName(), + measurementMNode.getSchema(), + measurementMNode.getAlias()) + .getAsMNode(); + result.getAsMeasurementMNode().setOffset(measurementMNode.getOffset()); return result; } else if (node.isDatabase() && node.isDevice()) { - CacheDatabaseDeviceMNode result = - new CacheDatabaseDeviceMNode( + ICacheMNode result = + nodeFactory.createDatabaseDeviceMNode( null, node.getName(), node.getAsDatabaseMNode().getDataTTL()); - result.setAligned(node.getAsDeviceMNode().isAligned()); + result.getAsDeviceMNode().setAligned(node.getAsDeviceMNode().isAligned()); cloneInternalMNodeData(node, result); return result; } else if (node.isDevice()) { - CacheDeviceMNode result = new CacheDeviceMNode(null, node.getName()); - result.setAligned(node.getAsDeviceMNode().isAligned()); + ICacheMNode result = nodeFactory.createDeviceMNode(null, node.getName()).getAsMNode(); + result.getAsDeviceMNode().setAligned(node.getAsDeviceMNode().isAligned()); cloneInternalMNodeData(node, result); return result; } else if (node.isDatabase()) { - CacheDatabaseMNode result = - new CacheDatabaseMNode(null, node.getName(), node.getAsDatabaseMNode().getDataTTL()); + ICacheMNode result = + nodeFactory + .createDatabaseMNode(null, node.getName(), node.getAsDatabaseMNode().getDataTTL()) + .getAsMNode(); cloneInternalMNodeData(node, result); return result; } else { - CacheBasicMNode result = new CacheBasicMNode(null, node.getName()); + ICacheMNode result = nodeFactory.createInternalMNode(null, node.getName()); cloneInternalMNodeData(node, result); return result; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java index 6fe899bdec3a2..69b260c438ad5 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java @@ -23,9 +23,8 @@ import org.apache.iotdb.db.metadata.MetadataConstant; import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; -import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -64,6 +63,8 @@ public class RecordUtils { private static final byte ENTITY_TYPE = 1; private static final byte MEASUREMENT_TYPE = 4; + private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + public static ByteBuffer node2Buffer(ICacheMNode node) { if (node.isMeasurement()) { return measurement2Buffer(node.getAsMeasurementMNode()); @@ -194,9 +195,9 @@ public static ICacheMNode buffer2Node(String nodeName, ByteBuffer buffer) boolean isAligned = isAligned(bitFlag); if (nodeType == 0) { - resNode = new CacheBasicMNode(null, nodeName); + resNode = nodeFactory.createInternalMNode(null, nodeName); } else { - resNode = new CacheDeviceMNode(null, nodeName); + resNode = nodeFactory.createDeviceMNode(null, nodeName).getAsMNode(); resNode.getAsDeviceMNode().setAligned(isAligned); resNode.getAsDeviceMNode().setUseTemplate(usingTemplate); resNode.getAsDeviceMNode().setSchemaTemplateId(templateId); @@ -362,7 +363,8 @@ private static ICacheMNode paddingMeasurement( CompressionType.deserialize(compressor), props); - ICacheMNode res = new CacheMeasurementMNode(null, nodeName, schema, alias); + ICacheMNode res = + nodeFactory.createMeasurementMNode(null, nodeName, schema, alias).getAsMNode(); res.getAsMeasurementMNode().setOffset(tagIndex); if (preDel > 0) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java index 77ffea6942ba6..7e27c243776b1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java @@ -30,9 +30,9 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.IPageManager; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.PageManager; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.CacheDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.slf4j.Logger; @@ -77,12 +77,13 @@ public class SchemaFile implements ISchemaFile { private File pmtFile; private FileChannel channel; + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + // todo refactor constructor for schema file in Jan. private SchemaFile( String sgName, int schemaRegionId, boolean override, long ttl, boolean isEntity) throws IOException, MetadataException { String dirPath = getDirPath(sgName, schemaRegionId); - this.storageGroupName = sgName; this.filePath = dirPath + File.separator + MetadataConstant.SCHEMA_FILE_NAME; this.logPath = dirPath + File.separator + MetadataConstant.SCHEMA_LOG_FILE_NAME; @@ -176,13 +177,18 @@ public ICacheMNode init() throws MetadataException { if (isEntity) { resNode = setNodeAddress( - new CacheDatabaseDeviceMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), 0L); + nodeFactory.createDatabaseDeviceMNode( + null, sgPathNodes[sgPathNodes.length - 1], dataTTL), + 0L); resNode.getAsDeviceMNode().setSchemaTemplateId(sgNodeTemplateIdWithState); resNode.getAsDeviceMNode().setUseTemplate(sgNodeTemplateIdWithState > -1); } else { resNode = setNodeAddress( - new CacheDatabaseMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL), 0L); + nodeFactory + .createDatabaseMNode(null, sgPathNodes[sgPathNodes.length - 1], dataTTL) + .getAsMNode(), + 0L); } resNode.setFullPath(storageGroupName); return resNode; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java index b8cd4c3144282..03c0066357842 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java @@ -48,7 +48,7 @@ public class BasicMNode implements IMemMNode { private String fullPath; /** Constructor of MNode. */ - protected BasicMNode(IMemMNode parent, String name) { + public BasicMNode(IMemMNode parent, String name) { this.parent = parent; this.basicMNodeInfo = new BasicMNodeInfo(name); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java index 21922ab7bcadc..fa3b541498d74 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java @@ -20,7 +20,7 @@ import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.abovedatabase.CacheAboveDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; import org.apache.iotdb.db.metadata.newnode.database.CacheDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; @@ -31,6 +31,19 @@ import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class CacheMNodeFactory implements IMNodeFactory { + + private CacheMNodeFactory() {} + + private static class CacheMNodeFactoryHolder { + private static final CacheMNodeFactory INSTANCE = new CacheMNodeFactory(); + + private CacheMNodeFactoryHolder() {} + } + + public static CacheMNodeFactory getInstance() { + return CacheMNodeFactory.CacheMNodeFactoryHolder.INSTANCE; + } + @Override public IMeasurementMNode createMeasurementMNode( IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { @@ -47,6 +60,12 @@ public IDatabaseMNode createDatabaseMNode(ICacheMNode parent, Strin return new CacheDatabaseMNode(parent, name); } + @Override + public IDatabaseMNode createDatabaseMNode( + ICacheMNode parent, String name, long dataTTL) { + return new CacheDatabaseMNode(parent, name, dataTTL); + } + @Override public ICacheMNode createDatabaseDeviceMNode(ICacheMNode parent, String name, long dataTTL) { return new CacheDatabaseDeviceMNode(parent, name, dataTTL); @@ -59,6 +78,6 @@ public ICacheMNode createAboveDatabaseMNode(ICacheMNode parent, String name) { @Override public ICacheMNode createInternalMNode(ICacheMNode parent, String name) { - return new CacheBasicMNode(parent, name); + return new CacheBasicInternalMNode(parent, name); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java index 9b4a6ed4aa163..4fa5f360eb1d7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.newnode.factory; import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; +import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicInternalMNode; import org.apache.iotdb.db.metadata.newnode.database.ConfigDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; @@ -27,6 +27,18 @@ import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class ConfigMNodeFactory implements IMNodeFactory { + private ConfigMNodeFactory() {} + + private static class ConfigMNodeFactoryHolder { + private static final ConfigMNodeFactory INSTANCE = new ConfigMNodeFactory(); + + private ConfigMNodeFactoryHolder() {} + } + + public static ConfigMNodeFactory getInstance() { + return ConfigMNodeFactory.ConfigMNodeFactoryHolder.INSTANCE; + } + @Override public IMeasurementMNode createMeasurementMNode( IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { @@ -43,6 +55,14 @@ public IDatabaseMNode createDatabaseMNode(IConfigMNode parent, Str return new ConfigDatabaseMNode(parent, name); } + @Override + public IDatabaseMNode createDatabaseMNode( + IConfigMNode parent, String name, long dataTTL) { + IDatabaseMNode res = new ConfigDatabaseMNode(parent, name); + res.setDataTTL(dataTTL); + return res; + } + @Override public IConfigMNode createDatabaseDeviceMNode(IConfigMNode parent, String name, long dataTTL) { throw new UnsupportedOperationException(); @@ -55,6 +75,6 @@ public IConfigMNode createAboveDatabaseMNode(IConfigMNode parent, String name) { @Override public IConfigMNode createInternalMNode(IConfigMNode parent, String name) { - return new ConfigBasicMNode(parent, name); + return new ConfigBasicInternalMNode(parent, name); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java index 1ceb9fef6f74e..6c11b8d9765f1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java @@ -32,6 +32,8 @@ IMeasurementMNode createMeasurementMNode( IDatabaseMNode createDatabaseMNode(N parent, String name); + IDatabaseMNode createDatabaseMNode(N parent, String name, long dataTTL); + N createDatabaseDeviceMNode(N parent, String name, long dataTTL); N createAboveDatabaseMNode(N parent, String name); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java index de32aba860648..867c19bbd6c30 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java @@ -21,7 +21,6 @@ import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.databasedevice.DatabaseDeviceMNode; @@ -32,6 +31,19 @@ import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class MemMNodeFactory implements IMNodeFactory { + + private MemMNodeFactory() {} + + private static class MemMNodeFactoryHolder { + private static final MemMNodeFactory INSTANCE = new MemMNodeFactory(); + + private MemMNodeFactoryHolder() {} + } + + public static MemMNodeFactory getInstance() { + return MemMNodeFactory.MemMNodeFactoryHolder.INSTANCE; + } + @Override public IMeasurementMNode createMeasurementMNode( IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { @@ -48,6 +60,12 @@ public IDatabaseMNode createDatabaseMNode(IMemMNode parent, String na return new DatabaseMNode(parent, name); } + @Override + public IDatabaseMNode createDatabaseMNode( + IMemMNode parent, String name, long dataTTL) { + return new DatabaseMNode(parent, name, dataTTL); + } + @Override public IMemMNode createDatabaseDeviceMNode(IMemMNode parent, String name, long dataTTL) { return new DatabaseDeviceMNode(parent, name, dataTTL); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java index a7f67b7598a2d..9eb0f1783a3d7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java @@ -44,7 +44,6 @@ import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGMemoryImpl; import org.apache.iotdb.db.metadata.newnode.IMemMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; @@ -192,10 +191,7 @@ public synchronized void init() throws MetadataException { tagManager = new TagManager(schemaRegionDirPath); mtree = new MTreeBelowSGMemoryImpl( - new PartialPath(storageGroupFullPath), - tagManager::readTags, - regionStatistics, - new MemMNodeFactory()); + new PartialPath(storageGroupFullPath), tagManager::readTags, regionStatistics); if (!(config.isClusterMode() && config @@ -481,8 +477,7 @@ public void loadSnapshot(File latestSnapshotRootDir) { schemaRegionId); } }, - tagManager::readTags, - new MemMNodeFactory()); + tagManager::readTags); logger.info( "MTree snapshot loading of schemaRegion {} costs {}ms.", schemaRegionId, diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java index 261dde53af50a..16dc2008c70af 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java @@ -47,7 +47,6 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; @@ -203,8 +202,7 @@ public synchronized void init() throws MetadataException { } }, schemaRegionId.getId(), - regionStatistics, - new CacheMNodeFactory()); + regionStatistics); if (!(config.isClusterMode() && config @@ -520,8 +518,7 @@ public void loadSnapshot(File latestSnapshotRootDir) { } }, tagManager::readTags, - this::flushCallback, - new CacheMNodeFactory()); + this::flushCallback); logger.info( "MTree snapshot loading of schemaRegion {} costs {}ms.", schemaRegionId, diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java index dbd0a0bc71de9..dd8ec59b38257 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java @@ -22,7 +22,9 @@ import org.apache.iotdb.commons.path.AlignedPath; import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; +import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.utils.MetaUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.Pair; @@ -41,24 +43,26 @@ public class MetaUtilsTest { + private final IMNodeFactory nodeFactory = MemMNodeFactory.getInstance(); + @Test public void testGetMultiFullPaths() { - BasicMNode rootNode = new BasicMNode(null, "root"); + IMemMNode rootNode = nodeFactory.createInternalMNode(null, "root"); // builds the relationship of root.a and root.aa - BasicMNode aNode = new BasicMNode(rootNode, "a"); + IMemMNode aNode = nodeFactory.createInternalMNode(rootNode, "a"); rootNode.addChild(aNode.getName(), aNode); - BasicMNode aaNode = new BasicMNode(rootNode, "aa"); + IMemMNode aaNode = nodeFactory.createInternalMNode(rootNode, "aa"); rootNode.addChild(aaNode.getName(), aaNode); // builds the relationship of root.a.b and root.aa.bb - BasicMNode bNode = new BasicMNode(aNode, "b"); + IMemMNode bNode = nodeFactory.createInternalMNode(aNode, "b"); aNode.addChild(bNode.getName(), bNode); - BasicMNode bbNode = new BasicMNode(aaNode, "bb"); + IMemMNode bbNode = nodeFactory.createInternalMNode(aaNode, "bb"); aaNode.addChild(bbNode.getName(), bbNode); // builds the relationship of root.aa.bb.cc - BasicMNode ccNode = new BasicMNode(bbNode, "cc"); + IMemMNode ccNode = nodeFactory.createInternalMNode(bbNode, "cc"); bbNode.addChild(ccNode.getName(), ccNode); List multiFullPaths = MetaUtils.getMultiFullPaths(rootNode); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java index 5a68c0cd4cad9..0a775582b5123 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java @@ -19,13 +19,10 @@ package org.apache.iotdb.db.metadata.mnode; import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; -import org.apache.iotdb.db.metadata.newnode.device.DeviceMNode; import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; import org.apache.iotdb.db.metadata.utils.MetaUtils; import org.junit.Test; @@ -37,22 +34,22 @@ import static org.junit.Assert.assertSame; public class MNodeTest { - - private final IMNodeFactory nodeFactory = new MemMNodeFactory(); + + private final IMNodeFactory nodeFactory = MemMNodeFactory.getInstance(); @Test public void testReplaceChild() { IMemMNode rootNode = nodeFactory.createInternalMNode(null, "root"); - IDeviceMNode aNode = new DeviceMNode(rootNode, "a"); + IDeviceMNode aNode = nodeFactory.createDeviceMNode(rootNode, "a"); rootNode.addChild(aNode.getName(), aNode.getAsMNode()); - IMeasurementMNode bNode = new MeasurementMNode(aNode, "b", null, null); + IMeasurementMNode bNode = nodeFactory.createMeasurementMNode(aNode, "b", null, null); aNode.addChild(bNode.getName(), bNode.getAsMNode()); aNode.addAlias("aliasOfb", bNode); - IDeviceMNode newANode = new DeviceMNode(null, "a"); + IDeviceMNode newANode = nodeFactory.createDeviceMNode(null, "a"); rootNode.replaceChild(aNode.getName(), newANode.getAsMNode()); List multiFullPaths = MetaUtils.getMultiFullPaths(rootNode); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java index 5a1de119c8c4b..dc65432288ec8 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java @@ -20,7 +20,8 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.junit.Test; @@ -30,17 +31,19 @@ public class CachedMNodeContainerTest { + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + @Test public void testIterator() { CachedMNodeContainer container = new CachedMNodeContainer(); Map childCache = new HashMap<>(); - childCache.put("1", new CacheBasicMNode(null, "1")); - childCache.put("2", new CacheBasicMNode(null, "2")); - childCache.put("5", new CacheBasicMNode(null, "5")); + childCache.put("1", nodeFactory.createInternalMNode(null, "1")); + childCache.put("2", nodeFactory.createInternalMNode(null, "2")); + childCache.put("5", nodeFactory.createInternalMNode(null, "5")); container.loadChildrenFromDisk(childCache); - container.put("3", new CacheBasicMNode(null, "3")); - container.put("4", new CacheBasicMNode(null, "4")); - container.put("6", new CacheBasicMNode(null, "6")); + container.put("3", nodeFactory.createInternalMNode(null, "3")); + container.put("4", nodeFactory.createInternalMNode(null, "4")); + container.put("6", nodeFactory.createInternalMNode(null, "6")); container.updateMNode("5"); container.updateMNode("6"); Iterator iterator = container.getChildrenIterator(); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java index 4d63db08bb210..a262940e76991 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java @@ -22,9 +22,8 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; -import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -43,6 +42,8 @@ public class RecordUtilTests { + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + @Before public void setUp() { EnvironmentUtils.envSetUp(); @@ -55,8 +56,8 @@ public void tearDown() throws Exception { @Test public void internalNodeTest() throws MetadataException { - ICacheMNode oneNode = new CacheBasicMNode(null, "abcd"); - ICacheMNode twoNode = new CacheDeviceMNode(null, "efgh"); + ICacheMNode oneNode = nodeFactory.createInternalMNode(null, "abcd"); + ICacheMNode twoNode = nodeFactory.createDeviceMNode(null, "efgh").getAsMNode(); ICachedMNodeContainer.getCachedMNodeContainer(oneNode).setSegmentAddress(1234567L); ICachedMNodeContainer.getCachedMNodeContainer(twoNode).setSegmentAddress(66666L); twoNode.getAsDeviceMNode().setUseTemplate(true); @@ -82,7 +83,8 @@ public void measurementTest() throws MetadataException { IMeasurementSchema schema = new MeasurementSchema( "amn", TSDataType.FLOAT, TSEncoding.BITMAP, CompressionType.GZIP, props); - ICacheMNode amn = new CacheMeasurementMNode(null, "amn", schema, "anothername"); + ICacheMNode amn = + nodeFactory.createMeasurementMNode(null, "amn", schema, "anothername").getAsMNode(); ByteBuffer tBuf = RecordUtils.node2Buffer(amn); tBuf.clear(); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java index 2d34b56e83bf7..5d8f37cee2d59 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java @@ -25,7 +25,8 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; @@ -50,6 +51,7 @@ public class SchemaFileLogTest { private static final int TEST_SCHEMA_REGION_ID = 0; + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); @Before public void setUp() { @@ -71,7 +73,8 @@ public void tearDown() throws Exception { public void essentialLogTest() throws IOException, MetadataException { SchemaFile sf = (SchemaFile) SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - IDatabaseMNode newSGNode = new CacheDatabaseDeviceMNode(null, "newSG", 10000L); + IDatabaseMNode newSGNode = + nodeFactory.createDatabaseDeviceMNode(null, "newSG", 10000L).getAsDatabaseMNode(); sf.updateStorageGroupNode(newSGNode); ICacheMNode root = virtualTriangleMTree(5, "root.test"); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java index 387af361e3349..de01f417ed3b8 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java @@ -30,13 +30,9 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.WrappedSegment; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; -import org.apache.iotdb.db.metadata.newnode.database.CacheDatabaseMNode; import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; @@ -66,6 +62,7 @@ public class SchemaFileTest { private static final int TEST_SCHEMA_REGION_ID = 0; + private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); @Before public void setUp() { @@ -86,7 +83,8 @@ public void tearDown() throws Exception { @Test public void essentialTestSchemaFile() throws IOException, MetadataException { ISchemaFile sf = SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - IDatabaseMNode newSGNode = new CacheDatabaseDeviceMNode(null, "newSG", 10000L); + IDatabaseMNode newSGNode = + nodeFactory.createDatabaseDeviceMNode(null, "newSG", 10000L).getAsDatabaseMNode(); sf.updateStorageGroupNode(newSGNode); ICacheMNode root = virtualTriangleMTree(5, "root.test"); @@ -160,7 +158,8 @@ public void essentialTestSchemaFile() throws IOException, MetadataException { @Test public void testVerticalTree() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sgvt.vt", TEST_SCHEMA_REGION_ID); - IDatabaseMNode sgNode = new CacheDatabaseDeviceMNode(null, "sg", 11_111L); + IDatabaseMNode sgNode = + nodeFactory.createDatabaseDeviceMNode(null, "sg", 11_111L).getAsDatabaseMNode(); sf.updateStorageGroupNode(sgNode); ICacheMNode root = getVerticalTree(100, "VT"); @@ -246,7 +245,7 @@ public void testFaltTree() throws MetadataException, IOException { } } - ICacheMNode node = new CacheBasicMNode(null, "a"); + ICacheMNode node = nodeFactory.createInternalMNode(null, "a"); ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(0L); List tryReadList = Arrays.asList(199, 1999, 2999, 3999, 4999, 5999); for (Integer rid : tryReadList) { @@ -260,7 +259,7 @@ public void testFaltTree() throws MetadataException, IOException { public void testGetChildren() throws MetadataException, IOException { essentialTestSchemaFile(); - ICacheMNode node = new CacheBasicMNode(null, "test"); + ICacheMNode node = nodeFactory.createInternalMNode(null, "test"); ICachedMNodeContainer.getCachedMNodeContainer(node) .setSegmentAddress(SchemaFile.getGlobalIndex(2, (short) 0)); ISchemaFile sf = SchemaFile.loadSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); @@ -278,11 +277,11 @@ public void testGetChildren() throws MetadataException, IOException { @Test public void test200KMeasurement() throws MetadataException, IOException { int i = 200000, j = 20; - ICacheMNode sgNode = new CacheDatabaseMNode(null, "sgRoot", 11111111L); + ICacheMNode sgNode = nodeFactory.createDatabaseMNode(null, "sgRoot", 11111111L).getAsMNode(); ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); while (j >= 0) { - ICacheMNode aDevice = new CacheDeviceMNode(sgNode, "dev_" + j); + ICacheMNode aDevice = nodeFactory.createDeviceMNode(sgNode, "dev_" + j).getAsMNode(); sgNode.addChild(aDevice); j--; } @@ -311,11 +310,11 @@ public void test200KMeasurement() throws MetadataException, IOException { @Test public void test10KDevices() throws MetadataException, IOException { int i = 1000; - ICacheMNode sgNode = new CacheDatabaseMNode(null, "sgRoot", 11111111L); + ICacheMNode sgNode = nodeFactory.createDatabaseMNode(null, "sgRoot", 11111111L).getAsMNode(); // write with empty entitiy while (i >= 0) { - ICacheMNode aDevice = new CacheBasicMNode(sgNode, "dev_" + i); + ICacheMNode aDevice = nodeFactory.createInternalMNode(sgNode, "dev_" + i); sgNode.addChild(aDevice); i--; } @@ -336,7 +335,7 @@ public void test10KDevices() throws MetadataException, IOException { i = 1000; while (i >= 0) { long addr = getSegAddrInContainer(sgNode.getChild("dev_" + i)); - ICacheMNode aDevice = new CacheDeviceMNode(sgNode, "dev_" + i); + ICacheMNode aDevice = nodeFactory.createDeviceMNode(sgNode, "dev_" + i).getAsMNode(); sgNode.deleteChild(aDevice.getName()); sgNode.addChild(aDevice); moveToUpdateBuffer(sgNode, "dev_" + i); @@ -460,7 +459,7 @@ public void testUpdateOnFullPageSegment() throws MetadataException, IOException root.getChildren().clear(); - root.addChild(new CacheDeviceMNode(root, "ent1")); + root.addChild(nodeFactory.createDeviceMNode(root, "ent1").getAsMNode()); ICacheMNode ent1 = root.getChild("ent1"); ent1.addChild(getMeasurementNode(ent1, "m1", "m1a")); @@ -513,7 +512,7 @@ public void testEstimateSegSize() throws Exception { * related methods shall be merged further: {@linkplain SchemaFile#reEstimateSegSize} * ,{@linkplain PageManager#reEstimateSegSize} */ - ICacheMNode sgNode = new CacheDatabaseMNode(null, "mma", 111111111L); + ICacheMNode sgNode = nodeFactory.createDatabaseMNode(null, "mma", 111111111L).getAsMNode(); ICacheMNode d1 = fillChildren(sgNode, 300, "d", this::supplyEntity); ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); try { @@ -548,7 +547,7 @@ public void testEstimateSegSize() throws Exception { @Test public void test200KAlias() throws Exception { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - ICacheMNode sgNode = new CacheDatabaseMNode(null, "mma", 111111111L); + ICacheMNode sgNode = nodeFactory.createDatabaseMNode(null, "mma", 111111111L).getAsMNode(); // 5 devices, each for 200k measurements int factor20K = 20000; List devs = new ArrayList<>(); @@ -557,7 +556,7 @@ public void test200KAlias() throws Exception { try { for (int i = 0; i < 5; i++) { - devs.add(new CacheDeviceMNode(sgNode, "d_" + i)); + devs.add(nodeFactory.createDeviceMNode(sgNode, "d_" + i).getAsMNode()); sgNode.addChild(devs.get(i)); } @@ -625,12 +624,12 @@ public void test200KAlias() throws Exception { @Test public void testRearrangementWhenInsert() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - ICacheMNode root = new CacheDatabaseDeviceMNode(null, "sgRoot", 0L); + ICacheMNode root = nodeFactory.createDatabaseDeviceMNode(null, "sgRoot", 0L); root.getChildren().clear(); - ICacheMNode ent2 = new CacheDeviceMNode(root, "ent2"); - ICacheMNode ent3 = new CacheDeviceMNode(root, "ent3"); - ICacheMNode ent4 = new CacheDeviceMNode(root, "ent4"); + ICacheMNode ent2 = nodeFactory.createDeviceMNode(root, "ent2").getAsMNode(); + ICacheMNode ent3 = nodeFactory.createDeviceMNode(root, "ent3").getAsMNode(); + ICacheMNode ent4 = nodeFactory.createDeviceMNode(root, "ent4").getAsMNode(); root.addChild(ent2); root.addChild(ent3); root.addChild(ent4); @@ -682,7 +681,7 @@ public void testRearrangementWhenInsert() throws MetadataException, IOException getSegAddr(sf, getSegAddrInContainer(ent4), "e4m0")); root.getChildren().clear(); - ICacheMNode ent5 = new CacheDeviceMNode(root, "ent5"); + ICacheMNode ent5 = nodeFactory.createDeviceMNode(root, "ent5").getAsMNode(); root.addChild(ent5); while (ent5.getChildren().size() < 19) { ent5.addChild( @@ -750,7 +749,7 @@ public void bitwiseTest() { public void basicTest() throws IOException, MetadataException { SchemaFileConfig.INTERNAL_SPLIT_VALVE = 16000; int i = 10000; - ICacheMNode sgNode = new CacheDatabaseDeviceMNode(null, "sgRoot", 11111111L); + ICacheMNode sgNode = nodeFactory.createDatabaseDeviceMNode(null, "sgRoot", 11111111L); Set checkSet = new HashSet<>(); // write with empty entitiy while (i >= 0) { @@ -784,7 +783,7 @@ public void basicSplitTest() throws MetadataException, IOException { SchemaFileConfig.INTERNAL_SPLIT_VALVE = 16230; SchemaFileConfig.DETAIL_SKETCH = true; int i = 999; - ICacheMNode sgNode = new CacheDatabaseDeviceMNode(null, "sgRoot", 11111111L); + ICacheMNode sgNode = nodeFactory.createDatabaseDeviceMNode(null, "sgRoot", 11111111L); Set checkSet = new HashSet<>(); // write with empty entitiy while (i >= 0) { @@ -819,7 +818,7 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (j < 100) { name = "0" + name; } - ICacheMNode aMeas = new CacheBasicMNode(sgNode, "d_" + name); + ICacheMNode aMeas = nodeFactory.createInternalMNode(sgNode, "d_" + name); sgNode.addChild(aMeas); } @@ -830,13 +829,13 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (j < 100) { name = "0" + name; } - ICacheMNode aMeas = new CacheBasicMNode(sgNode, "dd2_" + name); + ICacheMNode aMeas = nodeFactory.createInternalMNode(sgNode, "dd2_" + name); checkSet.add(aMeas.getName()); sgNode.getChildren().get("d_010").addChild(aMeas); } ICacheMNode d010 = sgNode.getChildren().get("d_010"); - d010 = MNodeUtils.setToEntity(d010, new CacheMNodeFactory()).getAsMNode(); + d010 = MNodeUtils.setToEntity(d010, nodeFactory).getAsMNode(); ICacheMNode ano = getMeasurementNode(d010, "splitover", "aliaslasialsai"); d010.addChild(ano); @@ -925,11 +924,11 @@ private ICacheMNode supplyMeasurement(ICacheMNode par, String name) { } private ICacheMNode supplyInternal(ICacheMNode par, String name) { - return new CacheBasicMNode(par, name); + return nodeFactory.createInternalMNode(par, name); } private ICacheMNode supplyEntity(ICacheMNode par, String name) { - return new CacheDeviceMNode(par, name); + return nodeFactory.createDeviceMNode(par, name).getAsMNode(); } private ICacheMNode fillChildren( @@ -968,14 +967,16 @@ private ICacheMNode getNode(ICacheMNode root, String path) throws MetadataExcept } static ICacheMNode getInternalWithSegAddr(ICacheMNode par, String name, long segAddr) { - ICacheMNode node = new CacheDeviceMNode(par, name); + ICacheMNode node = nodeFactory.createDeviceMNode(par, name).getAsMNode(); ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(segAddr); return node; } static ICacheMNode getMeasurementNode(ICacheMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); - return new CacheMeasurementMNode(par.getAsDeviceMNode(), name, schema, alias); + return nodeFactory + .createMeasurementMNode(par.getAsDeviceMNode(), name, schema, alias) + .getAsMNode(); } static void addNodeToUpdateBuffer(ICacheMNode par, ICacheMNode child) { @@ -1020,15 +1021,15 @@ static ICacheMNode virtualTriangleMTree(int size, String sgPath) throws Metadata String[] sgPathNodes = PathUtils.splitPathToDetachedNodes(sgPath); ICacheMNode upperNode = null; for (String name : sgPathNodes) { - upperNode = new CacheBasicMNode(upperNode, name); + upperNode = nodeFactory.createInternalMNode(upperNode, name); } - ICacheMNode internalNode = new CacheDatabaseDeviceMNode(upperNode, "vRoot1", 0L); + ICacheMNode internalNode = nodeFactory.createDatabaseDeviceMNode(upperNode, "vRoot1", 0L); for (int idx = 0; idx < size; idx++) { String measurementId = "mid" + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); IMeasurementMNode mNode = - new CacheMeasurementMNode( + nodeFactory.createMeasurementMNode( internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); internalNode.addChild(mNode.getAsMNode()); } @@ -1036,7 +1037,7 @@ static ICacheMNode virtualTriangleMTree(int size, String sgPath) throws Metadata ICacheMNode curNode = internalNode; for (int idx = 0; idx < size; idx++) { String nodeName = "int" + idx; - ICacheMNode newNode = new CacheDeviceMNode(curNode, nodeName); + ICacheMNode newNode = nodeFactory.createDeviceMNode(curNode, nodeName).getAsMNode(); curNode.addChild(newNode); curNode = newNode; } @@ -1044,28 +1045,29 @@ static ICacheMNode virtualTriangleMTree(int size, String sgPath) throws Metadata for (int idx = 0; idx < 1000; idx++) { IMeasurementSchema schema = new MeasurementSchema("finalM" + idx, TSDataType.FLOAT); IMeasurementMNode mNode = - new CacheMeasurementMNode( + nodeFactory.createMeasurementMNode( internalNode.getAsDeviceMNode(), "finalM" + idx, schema, "finalals" + idx); curNode.addChild(mNode.getAsMNode()); } IMeasurementSchema schema = new MeasurementSchema("finalM", TSDataType.FLOAT); IMeasurementMNode mNode = - new CacheMeasurementMNode(internalNode.getAsDeviceMNode(), "finalM", schema, "finalals"); + nodeFactory.createMeasurementMNode( + internalNode.getAsDeviceMNode(), "finalM", schema, "finalals"); curNode.addChild(mNode.getAsMNode()); upperNode.addChild(internalNode); return internalNode; } static ICacheMNode getFlatTree(int flatSize, String id) { - ICacheMNode root = new CacheBasicMNode(null, "root"); - ICacheMNode test = new CacheBasicMNode(root, "test"); - ICacheMNode internalNode = new CacheDatabaseDeviceMNode(null, "vRoot1", 0L); + ICacheMNode root = nodeFactory.createInternalMNode(null, "root"); + ICacheMNode test = nodeFactory.createInternalMNode(root, "test"); + ICacheMNode internalNode = nodeFactory.createDatabaseDeviceMNode(null, "vRoot1", 0L); for (int idx = 0; idx < flatSize; idx++) { String measurementId = id + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); IMeasurementMNode mNode = - new CacheMeasurementMNode( + nodeFactory.createMeasurementMNode( internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); internalNode.addChild(mNode.getAsMNode()); } @@ -1075,13 +1077,13 @@ static ICacheMNode getFlatTree(int flatSize, String id) { } static ICacheMNode getVerticalTree(int height, String id) { - ICacheMNode trueRoot = new CacheBasicMNode(null, "root"); - trueRoot.addChild(new CacheBasicMNode(trueRoot, "sgvt")); - ICacheMNode root = new CacheDatabaseDeviceMNode(null, "vt", 0L); + ICacheMNode trueRoot = nodeFactory.createInternalMNode(null, "root"); + trueRoot.addChild(nodeFactory.createInternalMNode(trueRoot, "sgvt")); + ICacheMNode root = nodeFactory.createDatabaseDeviceMNode(null, "vt", 0L); int cnt = 0; ICacheMNode cur = root; while (cnt < height) { - cur.addChild(new CacheDeviceMNode(cur, id + "_" + cnt)); + cur.addChild(nodeFactory.createDeviceMNode(cur, id + "_" + cnt).getAsMNode()); cur = cur.getChild(id + "_" + cnt); cnt++; } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java index 3083fdd9078f0..91781b91c3540 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java @@ -24,8 +24,8 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaPage; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; @@ -41,6 +41,8 @@ public class SchemaPageTest { + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + @Before public void setUp() { EnvironmentUtils.envSetUp(); @@ -104,14 +106,16 @@ public void essentialPageTest() throws MetadataException, IOException { } private ICacheMNode virtualFlatMTree(int childSize) { - ICacheMNode internalNode = new CacheDeviceMNode(null, "vRoot1"); + ICacheMNode internalNode = nodeFactory.createDeviceMNode(null, "vRoot1").getAsMNode(); for (int idx = 0; idx < childSize; idx++) { String measurementId = "mid" + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); internalNode.addChild( - new CacheMeasurementMNode( - internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als")); + nodeFactory + .createMeasurementMNode( + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als") + .getAsMNode()); } return internalNode; } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java index 1d35f9307c2d9..8af9e52ab0618 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java @@ -25,9 +25,8 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.WrappedSegment; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; -import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -43,6 +42,8 @@ public class WrappedSegmentTest { + private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + @Before public void setUp() { IoTDBDescriptor.getInstance() @@ -101,14 +102,16 @@ public void flatTreeInsert() throws MetadataException { } private ICacheMNode virtualFlatMTree(int childSize) { - ICacheMNode internalNode = new CacheDeviceMNode(null, "vRoot1"); + ICacheMNode internalNode = nodeFactory.createDeviceMNode(null, "vRoot1").getAsMNode(); for (int idx = 0; idx < childSize; idx++) { String measurementId = "mid" + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); internalNode.addChild( - new CacheMeasurementMNode( - internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als")); + nodeFactory + .createMeasurementMNode( + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als") + .getAsMNode()); } return internalNode; } @@ -155,7 +158,7 @@ public void increasingSplitTest() throws MetadataException { ByteBuffer buf2 = ByteBuffer.allocate(500); ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8"}; - ICacheMNode mNode = new CacheBasicMNode(null, "m"); + ICacheMNode mNode = nodeFactory.createInternalMNode(null, "m"); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = 0; i < test.length; i++) { @@ -189,7 +192,7 @@ public void decreasingSplitTest() throws MetadataException { ByteBuffer buf2 = ByteBuffer.allocate(500); ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8"}; - ICacheMNode mNode = new CacheBasicMNode(null, "m"); + ICacheMNode mNode = nodeFactory.createInternalMNode(null, "m"); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = test.length - 1; i >= 0; i--) { @@ -238,7 +241,8 @@ public void print(Object s) { private ICacheMNode getMeasurementNode(ICacheMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); - return new CacheMeasurementMNode( - par == null ? null : par.getAsDeviceMNode(), name, schema, alias); + return nodeFactory + .createMeasurementMNode(par == null ? null : par.getAsDeviceMNode(), name, schema, alias) + .getAsMNode(); } } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java index 9b8edce08606f..28a2af25f6522 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java @@ -18,13 +18,22 @@ */ package org.apache.iotdb.db.metadata.schemaRegion; +import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.path.PathPatternTree; +import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.rescon.CachedSchemaEngineStatistics; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.rescon.ISchemaEngineStatistics; import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngine; +import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; +import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; import org.junit.Assert; import org.junit.Test; @@ -36,115 +45,116 @@ public class SchemaStatisticsTest extends AbstractSchemaRegionTest { public SchemaStatisticsTest(AbstractSchemaRegionTest.SchemaRegionTestParams testParams) { super(testParams); } - // - // @Test - // public void testMemoryStatistics() throws Exception { - // ISchemaRegion schemaRegion1 = getSchemaRegion("root.sg1", 0); - // ISchemaRegion schemaRegion2 = getSchemaRegion("root.sg2", 1); - // ISchemaEngineStatistics engineStatistics = - // SchemaEngine.getInstance().getSchemaEngineStatistics(); - // - // SchemaRegionTestUtil.createSimpleTimeseriesByList( - // schemaRegion1, Arrays.asList("root.sg1.d0", "root.sg1.d1.s1", "root.sg1.d1.s2.t1")); - // SchemaRegionTestUtil.createSimpleTimeseriesByList( - // schemaRegion2, Arrays.asList("root.sg2.d1.s3", "root.sg2.d2.s1", "root.sg2.d2.s2")); - // PathPatternTree patternTree = new PathPatternTree(); - // patternTree.appendPathPattern(new PartialPath("root.**.s1")); - // patternTree.constructTree(); - // Assert.assertTrue(schemaRegion1.constructSchemaBlackList(patternTree) >= 1); - // Assert.assertTrue(schemaRegion2.constructSchemaBlackList(patternTree) >= 1); - // schemaRegion1.deleteTimeseriesInBlackList(patternTree); - // schemaRegion2.deleteTimeseriesInBlackList(patternTree); - // - // if (testParams.getTestModeName().equals("SchemaFile-PartialMemory") - // || testParams.getTestModeName().equals("SchemaFile-NonMemory")) { - // // wait release and flush task - // Thread.sleep(1000); - // IMNodeSizeEstimator estimator = new CachedMNodeSizeEstimator(); - // // schemaRegion1 - // IMNode sg1 = - // new AbstractDatabaseDeviceMNode( - // null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - // sg1.setFullPath("root.sg1"); - // long size1 = estimator.estimateSize(sg1); - // Assert.assertEquals(size1, - // schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); - // // schemaRegion2 - // IMNode sg2 = - // new AbstractDatabaseMNode( - // null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - // sg2.setFullPath("root.sg2"); - // long size2 = estimator.estimateSize(sg2); - // Assert.assertEquals(size2, - // schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); - // Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); - // } else { - // IMNodeSizeEstimator estimator = - // testParams.getSchemaEngineMode().equals("Memory") - // ? new BasicMNodSizeEstimator() - // : new CachedMNodeSizeEstimator(); - // // schemaRegion1 - // IMNode sg1 = - // new AbstractDatabaseDeviceMNode( - // null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - // sg1.setFullPath("root.sg1"); - // long size1 = estimator.estimateSize(sg1); - // IMNode tmp = - // new MeasurementMNode( - // sg1, - // "d0", - // new MeasurementSchema( - // "d0", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), - // null); - // size1 += estimator.estimateSize(tmp); - // tmp = new BasicMNode(sg1, "d1"); - // size1 += estimator.estimateSize(tmp); - // tmp = new AbstractDeviceMNode(tmp, "s2"); - // size1 += estimator.estimateSize(tmp); - // size1 += - // estimator.estimateSize( - // new MeasurementMNode( - // tmp, - // "t1", - // new MeasurementSchema( - // "t1", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), - // null)); - // Assert.assertEquals(size1, - // schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); - // // schemaRegion2 - // IMNode sg2 = - // new AbstractDatabaseMNode( - // null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); - // sg2.setFullPath("root.sg2"); - // long size2 = estimator.estimateSize(sg2); - // tmp = new AbstractDeviceMNode(sg2, "d1"); - // size2 += estimator.estimateSize(tmp); - // size2 += - // estimator.estimateSize( - // new MeasurementMNode( - // tmp, - // "s3", - // new MeasurementSchema( - // "s3", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), - // null)); - // tmp = new AbstractDeviceMNode(sg2, "d2"); - // size2 += estimator.estimateSize(tmp); - // size2 += - // estimator.estimateSize( - // new MeasurementMNode( - // tmp, - // "s2", - // new MeasurementSchema( - // "s2", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), - // null)); - // Assert.assertEquals(size2, - // schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); - // Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); - // } - // Assert.assertEquals(0, schemaRegion1.getSchemaRegionStatistics().getSchemaRegionId()); - // Assert.assertEquals(1, schemaRegion2.getSchemaRegionStatistics().getSchemaRegionId()); - // checkSchemaFileStatistics(engineStatistics); - // } + + @Test + public void testMemoryStatistics() throws Exception { + ISchemaRegion schemaRegion1 = getSchemaRegion("root.sg1", 0); + ISchemaRegion schemaRegion2 = getSchemaRegion("root.sg2", 1); + ISchemaEngineStatistics engineStatistics = + SchemaEngine.getInstance().getSchemaEngineStatistics(); + + SchemaRegionTestUtil.createSimpleTimeseriesByList( + schemaRegion1, Arrays.asList("root.sg1.d0", "root.sg1.d1.s1", "root.sg1.d1.s2.t1")); + SchemaRegionTestUtil.createSimpleTimeseriesByList( + schemaRegion2, Arrays.asList("root.sg2.d1.s3", "root.sg2.d2.s1", "root.sg2.d2.s2")); + PathPatternTree patternTree = new PathPatternTree(); + patternTree.appendPathPattern(new PartialPath("root.**.s1")); + patternTree.constructTree(); + Assert.assertTrue(schemaRegion1.constructSchemaBlackList(patternTree) >= 1); + Assert.assertTrue(schemaRegion2.constructSchemaBlackList(patternTree) >= 1); + schemaRegion1.deleteTimeseriesInBlackList(patternTree); + schemaRegion2.deleteTimeseriesInBlackList(patternTree); + + if (testParams.getTestModeName().equals("SchemaFile-PartialMemory") + || testParams.getTestModeName().equals("SchemaFile-NonMemory")) { + + IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + // wait release and flush task + Thread.sleep(1000); + // schemaRegion1 + IMNode sg1 = + nodeFactory.createDatabaseDeviceMNode( + null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + sg1.setFullPath("root.sg1"); + long size1 = sg1.estimateSize(); + Assert.assertEquals(size1, schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); + // schemaRegion2 + IMNode sg2 = + nodeFactory.createDatabaseMNode( + null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + sg2.setFullPath("root.sg2"); + long size2 = sg2.estimateSize(); + Assert.assertEquals(size2, schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); + Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); + } else { + IMNodeFactory nodeFactory = + testParams.getSchemaEngineMode().equals("Memory") + ? MemMNodeFactory.getInstance() + : CacheMNodeFactory.getInstance(); + // schemaRegion1 + IMNode sg1 = + nodeFactory.createDatabaseDeviceMNode( + null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + sg1.setFullPath("root.sg1"); + long size1 = sg1.estimateSize(); + System.out.println("===" + size1); + IMNode tmp = + nodeFactory.createMeasurementMNode( + sg1.getAsDeviceMNode(), + "d0", + new MeasurementSchema( + "d0", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), + null); + size1 += tmp.estimateSize(); + tmp = nodeFactory.createInternalMNode(sg1.getAsMNode(), "d1"); + size1 += tmp.estimateSize(); + tmp = nodeFactory.createDeviceMNode(tmp, "s2"); + size1 += tmp.estimateSize(); + size1 += + nodeFactory + .createMeasurementMNode( + tmp.getAsDeviceMNode(), + "t1", + new MeasurementSchema( + "t1", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), + null) + .estimateSize(); + Assert.assertEquals(size1, schemaRegion1.getSchemaRegionStatistics().getRegionMemoryUsage()); + // schemaRegion2 + IMNode sg2 = + nodeFactory.createDatabaseMNode( + null, "sg2", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); + sg2.setFullPath("root.sg2"); + long size2 = sg2.estimateSize(); + tmp = nodeFactory.createDeviceMNode(sg2, "d1"); + size2 += tmp.estimateSize(); + size2 += + nodeFactory + .createMeasurementMNode( + tmp.getAsDeviceMNode(), + "s3", + new MeasurementSchema( + "s3", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), + null) + .estimateSize(); + tmp = nodeFactory.createDeviceMNode(sg2, "d2"); + size2 += tmp.estimateSize(); + size2 += + nodeFactory + .createMeasurementMNode( + tmp.getAsDeviceMNode(), + "s2", + new MeasurementSchema( + "s2", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY), + null) + .estimateSize(); + Assert.assertEquals(size2, schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); + Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); + } + Assert.assertEquals(0, schemaRegion1.getSchemaRegionStatistics().getSchemaRegionId()); + Assert.assertEquals(1, schemaRegion2.getSchemaRegionStatistics().getSchemaRegionId()); + checkSchemaFileStatistics(engineStatistics); + } private void checkSchemaFileStatistics(ISchemaEngineStatistics engineStatistics) { if (engineStatistics instanceof CachedSchemaEngineStatistics) { diff --git a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java index 91f67a400c8d1..462374de4971e 100644 --- a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java +++ b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java @@ -25,9 +25,8 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.tools.schema.SchemaFileSketchTool; import org.apache.iotdb.db.utils.EnvironmentUtils; @@ -52,6 +51,8 @@ public class SchemaFileSketchTest { + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + @Before public void setUp() { IoTDBDescriptor.getInstance() @@ -144,16 +145,18 @@ public ICacheMNode next() { } private ICacheMNode getFlatTree(int flatSize, String id) { - ICacheMNode root = new CacheBasicMNode(null, "root"); - ICacheMNode test = new CacheBasicMNode(root, "test"); - ICacheMNode internalNode = new CacheDatabaseDeviceMNode(null, "vRoot1", 0L); + ICacheMNode root = nodeFactory.createInternalMNode(null, "root"); + ICacheMNode test = nodeFactory.createInternalMNode(root, "test"); + ICacheMNode internalNode = nodeFactory.createDatabaseDeviceMNode(null, "vRoot1", 0L); for (int idx = 0; idx < flatSize; idx++) { String measurementId = id + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); internalNode.addChild( - new CacheMeasurementMNode( - internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als")); + nodeFactory + .createMeasurementMNode( + internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als") + .getAsMNode()); } test.addChild(internalNode); From 27da336838564a6c3f4feb8688201401bce9582a Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Thu, 9 Mar 2023 19:50:41 +0800 Subject: [PATCH 17/26] fix compile error --- .../schemaregion/rocksdb/mnode/RInternalMNode.java | 10 ++++++++++ .../schemaregion/rocksdb/mnode/RMeasurementMNode.java | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java index 96db9c2c37a4b..16e38a9826bf8 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java @@ -158,4 +158,14 @@ public IMNodeContainer getChildren() { public MNodeType getMNodeType(Boolean isConfig) { return isConfig ? MNodeType.SG_INTERNAL : MNodeType.INTERNAL; } + + @Override + public int estimateSize() { + throw new UnsupportedOperationException(); + } + + @Override + public IMemMNode getAsMNode() { + throw new UnsupportedOperationException(); + } } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java index 6688b65e3bd27..43fead918c35a 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java @@ -217,6 +217,11 @@ public MNodeType getMNodeType(Boolean isConfig) { return MNodeType.MEASUREMENT; } + @Override + public int estimateSize() { + throw new UnsupportedOperationException(); + } + public Map getTags() { return tags; } From 8ba311e93a3841ae5ae608d3f1aecde5c553a3ca Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Thu, 9 Mar 2023 21:45:07 +0800 Subject: [PATCH 18/26] adjust package --- .../executor/ConfigPlanExecutor.java | 2 +- .../schema/IoTDBSortedShowTimeseriesIT.java | 2 +- .../apache/iotdb/db/it/schema/IoTDBTagIT.java | 2 +- .../iotdb/commons/schema/node}/IMNode.java | 12 ++++----- .../iotdb/commons/schema/node}/MNodeType.java | 2 +- .../common}/AbstractAboveDatabaseMNode.java | 16 ++++++------ .../common}/AbstractDatabaseDeviceMNode.java | 22 ++++++++-------- .../node/common}/AbstractDatabaseMNode.java | 16 +++++++----- .../node/common}/AbstractDeviceMNode.java | 16 +++++++----- .../common}/AbstractMeasurementMNode.java | 16 +++++++----- .../schema/node/info/IDatabaseDeviceInfo.java | 23 ++++++++++++++++ .../schema/node/info}/IDatabaseInfo.java | 3 ++- .../schema/node/info}/IDeviceInfo.java | 7 ++--- .../schema/node/info}/IMeasurementInfo.java | 3 ++- .../schema/node/role}/IDatabaseMNode.java | 4 +-- .../schema/node/role}/IDeviceMNode.java | 5 ++-- .../schema/node/role}/IMeasurementMNode.java | 4 +-- .../schema/node/utils}/IMNodeContainer.java | 4 +-- .../schema/node/utils}/IMNodeFactory.java | 10 +++---- .../schema/node/utils}/IMNodeIterator.java | 4 +-- .../schema/node}/visitor/MNodeVisitor.java | 12 ++++----- .../rocksdb/RSchemaReadWriteHandler.java | 4 +-- .../schemaregion/rocksdb/RSchemaRegion.java | 4 +-- .../schemaregion/rocksdb/RSchemaUtils.java | 2 +- .../rocksdb/mnode/RDatabaseMNode.java | 6 ++--- .../rocksdb/mnode/RDeviceMNode.java | 10 +++---- .../rocksdb/mnode/RInternalMNode.java | 6 ++--- .../schemaregion/rocksdb/mnode/RMNode.java | 14 +++++----- .../rocksdb/mnode/RMeasurementMNode.java | 8 +++--- .../tagSchemaRegion/TagSchemaRegion.java | 2 +- .../config}/IConfigMNode.java | 4 +-- .../config}/basic/ConfigBasicMNode.java | 22 ++++++++-------- .../container/ConfigMNodeContainer.java | 5 ++-- .../config}/factory/ConfigMNodeFactory.java | 15 ++++++----- .../impl}/ConfigBasicInternalMNode.java | 9 ++++--- .../config/impl}/ConfigDatabaseMNode.java | 9 ++++--- .../config/info}/ConfigMNodeInfo.java | 4 ++- .../{newnode => mnode/mem}/IMemMNode.java | 4 +-- .../mem}/basic/BasicMNode.java | 22 ++++++++-------- .../container/MemMNodeContainer.java | 5 ++-- .../estimator/MNodeSizeEstimator.java | 2 +- .../mem}/factory/MemMNodeFactory.java | 23 ++++++++-------- .../mem/impl}/AboveDatabaseMNode.java | 8 +++--- .../mem/impl}/BasicInternalMNode.java | 9 ++++--- .../mem/impl}/DatabaseDeviceMNode.java | 10 +++---- .../mem/impl}/DatabaseMNode.java | 9 ++++--- .../mem/impl}/DeviceMNode.java | 9 ++++--- .../mem/impl}/MeasurementMNode.java | 14 +++++----- .../mem/info}/BasicMNodeInfo.java | 2 +- .../mem/info}/DatabaseDeviceInfo.java | 11 ++++---- .../mem/info}/DatabaseInfo.java | 4 ++- .../device => mnode/mem/info}/DeviceInfo.java | 8 +++--- .../mem/info}/MeasurementInfo.java | 4 ++- .../iterator/AbstractTraverserIterator.java | 11 ++++---- .../{ => mem}/iterator/MNodeIterator.java | 5 ++-- .../iterator/MemoryTraverserIterator.java | 8 +++--- .../schemafile}/ICacheMNode.java | 4 +-- .../schemafile}/basic/CacheBasicMNode.java | 22 ++++++++-------- .../container}/CachedMNodeContainer.java | 6 ++--- .../container}/ICachedMNodeContainer.java | 6 ++--- .../factory/CacheMNodeFactory.java | 23 ++++++++-------- .../impl}/CacheAboveDatabaseMNode.java | 8 +++--- .../impl}/CacheBasicInternalMNode.java | 9 ++++--- .../impl}/CacheDatabaseDeviceMNode.java | 10 +++---- .../schemafile/impl}/CacheDatabaseMNode.java | 9 ++++--- .../schemafile/impl}/CacheDeviceMNode.java | 9 ++++--- .../impl}/CacheMeasurementMNode.java | 14 +++++----- .../schemafile/info}/CacheMNodeInfo.java | 3 ++- .../iterator/CachedTraverserIterator.java | 9 ++++--- .../mnode/{ => utils}/MNodeUtils.java | 9 ++++--- .../iotdb/db/metadata/mtree/ConfigMTree.java | 10 +++---- .../db/metadata/mtree/IMTreeBelowSG.java | 4 +-- .../mtree/MTreeBelowSGCachedImpl.java | 14 +++++----- .../mtree/MTreeBelowSGMemoryImpl.java | 14 +++++----- .../mtree/snapshot/MemMTreeSnapshotUtil.java | 24 ++++++++--------- .../mtree/store/CachedMTreeStore.java | 26 +++++++++---------- .../mtree/store/ConfigMTreeStore.java | 16 ++++++------ .../db/metadata/mtree/store/IMTreeStore.java | 8 +++--- .../metadata/mtree/store/MemMTreeStore.java | 22 ++++++++-------- .../ReentrantReadOnlyCachedMTreeStore.java | 8 +++--- .../mtree/store/disk/cache/CacheManager.java | 10 +++---- .../mtree/store/disk/cache/ICacheManager.java | 4 +-- .../store/disk/cache/LRUCacheManager.java | 2 +- .../store/disk/cache/PlainCacheManager.java | 2 +- .../store/disk/memcontrol/MemManager.java | 2 +- .../store/disk/schemafile/ISchemaFile.java | 4 +-- .../store/disk/schemafile/ISegmentedPage.java | 2 +- .../store/disk/schemafile/MockSchemaFile.java | 16 ++++++------ .../store/disk/schemafile/RecordUtils.java | 10 +++---- .../store/disk/schemafile/SchemaFile.java | 10 +++---- .../store/disk/schemafile/SegmentedPage.java | 2 +- .../store/disk/schemafile/WrappedSegment.java | 2 +- .../schemafile/pagemgr/BTreePageManager.java | 2 +- .../disk/schemafile/pagemgr/IPageManager.java | 2 +- .../disk/schemafile/pagemgr/PageManager.java | 4 +-- .../metadata/mtree/traverser/Traverser.java | 10 +++---- .../TraverserWithLimitOffsetWrapper.java | 2 +- .../traverser/basic/DatabaseTraverser.java | 2 +- .../traverser/basic/EntityTraverser.java | 2 +- .../mtree/traverser/basic/MNodeTraverser.java | 2 +- .../traverser/basic/MeasurementTraverser.java | 2 +- .../collector/DatabaseCollector.java | 4 +-- .../traverser/collector/EntityCollector.java | 4 +-- .../collector/MNodeAboveSGCollector.java | 2 +- .../traverser/collector/MNodeCollector.java | 2 +- .../collector/MeasurementCollector.java | 4 +-- .../traverser/counter/DatabaseCounter.java | 2 +- .../traverser/counter/EntityCounter.java | 2 +- .../traverser/counter/MeasurementCounter.java | 2 +- .../traverser/updater/EntityUpdater.java | 4 +-- .../traverser/updater/MeasurementUpdater.java | 4 +-- .../schemaregion/result/ShowNodesResult.java | 2 +- .../metadata/query/info/INodeSchemaInfo.java | 2 +- .../schemaregion/SchemaRegionMemoryImpl.java | 6 ++--- .../SchemaRegionSchemaFileImpl.java | 6 ++--- .../iotdb/db/metadata/tag/TagManager.java | 4 +-- .../iotdb/db/metadata/utils/MetaUtils.java | 2 +- .../schema/NodeManageMemoryMergeOperator.java | 2 +- .../memory/StatementMemorySourceVisitor.java | 2 +- .../iotdb/db/metadata/MetaUtilsTest.java | 6 ++--- .../db/metadata/idtable/IDTableTest.java | 2 +- .../iotdb/db/metadata/mnode/MNodeTest.java | 10 +++---- .../db/metadata/mtree/ConfigMTreeTest.java | 4 +-- .../mtree/disk/CachedMNodeContainerTest.java | 8 +++--- .../mtree/schemafile/RecordUtilTests.java | 8 +++--- .../mtree/schemafile/SchemaFileLogTest.java | 8 +++--- .../mtree/schemafile/SchemaFileTest.java | 16 ++++++------ .../mtree/schemafile/SchemaPageTest.java | 6 ++--- .../mtree/schemafile/WrappedSegmentTest.java | 6 ++--- .../schemaRegion/SchemaRegionBasicTest.java | 2 +- .../schemaRegion/SchemaStatisticsTest.java | 8 +++--- ...odeManagementMemoryMergeNodeSerdeTest.java | 2 +- .../iotdb/db/tools/SchemaFileSketchTest.java | 6 ++--- 133 files changed, 533 insertions(+), 473 deletions(-) rename {server/src/main/java/org/apache/iotdb/db/metadata/mnode => node-commons/src/main/java/org/apache/iotdb/commons/schema/node}/IMNode.java (84%) rename {server/src/main/java/org/apache/iotdb/db/metadata/mnode => node-commons/src/main/java/org/apache/iotdb/commons/schema/node}/MNodeType.java (97%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common}/AbstractAboveDatabaseMNode.java (89%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common}/AbstractDatabaseDeviceMNode.java (90%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/database => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common}/AbstractDatabaseMNode.java (90%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/device => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common}/AbstractDeviceMNode.java (91%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common}/AbstractMeasurementMNode.java (91%) create mode 100644 node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseDeviceInfo.java rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/database => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info}/IDatabaseInfo.java (91%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/device => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info}/IDeviceInfo.java (88%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info}/IMeasurementInfo.java (91%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/database => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role}/IDatabaseMNode.java (92%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/device => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role}/IDeviceMNode.java (90%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role}/IMeasurementMNode.java (93%) rename {server/src/main/java/org/apache/iotdb/db/metadata/mnode/container => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils}/IMNodeContainer.java (89%) rename {server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils}/IMNodeFactory.java (82%) rename {server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator => node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils}/IMNodeIterator.java (89%) rename {server/src/main/java/org/apache/iotdb/db/metadata/mnode => node-commons/src/main/java/org/apache/iotdb/commons/schema/node}/visitor/MNodeVisitor.java (77%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/config}/IConfigMNode.java (91%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/config}/basic/ConfigBasicMNode.java (90%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/{ => config}/container/ConfigMNodeContainer.java (92%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/config}/factory/ConfigMNodeFactory.java (82%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/basic => mnode/config/impl}/ConfigBasicInternalMNode.java (93%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/database => mnode/config/impl}/ConfigDatabaseMNode.java (84%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/config/info}/ConfigMNodeInfo.java (95%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/mem}/IMemMNode.java (89%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/mem}/basic/BasicMNode.java (89%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/{ => mem}/container/MemMNodeContainer.java (92%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/{ => mem}/estimator/MNodeSizeEstimator.java (94%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/mem}/factory/MemMNodeFactory.java (75%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/abovedatabase => mnode/mem/impl}/AboveDatabaseMNode.java (81%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/basic => mnode/mem/impl}/BasicInternalMNode.java (94%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/databasedevice => mnode/mem/impl}/DatabaseDeviceMNode.java (78%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/database => mnode/mem/impl}/DatabaseMNode.java (80%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/device => mnode/mem/impl}/DeviceMNode.java (78%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/measurement => mnode/mem/impl}/MeasurementMNode.java (73%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/mem/info}/BasicMNodeInfo.java (95%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/mem/info}/DatabaseDeviceInfo.java (85%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/database => mnode/mem/info}/DatabaseInfo.java (92%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/device => mnode/mem/info}/DeviceInfo.java (94%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/measurement => mnode/mem/info}/MeasurementInfo.java (94%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/{ => mem}/iterator/AbstractTraverserIterator.java (92%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/{ => mem}/iterator/MNodeIterator.java (87%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/{ => mem}/iterator/MemoryTraverserIterator.java (85%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/schemafile}/ICacheMNode.java (90%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/schemafile}/basic/CacheBasicMNode.java (90%) rename server/src/main/java/org/apache/iotdb/db/metadata/{mtree/store/disk => mnode/schemafile/container}/CachedMNodeContainer.java (98%) rename server/src/main/java/org/apache/iotdb/db/metadata/{mtree/store/disk => mnode/schemafile/container}/ICachedMNodeContainer.java (91%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/schemafile}/factory/CacheMNodeFactory.java (74%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/abovedatabase => mnode/schemafile/impl}/CacheAboveDatabaseMNode.java (83%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/basic => mnode/schemafile/impl}/CacheBasicInternalMNode.java (94%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/databasedevice => mnode/schemafile/impl}/CacheDatabaseDeviceMNode.java (80%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/database => mnode/schemafile/impl}/CacheDatabaseMNode.java (82%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/device => mnode/schemafile/impl}/CacheDeviceMNode.java (80%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode/measurement => mnode/schemafile/impl}/CacheMeasurementMNode.java (75%) rename server/src/main/java/org/apache/iotdb/db/metadata/{newnode => mnode/schemafile/info}/CacheMNodeInfo.java (91%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/{ => schemafile}/iterator/CachedTraverserIterator.java (82%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/{ => utils}/MNodeUtils.java (93%) diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java index aa07955bf0789..f56cfb99a36fb 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java @@ -22,6 +22,7 @@ import org.apache.iotdb.common.rpc.thrift.TSchemaNode; import org.apache.iotdb.commons.auth.AuthException; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.schema.node.MNodeType; import org.apache.iotdb.commons.snapshot.SnapshotProcessor; import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan; import org.apache.iotdb.confignode.consensus.request.auth.AuthorPlan; @@ -111,7 +112,6 @@ import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; import org.apache.iotdb.confignode.rpc.thrift.TShowRegionReq; import org.apache.iotdb.consensus.common.DataSet; -import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.rpc.TSStatusCode; import org.apache.iotdb.tsfile.utils.Pair; diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSortedShowTimeseriesIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSortedShowTimeseriesIT.java index 3c70fc0511588..c3fcbfe250415 100644 --- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSortedShowTimeseriesIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSortedShowTimeseriesIT.java @@ -100,7 +100,7 @@ public IoTDBSortedShowTimeseriesIT(SchemaTestMode schemaTestMode) { public void setUp() throws Exception { super.setUp(); if (schemaTestMode.equals(SchemaTestMode.SchemaFile)) { - allocateMemoryForSchemaRegion(5500); + allocateMemoryForSchemaRegion(10000); } EnvFactory.getEnv().initClusterEnvironment(); createSchema(); diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBTagIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBTagIT.java index 98e0e408631ea..cc94dec78595e 100644 --- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBTagIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBTagIT.java @@ -53,7 +53,7 @@ public IoTDBTagIT(SchemaTestMode schemaTestMode) { public void setUp() throws Exception { super.setUp(); if (schemaTestMode.equals(SchemaTestMode.SchemaFile)) { - allocateMemoryForSchemaRegion(5500); + allocateMemoryForSchemaRegion(10000); } EnvFactory.getEnv().initClusterEnvironment(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/IMNode.java similarity index 84% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/IMNode.java index 0bd4420f57ff3..f3f8f48b80489 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/IMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/IMNode.java @@ -16,15 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor; import org.apache.iotdb.commons.schema.tree.ITreeNode; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; /** This interface defines a MNode's operation interfaces. */ public interface IMNode> extends ITreeNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeType.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/MNodeType.java similarity index 97% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeType.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/MNodeType.java index 6b498eb2b73a0..133bc37a7c305 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeType.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/MNodeType.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.commons.schema.node; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractAboveDatabaseMNode.java similarity index 89% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractAboveDatabaseMNode.java index e0662cdc40995..454a0e2038861 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AbstractAboveDatabaseMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractAboveDatabaseMNode.java @@ -16,16 +16,16 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.abovedatabase; +package org.apache.iotdb.commons.schema.node.common; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor; public abstract class AbstractAboveDatabaseMNode, BasicNode extends IMNode> implements IMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java similarity index 90% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java index d8f7219bd3558..0f749fb391f1f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/AbstractDatabaseDeviceMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java @@ -16,29 +16,29 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.databasedevice; +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 org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.DatabaseDeviceInfo; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import java.util.Map; public abstract class AbstractDatabaseDeviceMNode, BasicNode extends IMNode> implements IDatabaseMNode, IDeviceMNode { - private final DatabaseDeviceInfo databaseDeviceInfo; + private final IDatabaseDeviceInfo databaseDeviceInfo; protected final BasicNode basicMNode; public AbstractDatabaseDeviceMNode( - BasicNode basicMNode, DatabaseDeviceInfo databaseDeviceInfo) { + BasicNode basicMNode, IDatabaseDeviceInfo databaseDeviceInfo) { this.basicMNode = basicMNode; this.databaseDeviceInfo = databaseDeviceInfo; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java similarity index 90% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java index e6193ac049dbb..c77d7a57b7af4 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/AbstractDatabaseMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java @@ -16,16 +16,18 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.database; +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.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; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; public abstract class AbstractDatabaseMNode, BasicNode extends IMNode> implements IDatabaseMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDeviceMNode.java similarity index 91% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDeviceMNode.java index 312552465130b..093eaaf4e6304 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/AbstractDeviceMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDeviceMNode.java @@ -16,15 +16,17 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.device; +package org.apache.iotdb.commons.schema.node.common; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor; import java.util.Map; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractMeasurementMNode.java similarity index 91% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractMeasurementMNode.java index 73d126fbf6466..602c5d8d3c82f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/AbstractMeasurementMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractMeasurementMNode.java @@ -16,16 +16,18 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.measurement; +package org.apache.iotdb.commons.schema.node.common; import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseDeviceInfo.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseDeviceInfo.java new file mode 100644 index 0000000000000..f6cd81d0b1e4c --- /dev/null +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseDeviceInfo.java @@ -0,0 +1,23 @@ +/* + * 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.info; + +import org.apache.iotdb.commons.schema.node.IMNode; + +public interface IDatabaseDeviceInfo> extends IDatabaseInfo, IDeviceInfo {} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseInfo.java similarity index 91% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseInfo.java index 1fbef8b4e459b..31c2b42ba6873 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseInfo.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseInfo.java @@ -16,8 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.database; +package org.apache.iotdb.commons.schema.node.info; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; public interface IDatabaseInfo { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDeviceInfo.java similarity index 88% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDeviceInfo.java index 85e0a2da8be65..bc625833d5b5a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceInfo.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDeviceInfo.java @@ -16,10 +16,11 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.device; +package org.apache.iotdb.commons.schema.node.info; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.IMeasurementMNode; import java.util.Map; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IMeasurementInfo.java similarity index 91% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IMeasurementInfo.java index 716e78af92b94..ccb9254bd581e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementInfo.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IMeasurementInfo.java @@ -16,8 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.measurement; +package org.apache.iotdb.commons.schema.node.info; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDatabaseMNode.java similarity index 92% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDatabaseMNode.java index 80fa13370ff8f..4eb7c01d7b4ff 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/IDatabaseMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDatabaseMNode.java @@ -16,10 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.database; +package org.apache.iotdb.commons.schema.node.role; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.IMNode; /** This interface defines a DatabaseMNode's operation interfaces. */ public interface IDatabaseMNode> extends IMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDeviceMNode.java similarity index 90% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDeviceMNode.java index f60da8ad9af49..8713933d5eb0b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/IDeviceMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDeviceMNode.java @@ -16,10 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.device; +package org.apache.iotdb.commons.schema.node.role; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import java.util.Map; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IMeasurementMNode.java similarity index 93% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IMeasurementMNode.java index c4a395a16bb10..57ad4dd94845a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/IMeasurementMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IMeasurementMNode.java @@ -16,10 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.measurement; +package org.apache.iotdb.commons.schema.node.role; import org.apache.iotdb.commons.path.MeasurementPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/IMNodeContainer.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils/IMNodeContainer.java similarity index 89% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/IMNodeContainer.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils/IMNodeContainer.java index a32dbc9f9977e..f3522686f781d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/IMNodeContainer.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils/IMNodeContainer.java @@ -16,9 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode.container; +package org.apache.iotdb.commons.schema.node.utils; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import java.util.Map; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils/IMNodeFactory.java similarity index 82% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils/IMNodeFactory.java index 6c11b8d9765f1..f8aaa669bcbc7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/IMNodeFactory.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils/IMNodeFactory.java @@ -16,12 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.factory; +package org.apache.iotdb.commons.schema.node.utils; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.IMeasurementMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public interface IMNodeFactory> { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/IMNodeIterator.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils/IMNodeIterator.java similarity index 89% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/IMNodeIterator.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils/IMNodeIterator.java index 1a7387736b77f..de1c710b22890 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/IMNodeIterator.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/utils/IMNodeIterator.java @@ -16,9 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode.iterator; +package org.apache.iotdb.commons.schema.node.utils; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import java.util.Iterator; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/visitor/MNodeVisitor.java similarity index 77% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java rename to node-commons/src/main/java/org/apache/iotdb/commons/schema/node/visitor/MNodeVisitor.java index 9468943fa0c73..d156295eb0db8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/visitor/MNodeVisitor.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/visitor/MNodeVisitor.java @@ -17,13 +17,13 @@ * under the License. */ -package org.apache.iotdb.db.metadata.mnode.visitor; +package org.apache.iotdb.commons.schema.node.visitor; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.AbstractMeasurementMNode; +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 { diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java index f7de3390ae404..621897dd2a38c 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java @@ -21,11 +21,11 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; +import org.apache.iotdb.db.metadata.mnode.mem.impl.MeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RMNodeType; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java index 4d28835547297..69aec0c9561d5 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java @@ -27,6 +27,8 @@ 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.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.commons.utils.PathUtils; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.conf.IoTDBConfig; @@ -42,8 +44,6 @@ import org.apache.iotdb.db.metadata.idtable.IDTable; import org.apache.iotdb.db.metadata.idtable.IDTableManager; import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java index d92aaf2afc6c9..f5f31136e12f7 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java @@ -22,8 +22,8 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.commons.utils.PathUtils; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RDatabaseMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RDeviceMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RMNodeType; diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java index a3442495b2bdf..8153d61247e73 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java @@ -21,10 +21,10 @@ import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.commons.schema.node.MNodeType; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java index 8ce0e3e3fdb9d..0ce285a7194a1 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDeviceMNode.java @@ -20,11 +20,11 @@ package org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.MNodeType; +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.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java index 16e38a9826bf8..338dfbc79064e 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java @@ -20,9 +20,9 @@ package org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.commons.schema.node.MNodeType; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java index 0bdf825b069b4..05cd849158e8c 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java @@ -22,13 +22,13 @@ import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java index 43fead918c35a..58a9708d449b3 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java @@ -21,10 +21,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.MeasurementPath; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.MNodeType; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaUtils; diff --git a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java index e8abaa9430847..75b73a4d9e6e2 100644 --- a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java +++ b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java @@ -25,6 +25,7 @@ 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.node.role.IDatabaseMNode; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; @@ -37,7 +38,6 @@ import org.apache.iotdb.db.metadata.idtable.entry.SHA256DeviceID; import org.apache.iotdb.db.metadata.idtable.entry.SchemaEntry; import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/IConfigMNode.java similarity index 91% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/IConfigMNode.java index 93908e70d80c0..7283db502666a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IConfigMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/IConfigMNode.java @@ -16,9 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode; +package org.apache.iotdb.db.metadata.mnode.config; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; public interface IConfigMNode extends IMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/basic/ConfigBasicMNode.java similarity index 90% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/basic/ConfigBasicMNode.java index 79b0526754515..b1866e1c2120e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/basic/ConfigBasicMNode.java @@ -16,19 +16,19 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.basic; +package org.apache.iotdb.db.metadata.mnode.config.basic; import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.ConfigMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.ConfigMNodeInfo; -import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.db.metadata.mnode.config.IConfigMNode; +import org.apache.iotdb.db.metadata.mnode.config.container.ConfigMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.config.info.ConfigMNodeInfo; import java.util.ArrayList; import java.util.List; @@ -38,7 +38,7 @@ public class ConfigBasicMNode implements IConfigMNode { private static final long serialVersionUID = -770028375899514063L; private IConfigMNode parent; - private ConfigMNodeInfo configMNodeInfo; + private final ConfigMNodeInfo configMNodeInfo; /** from root to this node, only be set when used once for InternalMNode */ private String fullPath; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/ConfigMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/container/ConfigMNodeContainer.java similarity index 92% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/ConfigMNodeContainer.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/container/ConfigMNodeContainer.java index 1e2dda7ef8ac7..52e190f907365 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/ConfigMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/container/ConfigMNodeContainer.java @@ -16,9 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode.container; +package org.apache.iotdb.db.metadata.mnode.config.container; -import org.apache.iotdb.db.metadata.newnode.IConfigMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; import org.jetbrains.annotations.NotNull; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/factory/ConfigMNodeFactory.java similarity index 82% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/factory/ConfigMNodeFactory.java index 4fa5f360eb1d7..dc1a03e36b033 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/ConfigMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/factory/ConfigMNodeFactory.java @@ -16,14 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.factory; +package org.apache.iotdb.db.metadata.mnode.config.factory; -import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.database.ConfigDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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; +import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; +import org.apache.iotdb.db.metadata.mnode.config.impl.ConfigBasicInternalMNode; +import org.apache.iotdb.db.metadata.mnode.config.impl.ConfigDatabaseMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class ConfigMNodeFactory implements IMNodeFactory { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicInternalMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigBasicInternalMNode.java similarity index 93% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicInternalMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigBasicInternalMNode.java index 3bd97da0c872e..daef341a6ee06 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/ConfigBasicInternalMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigBasicInternalMNode.java @@ -16,11 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.basic; +package org.apache.iotdb.db.metadata.mnode.config.impl; -import org.apache.iotdb.db.metadata.mnode.container.ConfigMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.IConfigMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; +import org.apache.iotdb.db.metadata.mnode.config.basic.ConfigBasicMNode; +import org.apache.iotdb.db.metadata.mnode.config.container.ConfigMNodeContainer; /** * This class is the implementation of Metadata Node. One MNode instance represents one node in the diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigDatabaseMNode.java similarity index 84% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigDatabaseMNode.java index cfc4fe3e6b4b0..1ee92329ca63f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/ConfigDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigDatabaseMNode.java @@ -16,11 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.database; +package org.apache.iotdb.db.metadata.mnode.config.impl; -import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.ConfigBasicMNode; +import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; +import org.apache.iotdb.db.metadata.mnode.config.basic.ConfigBasicMNode; +import org.apache.iotdb.db.metadata.mnode.mem.info.DatabaseInfo; public class ConfigDatabaseMNode extends AbstractDatabaseMNode implements IConfigMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/info/ConfigMNodeInfo.java similarity index 95% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/info/ConfigMNodeInfo.java index a3659169ccdda..26ac24eaf7608 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ConfigMNodeInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/info/ConfigMNodeInfo.java @@ -16,7 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode; +package org.apache.iotdb.db.metadata.mnode.config.info; + +import org.apache.iotdb.db.metadata.mnode.mem.info.BasicMNodeInfo; import static org.apache.iotdb.db.metadata.MetadataConstant.NON_TEMPLATE; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IMemMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/IMemMNode.java similarity index 89% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/IMemMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/IMemMNode.java index c39deaa34238d..68ef9b86056a8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/IMemMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/IMemMNode.java @@ -16,8 +16,8 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode; +package org.apache.iotdb.db.metadata.mnode.mem; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; public interface IMemMNode extends IMNode {} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/basic/BasicMNode.java similarity index 89% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/basic/BasicMNode.java index 03c0066357842..dfd23aa44184b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/basic/BasicMNode.java @@ -16,19 +16,19 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.basic; +package org.apache.iotdb.db.metadata.mnode.mem.basic; import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.MemMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.newnode.BasicMNodeInfo; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.container.MemMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.mem.info.BasicMNodeInfo; import java.util.ArrayList; import java.util.List; @@ -42,7 +42,7 @@ public class BasicMNode implements IMemMNode { private static final long serialVersionUID = -770028375899514063L; private IMemMNode parent; - private BasicMNodeInfo basicMNodeInfo; + private final BasicMNodeInfo basicMNodeInfo; /** from root to this node, only be set when used once for InternalMNode */ private String fullPath; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MemMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/container/MemMNodeContainer.java similarity index 92% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MemMNodeContainer.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/container/MemMNodeContainer.java index 69ca2d2519bee..813793383fc41 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/container/MemMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/container/MemMNodeContainer.java @@ -16,9 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode.container; +package org.apache.iotdb.db.metadata.mnode.mem.container; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; import org.jetbrains.annotations.NotNull; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/MNodeSizeEstimator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/estimator/MNodeSizeEstimator.java similarity index 94% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/MNodeSizeEstimator.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/estimator/MNodeSizeEstimator.java index b7e4fe7c1637a..37f6201fb61ac 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/estimator/MNodeSizeEstimator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/estimator/MNodeSizeEstimator.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.iotdb.db.metadata.mnode.estimator; +package org.apache.iotdb.db.metadata.mnode.mem.estimator; public class MNodeSizeEstimator { private static int ALIAS_BASE_SIZE = 52; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/factory/MemMNodeFactory.java similarity index 75% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/factory/MemMNodeFactory.java index 867c19bbd6c30..24215c1e15096 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/MemMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/factory/MemMNodeFactory.java @@ -16,18 +16,19 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.factory; +package org.apache.iotdb.db.metadata.mnode.mem.factory; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.abovedatabase.AboveDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.database.DatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.DatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.DeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.MeasurementMNode; +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; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.impl.AboveDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.mem.impl.BasicInternalMNode; +import org.apache.iotdb.db.metadata.mnode.mem.impl.DatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.mnode.mem.impl.DatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.mem.impl.DeviceMNode; +import org.apache.iotdb.db.metadata.mnode.mem.impl.MeasurementMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class MemMNodeFactory implements IMNodeFactory { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/AboveDatabaseMNode.java similarity index 81% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/AboveDatabaseMNode.java index 503868dd37d0f..46c47cd530566 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/AboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/AboveDatabaseMNode.java @@ -16,11 +16,11 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.abovedatabase; +package org.apache.iotdb.db.metadata.mnode.mem.impl; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; +import org.apache.iotdb.commons.schema.node.common.AbstractAboveDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.basic.BasicMNode; public class AboveDatabaseMNode extends AbstractAboveDatabaseMNode implements IMemMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicInternalMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/BasicInternalMNode.java similarity index 94% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicInternalMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/BasicInternalMNode.java index 63dbeb30431a4..b790fbf6c5f88 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/BasicInternalMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/BasicInternalMNode.java @@ -16,11 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.basic; +package org.apache.iotdb.db.metadata.mnode.mem.impl; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.MemMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.basic.BasicMNode; +import org.apache.iotdb.db.metadata.mnode.mem.container.MemMNodeContainer; /** * This class is the implementation of Metadata Node. One MNode instance represents one node in the diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseDeviceMNode.java similarity index 78% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseDeviceMNode.java index 2b6b581bc878f..c21ded3b82e2b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/DatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseDeviceMNode.java @@ -16,12 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.databasedevice; +package org.apache.iotdb.db.metadata.mnode.mem.impl; -import org.apache.iotdb.db.metadata.newnode.DatabaseDeviceInfo; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; +import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.basic.BasicMNode; +import org.apache.iotdb.db.metadata.mnode.mem.info.DatabaseDeviceInfo; public class DatabaseDeviceMNode extends AbstractDatabaseDeviceMNode implements IMemMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseMNode.java similarity index 80% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseMNode.java index ed7589a2f63cc..8508b0045ddf6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseMNode.java @@ -16,11 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.database; +package org.apache.iotdb.db.metadata.mnode.mem.impl; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; +import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.basic.BasicMNode; +import org.apache.iotdb.db.metadata.mnode.mem.info.DatabaseInfo; public class DatabaseMNode extends AbstractDatabaseMNode implements IMemMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DeviceMNode.java similarity index 78% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DeviceMNode.java index c2aaaa95e7379..9915b8a49960e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DeviceMNode.java @@ -16,11 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.device; +package org.apache.iotdb.db.metadata.mnode.mem.impl; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; +import org.apache.iotdb.commons.schema.node.common.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.basic.BasicMNode; +import org.apache.iotdb.db.metadata.mnode.mem.info.DeviceInfo; public class DeviceMNode extends AbstractDeviceMNode implements IMemMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/MeasurementMNode.java similarity index 73% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/MeasurementMNode.java index 3061507a0cf70..79e66a366b7c9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/MeasurementMNode.java @@ -16,13 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.measurement; +package org.apache.iotdb.db.metadata.mnode.mem.impl; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.container.MemMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.basic.BasicMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; +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.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.basic.BasicMNode; +import org.apache.iotdb.db.metadata.mnode.mem.container.MemMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.mem.info.MeasurementInfo; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class MeasurementMNode extends AbstractMeasurementMNode diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/BasicMNodeInfo.java similarity index 95% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/BasicMNodeInfo.java index 444a940d7d056..49deac759ae4b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/BasicMNodeInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/BasicMNodeInfo.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode; +package org.apache.iotdb.db.metadata.mnode.mem.info; public class BasicMNodeInfo { private String name; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseDeviceInfo.java similarity index 85% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseDeviceInfo.java index 95023f69af7fd..9237071afba9e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/DatabaseDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseDeviceInfo.java @@ -16,16 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode; +package org.apache.iotdb.db.metadata.mnode.mem.info; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.info.IDatabaseDeviceInfo; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseInfo; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.DeviceInfo; public class DatabaseDeviceInfo> extends DeviceInfo - implements IDatabaseInfo { + implements IDatabaseDeviceInfo { /** * when the data file in a database is older than dataTTL, it is considered invalid and will be * eventually deleted. diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseInfo.java similarity index 92% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseInfo.java index 4da80fdd1bc55..3b19105068698 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/DatabaseInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseInfo.java @@ -16,8 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.database; +package org.apache.iotdb.db.metadata.mnode.mem.info; +import org.apache.iotdb.commons.schema.node.info.IDatabaseInfo; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; public class DatabaseInfo implements IDatabaseInfo { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DeviceInfo.java similarity index 94% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DeviceInfo.java index a1918192a2a3c..34182996465e2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/DeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DeviceInfo.java @@ -16,10 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.device; +package org.apache.iotdb.db.metadata.mnode.mem.info; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +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.IMeasurementMNode; import java.util.Collections; import java.util.Map; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/MeasurementInfo.java similarity index 94% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/MeasurementInfo.java index b0c2094de3de3..9df799726da8f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/MeasurementInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/MeasurementInfo.java @@ -16,8 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.measurement; +package org.apache.iotdb.db.metadata.mnode.mem.info; +import org.apache.iotdb.commons.schema.node.info.IMeasurementInfo; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/iterator/AbstractTraverserIterator.java similarity index 92% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/iterator/AbstractTraverserIterator.java index 30f7ca0cb997e..dddd3e37448c9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/AbstractTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/iterator/AbstractTraverserIterator.java @@ -16,14 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode.iterator; +package org.apache.iotdb.db.metadata.mnode.mem.iterator; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeUtils; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IDeviceMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.utils.MNodeUtils; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; import java.util.Iterator; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/iterator/MNodeIterator.java similarity index 87% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/iterator/MNodeIterator.java index ac2676440febe..e5864e5b1c14d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MNodeIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/iterator/MNodeIterator.java @@ -17,9 +17,10 @@ * under the License. */ -package org.apache.iotdb.db.metadata.mnode.iterator; +package org.apache.iotdb.db.metadata.mnode.mem.iterator; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator; import java.util.Iterator; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/iterator/MemoryTraverserIterator.java similarity index 85% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/iterator/MemoryTraverserIterator.java index aa54adc0ccc0b..503d0e4620e34 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/MemoryTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/iterator/MemoryTraverserIterator.java @@ -16,13 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode.iterator; +package org.apache.iotdb.db.metadata.mnode.mem.iterator; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IDeviceMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; import java.util.Map; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ICacheMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/ICacheMNode.java similarity index 90% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/ICacheMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/ICacheMNode.java index 8018232f7da7b..f43df314c8390 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/ICacheMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/ICacheMNode.java @@ -16,9 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode; +package org.apache.iotdb.db.metadata.mnode.schemafile; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; public interface ICacheMNode extends IMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/CacheBasicMNode.java similarity index 90% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/CacheBasicMNode.java index 1301e62590950..0a20a7249ce92 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/CacheBasicMNode.java @@ -16,20 +16,20 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.basic; +package org.apache.iotdb.db.metadata.mnode.schemafile.basic; import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.MNodeType; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; -import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; +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.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.info.CacheMNodeInfo; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -import org.apache.iotdb.db.metadata.newnode.CacheMNodeInfo; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import java.util.ArrayList; import java.util.List; @@ -43,7 +43,7 @@ public class CacheBasicMNode implements ICacheMNode { private static final long serialVersionUID = -770028375899514063L; private ICacheMNode parent; - private CacheMNodeInfo cacheMNodeInfo; + private final CacheMNodeInfo cacheMNodeInfo; /** from root to this node, only be set when used once for InternalMNode */ private String fullPath; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/CachedMNodeContainer.java similarity index 98% rename from server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/CachedMNodeContainer.java index d1913af018273..ed1fd4d22818c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/CachedMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/CachedMNodeContainer.java @@ -16,10 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mtree.store.disk; +package org.apache.iotdb.db.metadata.mnode.schemafile.container; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.jetbrains.annotations.NotNull; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/ICachedMNodeContainer.java similarity index 91% rename from server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/ICachedMNodeContainer.java index 51510ee4dbf3b..6ac7f2cde7a53 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/ICachedMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/ICachedMNodeContainer.java @@ -16,10 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mtree.store.disk; +package org.apache.iotdb.db.metadata.mnode.schemafile.container; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import java.util.Iterator; import java.util.Map; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/factory/CacheMNodeFactory.java similarity index 74% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/factory/CacheMNodeFactory.java index fa3b541498d74..5c64a4a281733 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/factory/CacheMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/factory/CacheMNodeFactory.java @@ -16,18 +16,19 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.factory; +package org.apache.iotdb.db.metadata.mnode.schemafile.factory; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.abovedatabase.CacheAboveDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.database.CacheDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.CacheDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.CacheDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.CacheMeasurementMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheAboveDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheBasicInternalMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheDeviceMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheMeasurementMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class CacheMNodeFactory implements IMNodeFactory { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheAboveDatabaseMNode.java similarity index 83% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheAboveDatabaseMNode.java index 3fb45599c186b..f95d632e7e640 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/abovedatabase/CacheAboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheAboveDatabaseMNode.java @@ -16,12 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.abovedatabase; +package org.apache.iotdb.db.metadata.mnode.schemafile.impl; +import org.apache.iotdb.commons.schema.node.common.AbstractAboveDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; public class CacheAboveDatabaseMNode extends AbstractAboveDatabaseMNode implements ICacheMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicInternalMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheBasicInternalMNode.java similarity index 94% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicInternalMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheBasicInternalMNode.java index 84f324e7446a3..174e22aaede33 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/basic/CacheBasicInternalMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheBasicInternalMNode.java @@ -16,11 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.basic; +package org.apache.iotdb.db.metadata.mnode.schemafile.impl; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; /** * This class is the implementation of Metadata Node. One MNode instance represents one node in the diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseDeviceMNode.java similarity index 80% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseDeviceMNode.java index 403150a08e2d6..6eba4b0c95d3b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/databasedevice/CacheDatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseDeviceMNode.java @@ -16,13 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.databasedevice; +package org.apache.iotdb.db.metadata.mnode.schemafile.impl; +import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.mnode.mem.info.DatabaseDeviceInfo; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -import org.apache.iotdb.db.metadata.newnode.DatabaseDeviceInfo; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; public class CacheDatabaseDeviceMNode extends AbstractDatabaseDeviceMNode implements ICacheMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseMNode.java similarity index 82% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseMNode.java index c50a8e1f0e255..f7acf74b2234f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/database/CacheDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseMNode.java @@ -16,12 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.database; +package org.apache.iotdb.db.metadata.mnode.schemafile.impl; +import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.mem.info.DatabaseInfo; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; public class CacheDatabaseMNode extends AbstractDatabaseMNode implements ICacheMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDeviceMNode.java similarity index 80% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDeviceMNode.java index e0b3ea50bd4ce..679acc42d4127 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/device/CacheDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDeviceMNode.java @@ -16,12 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.device; +package org.apache.iotdb.db.metadata.mnode.schemafile.impl; +import org.apache.iotdb.commons.schema.node.common.AbstractDeviceMNode; +import org.apache.iotdb.db.metadata.mnode.mem.info.DeviceInfo; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicInternalMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; public class CacheDeviceMNode extends AbstractDeviceMNode implements ICacheMNode { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheMeasurementMNode.java similarity index 75% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheMeasurementMNode.java index 7e6c2d296fd7d..915cfc66ad5bf 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/measurement/CacheMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheMeasurementMNode.java @@ -16,14 +16,16 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode.measurement; +package org.apache.iotdb.db.metadata.mnode.schemafile.impl; -import org.apache.iotdb.db.metadata.mnode.container.IMNodeContainer; -import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; +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.utils.IMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.mem.info.MeasurementInfo; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.basic.CacheBasicMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; public class CacheMeasurementMNode extends AbstractMeasurementMNode diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/info/CacheMNodeInfo.java similarity index 91% rename from server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/info/CacheMNodeInfo.java index 5a7a90b6a66ad..d89dba9bca34d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/newnode/CacheMNodeInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/info/CacheMNodeInfo.java @@ -16,8 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.newnode; +package org.apache.iotdb.db.metadata.mnode.schemafile.info; +import org.apache.iotdb.db.metadata.mnode.mem.info.BasicMNodeInfo; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; public class CacheMNodeInfo extends BasicMNodeInfo { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/iterator/CachedTraverserIterator.java similarity index 82% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/iterator/CachedTraverserIterator.java index 78f4dc1c5150a..06696c79ac631 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/iterator/CachedTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/iterator/CachedTraverserIterator.java @@ -16,13 +16,14 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode.iterator; +package org.apache.iotdb.db.metadata.mnode.schemafile.iterator; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.commons.schema.node.role.IDeviceMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.mem.iterator.AbstractTraverserIterator; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; import java.util.Map; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/utils/MNodeUtils.java similarity index 93% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/utils/MNodeUtils.java index 3665e802b6520..f64f270ccee52 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNodeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/utils/MNodeUtils.java @@ -16,11 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metadata.mnode; +package org.apache.iotdb.db.metadata.mnode.utils; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; +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.utils.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java index 582c48edbb815..03be968b351b6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java @@ -24,20 +24,20 @@ import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator; import org.apache.iotdb.commons.utils.ThriftConfigNodeSerDeUtils; import org.apache.iotdb.db.exception.metadata.DatabaseAlreadySetException; import org.apache.iotdb.db.exception.metadata.DatabaseNotSetException; import org.apache.iotdb.db.exception.metadata.PathNotExistException; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.config.basic.IConfigMNode; +import org.apache.iotdb.db.metadata.mnode.config.factory.ConfigMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.ConfigMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.collector.DatabaseCollector; import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeAboveSGCollector; import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeCollector; import org.apache.iotdb.db.metadata.mtree.traverser.counter.DatabaseCounter; -import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.factory.ConfigMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; import org.apache.iotdb.tsfile.utils.Pair; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java index 4f791920fd866..1d334a528c2a1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java @@ -21,8 +21,8 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.db.metadata.template.Template; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index ed90d3efcd79d..1e36c8c99e119 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -23,6 +23,11 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.MeasurementPath; 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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator; import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException; import org.apache.iotdb.db.exception.metadata.AlignedTimeseriesException; import org.apache.iotdb.db.exception.metadata.MNodeTypeMismatchException; @@ -34,7 +39,8 @@ import org.apache.iotdb.db.exception.metadata.template.TemplateImcompatibeException; import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.CachedMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; import org.apache.iotdb.db.metadata.mtree.traverser.TraverserWithLimitOffsetWrapper; @@ -45,12 +51,6 @@ import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementCounter; import org.apache.iotdb.db.metadata.mtree.traverser.updater.EntityUpdater; import org.apache.iotdb.db.metadata.mtree.traverser.updater.MeasurementUpdater; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index 3b53acdc8e9c1..33a46e99d47ee 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -23,6 +23,11 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.MeasurementPath; 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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator; import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException; import org.apache.iotdb.db.exception.metadata.AlignedTimeseriesException; import org.apache.iotdb.db.exception.metadata.MNodeTypeMismatchException; @@ -34,7 +39,8 @@ import org.apache.iotdb.db.exception.metadata.template.TemplateImcompatibeException; import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; import org.apache.iotdb.db.metadata.mtree.traverser.TraverserWithLimitOffsetWrapper; @@ -45,12 +51,6 @@ import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementCounter; import org.apache.iotdb.db.metadata.mtree.traverser.updater.EntityUpdater; import org.apache.iotdb.db.metadata.mtree.traverser.updater.MeasurementUpdater; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java index 83f91391abf9f..4b7c29b63dec5 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java @@ -20,20 +20,20 @@ package org.apache.iotdb.db.metadata.mtree.snapshot; import org.apache.iotdb.commons.file.SystemFileFactory; +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; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator; +import org.apache.iotdb.commons.schema.node.visitor.MNodeVisitor; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; -import org.apache.iotdb.db.metadata.mnode.visitor.MNodeVisitor; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.database.AbstractDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.databasedevice.AbstractDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.AbstractDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.AbstractMeasurementMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java index 608cb36226c26..3469f69df738d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java @@ -20,24 +20,24 @@ import org.apache.iotdb.commons.exception.MetadataException; 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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; -import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.estimator.MNodeSizeEstimator; -import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.CachedTraverserIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; -import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.mem.estimator.MNodeSizeEstimator; +import org.apache.iotdb.db.metadata.mnode.mem.iterator.AbstractTraverserIterator; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.schemafile.iterator.CachedTraverserIterator; +import org.apache.iotdb.db.metadata.mnode.utils.MNodeUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.ICacheManager; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; @@ -51,7 +51,7 @@ import java.util.Map; import java.util.NoSuchElementException; -import static org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer.getCachedMNodeContainer; +import static org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer.getCachedMNodeContainer; public class CachedMTreeStore implements IMTreeStore { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java index 5821fe0a2f6ee..e5ff3bd3b74ab 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java @@ -21,14 +21,14 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.MemoryTraverserIterator; -import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.IMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.config.basic.IConfigMNode; +import org.apache.iotdb.db.metadata.mnode.mem.iterator.AbstractTraverserIterator; +import org.apache.iotdb.db.metadata.mnode.mem.iterator.MNodeIterator; +import org.apache.iotdb.db.metadata.mnode.mem.iterator.MemoryTraverserIterator; import org.apache.iotdb.db.metadata.template.Template; import java.io.File; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java index 77cabfa622c52..e5580809e17d5 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/IMTreeStore.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator; import org.apache.iotdb.db.metadata.template.Template; import java.io.File; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index 6879cde06ed21..5ba3644c4b27e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -22,18 +22,18 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.estimator.MNodeSizeEstimator; -import org.apache.iotdb.db.metadata.mnode.iterator.AbstractTraverserIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.MemoryTraverserIterator; +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.IMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.estimator.MNodeSizeEstimator; +import org.apache.iotdb.db.metadata.mnode.mem.factory.MemMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.mem.iterator.AbstractTraverserIterator; +import org.apache.iotdb.db.metadata.mnode.mem.iterator.MNodeIterator; +import org.apache.iotdb.db.metadata.mnode.mem.iterator.MemoryTraverserIterator; +import org.apache.iotdb.db.metadata.mnode.utils.MNodeUtils; import org.apache.iotdb.db.metadata.mtree.snapshot.MemMTreeSnapshotUtil; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.rescon.MemSchemaRegionStatistics; import org.apache.iotdb.db.metadata.template.Template; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java index 3cec169bb302f..fd63b2fe196d9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.IMNodeIterator; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.db.metadata.template.Template; import java.io.File; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java index 35d0073dd8731..49f0c21f684d8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java @@ -18,12 +18,12 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk.cache; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException; -import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; import java.util.ArrayList; import java.util.Iterator; @@ -32,8 +32,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; -import static org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer.getBelongedContainer; -import static org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer.getCachedMNodeContainer; +import static org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer.getBelongedContainer; +import static org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer.getCachedMNodeContainer; /** * This class implemented the cache management, involving the cache status management on per MNode diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java index ec7904a612a98..067c95314252a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java @@ -18,10 +18,10 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk.cache; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import java.util.List; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java index 135a64dabefe1..fad08170224c0 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java @@ -18,8 +18,8 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk.cache; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Lock; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java index 8e8beb6472e42..37d0d949ea055 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java @@ -18,8 +18,8 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk.cache; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java index 0ec1cc891579d..6a88ae1247fb9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import java.util.List; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java index bf7a1cc80c5dd..15a8c81cfed29 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java @@ -19,8 +19,8 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.schemafile; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import java.io.File; import java.io.IOException; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java index 5bef46aac142f..73a758c95be1c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java @@ -21,7 +21,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.exception.metadata.schemafile.SchemaPageOverflowException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentNotFoundException; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java index ec1ceea9ac33d..7038e564ee2a7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java @@ -20,13 +20,13 @@ import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; -import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import java.io.File; import java.io.IOException; @@ -36,7 +36,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import static org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer.getCachedMNodeContainer; +import static org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer.getCachedMNodeContainer; public class MockSchemaFile implements ISchemaFile { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java index 69b260c438ad5..a4e2fd02c9bc5 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java @@ -19,13 +19,13 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.schemafile; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java index 7e27c243776b1..5d17e4d5e7c09 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java @@ -21,18 +21,18 @@ import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.file.SystemFileFactory; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.commons.utils.PathUtils; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.schemafile.SchemaFileNotExists; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.BTreePageManager; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.IPageManager; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.PageManager; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.slf4j.Logger; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java index 68742b77ad55c..fbd12022ac830 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java @@ -24,7 +24,7 @@ import org.apache.iotdb.db.exception.metadata.schemafile.SchemaPageOverflowException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentNotFoundException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentOverflowException; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import java.nio.ByteBuffer; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java index 1960a4a8cf389..8aa3246f72da1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.schemafile.RecordDuplicatedException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentOverflowException; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java index 803a4a2d883d2..b93cef794f0de 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.exception.metadata.schemafile.ColossalRecordException; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegmentedPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.io.File; import java.io.IOException; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java index d6a2b8aebe905..294df9e9dd628 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java @@ -19,9 +19,9 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaPage; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import java.io.IOException; import java.io.PrintWriter; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java index 8ce0a94540107..cef4bad6176e9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java @@ -21,7 +21,8 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.schemafile.SchemaPageOverflowException; -import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegmentedPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; @@ -30,7 +31,6 @@ import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SegmentedPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.log.SchemaFileLogReader; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.log.SchemaFileLogWriter; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java index fd341a3c62ace..9e588a1152fbc 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java @@ -21,14 +21,14 @@ import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.commons.schema.node.utils.IMNodeIterator; import org.apache.iotdb.commons.schema.tree.AbstractTreeVisitor; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; -import org.apache.iotdb.db.metadata.mnode.iterator.MNodeIterator; +import org.apache.iotdb.db.metadata.mnode.mem.iterator.MNodeIterator; +import org.apache.iotdb.db.metadata.mnode.utils.MNodeUtils; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.store.ReentrantReadOnlyCachedMTreeStore; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.template.Template; import org.slf4j.Logger; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/TraverserWithLimitOffsetWrapper.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/TraverserWithLimitOffsetWrapper.java index 48511fa6c9918..c497885102ea7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/TraverserWithLimitOffsetWrapper.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/TraverserWithLimitOffsetWrapper.java @@ -20,7 +20,7 @@ package org.apache.iotdb.db.metadata.mtree.traverser; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import java.util.NoSuchElementException; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java index af3e60f47bcaf..7e5f704d40e59 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/DatabaseTraverser.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java index 7fab2244839c2..6ead59dad4eee 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/EntityTraverser.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MNodeTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MNodeTraverser.java index 236aa8b8a3eec..e2bcf3156760d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MNodeTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MNodeTraverser.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MeasurementTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MeasurementTraverser.java index a53a250c4ce5d..6ced2e9cbba97 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MeasurementTraverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/basic/MeasurementTraverser.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java index 325c7ac28521a..1c71ae27f63b1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/DatabaseCollector.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.DatabaseTraverser; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; // This class implements database path collection function. public abstract class DatabaseCollector> extends DatabaseTraverser { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java index 96a956d188a02..1c95ca05936a1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IDeviceMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.EntityTraverser; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; // This class defines EntityMNode as target node and defines the Entity process framework. // TODO: set R is IDeviceSchemaInfo diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java index b3df5b46ab0c1..df625b33a34ef 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeAboveSGCollector.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import java.util.HashSet; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java index 5cda0a3040c7b..fe7087e2a1037 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.MNodeTraverser; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java index d2b5e832f3266..2c42161abb05e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java @@ -21,10 +21,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.MeasurementTraverser; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; // This class defines MeasurementMNode as target node and defines the measurement process framework. // TODO: set R is ITimeseriesInfo diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/DatabaseCounter.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/DatabaseCounter.java index b3c72e9d73bfb..4daaabe76800b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/DatabaseCounter.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/DatabaseCounter.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.DatabaseTraverser; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java index 79f4603fe67b4..5e5cd03f2c75a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.EntityTraverser; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java index 4099f89b318aa..7e5387fbf194c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.MeasurementTraverser; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java index a693c20b72905..3fbee6e2c0438 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/EntityUpdater.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IDeviceMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.EntityTraverser; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; public abstract class EntityUpdater> extends EntityTraverser implements Updater { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java index b28aea0313606..b7a669bdf50b8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/updater/MeasurementUpdater.java @@ -20,10 +20,10 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.IMNode; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.basic.MeasurementTraverser; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; public abstract class MeasurementUpdater> extends MeasurementTraverser implements Updater { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowNodesResult.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowNodesResult.java index e07d5dcee6d05..e0e5edab4dab9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowNodesResult.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowNodesResult.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.plan.schemaregion.result; -import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.commons.schema.node.MNodeType; import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo; import java.util.Objects; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/query/info/INodeSchemaInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/query/info/INodeSchemaInfo.java index f7aa604009109..cdc449c6524d7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/query/info/INodeSchemaInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/query/info/INodeSchemaInfo.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.query.info; -import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.commons.schema.node.MNodeType; public interface INodeSchemaInfo extends ISchemaInfo { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java index 9eb0f1783a3d7..5bec389692d34 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java @@ -25,6 +25,8 @@ 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.node.role.IDeviceMNode; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.commons.utils.FileUtils; import org.apache.iotdb.consensus.ConsensusFactory; import org.apache.iotdb.db.conf.IoTDBConfig; @@ -41,10 +43,8 @@ import org.apache.iotdb.db.metadata.logfile.SchemaLogWriter; import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; import org.apache.iotdb.db.metadata.metric.SchemaRegionMemMetric; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGMemoryImpl; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanDeserializer; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java index 16dc2008c70af..13d7c4064f835 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java @@ -24,6 +24,8 @@ 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.node.role.IDeviceMNode; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.consensus.ConsensusFactory; import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; @@ -43,11 +45,9 @@ import org.apache.iotdb.db.metadata.logfile.SchemaLogWriter; import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; import org.apache.iotdb.db.metadata.metric.SchemaRegionCachedMetric; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGCachedImpl; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor; import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanDeserializer; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java index 51ba5a1ec57a6..d52e8ecc72d70 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java @@ -21,11 +21,11 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.file.SystemFileFactory; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan; import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult; import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java index cf0141cbefd0e..9a4bc694d5c59 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java @@ -24,8 +24,8 @@ import org.apache.iotdb.commons.path.AlignedPath; import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.commons.utils.TestOnly; -import org.apache.iotdb.db.metadata.mnode.IMNode; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.AggregationDescriptor; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.OrderByParameter; import org.apache.iotdb.db.mpp.plan.statement.component.Ordering; diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/NodeManageMemoryMergeOperator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/NodeManageMemoryMergeOperator.java index d9315fcdbc4f5..7124b6d27c3b0 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/NodeManageMemoryMergeOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/NodeManageMemoryMergeOperator.java @@ -20,7 +20,7 @@ package org.apache.iotdb.db.mpp.execution.operator.schema; import org.apache.iotdb.common.rpc.thrift.TSchemaNode; -import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.commons.schema.node.MNodeType; import org.apache.iotdb.db.mpp.common.header.ColumnHeader; import org.apache.iotdb.db.mpp.common.header.ColumnHeaderConstant; import org.apache.iotdb.db.mpp.execution.operator.Operator; diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java index d1f15a9534f13..40e29c8cb43da 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java @@ -23,8 +23,8 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.schema.node.MNodeType; import org.apache.iotdb.commons.sync.pipesink.PipeSink; -import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.mpp.common.header.ColumnHeader; import org.apache.iotdb.db.mpp.common.header.ColumnHeaderConstant; import org.apache.iotdb.db.mpp.common.header.DatasetHeader; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java index dd8ec59b38257..67b700641e10f 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java @@ -22,9 +22,9 @@ import org.apache.iotdb.commons.path.AlignedPath; import org.apache.iotdb.commons.path.MeasurementPath; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.utils.MetaUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.Pair; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java index 4fb1d6383c16f..a7dfe55c3d816 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java @@ -30,7 +30,7 @@ // import org.apache.iotdb.db.metadata.idtable.entry.DiskSchemaEntry; // import org.apache.iotdb.db.metadata.idtable.entry.IDeviceID; // import org.apache.iotdb.db.metadata.idtable.entry.SchemaEntry; -// import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +// import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; // import org.apache.iotdb.db.qp.Planner; // import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan; // import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java index 0a775582b5123..42fde861adfb8 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mnode/MNodeTest.java @@ -18,11 +18,11 @@ */ package org.apache.iotdb.db.metadata.mnode; -import org.apache.iotdb.db.metadata.newnode.IMemMNode; -import org.apache.iotdb.db.metadata.newnode.device.IDeviceMNode; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; +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.metadata.mnode.mem.IMemMNode; +import org.apache.iotdb.db.metadata.mnode.mem.factory.MemMNodeFactory; import org.apache.iotdb.db.metadata.utils.MetaUtils; import org.junit.Test; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java index e81b04826aa74..bf0541d105556 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java @@ -21,9 +21,9 @@ import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.newnode.IConfigMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.config.basic.IConfigMNode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.utils.Pair; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java index dc65432288ec8..43f41bf39ed31 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java @@ -18,10 +18,10 @@ */ package org.apache.iotdb.db.metadata.mtree.disk; -import org.apache.iotdb.db.metadata.mtree.store.disk.CachedMNodeContainer; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.junit.Test; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java index a262940e76991..ed941175cd682 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java @@ -19,11 +19,11 @@ package org.apache.iotdb.db.metadata.mtree.schemafile; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java index 5d8f37cee2d59..ff1698719dda7 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java @@ -19,14 +19,14 @@ package org.apache.iotdb.db.metadata.mtree.schemafile; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java index de01f417ed3b8..6045237001458 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java @@ -19,21 +19,21 @@ package org.apache.iotdb.db.metadata.mtree.schemafile; import org.apache.iotdb.commons.exception.MetadataException; +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.IMeasurementMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.commons.utils.PathUtils; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.mnode.MNodeUtils; -import org.apache.iotdb.db.metadata.mtree.store.disk.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.utils.MNodeUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.WrappedSegment; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.database.IDatabaseMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.measurement.IMeasurementMNode; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java index 91781b91c3540..89e7a2eec458a 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java @@ -19,13 +19,13 @@ package org.apache.iotdb.db.metadata.mtree.schemafile; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaPage; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java index 8af9e52ab0618..ab28d100186f2 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java @@ -19,14 +19,14 @@ package org.apache.iotdb.db.metadata.mtree.schemafile; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegment; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.WrappedSegment; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java index 9f64421280783..879884ca5c0e7 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java @@ -22,10 +22,10 @@ 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.node.MNodeType; import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException; import org.apache.iotdb.db.exception.metadata.MeasurementAlreadyExistException; import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException; -import org.apache.iotdb.db.metadata.mnode.MNodeType; import org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory; import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory; import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java index 28a2af25f6522..764b032a1f316 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java @@ -21,10 +21,10 @@ import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.path.PathPatternTree; -import org.apache.iotdb.db.metadata.mnode.IMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.MemMNodeFactory; +import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.mem.factory.MemMNodeFactory; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.rescon.CachedSchemaEngineStatistics; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import org.apache.iotdb.db.metadata.rescon.ISchemaEngineStatistics; diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java index 2a598b1f64039..8737b34ec937a 100644 --- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java @@ -23,7 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TSchemaNode; import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.metadata.mnode.MNodeType; +import org.apache.iotdb.commons.schema.node.MNodeType; import org.apache.iotdb.db.mpp.common.FragmentInstanceId; import org.apache.iotdb.db.mpp.common.PlanFragmentId; import org.apache.iotdb.db.mpp.execution.exchange.sink.DownStreamChannelLocation; diff --git a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java index 462374de4971e..b1d19e18d3026 100644 --- a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java +++ b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java @@ -20,13 +20,13 @@ package org.apache.iotdb.db.tools; import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.metadata.MetadataConstant; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; -import org.apache.iotdb.db.metadata.newnode.ICacheMNode; -import org.apache.iotdb.db.metadata.newnode.factory.CacheMNodeFactory; -import org.apache.iotdb.db.metadata.newnode.factory.IMNodeFactory; import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode; import org.apache.iotdb.db.tools.schema.SchemaFileSketchTool; import org.apache.iotdb.db.utils.EnvironmentUtils; From c98a79dc86a910823b0fc0d9c1488b57993c16ee Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Thu, 9 Mar 2023 21:55:06 +0800 Subject: [PATCH 19/26] fix compile error --- .../java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java | 2 +- .../apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java | 2 +- .../org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java index 03be968b351b6..692143e66968c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java @@ -31,7 +31,7 @@ import org.apache.iotdb.db.exception.metadata.DatabaseAlreadySetException; import org.apache.iotdb.db.exception.metadata.DatabaseNotSetException; import org.apache.iotdb.db.exception.metadata.PathNotExistException; -import org.apache.iotdb.db.metadata.mnode.config.basic.IConfigMNode; +import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; import org.apache.iotdb.db.metadata.mnode.config.factory.ConfigMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.ConfigMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.collector.DatabaseCollector; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java index e5ff3bd3b74ab..f74b2d8c5c627 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ConfigMTreeStore.java @@ -25,7 +25,7 @@ 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.IMNodeIterator; -import org.apache.iotdb.db.metadata.mnode.config.basic.IConfigMNode; +import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; import org.apache.iotdb.db.metadata.mnode.mem.iterator.AbstractTraverserIterator; import org.apache.iotdb.db.metadata.mnode.mem.iterator.MNodeIterator; import org.apache.iotdb.db.metadata.mnode.mem.iterator.MemoryTraverserIterator; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java index bf0541d105556..21e0ee5db80d8 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java @@ -23,7 +23,7 @@ import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -import org.apache.iotdb.db.metadata.mnode.config.basic.IConfigMNode; +import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.utils.Pair; From 3a71cd7baa1b09ba191da27fd33ae9904fe26845 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Fri, 10 Mar 2023 00:15:26 +0800 Subject: [PATCH 20/26] fix assert --- .../iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java index ed941175cd682..ed32890d3099b 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java @@ -65,12 +65,12 @@ public void internalNodeTest() throws MetadataException { buffer.clear(); ICacheMNode node1 = RecordUtils.buffer2Node("abcd", buffer); Assert.assertEquals( - ICachedMNodeContainer.getCachedMNodeContainer(node1).getSegmentAddress(), 1234567L); + 1234567L, ICachedMNodeContainer.getCachedMNodeContainer(node1).getSegmentAddress()); buffer = RecordUtils.node2Buffer(twoNode); buffer.clear(); node1 = RecordUtils.buffer2Node("efgh", buffer); Assert.assertEquals( - ICachedMNodeContainer.getCachedMNodeContainer(node1).getSegmentAddress(), 66666L); + 66666L, ICachedMNodeContainer.getCachedMNodeContainer(node1).getSegmentAddress()); Assert.assertTrue(node1.getAsDeviceMNode().isUseTemplate()); } From 28c07e5e5b7fdd208b629e13bffad37e51a2c9b8 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Tue, 14 Mar 2023 12:28:34 +0800 Subject: [PATCH 21/26] done --- .../storagegroup/DatabaseSchemaPlan.java | 4 +- .../persistence/schema/ClusterSchemaInfo.java | 40 ++-- .../impl/schema/DeleteDatabaseProcedure.java | 4 +- .../common/AbstractDatabaseDeviceMNode.java | 18 -- .../node/common/AbstractDatabaseMNode.java | 34 +-- .../schema/node/info/IDatabaseDeviceInfo.java | 3 +- .../schema/node/info/IDatabaseInfo.java | 16 +- .../schema/node/role/IDatabaseMNode.java | 11 - .../utils/ThriftConfigNodeSerDeUtils.java | 8 +- .../utils/ThriftConfigNodeSerDeUtilsTest.java | 4 +- .../rocksdb/mnode/RDatabaseMNode.java | 18 -- .../metadata/mnode/config/IConfigMNode.java | 9 + .../config/impl/ConfigDatabaseMNode.java | 17 +- .../mnode/config/info/ConfigDatabaseInfo.java | 70 ++++++ .../mnode/mem/impl/DatabaseMNode.java | 2 +- .../mnode/mem/info/DatabaseDeviceInfo.java | 20 +- .../metadata/mnode/mem/info/DatabaseInfo.java | 48 +--- .../{ICacheMNode.java => ICachedMNode.java} | 2 +- ...eBasicMNode.java => CachedBasicMNode.java} | 40 ++-- .../container/CachedMNodeContainer.java | 114 ++++----- .../container/ICachedMNodeContainer.java | 28 +-- .../schemafile/factory/CacheMNodeFactory.java | 48 ++-- ...ode.java => CachedAboveDatabaseMNode.java} | 14 +- ...ode.java => CachedBasicInternalMNode.java} | 34 +-- ...de.java => CachedDatabaseDeviceMNode.java} | 14 +- ...aseMNode.java => CachedDatabaseMNode.java} | 16 +- ...eviceMNode.java => CachedDeviceMNode.java} | 14 +- ...MNode.java => CachedMeasurementMNode.java} | 18 +- .../iterator/CachedTraverserIterator.java | 12 +- .../iotdb/db/metadata/mtree/ConfigMTree.java | 11 +- .../db/metadata/mtree/IMTreeBelowSG.java | 1 + .../mtree/MTreeBelowSGCachedImpl.java | 202 ++++++++-------- .../mtree/store/CachedMTreeStore.java | 118 +++++----- .../ReentrantReadOnlyCachedMTreeStore.java | 38 +-- .../mtree/store/disk/cache/CacheManager.java | 114 ++++----- .../mtree/store/disk/cache/ICacheManager.java | 26 +- .../store/disk/cache/LRUCacheManager.java | 24 +- .../store/disk/cache/PlainCacheManager.java | 10 +- .../store/disk/memcontrol/MemManager.java | 14 +- .../store/disk/schemafile/ISchemaFile.java | 14 +- .../store/disk/schemafile/ISegmentedPage.java | 8 +- .../store/disk/schemafile/MockSchemaFile.java | 68 +++--- .../store/disk/schemafile/RecordUtils.java | 24 +- .../store/disk/schemafile/SchemaFile.java | 22 +- .../store/disk/schemafile/SegmentedPage.java | 36 +-- .../store/disk/schemafile/WrappedSegment.java | 16 +- .../schemafile/pagemgr/BTreePageManager.java | 26 +- .../disk/schemafile/pagemgr/IPageManager.java | 12 +- .../disk/schemafile/pagemgr/PageManager.java | 24 +- .../SchemaRegionSchemaFileImpl.java | 44 ++-- .../db/metadata/mtree/ConfigMTreeTest.java | 11 +- .../mtree/disk/CachedMNodeContainerTest.java | 8 +- .../mtree/schemafile/RecordUtilTests.java | 14 +- .../mtree/schemafile/SchemaFileLogTest.java | 16 +- .../mtree/schemafile/SchemaFileTest.java | 222 +++++++++--------- .../mtree/schemafile/SchemaPageTest.java | 12 +- .../mtree/schemafile/WrappedSegmentTest.java | 26 +- .../iotdb/db/tools/SchemaFileSketchTest.java | 28 +-- 58 files changed, 927 insertions(+), 942 deletions(-) create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/info/ConfigDatabaseInfo.java rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/{ICacheMNode.java => ICachedMNode.java} (94%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/{CacheBasicMNode.java => CachedBasicMNode.java} (86%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/{CacheAboveDatabaseMNode.java => CachedAboveDatabaseMNode.java} (77%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/{CacheBasicInternalMNode.java => CachedBasicInternalMNode.java} (84%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/{CacheDatabaseDeviceMNode.java => CachedDatabaseDeviceMNode.java} (77%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/{CacheDatabaseMNode.java => CachedDatabaseMNode.java} (76%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/{CacheDeviceMNode.java => CachedDeviceMNode.java} (78%) rename server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/{CacheMeasurementMNode.java => CachedMeasurementMNode.java} (77%) diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/storagegroup/DatabaseSchemaPlan.java b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/storagegroup/DatabaseSchemaPlan.java index 1a0e6d749e236..3accf3174a448 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/storagegroup/DatabaseSchemaPlan.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/storagegroup/DatabaseSchemaPlan.java @@ -50,12 +50,12 @@ public TDatabaseSchema getSchema() { @Override protected void serializeImpl(DataOutputStream stream) throws IOException { stream.writeShort(getType().getPlanType()); - ThriftConfigNodeSerDeUtils.serializeTStorageGroupSchema(schema, stream); + ThriftConfigNodeSerDeUtils.serializeTDatabaseSchema(schema, stream); } @Override protected void deserializeImpl(ByteBuffer buffer) throws IOException { - schema = ThriftConfigNodeSerDeUtils.deserializeTStorageGroupSchema(buffer); + schema = ThriftConfigNodeSerDeUtils.deserializeTDatabaseSchema(buffer); } @Override diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java index c010515280918..eb815f832cc0d 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java @@ -135,7 +135,8 @@ public TSStatus createDatabase(DatabaseSchemaPlan plan) { // Set DatabaseSchema mTree .getDatabaseNodeByDatabasePath(partialPathName) - .setStorageGroupSchema(storageGroupSchema); + .getAsMNode() + .setDatabaseSchema(storageGroupSchema); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); } catch (MetadataException e) { @@ -161,7 +162,7 @@ public TSStatus alterDatabase(DatabaseSchemaPlan plan) { PartialPath partialPathName = new PartialPath(alterSchema.getName()); TDatabaseSchema currentSchema = - mTree.getDatabaseNodeByDatabasePath(partialPathName).getStorageGroupSchema(); + mTree.getDatabaseNodeByDatabasePath(partialPathName).getAsMNode().getDatabaseSchema(); // TODO: Support alter other fields if (alterSchema.isSetMinSchemaRegionGroupNum()) { currentSchema.setMinSchemaRegionGroupNum(alterSchema.getMinSchemaRegionGroupNum()); @@ -194,7 +195,10 @@ public TSStatus alterDatabase(DatabaseSchemaPlan plan) { currentSchema.getMaxDataRegionGroupNum()); } - mTree.getDatabaseNodeByDatabasePath(partialPathName).setStorageGroupSchema(currentSchema); + mTree + .getDatabaseNodeByDatabasePath(partialPathName) + .getAsMNode() + .setDatabaseSchema(currentSchema); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); } catch (MetadataException e) { LOGGER.error(ERROR_NAME, e); @@ -261,7 +265,8 @@ public DatabaseSchemaResp getMatchedDatabaseSchemas(GetDatabasePlan plan) { List matchedPaths = mTree.getMatchedDatabases(patternPath, false); for (PartialPath path : matchedPaths) { schemaMap.put( - path.getFullPath(), mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema()); + path.getFullPath(), + mTree.getDatabaseNodeByDatabasePath(path).getAsMNode().getDatabaseSchema()); } result.setSchemaMap(schemaMap); result.setStatus(new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode())); @@ -284,7 +289,7 @@ public TSStatus setTTL(SetTTLPlan plan) { List matchedPaths = mTree.getBelongedDatabases(patternPath); if (!matchedPaths.isEmpty()) { for (PartialPath path : matchedPaths) { - mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema().setTTL(plan.getTTL()); + mTree.getDatabaseNodeByDatabasePath(path).setDataTTL(plan.getTTL()); } result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); } else { @@ -308,7 +313,8 @@ public TSStatus setSchemaReplicationFactor(SetSchemaReplicationFactorPlan plan) if (mTree.isDatabaseAlreadySet(path)) { mTree .getDatabaseNodeByDatabasePath(path) - .getStorageGroupSchema() + .getAsMNode() + .getDatabaseSchema() .setSchemaReplicationFactor(plan.getSchemaReplicationFactor()); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); } else { @@ -331,7 +337,8 @@ public TSStatus setDataReplicationFactor(SetDataReplicationFactorPlan plan) { if (mTree.isDatabaseAlreadySet(path)) { mTree .getDatabaseNodeByDatabasePath(path) - .getStorageGroupSchema() + .getAsMNode() + .getDatabaseSchema() .setDataReplicationFactor(plan.getDataReplicationFactor()); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); } else { @@ -354,7 +361,8 @@ public TSStatus setTimePartitionInterval(SetTimePartitionIntervalPlan plan) { if (mTree.isDatabaseAlreadySet(path)) { mTree .getDatabaseNodeByDatabasePath(path) - .getStorageGroupSchema() + .getAsMNode() + .getDatabaseSchema() .setTimePartitionInterval(plan.getTimePartitionInterval()); result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode()); } else { @@ -383,7 +391,7 @@ public TSStatus adjustMaxRegionGroupCount(AdjustMaxRegionGroupNumPlan plan) { plan.getMaxRegionGroupNumMap().entrySet()) { PartialPath path = new PartialPath(entry.getKey()); TDatabaseSchema storageGroupSchema = - mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema(); + mTree.getDatabaseNodeByDatabasePath(path).getAsMNode().getDatabaseSchema(); storageGroupSchema.setMaxSchemaRegionGroupNum(entry.getValue().getLeft()); storageGroupSchema.setMaxDataRegionGroupNum(entry.getValue().getRight()); } @@ -461,7 +469,10 @@ public TDatabaseSchema getMatchedDatabaseSchemaByName(String database) throws DatabaseNotExistsException { databaseReadWriteLock.readLock().lock(); try { - return mTree.getDatabaseNodeByDatabasePath(new PartialPath(database)).getStorageGroupSchema(); + return mTree + .getDatabaseNodeByDatabasePath(new PartialPath(database)) + .getAsMNode() + .getDatabaseSchema(); } catch (MetadataException e) { throw new DatabaseNotExistsException(database); } finally { @@ -484,7 +495,8 @@ public Map getMatchedDatabaseSchemasByName(List List matchedPaths = mTree.getMatchedDatabases(patternPath, false); for (PartialPath path : matchedPaths) { schemaMap.put( - path.getFullPath(), mTree.getDatabaseNodeByPath(path).getStorageGroupSchema()); + path.getFullPath(), + mTree.getDatabaseNodeByPath(path).getAsMNode().getDatabaseSchema()); } } } catch (MetadataException e) { @@ -507,7 +519,7 @@ public int getMinRegionGroupNum(String database, TConsensusGroupType consensusGr try { PartialPath path = new PartialPath(database); TDatabaseSchema storageGroupSchema = - mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema(); + mTree.getDatabaseNodeByDatabasePath(path).getAsMNode().getDatabaseSchema(); switch (consensusGroupType) { case SchemaRegion: return storageGroupSchema.getMinSchemaRegionGroupNum(); @@ -535,7 +547,7 @@ public int getMaxRegionGroupNum(String database, TConsensusGroupType consensusGr try { PartialPath path = new PartialPath(database); TDatabaseSchema storageGroupSchema = - mTree.getDatabaseNodeByDatabasePath(path).getStorageGroupSchema(); + mTree.getDatabaseNodeByDatabasePath(path).getAsMNode().getDatabaseSchema(); switch (consensusGroupType) { case SchemaRegion: return storageGroupSchema.getMaxSchemaRegionGroupNum(); @@ -870,7 +882,7 @@ public Map getMatchedDatabaseSchemasByOneName( List matchedPaths = mTree.getBelongedDatabases(patternPath); for (PartialPath path : matchedPaths) { schemaMap.put( - path.getFullPath(), mTree.getDatabaseNodeByPath(path).getStorageGroupSchema()); + path.getFullPath(), mTree.getDatabaseNodeByPath(path).getAsMNode().getDatabaseSchema()); } } catch (MetadataException e) { LOGGER.warn(ERROR_NAME, e); diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java index 4a49f5ad22152..b03497220bff1 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java @@ -266,14 +266,14 @@ protected DeleteStorageGroupState getInitialState() { public void serialize(DataOutputStream stream) throws IOException { stream.writeShort(ProcedureType.DELETE_STORAGE_GROUP_PROCEDURE.getTypeCode()); super.serialize(stream); - ThriftConfigNodeSerDeUtils.serializeTStorageGroupSchema(deleteSgSchema, stream); + ThriftConfigNodeSerDeUtils.serializeTDatabaseSchema(deleteSgSchema, stream); } @Override public void deserialize(ByteBuffer byteBuffer) { super.deserialize(byteBuffer); try { - deleteSgSchema = ThriftConfigNodeSerDeUtils.deserializeTStorageGroupSchema(byteBuffer); + deleteSgSchema = ThriftConfigNodeSerDeUtils.deserializeTDatabaseSchema(byteBuffer); } catch (ThriftSerDeException e) { LOG.error("Error in deserialize DeleteStorageGroupProcedure", e); } diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java index 0f749fb391f1f..2577a426a466b 100644 --- a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseDeviceMNode.java @@ -27,7 +27,6 @@ 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.rpc.thrift.TDatabaseSchema; import java.util.Map; @@ -196,23 +195,6 @@ public void setDataTTL(long dataTTL) { databaseDeviceInfo.setDataTTL(dataTTL); } - @Override - public void setSchemaReplicationFactor(int schemaReplicationFactor) {} - - @Override - public void setDataReplicationFactor(int dataReplicationFactor) {} - - @Override - public void setTimePartitionInterval(long timePartitionInterval) {} - - @Override - public void setStorageGroupSchema(TDatabaseSchema schema) {} - - @Override - public TDatabaseSchema getStorageGroupSchema() { - return null; - } - @Override public boolean addAlias(String alias, IMeasurementMNode child) { return databaseDeviceInfo.addAlias(alias, child); diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java index c77d7a57b7af4..6781bad26a159 100644 --- a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/common/AbstractDatabaseMNode.java @@ -27,17 +27,16 @@ 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.rpc.thrift.TDatabaseSchema; public abstract class AbstractDatabaseMNode, BasicNode extends IMNode> implements IDatabaseMNode { private static final long serialVersionUID = 7999036474525817732L; - private final IDatabaseInfo databaseInfo; + private final IDatabaseInfo databaseInfo; protected final BasicNode basicMNode; - public AbstractDatabaseMNode(BasicNode basicMNode, IDatabaseInfo databaseInfo) { + public AbstractDatabaseMNode(BasicNode basicMNode, IDatabaseInfo databaseInfo) { this.basicMNode = basicMNode; this.databaseInfo = databaseInfo; } @@ -192,31 +191,6 @@ public void setDataTTL(long dataTTL) { databaseInfo.setDataTTL(dataTTL); } - @Override - public void setSchemaReplicationFactor(int schemaReplicationFactor) { - databaseInfo.setSchemaReplicationFactor(schemaReplicationFactor); - } - - @Override - public void setDataReplicationFactor(int dataReplicationFactor) { - databaseInfo.setDataReplicationFactor(dataReplicationFactor); - } - - @Override - public void setTimePartitionInterval(long timePartitionInterval) { - databaseInfo.setTimePartitionInterval(timePartitionInterval); - } - - @Override - public void setStorageGroupSchema(TDatabaseSchema schema) { - databaseInfo.setStorageGroupSchema(schema); - } - - @Override - public TDatabaseSchema getStorageGroupSchema() { - return databaseInfo.getStorageGroupSchema(); - } - /** * The basic memory occupied by any AbstractDatabaseMNode object * @@ -234,4 +208,8 @@ public TDatabaseSchema getStorageGroupSchema() { public int estimateSize() { return 8 + 8 + databaseInfo.estimateSize() + basicMNode.estimateSize(); } + + protected IDatabaseInfo getDatabaseInfo() { + return databaseInfo; + } } diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseDeviceInfo.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseDeviceInfo.java index f6cd81d0b1e4c..35034a7464e39 100644 --- a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseDeviceInfo.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseDeviceInfo.java @@ -20,4 +20,5 @@ import org.apache.iotdb.commons.schema.node.IMNode; -public interface IDatabaseDeviceInfo> extends IDatabaseInfo, IDeviceInfo {} +public interface IDatabaseDeviceInfo> + extends IDatabaseInfo, IDeviceInfo {} diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseInfo.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseInfo.java index 31c2b42ba6873..8fd6c3d2a8673 100644 --- a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseInfo.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/info/IDatabaseInfo.java @@ -18,26 +18,16 @@ */ package org.apache.iotdb.commons.schema.node.info; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; -import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -public interface IDatabaseInfo { +public interface IDatabaseInfo> { - void moveDataToNewMNode(IDatabaseMNode newMNode); + void moveDataToNewMNode(IDatabaseMNode newMNode); long getDataTTL(); void setDataTTL(long dataTTL); - void setSchemaReplicationFactor(int schemaReplicationFactor); - - void setDataReplicationFactor(int dataReplicationFactor); - - void setTimePartitionInterval(long timePartitionInterval); - - void setStorageGroupSchema(TDatabaseSchema schema); - - TDatabaseSchema getStorageGroupSchema(); - int estimateSize(); } diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDatabaseMNode.java b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDatabaseMNode.java index 4eb7c01d7b4ff..570b7a31e090b 100644 --- a/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDatabaseMNode.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/schema/node/role/IDatabaseMNode.java @@ -19,21 +19,10 @@ package org.apache.iotdb.commons.schema.node.role; import org.apache.iotdb.commons.schema.node.IMNode; -import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; /** This interface defines a DatabaseMNode's operation interfaces. */ public interface IDatabaseMNode> extends IMNode { long getDataTTL(); void setDataTTL(long dataTTL); - - void setSchemaReplicationFactor(int schemaReplicationFactor); - - void setDataReplicationFactor(int dataReplicationFactor); - - void setTimePartitionInterval(long timePartitionInterval); - - void setStorageGroupSchema(TDatabaseSchema schema); - - TDatabaseSchema getStorageGroupSchema(); } diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/utils/ThriftConfigNodeSerDeUtils.java b/node-commons/src/main/java/org/apache/iotdb/commons/utils/ThriftConfigNodeSerDeUtils.java index 3a2be10483ad9..8b2f3a3c25ef1 100644 --- a/node-commons/src/main/java/org/apache/iotdb/commons/utils/ThriftConfigNodeSerDeUtils.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/utils/ThriftConfigNodeSerDeUtils.java @@ -66,7 +66,7 @@ private static TBinaryProtocol generateReadProtocol(InputStream inputStream) return new TBinaryProtocol(tioStreamTransport); } - public static void serializeTStorageGroupSchema( + public static void serializeTDatabaseSchema( TDatabaseSchema storageGroupSchema, ByteBuffer buffer) { try { storageGroupSchema.write(generateWriteProtocol(buffer)); @@ -75,7 +75,7 @@ public static void serializeTStorageGroupSchema( } } - public static TDatabaseSchema deserializeTStorageGroupSchema(ByteBuffer buffer) { + public static TDatabaseSchema deserializeTDatabaseSchema(ByteBuffer buffer) { TDatabaseSchema storageGroupSchema = new TDatabaseSchema(); try { storageGroupSchema.read(generateReadProtocol(buffer)); @@ -85,7 +85,7 @@ public static TDatabaseSchema deserializeTStorageGroupSchema(ByteBuffer buffer) return storageGroupSchema; } - public static void serializeTStorageGroupSchema( + public static void serializeTDatabaseSchema( TDatabaseSchema storageGroupSchema, OutputStream outputStream) { try { storageGroupSchema.write(generateWriteProtocol(outputStream)); @@ -94,7 +94,7 @@ public static void serializeTStorageGroupSchema( } } - public static TDatabaseSchema deserializeTStorageGroupSchema(InputStream inputStream) { + public static TDatabaseSchema deserializeTDatabaseSchema(InputStream inputStream) { TDatabaseSchema storageGroupSchema = new TDatabaseSchema(); try { storageGroupSchema.read(generateReadProtocol(inputStream)); diff --git a/node-commons/src/test/java/org/apache/iotdb/commons/utils/ThriftConfigNodeSerDeUtilsTest.java b/node-commons/src/test/java/org/apache/iotdb/commons/utils/ThriftConfigNodeSerDeUtilsTest.java index 5d949079aceac..ac5b742722bbf 100644 --- a/node-commons/src/test/java/org/apache/iotdb/commons/utils/ThriftConfigNodeSerDeUtilsTest.java +++ b/node-commons/src/test/java/org/apache/iotdb/commons/utils/ThriftConfigNodeSerDeUtilsTest.java @@ -46,10 +46,10 @@ public void readWriteTStorageGroupSchemaTest() { storageGroupSchema0.setDataReplicationFactor(3); storageGroupSchema0.setTimePartitionInterval(604800); - ThriftConfigNodeSerDeUtils.serializeTStorageGroupSchema(storageGroupSchema0, buffer); + ThriftConfigNodeSerDeUtils.serializeTDatabaseSchema(storageGroupSchema0, buffer); buffer.flip(); TDatabaseSchema storageGroupSchema1 = - ThriftConfigNodeSerDeUtils.deserializeTStorageGroupSchema(buffer); + ThriftConfigNodeSerDeUtils.deserializeTDatabaseSchema(buffer); Assert.assertEquals(storageGroupSchema0, storageGroupSchema1); } diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java index 8153d61247e73..3fb4dbaf77c49 100644 --- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java +++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RDatabaseMNode.java @@ -23,7 +23,6 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.schema.node.MNodeType; import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; -import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; import org.apache.iotdb.db.metadata.mnode.mem.IMemMNode; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants; import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler; @@ -111,23 +110,6 @@ public void setDataTTL(long dataTTL) { this.dataTTL = dataTTL; } - @Override - public void setSchemaReplicationFactor(int schemaReplicationFactor) {} - - @Override - public void setDataReplicationFactor(int dataReplicationFactor) {} - - @Override - public void setTimePartitionInterval(long timePartitionInterval) {} - - @Override - public void setStorageGroupSchema(TDatabaseSchema schema) {} - - @Override - public TDatabaseSchema getStorageGroupSchema() { - return null; - } - @Override public IMemMNode getAsMNode() { return null; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/IConfigMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/IConfigMNode.java index 7283db502666a..43fcd5bf318fc 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/IConfigMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/IConfigMNode.java @@ -19,6 +19,7 @@ package org.apache.iotdb.db.metadata.mnode.config; import org.apache.iotdb.commons.schema.node.IMNode; +import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; public interface IConfigMNode extends IMNode { @@ -33,4 +34,12 @@ public interface IConfigMNode extends IMNode { boolean isSchemaTemplatePreUnset(); void unsetSchemaTemplate(); + + default void setDatabaseSchema(TDatabaseSchema schema) { + throw new UnsupportedOperationException(); + } + + default TDatabaseSchema getDatabaseSchema() { + throw new UnsupportedOperationException(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigDatabaseMNode.java index 1ee92329ca63f..e2f425f2d39a0 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/impl/ConfigDatabaseMNode.java @@ -19,15 +19,18 @@ package org.apache.iotdb.db.metadata.mnode.config.impl; import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseMNode; +import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; import org.apache.iotdb.db.metadata.mnode.config.basic.ConfigBasicMNode; -import org.apache.iotdb.db.metadata.mnode.mem.info.DatabaseInfo; +import org.apache.iotdb.db.metadata.mnode.config.info.ConfigDatabaseInfo; public class ConfigDatabaseMNode extends AbstractDatabaseMNode implements IConfigMNode { + private final ConfigDatabaseInfo configDatabaseInfo; public ConfigDatabaseMNode(IConfigMNode parent, String name) { - super(new ConfigBasicInternalMNode(parent, name), new DatabaseInfo(name)); + super(new ConfigBasicInternalMNode(parent, name), new ConfigDatabaseInfo(name)); + this.configDatabaseInfo = (ConfigDatabaseInfo) getDatabaseInfo(); } @Override @@ -60,6 +63,16 @@ public void unsetSchemaTemplate() { basicMNode.unsetSchemaTemplate(); } + @Override + public void setDatabaseSchema(TDatabaseSchema schema) { + configDatabaseInfo.setSchema(schema); + } + + @Override + public TDatabaseSchema getDatabaseSchema() { + return configDatabaseInfo.getSchema(); + } + @Override public IConfigMNode getAsMNode() { return this; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/info/ConfigDatabaseInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/info/ConfigDatabaseInfo.java new file mode 100644 index 0000000000000..c07e40c69d1d4 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/config/info/ConfigDatabaseInfo.java @@ -0,0 +1,70 @@ +/* + * 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.metadata.mnode.config.info; + +import org.apache.iotdb.commons.schema.node.info.IDatabaseInfo; +import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; +import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; +import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; + +public class ConfigDatabaseInfo implements IDatabaseInfo { + + private TDatabaseSchema schema; + + public ConfigDatabaseInfo(String name) { + this.schema = new TDatabaseSchema(name); + } + + @Override + public void moveDataToNewMNode(IDatabaseMNode newMNode) { + newMNode.getAsMNode().setDatabaseSchema(schema); + } + + @Override + public long getDataTTL() { + return schema.getTTL(); + } + + @Override + public void setDataTTL(long dataTTL) { + schema.setTTL(dataTTL); + } + + public TDatabaseSchema getSchema() { + return schema; + } + + public void setSchema(TDatabaseSchema schema) { + this.schema = schema; + } + + /** + * The memory occupied by an DatabaseDeviceInfo based occupation + * + *
        + *
      1. object header, 8B + *
      2. reference schema, 8B + *
      3. object TDatabaseSchema, 112B (calculated by RamUsageEstimator) + *
      + */ + @Override + public int estimateSize() { + return 8 + 8 + 112; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseMNode.java index 8508b0045ddf6..6f43d665f4ab6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/impl/DatabaseMNode.java @@ -27,7 +27,7 @@ public class DatabaseMNode extends AbstractDatabaseMNode implements IMemMNode { public DatabaseMNode(IMemMNode parent, String name) { - super(new BasicInternalMNode(parent, name), new DatabaseInfo(name)); + super(new BasicInternalMNode(parent, name), new DatabaseInfo<>()); } // TODO: @yukun, remove this constructor diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseDeviceInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseDeviceInfo.java index 9237071afba9e..587436dba70fb 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseDeviceInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseDeviceInfo.java @@ -21,7 +21,6 @@ import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.commons.schema.node.info.IDatabaseDeviceInfo; import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; -import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; public class DatabaseDeviceInfo> extends DeviceInfo implements IDatabaseDeviceInfo { @@ -32,7 +31,7 @@ public class DatabaseDeviceInfo> extends DeviceInfo private long dataTTL; @Override - public void moveDataToNewMNode(IDatabaseMNode newMNode) { + public void moveDataToNewMNode(IDatabaseMNode newMNode) { newMNode.setDataTTL(dataTTL); } @@ -46,23 +45,6 @@ public void setDataTTL(long dataTTL) { this.dataTTL = dataTTL; } - @Override - public void setSchemaReplicationFactor(int schemaReplicationFactor) {} - - @Override - public void setDataReplicationFactor(int dataReplicationFactor) {} - - @Override - public void setTimePartitionInterval(long timePartitionInterval) {} - - @Override - public void setStorageGroupSchema(TDatabaseSchema schema) {} - - @Override - public TDatabaseSchema getStorageGroupSchema() { - return null; - } - /** * The memory occupied by an DatabaseDeviceInfo based occupation * diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseInfo.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseInfo.java index 3b19105068698..02ba001888040 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/mem/info/DatabaseInfo.java @@ -18,56 +18,29 @@ */ package org.apache.iotdb.db.metadata.mnode.mem.info; +import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.commons.schema.node.info.IDatabaseInfo; import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; -import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema; -public class DatabaseInfo implements IDatabaseInfo { +public class DatabaseInfo> implements IDatabaseInfo { - private TDatabaseSchema schema; + private long dataTTL; - public DatabaseInfo(String name) { - this.schema = new TDatabaseSchema(name); - } + public DatabaseInfo() {} @Override - public void moveDataToNewMNode(IDatabaseMNode newMNode) { - newMNode.setStorageGroupSchema(schema); + public void moveDataToNewMNode(IDatabaseMNode newMNode) { + newMNode.setDataTTL(dataTTL); } @Override public long getDataTTL() { - return schema.getTTL(); + return dataTTL; } @Override public void setDataTTL(long dataTTL) { - schema.setTTL(dataTTL); - } - - @Override - public void setSchemaReplicationFactor(int schemaReplicationFactor) { - schema.setSchemaReplicationFactor(schemaReplicationFactor); - } - - @Override - public void setDataReplicationFactor(int dataReplicationFactor) { - schema.setDataReplicationFactor(dataReplicationFactor); - } - - @Override - public void setTimePartitionInterval(long timePartitionInterval) { - schema.setTimePartitionInterval(timePartitionInterval); - } - - @Override - public void setStorageGroupSchema(TDatabaseSchema schema) { - this.schema = schema; - } - - @Override - public TDatabaseSchema getStorageGroupSchema() { - return schema; + this.dataTTL = dataTTL; } /** @@ -75,12 +48,11 @@ public TDatabaseSchema getStorageGroupSchema() { * *
        *
      1. object header, 8B - *
      2. reference schema, 8B - *
      3. object TDatabaseSchema, 112B (calculated by RamUsageEstimator) + *
      4. long dataTTL, 8B *
      */ @Override public int estimateSize() { - return 8 + 8 + 112; + return 8 + 8; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/ICacheMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/ICachedMNode.java similarity index 94% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/ICacheMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/ICachedMNode.java index f43df314c8390..8c322603a4a3c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/ICacheMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/ICachedMNode.java @@ -21,7 +21,7 @@ import org.apache.iotdb.commons.schema.node.IMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -public interface ICacheMNode extends IMNode { +public interface ICachedMNode extends IMNode { CacheEntry getCacheEntry(); void setCacheEntry(CacheEntry cacheEntry); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/CacheBasicMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/CachedBasicMNode.java similarity index 86% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/CacheBasicMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/CachedBasicMNode.java index 0a20a7249ce92..e6f582e5f5b02 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/CacheBasicMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/basic/CachedBasicMNode.java @@ -26,7 +26,7 @@ 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.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mnode.schemafile.info.CacheMNodeInfo; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; @@ -38,18 +38,18 @@ * This class is the implementation of Metadata Node. One MNode instance represents one node in the * Metadata Tree */ -public class CacheBasicMNode implements ICacheMNode { +public class CachedBasicMNode implements ICachedMNode { private static final long serialVersionUID = -770028375899514063L; - private ICacheMNode parent; + private ICachedMNode parent; private final CacheMNodeInfo cacheMNodeInfo; /** from root to this node, only be set when used once for InternalMNode */ private String fullPath; /** Constructor of MNode. */ - public CacheBasicMNode(ICacheMNode parent, String name) { + public CachedBasicMNode(ICachedMNode parent, String name) { this.parent = parent; this.cacheMNodeInfo = new CacheMNodeInfo(name); } @@ -65,12 +65,12 @@ public void setName(String name) { } @Override - public ICacheMNode getParent() { + public ICachedMNode getParent() { return parent; } @Override - public void setParent(ICacheMNode parent) { + public void setParent(ICachedMNode parent) { this.parent = parent; } @@ -84,7 +84,7 @@ public String getFullPath() { String concatFullPath() { StringBuilder builder = new StringBuilder(getName()); - ICacheMNode curr = this; + ICachedMNode curr = this; while (curr.getParent() != null) { curr = curr.getParent(); builder.insert(0, IoTDBConstant.PATH_SEPARATOR).insert(0, curr.getName()); @@ -100,7 +100,7 @@ public void setFullPath(String fullPath) { @Override public PartialPath getPartialPath() { List detachedPath = new ArrayList<>(); - ICacheMNode temp = this; + ICachedMNode temp = this; detachedPath.add(temp.getName()); while (temp.getParent() != null) { temp = temp.getParent(); @@ -117,7 +117,7 @@ public boolean hasChild(String name) { /** get the child with the name */ @Override - public ICacheMNode getChild(String name) { + public ICachedMNode getChild(String name) { return null; } @@ -129,7 +129,7 @@ public ICacheMNode getChild(String name) { * @return the child of this node after addChild */ @Override - public ICacheMNode addChild(String name, ICacheMNode child) { + public ICachedMNode addChild(String name, ICachedMNode child) { return null; } @@ -145,13 +145,13 @@ public ICacheMNode addChild(String name, ICacheMNode child) { * @return return the MNode already added */ @Override - public ICacheMNode addChild(ICacheMNode child) { + public ICachedMNode addChild(ICachedMNode child) { return null; } /** delete a child */ @Override - public ICacheMNode deleteChild(String name) { + public ICachedMNode deleteChild(String name) { return null; } @@ -162,21 +162,21 @@ public ICacheMNode deleteChild(String name) { * @param newChildNode new child node */ @Override - public synchronized void replaceChild(String oldChildName, ICacheMNode newChildNode) {} + public synchronized void replaceChild(String oldChildName, ICachedMNode newChildNode) {} @Override - public void moveDataToNewMNode(ICacheMNode newMNode) { + public void moveDataToNewMNode(ICachedMNode newMNode) { newMNode.setParent(parent); newMNode.setCacheEntry(getCacheEntry()); } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { return CachedMNodeContainer.emptyMNodeContainer(); } @Override - public void setChildren(IMNodeContainer children) {} + public void setChildren(IMNodeContainer children) {} @Override public boolean isAboveDatabase() { @@ -204,17 +204,17 @@ public MNodeType getMNodeType(Boolean isConfig) { } @Override - public IDatabaseMNode getAsDatabaseMNode() { + public IDatabaseMNode getAsDatabaseMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } @Override - public IDeviceMNode getAsDeviceMNode() { + public IDeviceMNode getAsDeviceMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } @Override - public IMeasurementMNode getAsMeasurementMNode() { + public IMeasurementMNode getAsMeasurementMNode() { throw new UnsupportedOperationException("Wrong MNode Type"); } @@ -258,7 +258,7 @@ public int estimateSize() { } @Override - public ICacheMNode getAsMNode() { + public ICachedMNode getAsMNode() { return this; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/CachedMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/CachedMNodeContainer.java index ed1fd4d22818c..aed2ae4f8dd2d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/CachedMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/CachedMNodeContainer.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.mnode.schemafile.container; import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.jetbrains.annotations.NotNull; @@ -43,14 +43,14 @@ public class CachedMNodeContainer implements ICachedMNodeContainer { private long segmentAddress = -1; - private Map childCache = null; - private Map newChildBuffer = null; - private Map updatedChildBuffer = null; + private Map childCache = null; + private Map newChildBuffer = null; + private Map updatedChildBuffer = null; - private static final IMNodeContainer EMPTY_CONTAINER = + private static final IMNodeContainer EMPTY_CONTAINER = new CachedMNodeContainer.EmptyContainer(); - public static IMNodeContainer emptyMNodeContainer() { + public static IMNodeContainer emptyMNodeContainer() { return EMPTY_CONTAINER; } @@ -59,7 +59,7 @@ public int size() { return getSize(childCache) + getSize(newChildBuffer) + getSize(updatedChildBuffer); } - private int getSize(Map map) { + private int getSize(Map map) { return map == null ? 0 : map.size(); } @@ -68,7 +68,7 @@ public boolean isEmpty() { return isEmpty(childCache) && isEmpty(newChildBuffer) && isEmpty(updatedChildBuffer); } - private boolean isEmpty(Map map) { + private boolean isEmpty(Map map) { return map == null || map.isEmpty(); } @@ -79,7 +79,7 @@ public boolean containsKey(Object key) { || containsKey(updatedChildBuffer, key); } - private boolean containsKey(Map map, Object key) { + private boolean containsKey(Map map, Object key) { return map != null && map.containsKey(key); } @@ -90,13 +90,13 @@ public boolean containsValue(Object value) { || containsValue(updatedChildBuffer, value); } - private boolean containsValue(Map map, Object value) { + private boolean containsValue(Map map, Object value) { return map != null && map.containsValue(value); } @Override - public ICacheMNode get(Object key) { - ICacheMNode result = get(childCache, key); + public ICachedMNode get(Object key) { + ICachedMNode result = get(childCache, key); if (result != null) { return result; } @@ -107,13 +107,13 @@ public ICacheMNode get(Object key) { return get(updatedChildBuffer, key); } - private ICacheMNode get(Map map, Object key) { + private ICachedMNode get(Map map, Object key) { return map == null ? null : map.get(key); } @Nullable @Override - public synchronized ICacheMNode put(String key, ICacheMNode value) { + public synchronized ICachedMNode put(String key, ICachedMNode value) { if (newChildBuffer == null) { newChildBuffer = new ConcurrentHashMap<>(); } @@ -122,9 +122,9 @@ public synchronized ICacheMNode put(String key, ICacheMNode value) { @Nullable @Override - public synchronized ICacheMNode putIfAbsent(String key, ICacheMNode value) { + public synchronized ICachedMNode putIfAbsent(String key, ICachedMNode value) { - ICacheMNode node = get(key); + ICachedMNode node = get(key); if (node == null) { if (newChildBuffer == null) { newChildBuffer = new ConcurrentHashMap<>(); @@ -136,8 +136,8 @@ public synchronized ICacheMNode putIfAbsent(String key, ICacheMNode value) { } @Override - public synchronized ICacheMNode remove(Object key) { - ICacheMNode result = remove(childCache, key); + public synchronized ICachedMNode remove(Object key) { + ICachedMNode result = remove(childCache, key); if (result == null) { result = remove(newChildBuffer, key); } @@ -147,12 +147,12 @@ public synchronized ICacheMNode remove(Object key) { return result; } - private ICacheMNode remove(Map map, Object key) { + private ICachedMNode remove(Map map, Object key) { return map == null ? null : map.remove(key); } @Override - public synchronized void putAll(@Nonnull Map m) { + public synchronized void putAll(@Nonnull Map m) { if (newChildBuffer == null) { newChildBuffer = new ConcurrentHashMap<>(); } @@ -176,42 +176,42 @@ public Set keySet() { return result; } - private Set keySet(Map map) { + private Set keySet(Map map) { return map == null ? Collections.emptySet() : map.keySet(); } @Nonnull @Override - public Collection values() { - Collection result = new ArrayList<>(); + public Collection values() { + Collection result = new ArrayList<>(); result.addAll(getValues(childCache)); result.addAll(getValues(newChildBuffer)); result.addAll(getValues(updatedChildBuffer)); return result; } - private Collection getValues(Map map) { + private Collection getValues(Map map) { return map == null ? Collections.emptyList() : map.values(); } @Nonnull @Override - public Set> entrySet() { - Set> result = new HashSet<>(); + public Set> entrySet() { + Set> result = new HashSet<>(); result.addAll(entrySet(childCache)); result.addAll(entrySet(newChildBuffer)); result.addAll(entrySet(updatedChildBuffer)); return result; } - private Set> entrySet(Map map) { + private Set> entrySet(Map map) { return map == null ? Collections.emptySet() : map.entrySet(); } @Nullable @Override - public synchronized ICacheMNode replace(String key, ICacheMNode value) { - ICacheMNode replacedOne = replace(childCache, key, value); + public synchronized ICachedMNode replace(String key, ICachedMNode value) { + ICachedMNode replacedOne = replace(childCache, key, value); if (replacedOne == null) { replacedOne = replace(newChildBuffer, key, value); } @@ -221,7 +221,7 @@ public synchronized ICacheMNode replace(String key, ICacheMNode value) { return replacedOne; } - private ICacheMNode replace(Map map, String key, ICacheMNode value) { + private ICachedMNode replace(Map map, String key, ICachedMNode value) { return map == null ? null : map.replace(key, value); } @@ -264,37 +264,37 @@ public boolean hasChildInBuffer(String name) { } @Override - public Iterator getChildrenIterator() { + public Iterator getChildrenIterator() { return new CachedMNodeContainerIterator(); } @Override - public Iterator getChildrenBufferIterator() { + public Iterator getChildrenBufferIterator() { return new BufferIterator(); } @Override - public Iterator getNewChildBufferIterator() { + public Iterator getNewChildBufferIterator() { return getNewChildBuffer().values().iterator(); } @Override - public Map getChildCache() { + public Map getChildCache() { return childCache == null ? Collections.emptyMap() : childCache; } @Override - public Map getNewChildBuffer() { + public Map getNewChildBuffer() { return newChildBuffer == null ? Collections.emptyMap() : newChildBuffer; } @Override - public Map getUpdatedChildBuffer() { + public Map getUpdatedChildBuffer() { return updatedChildBuffer == null ? Collections.emptyMap() : updatedChildBuffer; } @Override - public synchronized void loadChildrenFromDisk(Map children) { + public synchronized void loadChildrenFromDisk(Map children) { if (childCache == null) { childCache = new ConcurrentHashMap<>(); } @@ -302,7 +302,7 @@ public synchronized void loadChildrenFromDisk(Map children) } @Override - public synchronized void addChildToCache(ICacheMNode node) { + public synchronized void addChildToCache(ICachedMNode node) { String name = node.getName(); if (containsKey(name)) { return; @@ -314,7 +314,7 @@ public synchronized void addChildToCache(ICacheMNode node) { } @Override - public synchronized void appendMNode(ICacheMNode node) { + public synchronized void appendMNode(ICachedMNode node) { if (newChildBuffer == null) { newChildBuffer = new ConcurrentHashMap<>(); } @@ -323,7 +323,7 @@ public synchronized void appendMNode(ICacheMNode node) { @Override public synchronized void updateMNode(String name) { - ICacheMNode node = remove(childCache, name); + ICachedMNode node = remove(childCache, name); if (node != null) { if (updatedChildBuffer == null) { updatedChildBuffer = new ConcurrentHashMap<>(); @@ -334,7 +334,7 @@ public synchronized void updateMNode(String name) { @Override public synchronized void moveMNodeToCache(String name) { - ICacheMNode node = remove(newChildBuffer, name); + ICachedMNode node = remove(newChildBuffer, name); if (node == null) { node = remove(updatedChildBuffer, name); } @@ -353,17 +353,17 @@ public synchronized String toString() { StringBuilder builder = new StringBuilder(); builder.append("CachedMNodeContainer:{"); builder.append("childCache:["); - for (ICacheMNode node : getValues(childCache)) { + for (ICachedMNode node : getValues(childCache)) { builder.append(node.getName()).append(","); } builder.append("];"); builder.append("newChildBuffer:["); - for (ICacheMNode node : getValues(newChildBuffer)) { + for (ICachedMNode node : getValues(newChildBuffer)) { builder.append(node.getName()).append(","); } builder.append("];"); builder.append("updateChildBuffer:["); - for (ICacheMNode node : getValues(updatedChildBuffer)) { + for (ICachedMNode node : getValues(updatedChildBuffer)) { builder.append(node.getName()).append(","); } builder.append("];"); @@ -371,9 +371,9 @@ public synchronized String toString() { return builder.toString(); } - private class CachedMNodeContainerIterator implements Iterator { + private class CachedMNodeContainerIterator implements Iterator { - Iterator iterator; + Iterator iterator; byte status = 0; CachedMNodeContainerIterator() { @@ -394,7 +394,7 @@ public boolean hasNext() { } @Override - public ICacheMNode next() { + public ICachedMNode next() { return iterator.next(); } @@ -414,10 +414,10 @@ private boolean changeStatus() { } } - private class BufferIterator implements Iterator { - Iterator iterator; - Iterator newBufferIterator; - Iterator updateBufferIterator; + private class BufferIterator implements Iterator { + Iterator iterator; + Iterator newBufferIterator; + Iterator updateBufferIterator; byte status = 0; BufferIterator() { @@ -440,7 +440,7 @@ public boolean hasNext() { } @Override - public ICacheMNode next() { + public ICachedMNode next() { return iterator.next(); } @@ -454,8 +454,8 @@ private boolean changeStatus() { } } - private static class EmptyContainer extends AbstractMap - implements IMNodeContainer { + private static class EmptyContainer extends AbstractMap + implements IMNodeContainer { @Override public int size() { @@ -478,7 +478,7 @@ public boolean containsValue(Object value) { } @Override - public ICacheMNode get(Object key) { + public ICachedMNode get(Object key) { return null; } @@ -490,12 +490,12 @@ public Set keySet() { @Override @NotNull - public Collection values() { + public Collection values() { return emptySet(); } @NotNull - public Set> entrySet() { + public Set> entrySet() { return emptySet(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/ICachedMNodeContainer.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/ICachedMNodeContainer.java index 6ac7f2cde7a53..22dcbb8b9e271 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/ICachedMNodeContainer.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/container/ICachedMNodeContainer.java @@ -19,12 +19,12 @@ package org.apache.iotdb.db.metadata.mnode.schemafile.container; import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import java.util.Iterator; import java.util.Map; -public interface ICachedMNodeContainer extends IMNodeContainer { +public interface ICachedMNodeContainer extends IMNodeContainer { long getSegmentAddress(); @@ -40,23 +40,23 @@ public interface ICachedMNodeContainer extends IMNodeContainer { boolean hasChildInBuffer(String name); - Iterator getChildrenIterator(); + Iterator getChildrenIterator(); - Iterator getChildrenBufferIterator(); + Iterator getChildrenBufferIterator(); - Iterator getNewChildBufferIterator(); + Iterator getNewChildBufferIterator(); - Map getChildCache(); + Map getChildCache(); - Map getNewChildBuffer(); + Map getNewChildBuffer(); - Map getUpdatedChildBuffer(); + Map getUpdatedChildBuffer(); - void loadChildrenFromDisk(Map children); + void loadChildrenFromDisk(Map children); - void addChildToCache(ICacheMNode node); + void addChildToCache(ICachedMNode node); - void appendMNode(ICacheMNode node); + void appendMNode(ICachedMNode node); void updateMNode(String name); @@ -64,8 +64,8 @@ public interface ICachedMNodeContainer extends IMNodeContainer { void evictMNode(String name); - static ICachedMNodeContainer getCachedMNodeContainer(ICacheMNode node) { - IMNodeContainer container = node.getChildren(); + static ICachedMNodeContainer getCachedMNodeContainer(ICachedMNode node) { + IMNodeContainer container = node.getChildren(); if (container.equals(CachedMNodeContainer.emptyMNodeContainer())) { container = new CachedMNodeContainer(); node.setChildren(container); @@ -73,7 +73,7 @@ static ICachedMNodeContainer getCachedMNodeContainer(ICacheMNode node) { return (ICachedMNodeContainer) container; } - static ICachedMNodeContainer getBelongedContainer(ICacheMNode node) { + static ICachedMNodeContainer getBelongedContainer(ICachedMNode node) { return (ICachedMNodeContainer) node.getParent().getChildren(); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/factory/CacheMNodeFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/factory/CacheMNodeFactory.java index 5c64a4a281733..5e79e03258c0e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/factory/CacheMNodeFactory.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/factory/CacheMNodeFactory.java @@ -22,16 +22,16 @@ 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.metadata.mnode.schemafile.ICacheMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheAboveDatabaseMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheBasicInternalMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheDatabaseDeviceMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheDatabaseMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheDeviceMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CacheMeasurementMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CachedAboveDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CachedBasicInternalMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CachedDatabaseDeviceMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CachedDatabaseMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CachedDeviceMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.impl.CachedMeasurementMNode; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; -public class CacheMNodeFactory implements IMNodeFactory { +public class CacheMNodeFactory implements IMNodeFactory { private CacheMNodeFactory() {} @@ -46,39 +46,39 @@ public static CacheMNodeFactory getInstance() { } @Override - public IMeasurementMNode createMeasurementMNode( - IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { - return new CacheMeasurementMNode(parent, name, schema, alias); + public IMeasurementMNode createMeasurementMNode( + IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { + return new CachedMeasurementMNode(parent, name, schema, alias); } @Override - public IDeviceMNode createDeviceMNode(ICacheMNode parent, String name) { - return new CacheDeviceMNode(parent, name); + public IDeviceMNode createDeviceMNode(ICachedMNode parent, String name) { + return new CachedDeviceMNode(parent, name); } @Override - public IDatabaseMNode createDatabaseMNode(ICacheMNode parent, String name) { - return new CacheDatabaseMNode(parent, name); + public IDatabaseMNode createDatabaseMNode(ICachedMNode parent, String name) { + return new CachedDatabaseMNode(parent, name); } @Override - public IDatabaseMNode createDatabaseMNode( - ICacheMNode parent, String name, long dataTTL) { - return new CacheDatabaseMNode(parent, name, dataTTL); + public IDatabaseMNode createDatabaseMNode( + ICachedMNode parent, String name, long dataTTL) { + return new CachedDatabaseMNode(parent, name, dataTTL); } @Override - public ICacheMNode createDatabaseDeviceMNode(ICacheMNode parent, String name, long dataTTL) { - return new CacheDatabaseDeviceMNode(parent, name, dataTTL); + public ICachedMNode createDatabaseDeviceMNode(ICachedMNode parent, String name, long dataTTL) { + return new CachedDatabaseDeviceMNode(parent, name, dataTTL); } @Override - public ICacheMNode createAboveDatabaseMNode(ICacheMNode parent, String name) { - return new CacheAboveDatabaseMNode(parent, name); + public ICachedMNode createAboveDatabaseMNode(ICachedMNode parent, String name) { + return new CachedAboveDatabaseMNode(parent, name); } @Override - public ICacheMNode createInternalMNode(ICacheMNode parent, String name) { - return new CacheBasicInternalMNode(parent, name); + public ICachedMNode createInternalMNode(ICachedMNode parent, String name) { + return new CachedBasicInternalMNode(parent, name); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheAboveDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedAboveDatabaseMNode.java similarity index 77% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheAboveDatabaseMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedAboveDatabaseMNode.java index f95d632e7e640..f8ab57603c840 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheAboveDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedAboveDatabaseMNode.java @@ -19,15 +19,15 @@ package org.apache.iotdb.db.metadata.mnode.schemafile.impl; import org.apache.iotdb.commons.schema.node.common.AbstractAboveDatabaseMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CachedBasicMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -public class CacheAboveDatabaseMNode - extends AbstractAboveDatabaseMNode implements ICacheMNode { +public class CachedAboveDatabaseMNode + extends AbstractAboveDatabaseMNode implements ICachedMNode { - public CacheAboveDatabaseMNode(ICacheMNode parent, String name) { - super(new CacheBasicInternalMNode(parent, name)); + public CachedAboveDatabaseMNode(ICachedMNode parent, String name) { + super(new CachedBasicInternalMNode(parent, name)); } @Override @@ -41,7 +41,7 @@ public void setCacheEntry(CacheEntry cacheEntry) { } @Override - public ICacheMNode getAsMNode() { + public ICachedMNode getAsMNode() { return this; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheBasicInternalMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedBasicInternalMNode.java similarity index 84% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheBasicInternalMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedBasicInternalMNode.java index 174e22aaede33..b06a98180a27f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheBasicInternalMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedBasicInternalMNode.java @@ -19,15 +19,15 @@ package org.apache.iotdb.db.metadata.mnode.schemafile.impl; import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CachedBasicMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; /** * This class is the implementation of Metadata Node. One MNode instance represents one node in the * Metadata Tree */ -public class CacheBasicInternalMNode extends CacheBasicMNode { +public class CachedBasicInternalMNode extends CachedBasicMNode { /** * suppress warnings reason: volatile for double synchronized check @@ -35,10 +35,10 @@ public class CacheBasicInternalMNode extends CacheBasicMNode { *

      This will be a ConcurrentHashMap instance */ @SuppressWarnings("squid:S3077") - private transient volatile IMNodeContainer children = null; + private transient volatile IMNodeContainer children = null; /** Constructor of MNode. */ - public CacheBasicInternalMNode(ICacheMNode parent, String name) { + public CachedBasicInternalMNode(ICachedMNode parent, String name) { super(parent, name); } @@ -50,8 +50,8 @@ public boolean hasChild(String name) { /** get the child with the name */ @Override - public ICacheMNode getChild(String name) { - ICacheMNode child = null; + public ICachedMNode getChild(String name) { + ICachedMNode child = null; if (children != null) { child = children.get(name); } @@ -66,7 +66,7 @@ public ICacheMNode getChild(String name) { * @return the child of this node after addChild */ @Override - public ICacheMNode addChild(String name, ICacheMNode child) { + public ICachedMNode addChild(String name, ICachedMNode child) { /* use cpu time to exchange memory * measurementNode's children should be null to save memory * add child method will only be called when writing MTree, which is not a frequent operation @@ -80,7 +80,7 @@ public ICacheMNode addChild(String name, ICacheMNode child) { } } child.setParent(this); - ICacheMNode existingChild = children.putIfAbsent(name, child); + ICachedMNode existingChild = children.putIfAbsent(name, child); return existingChild == null ? child : existingChild; } @@ -96,7 +96,7 @@ public ICacheMNode addChild(String name, ICacheMNode child) { * @return return the MNode already added */ @Override - public ICacheMNode addChild(ICacheMNode child) { + public ICachedMNode addChild(ICachedMNode child) { /* use cpu time to exchange memory * measurementNode's children should be null to save memory * add child method will only be called when writing MTree, which is not a frequent operation @@ -117,7 +117,7 @@ public ICacheMNode addChild(ICacheMNode child) { /** delete a child */ @Override - public ICacheMNode deleteChild(String name) { + public ICachedMNode deleteChild(String name) { if (children != null) { return children.remove(name); } @@ -131,11 +131,11 @@ public ICacheMNode deleteChild(String name) { * @param newChildNode new child node */ @Override - public synchronized void replaceChild(String oldChildName, ICacheMNode newChildNode) { + 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!"); } - ICacheMNode oldChildNode = this.getChild(oldChildName); + ICachedMNode oldChildNode = this.getChild(oldChildName); if (oldChildNode == null) { return; } @@ -146,7 +146,7 @@ public synchronized void replaceChild(String oldChildName, ICacheMNode newChildN } @Override - public void moveDataToNewMNode(ICacheMNode newMNode) { + public void moveDataToNewMNode(ICachedMNode newMNode) { super.moveDataToNewMNode(newMNode); if (children != null) { @@ -156,7 +156,7 @@ public void moveDataToNewMNode(ICacheMNode newMNode) { } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { if (children == null) { return CachedMNodeContainer.emptyMNodeContainer(); } @@ -164,7 +164,7 @@ public IMNodeContainer getChildren() { } @Override - public void setChildren(IMNodeContainer children) { + public void setChildren(IMNodeContainer children) { this.children = children; } @@ -185,7 +185,7 @@ public int estimateSize() { } @Override - public ICacheMNode getAsMNode() { + public ICachedMNode getAsMNode() { return this; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedDatabaseDeviceMNode.java similarity index 77% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseDeviceMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedDatabaseDeviceMNode.java index 6eba4b0c95d3b..dc4ba9283f547 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedDatabaseDeviceMNode.java @@ -20,15 +20,15 @@ import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseDeviceMNode; import org.apache.iotdb.db.metadata.mnode.mem.info.DatabaseDeviceInfo; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CachedBasicMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -public class CacheDatabaseDeviceMNode - extends AbstractDatabaseDeviceMNode implements ICacheMNode { +public class CachedDatabaseDeviceMNode + extends AbstractDatabaseDeviceMNode implements ICachedMNode { - public CacheDatabaseDeviceMNode(ICacheMNode parent, String name, long dataTTL) { - super(new CacheBasicInternalMNode(parent, name), new DatabaseDeviceInfo<>()); + public CachedDatabaseDeviceMNode(ICachedMNode parent, String name, long dataTTL) { + super(new CachedBasicInternalMNode(parent, name), new DatabaseDeviceInfo<>()); setDataTTL(dataTTL); } @@ -43,7 +43,7 @@ public void setCacheEntry(CacheEntry cacheEntry) { } @Override - public ICacheMNode getAsMNode() { + public ICachedMNode getAsMNode() { return this; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedDatabaseMNode.java similarity index 76% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedDatabaseMNode.java index f7acf74b2234f..58952882fdcb9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDatabaseMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedDatabaseMNode.java @@ -20,19 +20,19 @@ import org.apache.iotdb.commons.schema.node.common.AbstractDatabaseMNode; import org.apache.iotdb.db.metadata.mnode.mem.info.DatabaseInfo; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CachedBasicMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -public class CacheDatabaseMNode extends AbstractDatabaseMNode - implements ICacheMNode { +public class CachedDatabaseMNode extends AbstractDatabaseMNode + implements ICachedMNode { - public CacheDatabaseMNode(ICacheMNode parent, String name) { - super(new CacheBasicInternalMNode(parent, name), new DatabaseInfo(name)); + public CachedDatabaseMNode(ICachedMNode parent, String name) { + super(new CachedBasicInternalMNode(parent, name), new DatabaseInfo<>()); } // TODO: @yukun, remove this constructor - public CacheDatabaseMNode(ICacheMNode parent, String name, long dataTTL) { + public CachedDatabaseMNode(ICachedMNode parent, String name, long dataTTL) { this(parent, name); setDataTTL(dataTTL); } @@ -48,7 +48,7 @@ public void setCacheEntry(CacheEntry cacheEntry) { } @Override - public ICacheMNode getAsMNode() { + public ICachedMNode getAsMNode() { return this; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedDeviceMNode.java similarity index 78% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDeviceMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedDeviceMNode.java index 679acc42d4127..a9a331c476c01 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheDeviceMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedDeviceMNode.java @@ -20,15 +20,15 @@ import org.apache.iotdb.commons.schema.node.common.AbstractDeviceMNode; import org.apache.iotdb.db.metadata.mnode.mem.info.DeviceInfo; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CachedBasicMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; -public class CacheDeviceMNode extends AbstractDeviceMNode - implements ICacheMNode { +public class CachedDeviceMNode extends AbstractDeviceMNode + implements ICachedMNode { - public CacheDeviceMNode(ICacheMNode parent, String name) { - super(new CacheBasicInternalMNode(parent, name), new DeviceInfo<>()); + public CachedDeviceMNode(ICachedMNode parent, String name) { + super(new CachedBasicInternalMNode(parent, name), new DeviceInfo<>()); } @Override @@ -42,7 +42,7 @@ public void setCacheEntry(CacheEntry cacheEntry) { } @Override - public ICacheMNode getAsMNode() { + public ICachedMNode getAsMNode() { return this; } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedMeasurementMNode.java similarity index 77% rename from server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheMeasurementMNode.java rename to server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedMeasurementMNode.java index 915cfc66ad5bf..df10e21f740d8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CacheMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/impl/CachedMeasurementMNode.java @@ -22,19 +22,19 @@ import org.apache.iotdb.commons.schema.node.role.IDeviceMNode; import org.apache.iotdb.commons.schema.node.utils.IMNodeContainer; import org.apache.iotdb.db.metadata.mnode.mem.info.MeasurementInfo; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CacheBasicMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.basic.CachedBasicMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheEntry; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; -public class CacheMeasurementMNode extends AbstractMeasurementMNode - implements ICacheMNode { +public class CachedMeasurementMNode extends AbstractMeasurementMNode + implements ICachedMNode { - public CacheMeasurementMNode( - IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { + public CachedMeasurementMNode( + IDeviceMNode parent, String name, IMeasurementSchema schema, String alias) { super( - new CacheBasicMNode(parent == null ? null : parent.getAsMNode(), name), + new CachedBasicMNode(parent == null ? null : parent.getAsMNode(), name), new MeasurementInfo(schema, alias)); } @@ -49,12 +49,12 @@ public void setCacheEntry(CacheEntry cacheEntry) { } @Override - public ICacheMNode getAsMNode() { + public ICachedMNode getAsMNode() { return this; } @Override - public IMNodeContainer getChildren() { + public IMNodeContainer getChildren() { return CachedMNodeContainer.emptyMNodeContainer(); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/iterator/CachedTraverserIterator.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/iterator/CachedTraverserIterator.java index 06696c79ac631..32ff2d28d3edb 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/iterator/CachedTraverserIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/schemafile/iterator/CachedTraverserIterator.java @@ -22,20 +22,20 @@ import org.apache.iotdb.commons.schema.node.role.IDeviceMNode; import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.db.metadata.mnode.mem.iterator.AbstractTraverserIterator; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mtree.store.IMTreeStore; import org.apache.iotdb.db.metadata.template.Template; import java.util.Map; -public class CachedTraverserIterator extends AbstractTraverserIterator { - private final IMTreeStore store; +public class CachedTraverserIterator extends AbstractTraverserIterator { + private final IMTreeStore store; public CachedTraverserIterator( - IMTreeStore store, - IDeviceMNode parent, + IMTreeStore store, + IDeviceMNode parent, Map templateMap, - IMNodeFactory nodeFactory) + IMNodeFactory nodeFactory) throws MetadataException { super(store, parent, templateMap, nodeFactory); this.store = store; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java index a5ff054ae2199..a20b4533072eb 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/ConfigMTree.java @@ -33,9 +33,9 @@ import org.apache.iotdb.db.exception.metadata.PathNotExistException; import org.apache.iotdb.db.metadata.mnode.config.IConfigMNode; import org.apache.iotdb.db.metadata.mnode.config.factory.ConfigMNodeFactory; -import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator; import org.apache.iotdb.db.metadata.mtree.store.ConfigMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.collector.DatabaseCollector; +import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeAboveDBCollector; import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeCollector; import org.apache.iotdb.db.metadata.mtree.traverser.counter.DatabaseCounter; import org.apache.iotdb.db.metadata.utils.MetaFormatUtils; @@ -638,8 +638,8 @@ private void serializeDatabaseNode( ReadWriteIOUtils.write(STORAGE_GROUP_MNODE_TYPE, outputStream); ReadWriteIOUtils.write(storageGroupNode.getName(), outputStream); ReadWriteIOUtils.write(storageGroupNode.getAsMNode().getSchemaTemplateId(), outputStream); - ThriftConfigNodeSerDeUtils.serializeTStorageGroupSchema( - storageGroupNode.getStorageGroupSchema(), outputStream); + ThriftConfigNodeSerDeUtils.serializeTDatabaseSchema( + storageGroupNode.getAsMNode().getDatabaseSchema(), outputStream); } public void deserialize(InputStream inputStream) throws IOException { @@ -705,8 +705,9 @@ private IConfigMNode deserializeDatabaseMNode(InputStream inputStream) throws IO IDatabaseMNode databaseMNode = nodeFactory.createDatabaseMNode(null, ReadWriteIOUtils.readString(inputStream)); databaseMNode.getAsMNode().setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream)); - databaseMNode.setStorageGroupSchema( - ThriftConfigNodeSerDeUtils.deserializeTStorageGroupSchema(inputStream)); + databaseMNode + .getAsMNode() + .setDatabaseSchema(ThriftConfigNodeSerDeUtils.deserializeTDatabaseSchema(inputStream)); return databaseMNode.getAsMNode(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java index 1d334a528c2a1..bbd37898d60b3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java @@ -33,6 +33,7 @@ import java.util.Map; import java.util.Set; +// TODO: eliminate this class public interface IMTreeBelowSG> { void clear(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index 1e36c8c99e119..52c5caeb23968 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -39,7 +39,7 @@ import org.apache.iotdb.db.exception.metadata.template.TemplateImcompatibeException; import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.CachedMTreeStore; import org.apache.iotdb.db.metadata.mtree.traverser.Traverser; @@ -101,21 +101,21 @@ *

    • Interfaces and Implementation for Template check * */ -public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { +public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { private final CachedMTreeStore store; - private volatile ICacheMNode storageGroupMNode; - private final ICacheMNode rootNode; - private final Function, Map> tagGetter; - private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private volatile ICachedMNode storageGroupMNode; + private final ICachedMNode rootNode; + private final Function, Map> tagGetter; + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); private final int levelOfSG; // region MTree initialization, clear and serialization public MTreeBelowSGCachedImpl( PartialPath storageGroupPath, - Function, Map> tagGetter, + Function, Map> tagGetter, Runnable flushCallback, - Consumer> measurementProcess, + Consumer> measurementProcess, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics) throws MetadataException, IOException { @@ -127,11 +127,11 @@ public MTreeBelowSGCachedImpl( levelOfSG = storageGroupPath.getNodeLength() - 1; // recover measurement - try (MeasurementCollector collector = - new MeasurementCollector( + try (MeasurementCollector collector = + new MeasurementCollector( this.rootNode, new PartialPath(storageGroupMNode.getFullPath()), this.store, true) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { measurementProcess.accept(node); regionStatistics.addTimeseries(1L); return null; @@ -145,8 +145,8 @@ protected Void collectMeasurement(IMeasurementMNode node) { private MTreeBelowSGCachedImpl( PartialPath storageGroupPath, CachedMTreeStore store, - Consumer> measurementProcess, - Function, Map> tagGetter) + Consumer> measurementProcess, + Function, Map> tagGetter) throws MetadataException { this.store = store; this.storageGroupMNode = store.getRoot(); @@ -155,11 +155,11 @@ private MTreeBelowSGCachedImpl( this.tagGetter = tagGetter; // recover measurement - try (MeasurementCollector collector = - new MeasurementCollector( + try (MeasurementCollector collector = + new MeasurementCollector( this.rootNode, new PartialPath(storageGroupMNode.getFullPath()), this.store, true) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { measurementProcess.accept(node); return null; } @@ -174,7 +174,7 @@ public void clear() { storageGroupMNode = null; } - protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { + protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { this.storageGroupMNode .getParent() .replaceChild(this.storageGroupMNode.getName(), newMNode.getAsMNode()); @@ -191,8 +191,8 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( String storageGroupFullPath, int schemaRegionId, CachedSchemaRegionStatistics regionStatistics, - Consumer> measurementProcess, - Function, Map> tagGetter, + Consumer> measurementProcess, + Function, Map> tagGetter, Runnable flushCallback) throws IOException, MetadataException { return new MTreeBelowSGCachedImpl( @@ -208,7 +208,7 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( // region Timeseries operation, including create and delete @Override - public IMeasurementMNode createTimeseries( + public IMeasurementMNode createTimeseries( PartialPath path, TSDataType dataType, TSEncoding encoding, @@ -216,7 +216,7 @@ public IMeasurementMNode createTimeseries( Map props, String alias) throws MetadataException { - IMeasurementMNode measurementMNode = + IMeasurementMNode measurementMNode = createTimeseriesWithPinnedReturn(path, dataType, encoding, compressor, props, alias); unPinMNode(measurementMNode.getAsMNode()); return measurementMNode; @@ -233,7 +233,7 @@ public IMeasurementMNode createTimeseries( * @param props props * @param alias alias of measurement */ - public IMeasurementMNode createTimeseriesWithPinnedReturn( + public IMeasurementMNode createTimeseriesWithPinnedReturn( PartialPath path, TSDataType dataType, TSEncoding encoding, @@ -247,13 +247,13 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( } MetaFormatUtils.checkTimeseries(path); PartialPath devicePath = path.getDevicePath(); - ICacheMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); + ICachedMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); try { // synchronize check and add, we need addChild and add Alias become atomic operation // only write on mtree will be synchronized synchronized (this) { - ICacheMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); + ICachedMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); try { MetaFormatUtils.checkTimeseriesProps(path.getFullPath(), props); @@ -274,7 +274,7 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( device.getFullPath()); } - IDeviceMNode entityMNode; + IDeviceMNode entityMNode; if (device.isDevice()) { entityMNode = device.getAsDeviceMNode(); } else { @@ -285,7 +285,7 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( device = entityMNode.getAsMNode(); } - IMeasurementMNode measurementMNode = + IMeasurementMNode measurementMNode = nodeFactory.createMeasurementMNode( entityMNode, leafName, @@ -319,7 +319,7 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( * @param compressors compressor */ @Override - public List> createAlignedTimeseries( + public List> createAlignedTimeseries( PartialPath devicePath, List measurements, List dataTypes, @@ -327,15 +327,15 @@ public List> createAlignedTimeseries( List compressors, List aliasList) throws MetadataException { - List> measurementMNodeList = new ArrayList<>(); + List> measurementMNodeList = new ArrayList<>(); MetaFormatUtils.checkSchemaMeasurementNames(measurements); - ICacheMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); + ICachedMNode deviceParent = checkAndAutoCreateInternalPath(devicePath); try { // synchronize check and add, we need addChild operation be atomic. // only write operations on mtree will be synchronized synchronized (this) { - ICacheMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); + ICachedMNode device = checkAndAutoCreateDeviceNode(devicePath.getTailNode(), deviceParent); try { for (int i = 0; i < measurements.size(); i++) { @@ -357,7 +357,7 @@ public List> createAlignedTimeseries( devicePath.getFullPath()); } - IDeviceMNode entityMNode; + IDeviceMNode entityMNode; if (device.isDevice()) { entityMNode = device.getAsDeviceMNode(); } else { @@ -370,7 +370,7 @@ public List> createAlignedTimeseries( } for (int i = 0; i < measurements.size(); i++) { - IMeasurementMNode measurementMNode = + IMeasurementMNode measurementMNode = nodeFactory.createMeasurementMNode( entityMNode, measurements.get(i), @@ -402,7 +402,7 @@ public List> createAlignedTimeseries( @Override public Map checkMeasurementExistence( PartialPath devicePath, List measurementList, List aliasList) { - ICacheMNode device; + ICachedMNode device; try { device = getNodeByPath(devicePath); } catch (MetadataException e) { @@ -414,7 +414,7 @@ public Map checkMeasurementExistence( } Map failingMeasurementMap = new HashMap<>(); for (int i = 0; i < measurementList.size(); i++) { - ICacheMNode node = null; + ICachedMNode node = null; try { node = store.getChild(device, measurementList.get(i)); if (node != null) { @@ -460,15 +460,15 @@ public Map checkMeasurementExistence( } } - private ICacheMNode checkAndAutoCreateInternalPath(PartialPath devicePath) + private ICachedMNode checkAndAutoCreateInternalPath(PartialPath devicePath) throws MetadataException { String[] nodeNames = devicePath.getNodes(); MetaFormatUtils.checkTimeseries(devicePath); if (nodeNames.length == levelOfSG + 1) { return null; } - ICacheMNode cur = storageGroupMNode; - ICacheMNode child; + ICachedMNode cur = storageGroupMNode; + ICachedMNode child; String childName; try { // e.g, path = root.sg.d1.s1, create internal nodes and set cur to sg node, parent of d1 @@ -491,14 +491,14 @@ private ICacheMNode checkAndAutoCreateInternalPath(PartialPath devicePath) } } - private ICacheMNode checkAndAutoCreateDeviceNode(String deviceName, ICacheMNode deviceParent) + private ICachedMNode checkAndAutoCreateDeviceNode(String deviceName, ICachedMNode deviceParent) throws MetadataException { if (deviceParent == null) { // device is sg pinMNode(storageGroupMNode); return storageGroupMNode; } - ICacheMNode device = store.getChild(deviceParent, deviceName); + ICachedMNode device = store.getChild(deviceParent, deviceName); if (device == null) { device = store.addChild( @@ -517,15 +517,15 @@ private ICacheMNode checkAndAutoCreateDeviceNode(String deviceName, ICacheMNode * @param path Format: root.node(.node)+ */ @Override - public IMeasurementMNode deleteTimeseries(PartialPath path) + public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataException { String[] nodes = path.getNodes(); if (nodes.length == 0) { throw new IllegalPathException(path.getFullPath()); } - IMeasurementMNode deletedNode = getMeasurementMNode(path); - ICacheMNode parent = deletedNode.getParent(); + IMeasurementMNode deletedNode = getMeasurementMNode(path); + ICachedMNode parent = deletedNode.getParent(); // delete the last node of path store.deleteChild(parent, path.getMeasurement()); if (deletedNode.getAlias() != null) { @@ -541,13 +541,13 @@ public IMeasurementMNode deleteTimeseries(PartialPath path) * * @param entityMNode delete empty InternalMNode from entityMNode to storageGroupMNode */ - private void deleteAndUnpinEmptyInternalMNode(IDeviceMNode entityMNode) + private void deleteAndUnpinEmptyInternalMNode(IDeviceMNode entityMNode) throws MetadataException { - ICacheMNode curNode = entityMNode.getAsMNode(); + ICachedMNode curNode = entityMNode.getAsMNode(); if (!entityMNode.isUseTemplate()) { boolean hasMeasurement = false; - ICacheMNode child; - IMNodeIterator iterator = store.getChildrenIterator(curNode); + ICachedMNode child; + IMNodeIterator iterator = store.getChildrenIterator(curNode); try { while (iterator.hasNext()) { child = iterator.next(); @@ -583,8 +583,8 @@ private void deleteAndUnpinEmptyInternalMNode(IDeviceMNode entityMN unPinMNode(curNode); } - private boolean isEmptyInternalMNode(ICacheMNode node) throws MetadataException { - IMNodeIterator iterator = store.getChildrenIterator(node); + private boolean isEmptyInternalMNode(ICachedMNode node) throws MetadataException { + IMNodeIterator iterator = store.getChildrenIterator(node); try { return !IoTDBConstant.PATH_ROOT.equals(node.getName()) && !node.isMeasurement() @@ -599,10 +599,10 @@ private boolean isEmptyInternalMNode(ICacheMNode node) throws MetadataException public List constructSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); - try (MeasurementUpdater updater = - new MeasurementUpdater(rootNode, pathPattern, store, false) { + try (MeasurementUpdater updater = + new MeasurementUpdater(rootNode, pathPattern, store, false) { @Override - protected void updateMeasurement(IMeasurementMNode node) + protected void updateMeasurement(IMeasurementMNode node) throws MetadataException { node.setPreDeleted(true); store.updateMNode(node.getAsMNode()); @@ -618,10 +618,10 @@ protected void updateMeasurement(IMeasurementMNode node) public List rollbackSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); - try (MeasurementUpdater updater = - new MeasurementUpdater(rootNode, pathPattern, store, false) { + try (MeasurementUpdater updater = + new MeasurementUpdater(rootNode, pathPattern, store, false) { @Override - protected void updateMeasurement(IMeasurementMNode node) + protected void updateMeasurement(IMeasurementMNode node) throws MetadataException { node.setPreDeleted(false); store.updateMNode(node.getAsMNode()); @@ -637,10 +637,10 @@ protected void updateMeasurement(IMeasurementMNode node) public List getPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { List result = new LinkedList<>(); - try (MeasurementCollector collector = - new MeasurementCollector(rootNode, pathPattern, store, false) { + try (MeasurementCollector collector = + new MeasurementCollector(rootNode, pathPattern, store, false) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { result.add(getPartialPathFromRootToNode(node.getAsMNode())); } @@ -656,10 +656,10 @@ protected Void collectMeasurement(IMeasurementMNode node) { public Set getDevicesOfPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { Set result = new HashSet<>(); - try (MeasurementCollector collector = - new MeasurementCollector(rootNode, pathPattern, store, false) { + try (MeasurementCollector collector = + new MeasurementCollector(rootNode, pathPattern, store, false) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { result.add(getPartialPathFromRootToNode(node.getAsMNode()).getDevicePath()); } @@ -673,7 +673,7 @@ protected Void collectMeasurement(IMeasurementMNode node) { } @Override - public void setAlias(IMeasurementMNode measurementMNode, String alias) + public void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException { store.setAlias(measurementMNode, alias); } @@ -688,11 +688,11 @@ public void setAlias(IMeasurementMNode measurementMNode, String ali *

      e.g., get root.sg.d1, get or create all internal nodes and return the node of d1 */ @Override - public ICacheMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException { + public ICachedMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException { String[] nodeNames = deviceId.getNodes(); MetaFormatUtils.checkTimeseries(deviceId); - ICacheMNode cur = storageGroupMNode; - ICacheMNode child; + ICachedMNode cur = storageGroupMNode; + ICachedMNode child; try { for (int i = levelOfSG + 1; i < nodeNames.length; i++) { child = store.getChild(cur, nodeNames[i]); @@ -717,10 +717,10 @@ public List fetchSchema( PartialPath pathPattern, Map templateMap, boolean withTags) throws MetadataException { List result = new LinkedList<>(); - try (MeasurementCollector collector = - new MeasurementCollector(rootNode, pathPattern, store, false) { + try (MeasurementCollector collector = + new MeasurementCollector(rootNode, pathPattern, store, false) { @Override - protected Void collectMeasurement(IMeasurementMNode node) { + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { return null; } @@ -751,10 +751,10 @@ protected Void collectMeasurement(IMeasurementMNode node) { * @return last node in given seriesPath */ @Override - public ICacheMNode getNodeByPath(PartialPath path) throws MetadataException { + public ICachedMNode getNodeByPath(PartialPath path) throws MetadataException { String[] nodes = path.getNodes(); - ICacheMNode cur = storageGroupMNode; - ICacheMNode next; + ICachedMNode cur = storageGroupMNode; + ICachedMNode next; try { for (int i = levelOfSG + 1; i < nodes.length; i++) { next = store.getChild(cur, nodes[i]); @@ -777,9 +777,9 @@ public ICacheMNode getNodeByPath(PartialPath path) throws MetadataException { } @Override - public IMeasurementMNode getMeasurementMNode(PartialPath path) + public IMeasurementMNode getMeasurementMNode(PartialPath path) throws MetadataException { - ICacheMNode node = getNodeByPath(path); + ICachedMNode node = getNodeByPath(path); if (node.isMeasurement()) { return node.getAsMeasurementMNode(); } else { @@ -791,7 +791,7 @@ public IMeasurementMNode getMeasurementMNode(PartialPath path) @Override public long countAllMeasurement() throws MetadataException { - try (MeasurementCounter measurementCounter = + try (MeasurementCounter measurementCounter = new MeasurementCounter<>(rootNode, MetadataConstant.ALL_MATCH_PATTERN, store, false)) { return measurementCounter.count(); } @@ -804,9 +804,9 @@ public long countAllMeasurement() throws MetadataException { public void activateTemplate(PartialPath activatePath, Template template) throws MetadataException { String[] nodes = activatePath.getNodes(); - ICacheMNode cur = storageGroupMNode; - ICacheMNode child; - IDeviceMNode entityMNode; + ICachedMNode cur = storageGroupMNode; + ICachedMNode child; + IDeviceMNode entityMNode; try { for (int i = levelOfSG + 1; i < nodes.length; i++) { @@ -859,10 +859,10 @@ public Map> constructSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { - try (EntityUpdater updater = - new EntityUpdater(rootNode, entry.getKey(), store, false) { + try (EntityUpdater updater = + new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IDeviceMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId())) { resultTemplateSetInfo.put( node.getPartialPath(), Collections.singletonList(node.getSchemaTemplateId())); @@ -882,10 +882,10 @@ public Map> rollbackSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { - try (EntityUpdater updater = - new EntityUpdater(rootNode, entry.getKey(), store, false) { + try (EntityUpdater updater = + new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IDeviceMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( @@ -906,10 +906,10 @@ public Map> deactivateTemplateInBlackList( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { - try (EntityUpdater collector = - new EntityUpdater(rootNode, entry.getKey(), store, false) { + try (EntityUpdater collector = + new EntityUpdater(rootNode, entry.getKey(), store, false) { @Override - protected void updateEntity(IDeviceMNode node) throws MetadataException { + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { resultTemplateSetInfo.put( @@ -931,7 +931,7 @@ protected void updateEntity(IDeviceMNode node) throws MetadataExcep @Override public long countPathsUsingTemplate(PartialPath pathPattern, int templateId) throws MetadataException { - try (EntityCounter counter = + try (EntityCounter counter = new EntityCounter(rootNode, pathPattern, store, false)) { counter.setSchemaTemplateFilter(templateId); return counter.count(); @@ -948,21 +948,21 @@ public long countPathsUsingTemplate(PartialPath pathPattern, int templateId) * @param node */ // TODO: This interface should not be exposed to SchemaRegion - public void pinMNode(ICacheMNode node) throws MetadataException { + public void pinMNode(ICachedMNode node) throws MetadataException { store.pin(node); } // TODO: This interface should not be exposed to SchemaRegion - public void unPinMNode(ICacheMNode node) { + public void unPinMNode(ICachedMNode node) { store.unPin(node); } - private void unPinPath(ICacheMNode node) { + private void unPinPath(ICachedMNode node) { store.unPinPath(node); } // TODO: This interface should not be exposed to SchemaRegion - public void updateMNode(ICacheMNode node) throws MetadataException { + public void updateMNode(ICachedMNode node) throws MetadataException { store.updateMNode(node); } @@ -971,11 +971,11 @@ public void updateMNode(ICacheMNode node) throws MetadataException { // region Interfaces for schema reader public ISchemaReader getDeviceReader(IShowDevicesPlan showDevicesPlan) throws MetadataException { - EntityCollector collector = - new EntityCollector( + EntityCollector collector = + new EntityCollector( rootNode, showDevicesPlan.getPath(), store, showDevicesPlan.isPrefixMatch()) { @Override - protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { + protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { PartialPath device = getPartialPathFromRootToNode(node.getAsMNode()); return new ShowDevicesResult(device.getFullPath(), node.isAligned()); } @@ -983,7 +983,7 @@ protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { if (showDevicesPlan.usingSchemaTemplate()) { collector.setSchemaTemplateFilter(showDevicesPlan.getSchemaTemplateId()); } - TraverserWithLimitOffsetWrapper traverser = + TraverserWithLimitOffsetWrapper traverser = new TraverserWithLimitOffsetWrapper<>( collector, showDevicesPlan.getLimit(), showDevicesPlan.getOffset()); return new ISchemaReader() { @@ -1018,11 +1018,11 @@ public ISchemaReader getTimeSeriesReader( IShowTimeSeriesPlan showTimeSeriesPlan, Function, Map>> tagAndAttributeProvider) throws MetadataException { - MeasurementCollector collector = - new MeasurementCollector( + MeasurementCollector collector = + new MeasurementCollector( rootNode, showTimeSeriesPlan.getPath(), store, showTimeSeriesPlan.isPrefixMatch()) { @Override - protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) { + protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) { return new ITimeSeriesSchemaInfo() { private Pair, Map> tagAndAttribute = null; @@ -1072,7 +1072,7 @@ public PartialPath getPartialPath() { }; collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate(), nodeFactory); - Traverser traverser; + Traverser traverser; if (showTimeSeriesPlan.getLimit() > 0 || showTimeSeriesPlan.getOffset() > 0) { traverser = new TraverserWithLimitOffsetWrapper<>( @@ -1110,11 +1110,11 @@ public ITimeSeriesSchemaInfo next() { public ISchemaReader getNodeReader(IShowNodesPlan showNodesPlan) throws MetadataException { - MNodeCollector collector = - new MNodeCollector( + MNodeCollector collector = + new MNodeCollector( rootNode, showNodesPlan.getPath(), store, showNodesPlan.isPrefixMatch()) { @Override - protected INodeSchemaInfo collectMNode(ICacheMNode node) { + protected INodeSchemaInfo collectMNode(ICachedMNode node) { return new ShowNodesResult( getPartialPathFromRootToNode(node).getFullPath(), node.getMNodeType(false)); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java index 67e408280726a..c7ae851bc9576 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/CachedMTreeStore.java @@ -28,7 +28,7 @@ import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.metadata.mnode.mem.estimator.MNodeSizeEstimator; import org.apache.iotdb.db.metadata.mnode.mem.iterator.AbstractTraverserIterator; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mnode.schemafile.iterator.CachedTraverserIterator; @@ -53,7 +53,7 @@ import static org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer.getCachedMNodeContainer; -public class CachedMTreeStore implements IMTreeStore { +public class CachedMTreeStore implements IMTreeStore { private static final Logger logger = LoggerFactory.getLogger(CachedMTreeStore.class); @@ -63,11 +63,11 @@ public class CachedMTreeStore implements IMTreeStore { private ISchemaFile file; - private ICacheMNode root; + private ICachedMNode root; private final Runnable flushCallback; - private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); private final CachedSchemaRegionStatistics regionStatistics; @@ -91,12 +91,12 @@ public CachedMTreeStore( } @Override - public ICacheMNode generatePrefix(PartialPath storageGroupPath) { + public ICachedMNode generatePrefix(PartialPath storageGroupPath) { String[] nodes = storageGroupPath.getNodes(); // nodes[0] must be root - ICacheMNode res = nodeFactory.createAboveDatabaseMNode(null, nodes[0]); - ICacheMNode cur = res; - ICacheMNode child; + ICachedMNode res = nodeFactory.createAboveDatabaseMNode(null, nodes[0]); + ICachedMNode cur = res; + ICachedMNode child; for (int i = 1; i < nodes.length - 1; i++) { child = nodeFactory.createAboveDatabaseMNode(cur, nodes[i]); cur.addChild(nodes[i], child); @@ -108,22 +108,22 @@ public ICacheMNode generatePrefix(PartialPath storageGroupPath) { } @Override - public ICacheMNode getRoot() { + public ICachedMNode getRoot() { return root; } @Override - public boolean hasChild(ICacheMNode parent, String name) throws MetadataException { + public boolean hasChild(ICachedMNode parent, String name) throws MetadataException { return hasChild(parent, name, true); } - protected final boolean hasChild(ICacheMNode parent, String name, boolean needLock) + protected final boolean hasChild(ICachedMNode parent, String name, boolean needLock) throws MetadataException { if (needLock) { lock.threadReadLock(); } try { - ICacheMNode child = getChild(parent, name, needLock); + ICachedMNode child = getChild(parent, name, needLock); if (child == null) { return false; } else { @@ -150,17 +150,17 @@ protected final boolean hasChild(ICacheMNode parent, String name, boolean needLo * @throws MetadataException */ @Override - public ICacheMNode getChild(ICacheMNode parent, String name) throws MetadataException { + public ICachedMNode getChild(ICachedMNode parent, String name) throws MetadataException { return getChild(parent, name, true); } - protected final ICacheMNode getChild(ICacheMNode parent, String name, boolean needLock) + protected final ICachedMNode getChild(ICachedMNode parent, String name, boolean needLock) throws MetadataException { if (needLock) { lock.threadReadLock(); } try { - ICacheMNode node = parent.getChild(name); + ICachedMNode node = parent.getChild(name); if (node == null) { node = loadChildFromDisk(parent, name); } else { @@ -182,8 +182,9 @@ protected final ICacheMNode getChild(ICacheMNode parent, String name, boolean ne } } - private ICacheMNode loadChildFromDisk(ICacheMNode parent, String name) throws MetadataException { - ICacheMNode node = null; + private ICachedMNode loadChildFromDisk(ICachedMNode parent, String name) + throws MetadataException { + ICachedMNode node = null; if (!getCachedMNodeContainer(parent).isVolatile()) { try { node = file.getChildNode(parent, name); @@ -197,9 +198,9 @@ private ICacheMNode loadChildFromDisk(ICacheMNode parent, String name) throws Me return node; } - private ICacheMNode loadChildFromDiskToParent(ICacheMNode parent, ICacheMNode node) { + private ICachedMNode loadChildFromDiskToParent(ICachedMNode parent, ICachedMNode node) { synchronized (parent) { - ICacheMNode nodeAlreadyLoaded = parent.getChild(node.getName()); + ICachedMNode nodeAlreadyLoaded = parent.getChild(node.getName()); if (nodeAlreadyLoaded != null) { try { cacheManager.updateCacheStatusAfterMemoryRead(nodeAlreadyLoaded); @@ -215,7 +216,8 @@ private ICacheMNode loadChildFromDiskToParent(ICacheMNode parent, ICacheMNode no } } - private void processAlias(IDeviceMNode parent, IMeasurementMNode node) { + private void processAlias( + IDeviceMNode parent, IMeasurementMNode node) { String alias = node.getAlias(); if (alias != null) { parent.addAlias(alias, node); @@ -224,12 +226,12 @@ private void processAlias(IDeviceMNode parent, IMeasurementMNode getChildrenIterator(ICacheMNode parent) + public IMNodeIterator getChildrenIterator(ICachedMNode parent) throws MetadataException { return getChildrenIterator(parent, true); } - final IMNodeIterator getChildrenIterator(ICacheMNode parent, boolean needLock) + final IMNodeIterator getChildrenIterator(ICachedMNode parent, boolean needLock) throws MetadataException { try { return new CachedMNodeIterator(parent, needLock); @@ -239,20 +241,20 @@ final IMNodeIterator getChildrenIterator(ICacheMNode parent, boolea } @Override - public IMNodeIterator getTraverserIterator( - ICacheMNode parent, Map templateMap, boolean skipPreDeletedSchema) + public IMNodeIterator getTraverserIterator( + ICachedMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { return getTraverserIterator(this, parent, templateMap, skipPreDeletedSchema); } - final IMNodeIterator getTraverserIterator( - IMTreeStore store, - ICacheMNode parent, + final IMNodeIterator getTraverserIterator( + IMTreeStore store, + ICachedMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { if (parent.isDevice()) { - AbstractTraverserIterator iterator = + AbstractTraverserIterator iterator = new CachedTraverserIterator(store, parent.getAsDeviceMNode(), templateMap, nodeFactory); iterator.setSkipPreDeletedSchema(skipPreDeletedSchema); return iterator; @@ -263,7 +265,7 @@ final IMNodeIterator getTraverserIterator( // must pin parent first @Override - public ICacheMNode addChild(ICacheMNode parent, String childName, ICacheMNode child) { + public ICachedMNode addChild(ICachedMNode parent, String childName, ICachedMNode child) { lock.threadReadLock(); try { child.setParent(parent); @@ -287,10 +289,10 @@ public ICacheMNode addChild(ICacheMNode parent, String childName, ICacheMNode ch * @throws MetadataException */ @Override - public void deleteChild(ICacheMNode parent, String childName) throws MetadataException { + public void deleteChild(ICachedMNode parent, String childName) throws MetadataException { lock.writeLock(); try { - ICacheMNode deletedMNode = getChild(parent, childName, false); + ICachedMNode deletedMNode = getChild(parent, childName, false); ICachedMNodeContainer container = getCachedMNodeContainer(parent); if (!container.isVolatile() && !container.hasChildInNewChildBuffer(childName)) { // the container has been persisted and this child is not a new child, which means the child @@ -316,11 +318,11 @@ public void deleteChild(ICacheMNode parent, String childName) throws MetadataExc * @param node the modified node */ @Override - public void updateMNode(ICacheMNode node) { + public void updateMNode(ICachedMNode node) { updateMNode(node, true); } - final void updateMNode(ICacheMNode node, boolean needLock) { + final void updateMNode(ICachedMNode node, boolean needLock) { if (needLock) { lock.threadReadLock(); } @@ -334,8 +336,8 @@ final void updateMNode(ICacheMNode node, boolean needLock) { } @Override - public IDeviceMNode setToEntity(ICacheMNode node) { - IDeviceMNode result = MNodeUtils.setToEntity(node, nodeFactory); + public IDeviceMNode setToEntity(ICachedMNode node) { + IDeviceMNode result = MNodeUtils.setToEntity(node, nodeFactory); if (result != node) { memManager.updatePinnedSize(result.estimateSize() - node.estimateSize()); } @@ -344,8 +346,8 @@ public IDeviceMNode setToEntity(ICacheMNode node) { } @Override - public ICacheMNode setToInternal(IDeviceMNode entityMNode) { - ICacheMNode result = MNodeUtils.setToInternal(entityMNode, nodeFactory); + public ICachedMNode setToInternal(IDeviceMNode entityMNode) { + ICachedMNode result = MNodeUtils.setToInternal(entityMNode, nodeFactory); if (result != entityMNode) { memManager.updatePinnedSize(result.estimateSize() - entityMNode.estimateSize()); } @@ -354,7 +356,7 @@ public ICacheMNode setToInternal(IDeviceMNode entityMNode) { } @Override - public void setAlias(IMeasurementMNode measurementMNode, String alias) + public void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException { String existingAlias = measurementMNode.getAlias(); if (existingAlias == null && alias == null) { @@ -383,11 +385,11 @@ public void setAlias(IMeasurementMNode measurementMNode, String ali * @param node */ @Override - public void pin(ICacheMNode node) throws MetadataException { + public void pin(ICachedMNode node) throws MetadataException { pin(node, true); } - final void pin(ICacheMNode node, boolean needLock) throws MetadataException { + final void pin(ICachedMNode node, boolean needLock) throws MetadataException { if (needLock) { lock.threadReadLock(); } @@ -409,11 +411,11 @@ final void pin(ICacheMNode node, boolean needLock) throws MetadataException { * @param node */ @Override - public void unPin(ICacheMNode node) { + public void unPin(ICachedMNode node) { unPin(node, true); } - final void unPin(ICacheMNode node, boolean needLock) { + final void unPin(ICachedMNode node, boolean needLock) { if (needLock) { lock.threadReadLock(); } @@ -429,11 +431,11 @@ final void unPin(ICacheMNode node, boolean needLock) { } @Override - public void unPinPath(ICacheMNode node) { + public void unPinPath(ICachedMNode node) { unPinPath(node, true); } - public void unPinPath(ICacheMNode node, boolean needLock) { + public void unPinPath(ICachedMNode node, boolean needLock) { while (!node.isDatabase()) { unPin(node, needLock); node = node.getParent(); @@ -449,7 +451,7 @@ final void stampedReadUnlock(long stamp) { } @Override - public IMTreeStore getWithReentrantReadLock() { + public IMTreeStore getWithReentrantReadLock() { return new ReentrantReadOnlyCachedMTreeStore(this); } @@ -544,7 +546,7 @@ public boolean executeMemoryRelease() { /** Sync all volatile nodes to schemaFile and execute memory release after flush. */ public void flushVolatileNodes() { try { - IDatabaseMNode updatedStorageGroupMNode = + IDatabaseMNode updatedStorageGroupMNode = cacheManager.collectUpdatedStorageGroupMNodes(); if (updatedStorageGroupMNode != null) { try { @@ -557,8 +559,8 @@ public void flushVolatileNodes() { return; } } - List nodesToPersist = cacheManager.collectVolatileMNodes(); - for (ICacheMNode volatileNode : nodesToPersist) { + List nodesToPersist = cacheManager.collectVolatileMNodes(); + for (ICachedMNode volatileNode : nodesToPersist) { try { file.writeMNode(volatileNode); } catch (MetadataException | IOException e) { @@ -586,15 +588,15 @@ public void flushVolatileNodes() { * Since any node R/W operation may change the memory status, thus it should be controlled during * iterating child nodes. */ - private class CachedMNodeIterator implements IMNodeIterator { - ICacheMNode parent; - Iterator iterator; - Iterator bufferIterator; + private class CachedMNodeIterator implements IMNodeIterator { + ICachedMNode parent; + Iterator iterator; + Iterator bufferIterator; boolean isIteratingDisk; - ICacheMNode nextNode; + ICachedMNode nextNode; boolean isLocked; - CachedMNodeIterator(ICacheMNode parent, boolean needLock) + CachedMNodeIterator(ICachedMNode parent, boolean needLock) throws MetadataException, IOException { if (needLock) { lock.threadReadLock(); @@ -638,17 +640,17 @@ public boolean hasNext() { // must invoke hasNext() first @Override - public ICacheMNode next() { + public ICachedMNode next() { if (nextNode == null && !hasNext()) { throw new NoSuchElementException(); } - ICacheMNode result = nextNode; + ICachedMNode result = nextNode; nextNode = null; return result; } private void readNext() throws MetadataException { - ICacheMNode node = null; + ICachedMNode node = null; if (isIteratingDisk) { ICachedMNodeContainer container = getCachedMNodeContainer(parent); if (iterator.hasNext()) { @@ -663,7 +665,7 @@ private void readNext() throws MetadataException { } } if (node != null) { - ICacheMNode nodeInMem = parent.getChild(node.getName()); + ICachedMNode nodeInMem = parent.getChild(node.getName()); if (nodeInMem != null) { // this branch means the node load from disk is in cache, thus use the instance in // cache diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java index fd63b2fe196d9..3eb09a3e3537f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/ReentrantReadOnlyCachedMTreeStore.java @@ -23,13 +23,13 @@ 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.IMNodeIterator; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.template.Template; import java.io.File; import java.util.Map; -public class ReentrantReadOnlyCachedMTreeStore implements IMTreeStore { +public class ReentrantReadOnlyCachedMTreeStore implements IMTreeStore { private final CachedMTreeStore store; private final long readLockStamp; @@ -39,84 +39,84 @@ public ReentrantReadOnlyCachedMTreeStore(CachedMTreeStore store) { } @Override - public ICacheMNode generatePrefix(PartialPath storageGroupPath) { + public ICachedMNode generatePrefix(PartialPath storageGroupPath) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public ICacheMNode getRoot() { + public ICachedMNode getRoot() { return store.getRoot(); } @Override - public boolean hasChild(ICacheMNode parent, String name) throws MetadataException { + public boolean hasChild(ICachedMNode parent, String name) throws MetadataException { return store.hasChild(parent, name, false); } @Override - public ICacheMNode getChild(ICacheMNode parent, String name) throws MetadataException { + public ICachedMNode getChild(ICachedMNode parent, String name) throws MetadataException { return store.getChild(parent, name, false); } @Override - public IMNodeIterator getChildrenIterator(ICacheMNode parent) throws MetadataException { + public IMNodeIterator getChildrenIterator(ICachedMNode parent) throws MetadataException { return store.getChildrenIterator(parent, false); } @Override - public IMNodeIterator getTraverserIterator( - ICacheMNode parent, Map templateMap, boolean skipPreDeletedSchema) + public IMNodeIterator getTraverserIterator( + ICachedMNode parent, Map templateMap, boolean skipPreDeletedSchema) throws MetadataException { return store.getTraverserIterator(this, parent, templateMap, skipPreDeletedSchema); } @Override - public ICacheMNode addChild(ICacheMNode parent, String childName, ICacheMNode child) { + public ICachedMNode addChild(ICachedMNode parent, String childName, ICachedMNode child) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public void deleteChild(ICacheMNode parent, String childName) { + public void deleteChild(ICachedMNode parent, String childName) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public void updateMNode(ICacheMNode node) { + public void updateMNode(ICachedMNode node) { store.updateMNode(node, false); } @Override - public IDeviceMNode setToEntity(ICacheMNode node) { + public IDeviceMNode setToEntity(ICachedMNode node) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public ICacheMNode setToInternal(IDeviceMNode entityMNode) { + public ICachedMNode setToInternal(IDeviceMNode entityMNode) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public void setAlias(IMeasurementMNode measurementMNode, String alias) { + public void setAlias(IMeasurementMNode measurementMNode, String alias) { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } @Override - public void pin(ICacheMNode node) throws MetadataException { + public void pin(ICachedMNode node) throws MetadataException { store.pin(node, false); } @Override - public void unPin(ICacheMNode node) { + public void unPin(ICachedMNode node) { store.unPin(node, false); } @Override - public void unPinPath(ICacheMNode node) { + public void unPinPath(ICachedMNode node) { store.unPinPath(node, false); } @Override - public IMTreeStore getWithReentrantReadLock() { + public IMTreeStore getWithReentrantReadLock() { throw new UnsupportedOperationException("ReadOnlyReentrantMTreeStore"); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java index 49f0c21f684d8..dcaf77fdbc50b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/CacheManager.java @@ -21,7 +21,7 @@ import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; @@ -73,7 +73,7 @@ public CacheManager(MemManager memManager) { this.memManager = memManager; } - public void initRootStatus(ICacheMNode root) { + public void initRootStatus(ICachedMNode root) { pinMNodeWithMemStatusUpdate(root); } @@ -84,7 +84,7 @@ public void initRootStatus(ICacheMNode root) { * @param node */ @Override - public void updateCacheStatusAfterMemoryRead(ICacheMNode node) throws MNodeNotCachedException { + public void updateCacheStatusAfterMemoryRead(ICachedMNode node) throws MNodeNotCachedException { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null) { throw new MNodeNotCachedException(); @@ -107,7 +107,7 @@ public void updateCacheStatusAfterMemoryRead(ICacheMNode node) throws MNodeNotCa * @param node */ @Override - public void updateCacheStatusAfterDiskRead(ICacheMNode node) { + public void updateCacheStatusAfterDiskRead(ICachedMNode node) { pinMNodeWithMemStatusUpdate(node); CacheEntry cacheEntry = getCacheEntry(node); getBelongedContainer(node).addChildToCache(node); @@ -121,7 +121,7 @@ public void updateCacheStatusAfterDiskRead(ICacheMNode node) { * @param node */ @Override - public void updateCacheStatusAfterAppend(ICacheMNode node) { + public void updateCacheStatusAfterAppend(ICachedMNode node) { pinMNodeWithMemStatusUpdate(node); CacheEntry cacheEntry = getCacheEntry(node); cacheEntry.setVolatile(true); @@ -135,9 +135,9 @@ public void updateCacheStatusAfterAppend(ICacheMNode node) { * * @param node */ - private void addToBufferAfterAppend(ICacheMNode node) { + private void addToBufferAfterAppend(ICachedMNode node) { removeAncestorsFromCache(node); - ICacheMNode parent = node.getParent(); + ICachedMNode parent = node.getParent(); CacheEntry cacheEntry = getCacheEntry(parent); if (!cacheEntry.isVolatile()) { // the cacheEntry may be set to volatile concurrently, the unVolatile node should not be added @@ -154,9 +154,9 @@ private void addToBufferAfterAppend(ICacheMNode node) { * The ancestors of volatile node should not stay in nodeCache in which the node will be evicted. * When invoking this method, all the ancestors have been pinned. */ - private void removeAncestorsFromCache(ICacheMNode node) { - ICacheMNode parent = node.getParent(); - ICacheMNode current = node; + private void removeAncestorsFromCache(ICachedMNode node) { + ICachedMNode parent = node.getParent(); + ICachedMNode current = node; CacheEntry cacheEntry = getCacheEntry(parent); while (!current.isDatabase() && isInNodeCache(cacheEntry)) { removeFromNodeCache(cacheEntry); @@ -173,7 +173,7 @@ private void removeAncestorsFromCache(ICacheMNode node) { * @param node */ @Override - public void updateCacheStatusAfterUpdate(ICacheMNode node) { + public void updateCacheStatusAfterUpdate(ICachedMNode node) { CacheEntry cacheEntry = getCacheEntry(node); if (!cacheEntry.isVolatile()) { if (!node.isDatabase()) { @@ -199,14 +199,14 @@ public void updateCacheStatusAfterUpdate(ICacheMNode node) { * * @param node */ - private void addToBufferAfterUpdate(ICacheMNode node) { + private void addToBufferAfterUpdate(ICachedMNode node) { if (node.isDatabase()) { nodeBuffer.setUpdatedStorageGroupMNode(node.getAsDatabaseMNode()); return; } removeAncestorsFromCache(node); - ICacheMNode parent = node.getParent(); + ICachedMNode parent = node.getParent(); CacheEntry cacheEntry = getCacheEntry(parent); /* @@ -235,25 +235,25 @@ private void addToBufferAfterUpdate(ICacheMNode node) { * @param node */ @Override - public void updateCacheStatusAfterPersist(ICacheMNode node) { - ICacheMNode tmp = node; + public void updateCacheStatusAfterPersist(ICachedMNode node) { + ICachedMNode tmp = node; while (!tmp.isDatabase() && !isInNodeCache(getCacheEntry(tmp))) { addToNodeCache(getCacheEntry(tmp), tmp); tmp = tmp.getParent(); } ICachedMNodeContainer container = getCachedMNodeContainer(node); - Map persistedChildren = container.getNewChildBuffer(); - for (ICacheMNode child : persistedChildren.values()) { + Map persistedChildren = container.getNewChildBuffer(); + for (ICachedMNode child : persistedChildren.values()) { updateCacheStatusAfterPersist(child, container); } persistedChildren = container.getUpdatedChildBuffer(); - for (ICacheMNode child : persistedChildren.values()) { + for (ICachedMNode child : persistedChildren.values()) { updateCacheStatusAfterPersist(child, container); } } - private void updateCacheStatusAfterPersist(ICacheMNode node, ICachedMNodeContainer container) { + private void updateCacheStatusAfterPersist(ICachedMNode node, ICachedMNodeContainer container) { CacheEntry cacheEntry = getCacheEntry(node); cacheEntry.setVolatile(false); container.moveMNodeToCache(node.getName()); @@ -266,8 +266,8 @@ private void updateCacheStatusAfterPersist(ICacheMNode node, ICachedMNodeContain * @return null if not exist */ @Override - public IDatabaseMNode collectUpdatedStorageGroupMNodes() { - IDatabaseMNode storageGroupMNode = nodeBuffer.getUpdatedStorageGroupMNode(); + public IDatabaseMNode collectUpdatedStorageGroupMNodes() { + IDatabaseMNode storageGroupMNode = nodeBuffer.getUpdatedStorageGroupMNode(); nodeBuffer.setUpdatedStorageGroupMNode(null); return storageGroupMNode; } @@ -279,22 +279,22 @@ public IDatabaseMNode collectUpdatedStorageGroupMNodes() { * @return */ @Override - public List collectVolatileMNodes() { - List nodesToPersist = new ArrayList<>(); + public List collectVolatileMNodes() { + List nodesToPersist = new ArrayList<>(); nodeBuffer.forEachNode(node -> collectVolatileNodes(node, nodesToPersist)); nodeBuffer.clear(); return nodesToPersist; } - private void collectVolatileNodes(ICacheMNode node, List nodesToPersist) { - Iterator bufferIterator = + private void collectVolatileNodes(ICachedMNode node, List nodesToPersist) { + Iterator bufferIterator = getCachedMNodeContainer(node).getChildrenBufferIterator(); if (bufferIterator.hasNext()) { nodesToPersist.add(node); } - ICacheMNode child; + ICachedMNode child; while (bufferIterator.hasNext()) { child = bufferIterator.next(); collectVolatileNodes(child, nodesToPersist); @@ -302,11 +302,11 @@ private void collectVolatileNodes(ICacheMNode node, List nodesToPer } @Override - public void remove(ICacheMNode node) { + public void remove(ICachedMNode node) { removeRecursively(node); } - private void removeOne(CacheEntry cacheEntry, ICacheMNode node) { + private void removeOne(CacheEntry cacheEntry, ICachedMNode node) { if (cacheEntry.isVolatile()) { nodeBuffer.remove(cacheEntry); } else { @@ -321,13 +321,13 @@ private void removeOne(CacheEntry cacheEntry, ICacheMNode node) { memManager.releaseMemResource(node); } - private void removeRecursively(ICacheMNode node) { + private void removeRecursively(ICachedMNode node) { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null) { return; } removeOne(cacheEntry, node); - for (ICacheMNode child : node.getChildren().values()) { + for (ICachedMNode child : node.getChildren().values()) { removeRecursively(child); } } @@ -340,9 +340,9 @@ private void removeRecursively(ICacheMNode node) { */ @Override public synchronized boolean evict() { - ICacheMNode node = null; + ICachedMNode node = null; CacheEntry cacheEntry = null; - List evictedMNodes = new ArrayList<>(); + List evictedMNodes = new ArrayList<>(); boolean isSuccess = false; while (!isSuccess) { node = getPotentialNodeTobeEvicted(); @@ -376,8 +376,8 @@ public synchronized boolean evict() { return !evictedMNodes.isEmpty(); } - private void collectEvictedMNodes(ICacheMNode node, List evictedMNodes) { - for (ICacheMNode child : node.getChildren().values()) { + private void collectEvictedMNodes(ICachedMNode node, List evictedMNodes) { + for (ICachedMNode child : node.getChildren().values()) { removeFromNodeCache(getCacheEntry(child)); child.setCacheEntry(null); evictedMNodes.add(child); @@ -394,7 +394,7 @@ private void collectEvictedMNodes(ICacheMNode node, List evictedMNo * @param node */ @Override - public void pinMNode(ICacheMNode node) throws MNodeNotPinnedException { + public void pinMNode(ICachedMNode node) throws MNodeNotPinnedException { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null || !cacheEntry.isPinned()) { throw new MNodeNotPinnedException(); @@ -409,7 +409,7 @@ public void pinMNode(ICacheMNode node) throws MNodeNotPinnedException { } } - private void pinMNodeWithMemStatusUpdate(ICacheMNode node) { + private void pinMNodeWithMemStatusUpdate(ICachedMNode node) { CacheEntry cacheEntry = getCacheEntry(node); // update memory status first if (cacheEntry == null) { @@ -421,11 +421,11 @@ private void pinMNodeWithMemStatusUpdate(ICacheMNode node) { doPin(node); } - private void doPin(ICacheMNode node) { + private void doPin(ICachedMNode node) { CacheEntry cacheEntry = getCacheEntry(node); // do pin MNode in memory if (!cacheEntry.isPinned()) { - ICacheMNode parent = node.getParent(); + ICachedMNode parent = node.getParent(); if (!node.isDatabase()) { getCacheEntry(parent).pin(); } @@ -443,7 +443,7 @@ private void doPin(ICacheMNode node) { * @return */ @Override - public boolean unPinMNode(ICacheMNode node) { + public boolean unPinMNode(ICachedMNode node) { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null) { return false; @@ -452,7 +452,7 @@ public boolean unPinMNode(ICacheMNode node) { return doUnPin(node); } - private boolean doUnPin(ICacheMNode node) { + private boolean doUnPin(ICachedMNode node) { CacheEntry cacheEntry = getCacheEntry(node); boolean isPinStatusChanged = false; @@ -472,13 +472,13 @@ private boolean doUnPin(ICacheMNode node) { } @Override - public void clear(ICacheMNode root) { + public void clear(ICachedMNode root) { clearMNodeInMemory(root); clearNodeCache(); nodeBuffer.clear(); } - private void clearMNodeInMemory(ICacheMNode node) { + private void clearMNodeInMemory(ICachedMNode node) { CacheEntry cacheEntry = getCacheEntry(node); if (cacheEntry == null) { return; @@ -489,13 +489,13 @@ private void clearMNodeInMemory(ICacheMNode node) { } memManager.releaseMemResource(node); - Iterator iterator = getCachedMNodeContainer(node).getChildrenIterator(); + Iterator iterator = getCachedMNodeContainer(node).getChildrenIterator(); while (iterator.hasNext()) { clearMNodeInMemory(iterator.next()); } } - protected CacheEntry getCacheEntry(ICacheMNode node) { + protected CacheEntry getCacheEntry(ICachedMNode node) { return node.getCacheEntry(); } @@ -504,7 +504,7 @@ public long getBufferNodeNum() { return nodeBuffer.getBufferNodeNum(); } - protected void initCacheEntryForNode(ICacheMNode node) { + protected void initCacheEntryForNode(ICachedMNode node) { node.setCacheEntry(new CacheEntry()); } @@ -512,15 +512,15 @@ protected void initCacheEntryForNode(ICacheMNode node) { // MNode update operation like node replace may reset the mapping between cacheEntry and node, // thus it should be updated - protected abstract void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, ICacheMNode node); + protected abstract void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, ICachedMNode node); protected abstract boolean isInNodeCache(CacheEntry cacheEntry); - protected abstract void addToNodeCache(CacheEntry cacheEntry, ICacheMNode node); + protected abstract void addToNodeCache(CacheEntry cacheEntry, ICachedMNode node); protected abstract void removeFromNodeCache(CacheEntry cacheEntry); - protected abstract ICacheMNode getPotentialNodeTobeEvicted(); + protected abstract ICachedMNode getPotentialNodeTobeEvicted(); protected abstract void clearNodeCache(); @@ -528,8 +528,8 @@ private static class NodeBuffer { private static final int MAP_NUM = 17; - private IDatabaseMNode updatedStorageGroupMNode; - private Map[] maps = new Map[MAP_NUM]; + private IDatabaseMNode updatedStorageGroupMNode; + private Map[] maps = new Map[MAP_NUM]; NodeBuffer() { for (int i = 0; i < MAP_NUM; i++) { @@ -537,15 +537,15 @@ private static class NodeBuffer { } } - public IDatabaseMNode getUpdatedStorageGroupMNode() { + public IDatabaseMNode getUpdatedStorageGroupMNode() { return updatedStorageGroupMNode; } - public void setUpdatedStorageGroupMNode(IDatabaseMNode updatedStorageGroupMNode) { + public void setUpdatedStorageGroupMNode(IDatabaseMNode updatedStorageGroupMNode) { this.updatedStorageGroupMNode = updatedStorageGroupMNode; } - void put(CacheEntry cacheEntry, ICacheMNode node) { + void put(CacheEntry cacheEntry, ICachedMNode node) { maps[getLoc(cacheEntry)].put(cacheEntry, node); } @@ -553,9 +553,9 @@ void remove(CacheEntry cacheEntry) { maps[getLoc(cacheEntry)].remove(cacheEntry); } - void forEachNode(Consumer action) { - for (Map map : maps) { - for (ICacheMNode node : map.values()) { + void forEachNode(Consumer action) { + for (Map map : maps) { + for (ICachedMNode node : map.values()) { action.accept(node); } } @@ -570,7 +570,7 @@ long getBufferNodeNum() { } void clear() { - for (Map map : maps) { + for (Map map : maps) { map.clear(); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java index 067c95314252a..b66777ff3c86f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/ICacheManager.java @@ -21,39 +21,39 @@ import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotCachedException; import org.apache.iotdb.db.exception.metadata.cache.MNodeNotPinnedException; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import java.util.List; public interface ICacheManager { - void initRootStatus(ICacheMNode root); + void initRootStatus(ICachedMNode root); - void updateCacheStatusAfterMemoryRead(ICacheMNode node) throws MNodeNotCachedException; + void updateCacheStatusAfterMemoryRead(ICachedMNode node) throws MNodeNotCachedException; - void updateCacheStatusAfterDiskRead(ICacheMNode node); + void updateCacheStatusAfterDiskRead(ICachedMNode node); - void updateCacheStatusAfterAppend(ICacheMNode node); + void updateCacheStatusAfterAppend(ICachedMNode node); - void updateCacheStatusAfterUpdate(ICacheMNode node); + void updateCacheStatusAfterUpdate(ICachedMNode node); - void updateCacheStatusAfterPersist(ICacheMNode node); + void updateCacheStatusAfterPersist(ICachedMNode node); - IDatabaseMNode collectUpdatedStorageGroupMNodes(); + IDatabaseMNode collectUpdatedStorageGroupMNodes(); - List collectVolatileMNodes(); + List collectVolatileMNodes(); - void remove(ICacheMNode node); + void remove(ICachedMNode node); boolean evict(); - void pinMNode(ICacheMNode node) throws MNodeNotPinnedException; + void pinMNode(ICachedMNode node) throws MNodeNotPinnedException; - boolean unPinMNode(ICacheMNode node); + boolean unPinMNode(ICachedMNode node); long getBufferNodeNum(); long getCacheNodeNum(); - void clear(ICacheMNode root); + void clear(ICachedMNode root); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java index fad08170224c0..258ae87ed7fbf 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/LRUCacheManager.java @@ -18,7 +18,7 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk.cache; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; import java.util.concurrent.atomic.AtomicLong; @@ -47,12 +47,12 @@ public void updateCacheStatusAfterAccess(CacheEntry cacheEntry) { // MNode update operation like node replace may reset the mapping between cacheEntry and node, // thus it should be updated @Override - protected void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, ICacheMNode node) { + protected void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, ICachedMNode node) { getAsLRUCacheEntry(cacheEntry).setNode(node); } @Override - protected void initCacheEntryForNode(ICacheMNode node) { + protected void initCacheEntryForNode(ICachedMNode node) { LRUCacheEntry cacheEntry = new LRUCacheEntry(node); node.setCacheEntry(cacheEntry); } @@ -64,7 +64,7 @@ protected boolean isInNodeCache(CacheEntry cacheEntry) { } @Override - protected void addToNodeCache(CacheEntry cacheEntry, ICacheMNode node) { + protected void addToNodeCache(CacheEntry cacheEntry, ICachedMNode node) { LRUCacheEntry lruCacheEntry = getAsLRUCacheEntry(cacheEntry); getTargetCacheList(lruCacheEntry).addToCacheList(lruCacheEntry, node); } @@ -76,8 +76,8 @@ protected void removeFromNodeCache(CacheEntry cacheEntry) { } @Override - protected ICacheMNode getPotentialNodeTobeEvicted() { - ICacheMNode result = null; + protected ICachedMNode getPotentialNodeTobeEvicted() { + ICachedMNode result = null; for (LRUCacheList cacheList : lruCacheLists) { result = cacheList.getPotentialNodeTobeEvicted(); if (result != null) { @@ -120,21 +120,21 @@ private static class LRUCacheEntry extends CacheEntry { // although the node instance may be replaced, the name and full path of the node won't be // changed, which means the cacheEntry always map to only one logic node - protected volatile ICacheMNode node; + protected volatile ICachedMNode node; private volatile LRUCacheEntry pre = null; private volatile LRUCacheEntry next = null; - public LRUCacheEntry(ICacheMNode node) { + public LRUCacheEntry(ICachedMNode node) { this.node = node; } - public ICacheMNode getNode() { + public ICachedMNode getNode() { return node; } - public void setNode(ICacheMNode node) { + public void setNode(ICachedMNode node) { this.node = node; } @@ -181,7 +181,7 @@ private void updateCacheStatusAfterAccess(LRUCacheEntry lruCacheEntry) { } } - private void addToCacheList(LRUCacheEntry lruCacheEntry, ICacheMNode node) { + private void addToCacheList(LRUCacheEntry lruCacheEntry, ICachedMNode node) { lock.lock(); try { lruCacheEntry.setNode(node); @@ -202,7 +202,7 @@ private void removeFromCacheList(LRUCacheEntry lruCacheEntry) { } } - private ICacheMNode getPotentialNodeTobeEvicted() { + private ICachedMNode getPotentialNodeTobeEvicted() { lock.lock(); try { LRUCacheEntry target = last; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java index 37d0d949ea055..bc6cdaeafaaee 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/cache/PlainCacheManager.java @@ -18,7 +18,7 @@ */ package org.apache.iotdb.db.metadata.mtree.store.disk.cache; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManager; import java.util.Map; @@ -29,7 +29,7 @@ public class PlainCacheManager extends CacheManager { // The nodes in nodeCache are all evictable if not pinned and may be selected to be evicted during // cache // eviction. - private volatile Map nodeCache = new ConcurrentHashMap<>(); + private volatile Map nodeCache = new ConcurrentHashMap<>(); public PlainCacheManager(MemManager memManager) { super(memManager); @@ -41,7 +41,7 @@ protected void updateCacheStatusAfterAccess(CacheEntry cacheEntry) {} // MNode update operation like node replace may reset the mapping between cacheEntry and node, // thus it should be updated @Override - protected void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, ICacheMNode node) { + protected void updateCacheStatusAfterUpdate(CacheEntry cacheEntry, ICachedMNode node) { nodeCache.replace(cacheEntry, node); } @@ -51,7 +51,7 @@ protected boolean isInNodeCache(CacheEntry cacheEntry) { } @Override - protected void addToNodeCache(CacheEntry cacheEntry, ICacheMNode node) { + protected void addToNodeCache(CacheEntry cacheEntry, ICachedMNode node) { nodeCache.put(cacheEntry, node); } @@ -61,7 +61,7 @@ protected void removeFromNodeCache(CacheEntry cacheEntry) { } @Override - protected ICacheMNode getPotentialNodeTobeEvicted() { + protected ICachedMNode getPotentialNodeTobeEvicted() { for (CacheEntry cacheEntry : nodeCache.keySet()) { if (!cacheEntry.isPinned()) { return nodeCache.get(cacheEntry); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java index 6a88ae1247fb9..8dbef37ff0bc6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/memcontrol/MemManager.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.rescon.CachedSchemaRegionStatistics; import java.util.List; @@ -33,14 +33,14 @@ public MemManager(CachedSchemaRegionStatistics regionStatistics) { this.regionStatistics = regionStatistics; } - public void requestPinnedMemResource(ICacheMNode node) { + public void requestPinnedMemResource(ICachedMNode node) { int size = node.estimateSize(); regionStatistics.requestMemory(size); regionStatistics.updatePinnedMemorySize(size); regionStatistics.updatePinnedMNodeNum(1); } - public void upgradeMemResource(ICacheMNode node) { + public void upgradeMemResource(ICachedMNode node) { int size = node.estimateSize(); regionStatistics.updatePinnedMemorySize(size); regionStatistics.updatePinnedMNodeNum(1); @@ -48,7 +48,7 @@ public void upgradeMemResource(ICacheMNode node) { regionStatistics.updateUnpinnedMNodeNum(-1); } - public void releasePinnedMemResource(ICacheMNode node) { + public void releasePinnedMemResource(ICachedMNode node) { int size = node.estimateSize(); regionStatistics.updateUnpinnedMemorySize(size); regionStatistics.updateUnpinnedMNodeNum(1); @@ -56,16 +56,16 @@ public void releasePinnedMemResource(ICacheMNode node) { regionStatistics.updatePinnedMNodeNum(-1); } - public void releaseMemResource(ICacheMNode node) { + public void releaseMemResource(ICachedMNode node) { int size = node.estimateSize(); regionStatistics.updateUnpinnedMemorySize(-size); regionStatistics.updateUnpinnedMNodeNum(-1); regionStatistics.releaseMemory(size); } - public void releaseMemResource(List evictedNodes) { + public void releaseMemResource(List evictedNodes) { int size = 0; - for (ICacheMNode node : evictedNodes) { + for (ICachedMNode node : evictedNodes) { size += node.estimateSize(); } regionStatistics.updateUnpinnedMNodeNum(-evictedNodes.size()); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java index 1d10f303acad1..4ba759f4f6734 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISchemaFile.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import java.io.File; import java.io.IOException; @@ -33,7 +33,7 @@ public interface ISchemaFile { * * @return node instance, template name as hash code */ - ICacheMNode init() throws MetadataException; + ICachedMNode init() throws MetadataException; /** * Modify header of schema file corresponding to the database node synchronously @@ -41,16 +41,16 @@ public interface ISchemaFile { * @param sgNode node to be updated * @return true if success */ - boolean updateDatabaseNode(IDatabaseMNode sgNode) throws IOException; + boolean updateDatabaseNode(IDatabaseMNode sgNode) throws IOException; /** * Only database node along with its descendents could be flushed into schema file. * * @param node */ - void writeMNode(ICacheMNode node) throws MetadataException, IOException; + void writeMNode(ICachedMNode node) throws MetadataException, IOException; - void delete(ICacheMNode node) throws IOException, MetadataException; + void delete(ICachedMNode node) throws IOException, MetadataException; void close() throws IOException; @@ -58,10 +58,10 @@ public interface ISchemaFile { void sync() throws IOException; - ICacheMNode getChildNode(ICacheMNode parent, String childName) + ICachedMNode getChildNode(ICachedMNode parent, String childName) throws MetadataException, IOException; - Iterator getChildren(ICacheMNode parent) throws MetadataException, IOException; + Iterator getChildren(ICachedMNode parent) throws MetadataException, IOException; boolean createSnapshot(File snapshotDir); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java index 73a758c95be1c..7f511653ea243 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/ISegmentedPage.java @@ -21,7 +21,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.exception.metadata.schemafile.SchemaPageOverflowException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentNotFoundException; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import java.io.IOException; import java.nio.ByteBuffer; @@ -39,9 +39,9 @@ public interface ISegmentedPage extends ISchemaPage { */ long write(short segIdx, String key, ByteBuffer buffer) throws MetadataException; - ICacheMNode read(short segIdx, String key) throws MetadataException; + ICachedMNode read(short segIdx, String key) throws MetadataException; - ICacheMNode readByAlias(short segIdx, String alias) throws MetadataException; + ICachedMNode readByAlias(short segIdx, String alias) throws MetadataException; /** * The record is definitely inside specified segment. {@link WrappedSegment} will compare existed @@ -52,7 +52,7 @@ public interface ISegmentedPage extends ISchemaPage { */ void update(short segIdx, String key, ByteBuffer buffer) throws MetadataException; - Queue getChildren(short segId) throws MetadataException; + Queue getChildren(short segId) throws MetadataException; void removeRecord(short segId, String key) throws SegmentNotFoundException; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java index 7e71ee6f4c2b5..6674745fd4af1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/MockSchemaFile.java @@ -23,7 +23,7 @@ import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; @@ -41,18 +41,18 @@ public class MockSchemaFile implements ISchemaFile { private PartialPath storageGroupPath; - private IDatabaseMNode storageGroupMNode; - private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private IDatabaseMNode storageGroupMNode; + private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); private long fileTail = 0; - private final Map> mockFile = new HashMap<>(); + private final Map> mockFile = new HashMap<>(); public MockSchemaFile(PartialPath storageGroupPath) { this.storageGroupPath = storageGroupPath; } @Override - public ICacheMNode init() { + public ICachedMNode init() { storageGroupMNode = nodeFactory.createDatabaseMNode( null, @@ -63,19 +63,19 @@ public ICacheMNode init() { } @Override - public boolean updateDatabaseNode(IDatabaseMNode sgNode) throws IOException { + public boolean updateDatabaseNode(IDatabaseMNode sgNode) throws IOException { this.storageGroupMNode = cloneMNode(sgNode.getAsMNode()).getAsDatabaseMNode(); return true; } @Override - public ICacheMNode getChildNode(ICacheMNode parent, String childName) { - Map segment = getSegment(parent); - ICacheMNode result = null; + public ICachedMNode getChildNode(ICachedMNode parent, String childName) { + Map segment = getSegment(parent); + ICachedMNode result = null; if (segment != null) { result = cloneMNode(segment.get(childName)); if (result == null && parent.isDevice()) { - for (ICacheMNode node : segment.values()) { + for (ICachedMNode node : segment.values()) { if (node.isMeasurement() && childName.equals(node.getAsMeasurementMNode().getAlias())) { result = cloneMNode(node); break; @@ -87,9 +87,9 @@ public ICacheMNode getChildNode(ICacheMNode parent, String childName) { } @Override - public Iterator getChildren(ICacheMNode parent) { + public Iterator getChildren(ICachedMNode parent) { - Map segment = getSegment(parent); + Map segment = getSegment(parent); if (segment == null) { return Collections.emptyIterator(); } @@ -102,7 +102,7 @@ public boolean createSnapshot(File snapshotDir) { } @Override - public void writeMNode(ICacheMNode parent) { + public void writeMNode(ICachedMNode parent) { ICachedMNodeContainer container = getCachedMNodeContainer(parent); long address = container.getSegmentAddress(); if (container.isVolatile()) { @@ -113,8 +113,8 @@ public void writeMNode(ICacheMNode parent) { write(address, container.getNewChildBuffer()); } - private void write(long address, Map nodeMap) { - for (ICacheMNode node : nodeMap.values()) { + private void write(long address, Map nodeMap) { + for (ICachedMNode node : nodeMap.values()) { if (!node.isMeasurement()) { ICachedMNodeContainer container = getCachedMNodeContainer(node); if (container.isVolatile()) { @@ -126,19 +126,19 @@ private void write(long address, Map nodeMap) { } @Override - public void delete(ICacheMNode targetNode) { - ICacheMNode removedNode = getSegment(targetNode.getParent()).remove(targetNode.getName()); + public void delete(ICachedMNode targetNode) { + ICachedMNode removedNode = getSegment(targetNode.getParent()).remove(targetNode.getName()); if (removedNode == null || removedNode.isMeasurement()) { return; } deleteMNodeRecursively(removedNode); } - private void deleteMNodeRecursively(ICacheMNode node) { + private void deleteMNodeRecursively(ICachedMNode node) { ICachedMNodeContainer container = getCachedMNodeContainer(node); - Map removedSegment = mockFile.remove(container.getSegmentAddress()); + Map removedSegment = mockFile.remove(container.getSegmentAddress()); if (removedSegment != null) { - for (ICacheMNode child : removedSegment.values()) { + for (ICachedMNode child : removedSegment.values()) { deleteMNodeRecursively(child); } } @@ -155,11 +155,11 @@ public void clear() { mockFile.clear(); } - private long getSegmentAddress(ICacheMNode node) { + private long getSegmentAddress(ICachedMNode node) { return getCachedMNodeContainer(node).getSegmentAddress(); } - private Map getSegment(ICacheMNode node) { + private Map getSegment(ICachedMNode node) { return mockFile.get(getSegmentAddress(node)); } @@ -169,13 +169,13 @@ private long allocateSegment() { return address; } - static ICacheMNode cloneMNode(ICacheMNode node) { + static ICachedMNode cloneMNode(ICachedMNode node) { if (node == null) { return null; } if (node.isMeasurement()) { - IMeasurementMNode measurementMNode = node.getAsMeasurementMNode(); - ICacheMNode result = + IMeasurementMNode measurementMNode = node.getAsMeasurementMNode(); + ICachedMNode result = nodeFactory .createMeasurementMNode( null, @@ -186,42 +186,42 @@ static ICacheMNode cloneMNode(ICacheMNode node) { result.getAsMeasurementMNode().setOffset(measurementMNode.getOffset()); return result; } else if (node.isDatabase() && node.isDevice()) { - ICacheMNode result = + ICachedMNode result = nodeFactory.createDatabaseDeviceMNode( null, node.getName(), node.getAsDatabaseMNode().getDataTTL()); result.getAsDeviceMNode().setAligned(node.getAsDeviceMNode().isAligned()); cloneInternalMNodeData(node, result); return result; } else if (node.isDevice()) { - ICacheMNode result = nodeFactory.createDeviceMNode(null, node.getName()).getAsMNode(); + ICachedMNode result = nodeFactory.createDeviceMNode(null, node.getName()).getAsMNode(); result.getAsDeviceMNode().setAligned(node.getAsDeviceMNode().isAligned()); cloneInternalMNodeData(node, result); return result; } else if (node.isDatabase()) { - ICacheMNode result = + ICachedMNode result = nodeFactory .createDatabaseMNode(null, node.getName(), node.getAsDatabaseMNode().getDataTTL()) .getAsMNode(); cloneInternalMNodeData(node, result); return result; } else { - ICacheMNode result = nodeFactory.createInternalMNode(null, node.getName()); + ICachedMNode result = nodeFactory.createInternalMNode(null, node.getName()); cloneInternalMNodeData(node, result); return result; } } - private static void cloneInternalMNodeData(ICacheMNode node, ICacheMNode result) { + private static void cloneInternalMNodeData(ICachedMNode node, ICachedMNode result) { ICachedMNodeContainer container = new CachedMNodeContainer(); container.setSegmentAddress((getCachedMNodeContainer(node)).getSegmentAddress()); result.setChildren(container); } - private class MockSchemaFileIterator implements Iterator { + private class MockSchemaFileIterator implements Iterator { - Iterator iterator; + Iterator iterator; - MockSchemaFileIterator(Iterator iterator) { + MockSchemaFileIterator(Iterator iterator) { this.iterator = iterator; } @@ -231,7 +231,7 @@ public boolean hasNext() { } @Override - public ICacheMNode next() { + public ICachedMNode next() { return cloneMNode(iterator.next()); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java index a4e2fd02c9bc5..e648c673acfbd 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/RecordUtils.java @@ -23,7 +23,7 @@ import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; @@ -63,9 +63,9 @@ public class RecordUtils { private static final byte ENTITY_TYPE = 1; private static final byte MEASUREMENT_TYPE = 4; - private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); - public static ByteBuffer node2Buffer(ICacheMNode node) { + public static ByteBuffer node2Buffer(ICachedMNode node) { if (node.isMeasurement()) { return measurement2Buffer(node.getAsMeasurementMNode()); } else { @@ -95,7 +95,7 @@ public static ByteBuffer node2Buffer(ICacheMNode node) { * @param node * @return */ - private static ByteBuffer internal2Buffer(ICacheMNode node) { + private static ByteBuffer internal2Buffer(ICachedMNode node) { byte nodeType = INTERNAL_TYPE; boolean isAligned = false; int schemaTemplateIdWithState = MetadataConstant.NON_TEMPLATE; @@ -140,7 +140,7 @@ private static ByteBuffer internal2Buffer(ICacheMNode node) { * *

      It doesn't use MeasurementSchema.serializeTo for duplication of measurementId */ - private static ByteBuffer measurement2Buffer(IMeasurementMNode node) { + private static ByteBuffer measurement2Buffer(IMeasurementMNode node) { int bufferLength = node.getAlias() == null ? 4 + MEASUREMENT_BASIC_LENGTH @@ -178,9 +178,9 @@ private static ByteBuffer measurement2Buffer(IMeasurementMNode node * @param buffer content of the node * @return node constructed from buffer */ - public static ICacheMNode buffer2Node(String nodeName, ByteBuffer buffer) + public static ICachedMNode buffer2Node(String nodeName, ByteBuffer buffer) throws MetadataException { - ICacheMNode resNode; + ICachedMNode resNode; byte nodeType = ReadWriteIOUtils.readByte(buffer); if (nodeType < 2) { @@ -290,7 +290,7 @@ public static void updateSegAddr(ByteBuffer recBuf, long newSegAddr) { @TestOnly public static String buffer2String(ByteBuffer buffer) throws MetadataException { StringBuilder builder = new StringBuilder("["); - ICacheMNode node = buffer2Node("unspecified", buffer); + ICachedMNode node = buffer2Node("unspecified", buffer); if (node.isMeasurement()) { builder.append("measurementNode, "); builder.append( @@ -334,12 +334,12 @@ public static String buffer2String(ByteBuffer buffer) throws MetadataException { // region padding with ICacheMNode /** These 2 convert methods are coupling with tag, template module respectively. */ - private static long convertTags2Long(IMeasurementMNode node) { + private static long convertTags2Long(IMeasurementMNode node) { return node.getOffset(); } /** Including schema and pre-delete flag of a measurement, could be expanded further. */ - private static long convertMeasStat2Long(IMeasurementMNode node) { + private static long convertMeasStat2Long(IMeasurementMNode node) { byte dataType = node.getSchema().getTypeInByte(); byte encoding = node.getSchema().getEncodingType().serialize(); byte compressor = node.getSchema().getCompressor().serialize(); @@ -348,7 +348,7 @@ private static long convertMeasStat2Long(IMeasurementMNode node) { return (preDelete << 24 | dataType << 16 | encoding << 8 | compressor); } - private static ICacheMNode paddingMeasurement( + private static ICachedMNode paddingMeasurement( String nodeName, long tagIndex, long statsBytes, String alias, Map props) { byte preDel = (byte) (statsBytes >>> 24); byte dataType = (byte) (statsBytes >>> 16); @@ -363,7 +363,7 @@ private static ICacheMNode paddingMeasurement( CompressionType.deserialize(compressor), props); - ICacheMNode res = + ICachedMNode res = nodeFactory.createMeasurementMNode(null, nodeName, schema, alias).getAsMNode(); res.getAsMeasurementMNode().setOffset(tagIndex); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java index 27d6d4b570817..f4a25a0625c65 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SchemaFile.java @@ -27,7 +27,7 @@ import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.schemafile.SchemaFileNotExists; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr.BTreePageManager; @@ -77,7 +77,7 @@ public class SchemaFile implements ISchemaFile { private File pmtFile; private FileChannel channel; - private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); // todo refactor constructor for schema file in Jan. private SchemaFile( @@ -168,8 +168,8 @@ private static String getDirPath(String sgName, int schemaRegionId) { // region Interface Implementation @Override - public ICacheMNode init() throws MetadataException { - ICacheMNode resNode; + public ICachedMNode init() throws MetadataException { + ICachedMNode resNode; String[] sgPathNodes = storageGroupName == null ? new String[] {"noName"} @@ -195,7 +195,7 @@ public ICacheMNode init() throws MetadataException { } @Override - public boolean updateDatabaseNode(IDatabaseMNode sgNode) throws IOException { + public boolean updateDatabaseNode(IDatabaseMNode sgNode) throws IOException { this.dataTTL = sgNode.getDataTTL(); this.isEntity = sgNode.isDevice(); if (sgNode.isDevice()) { @@ -206,7 +206,7 @@ public boolean updateDatabaseNode(IDatabaseMNode sgNode) throws IOE } @Override - public void delete(ICacheMNode node) throws IOException, MetadataException { + public void delete(ICachedMNode node) throws IOException, MetadataException { if (node.isDatabase()) { // should clear this file clear(); @@ -216,7 +216,7 @@ public void delete(ICacheMNode node) throws IOException, MetadataException { } @Override - public void writeMNode(ICacheMNode node) throws MetadataException, IOException { + public void writeMNode(ICachedMNode node) throws MetadataException, IOException { long curSegAddr = getNodeAddress(node); if (node.isDatabase()) { @@ -239,13 +239,13 @@ public void writeMNode(ICacheMNode node) throws MetadataException, IOException { } @Override - public ICacheMNode getChildNode(ICacheMNode parent, String childName) + public ICachedMNode getChildNode(ICachedMNode parent, String childName) throws MetadataException, IOException { return pageManager.getChildNode(parent, childName); } @Override - public Iterator getChildren(ICacheMNode parent) + public Iterator getChildren(ICachedMNode parent) throws MetadataException, IOException { if (parent.isMeasurement() || getNodeAddress(parent) < 0) { throw new MetadataException( @@ -417,11 +417,11 @@ public static long getPageAddress(int pageIndex) { + SchemaFileConfig.FILE_HEADER_SIZE; } - public static long getNodeAddress(ICacheMNode node) { + public static long getNodeAddress(ICachedMNode node) { return ICachedMNodeContainer.getCachedMNodeContainer(node).getSegmentAddress(); } - public static ICacheMNode setNodeAddress(ICacheMNode node, long addr) { + public static ICachedMNode setNodeAddress(ICachedMNode node, long addr) { ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(addr); return node; } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java index fbd12022ac830..0c3628ad3a445 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/SegmentedPage.java @@ -24,7 +24,7 @@ import org.apache.iotdb.db.exception.metadata.schemafile.SchemaPageOverflowException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentNotFoundException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentOverflowException; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import java.nio.ByteBuffer; @@ -42,7 +42,7 @@ public class SegmentedPage extends SchemaPage implements ISegmentedPage { // maintains leaf segment instance inside this page, lazily instantiated // map segmentIndex -> segmentInstance - private final transient Map> segCacheMap; + private final transient Map> segCacheMap; /** * This class is aimed to manage space inside one page. @@ -81,7 +81,7 @@ public SegmentedPage(ByteBuffer pageBuffer) { @Override public long write(short segIdx, String key, ByteBuffer buffer) throws MetadataException { - ISegment tarSeg = getSegment(segIdx); + ISegment tarSeg = getSegment(segIdx); if (tarSeg.insertRecord(key, buffer) < 0) { // relocate inside page, if not enough space for new size segment, throw exception @@ -100,18 +100,18 @@ public long write(short segIdx, String key, ByteBuffer buffer) throws MetadataEx } @Override - public ICacheMNode read(short segIdx, String key) throws MetadataException { + public ICachedMNode read(short segIdx, String key) throws MetadataException { return getSegment(segIdx).getRecordByKey(key); } @Override - public ICacheMNode readByAlias(short segIdx, String alias) throws MetadataException { + public ICachedMNode readByAlias(short segIdx, String alias) throws MetadataException { return getSegment(segIdx).getRecordByAlias(alias); } @Override public void update(short segIdx, String key, ByteBuffer buffer) throws MetadataException { - ISegment seg = getSegment(segIdx); + ISegment seg = getSegment(segIdx); try { if (seg.updateRecord(key, buffer) < 0) { throw new MetadataException("Record to update not found."); @@ -131,7 +131,7 @@ public void update(short segIdx, String key, ByteBuffer buffer) throws MetadataE } @Override - public Queue getChildren(short segId) throws MetadataException { + public Queue getChildren(short segId) throws MetadataException { return getSegment(segId).getAllRecords(); } @@ -189,7 +189,7 @@ public void getPageBuffer(ByteBuffer dst) { @Override public synchronized short allocNewSegment(short size) throws MetadataException { - ISegment newSeg = + ISegment newSeg = WrappedSegment.initAsSegment(allocSpareBufferSlice(size)); if (newSeg == null) { @@ -224,7 +224,7 @@ public long transplantSegment(ISegmentedPage srcPage, short segId, short newSegS this.pageBuffer.position(spareOffset); this.pageBuffer.limit(spareOffset + newSegSize); - ISegment newSeg = + ISegment newSeg = WrappedSegment.loadAsSegment(this.pageBuffer.slice()); // registerNewSegment will modify page status considering the new segment @@ -291,7 +291,7 @@ public String inspect() throws SegmentNotFoundException { @Override public synchronized void syncPageBuffer() { super.syncPageBuffer(); - for (Map.Entry> entry : segCacheMap.entrySet()) { + for (Map.Entry> entry : segCacheMap.entrySet()) { entry.getValue().syncBuffer(); } @@ -332,7 +332,7 @@ public ByteBuffer getEntireSegmentSlice() throws MetadataException { * @param index index rather than offset of the segment * @return null if InternalSegment, otherwise instance */ - private ISegment getSegment(short index) + private ISegment getSegment(short index) throws SegmentNotFoundException { if (segOffsetLst.size() <= index || segOffsetLst.get(index) < 0) { throw new SegmentNotFoundException(pageIndex, index); @@ -350,7 +350,7 @@ private ISegment getSegment(short index) bufferR.position(getSegmentOffset(index)); bufferR.limit(bufferR.position() + WrappedSegment.getSegBufLen(bufferR)); - ISegment res; + ISegment res; try { res = WrappedSegment.loadAsSegment(bufferR.slice()); } catch (RecordDuplicatedException e) { @@ -389,7 +389,7 @@ private short getSegmentOffset(short index) throws SegmentNotFoundException { * @return reallocated segment instance * @throws SchemaPageOverflowException if this page has no enough space */ - private ISegment relocateSegment( + private ISegment relocateSegment( ISegment seg, short segIdx, short newSize) throws MetadataException { if (seg.size() == SchemaFileConfig.SEG_MAX_SIZ || getSpareSize() + seg.size() < newSize) { throw new SchemaPageOverflowException(pageIndex); @@ -404,7 +404,7 @@ private ISegment relocateSegment( // allocate buffer slice successfully seg.extendsTo(newBuffer); - ISegment newSeg = WrappedSegment.loadAsSegment(newBuffer); + ISegment newSeg = WrappedSegment.loadAsSegment(newBuffer); // since this buffer is allocated from pageSpareOffset, new spare offset can simply add size up segOffsetLst.set(segIdx, spareOffset); @@ -516,7 +516,7 @@ private synchronized void rearrangeSegments(short idx) { * @param newSize extended size * @return extended segment based on page buffer */ - private ISegment extendSegmentInPlace( + private ISegment extendSegmentInPlace( short segId, short oriSegSize, short newSize) throws MetadataException { // extend segment, modify pageSpareOffset, segCacheMap short offset = getSegmentOffset(segId); @@ -539,7 +539,7 @@ private ISegment extendSegmentInPlace( // pass page buffer slice to instantiate segment pageBuffer.position(offset); pageBuffer.limit(offset + newSize); - ISegment newSeg = WrappedSegment.loadAsSegment(pageBuffer.slice()); + ISegment newSeg = WrappedSegment.loadAsSegment(pageBuffer.slice()); // modify status segOffsetLst.set(segId, offset); @@ -552,7 +552,7 @@ private ISegment extendSegmentInPlace( public void updateRecordSegAddr(short segId, String key, long newSegAddr) throws SegmentNotFoundException { - ISegment seg = getSegment(segId); + ISegment seg = getSegment(segId); // TODO: add to interface ((WrappedSegment) seg).updateRecordSegAddr(key, newSegAddr); } @@ -564,7 +564,7 @@ public void updateRecordSegAddr(short segId, String key, long newSegAddr) * @param seg the segment to register * @return index of the segment */ - private synchronized short registerNewSegment(ISegment seg) + private synchronized short registerNewSegment(ISegment seg) throws MetadataException { short thisIndex = (short) segOffsetLst.size(); if (segCacheMap.containsKey(thisIndex)) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java index 8aa3246f72da1..ed888902b7f67 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/WrappedSegment.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.schemafile.RecordDuplicatedException; import org.apache.iotdb.db.exception.metadata.schemafile.SegmentOverflowException; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; @@ -42,7 +42,7 @@ * Act like a wrapper of a bytebuffer which reflects a segment.
      * And itself is wrapped inside a SchemaPage. */ -public class WrappedSegment extends Segment { +public class WrappedSegment extends Segment { // reconstruct every initiation after keyAddressList but not write into buffer private List> aliasKeyList; @@ -86,7 +86,7 @@ public WrappedSegment(int size) throws RecordDuplicatedException { this(ByteBuffer.allocate(size)); } - public static ISegment initAsSegment(ByteBuffer buffer) + public static ISegment initAsSegment(ByteBuffer buffer) throws RecordDuplicatedException { if (buffer == null) { return null; @@ -94,7 +94,7 @@ public static ISegment initAsSegment(ByteBuffer buffer) return new WrappedSegment(buffer, true); } - public static ISegment loadAsSegment(ByteBuffer buffer) + public static ISegment loadAsSegment(ByteBuffer buffer) throws RecordDuplicatedException { if (buffer == null) { return null; @@ -168,7 +168,7 @@ public synchronized String splitByKey( } @Override - public ICacheMNode getRecordByKey(String key) throws MetadataException { + public ICachedMNode getRecordByKey(String key) throws MetadataException { // index means order for target node in keyAddressList, NOT aliasKeyList int index = getRecordIndexByKey(key); @@ -187,7 +187,7 @@ public ICacheMNode getRecordByKey(String key) throws MetadataException { } @Override - public ICacheMNode getRecordByAlias(String alias) throws MetadataException { + public ICachedMNode getRecordByAlias(String alias) throws MetadataException { int ix = getRecordIndexByAlias(alias); if (ix < 0) { @@ -206,8 +206,8 @@ public boolean hasRecordAlias(String alias) { } @Override - public Queue getAllRecords() throws MetadataException { - Queue res = new ArrayDeque<>(keyAddressList.size()); + public Queue getAllRecords() throws MetadataException { + Queue res = new ArrayDeque<>(keyAddressList.size()); ByteBuffer roBuffer = this.buffer.asReadOnlyBuffer(); roBuffer.clear(); for (Pair p : keyAddressList) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java index b93cef794f0de..6861f0678a6c2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/BTreePageManager.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.db.exception.metadata.schemafile.ColossalRecordException; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegmentedPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFileConfig; @@ -95,7 +95,7 @@ protected void multiPageUpdateOverflowOperation( * @throws IOException */ @Override - protected void buildSubIndex(ICacheMNode parNode) throws MetadataException, IOException { + protected void buildSubIndex(ICachedMNode parNode) throws MetadataException, IOException { ISchemaPage cursorPage = getPageInstance(getPageIndex(getNodeAddress(parNode))); if (cursorPage.getAsInternalPage() == null) { @@ -114,8 +114,8 @@ protected void buildSubIndex(ICacheMNode parNode) throws MetadataException, IOEx } long nextAddr = cursorPage.getAsSegmentedPage().getNextSegAddress((short) 0); - Queue children = cursorPage.getAsSegmentedPage().getChildren((short) 0); - ICacheMNode child; + Queue children = cursorPage.getAsSegmentedPage().getChildren((short) 0); + ICachedMNode child; // TODO: inefficient to build B+Tree up-to-bottom, improve further while (!children.isEmpty() || nextAddr != -1L) { if (children.isEmpty()) { @@ -293,7 +293,7 @@ private void insertIndexEntryRecursiveUpwards(int treeTraceIndex, String key, in } @Override - public void delete(ICacheMNode node) throws IOException, MetadataException { + public void delete(ICachedMNode node) throws IOException, MetadataException { // remove corresponding record long recSegAddr = getNodeAddress(node.getParent()); recSegAddr = getTargetSegmentAddress(recSegAddr, node.getName()); @@ -351,7 +351,7 @@ public void delete(ICacheMNode node) throws IOException, MetadataException { } @Override - public ICacheMNode getChildNode(ICacheMNode parent, String childName) + public ICachedMNode getChildNode(ICachedMNode parent, String childName) throws MetadataException, IOException { if (getNodeAddress(parent) < 0) { throw new MetadataException( @@ -360,7 +360,7 @@ public ICacheMNode getChildNode(ICacheMNode parent, String childName) } long actualSegAddr = getTargetSegmentAddress(getNodeAddress(parent), childName); - ICacheMNode child = + ICachedMNode child = getPageInstance(getPageIndex(actualSegAddr)) .getAsSegmentedPage() .read(getSegIndex(actualSegAddr), childName); @@ -381,7 +381,7 @@ public ICacheMNode getChildNode(ICacheMNode parent, String childName) return child; } - private ICacheMNode getChildWithAlias(ICacheMNode par, String alias) + private ICachedMNode getChildWithAlias(ICachedMNode par, String alias) throws IOException, MetadataException { long srtAddr = getNodeAddress(par); ISchemaPage page = getPageInstance(getPageIndex(srtAddr)); @@ -400,7 +400,7 @@ private ICacheMNode getChildWithAlias(ICacheMNode par, String alias) } @Override - public Iterator getChildren(ICacheMNode parent) + public Iterator getChildren(ICachedMNode parent) throws MetadataException, IOException { int pageIdx = getPageIndex(getNodeAddress(parent)); short segId = getSegIndex(getNodeAddress(parent)); @@ -411,10 +411,10 @@ public Iterator getChildren(ICacheMNode parent) } long actualSegAddr = page.getAsSegmentedPage().getNextSegAddress(segId); - Queue initChildren = page.getAsSegmentedPage().getChildren(segId); - return new Iterator() { + Queue initChildren = page.getAsSegmentedPage().getChildren(segId); + return new Iterator() { long nextSeg = actualSegAddr; - Queue children = initChildren; + Queue children = initChildren; @Override public boolean hasNext() { @@ -441,7 +441,7 @@ public boolean hasNext() { } @Override - public ICacheMNode next() { + public ICachedMNode next() { return children.poll(); } }; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java index 294df9e9dd628..3c6695efb1307 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/IPageManager.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.pagemgr; import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaPage; @@ -38,16 +38,16 @@ */ public interface IPageManager { - void writeNewChildren(ICacheMNode parNode) throws MetadataException, IOException; + void writeNewChildren(ICachedMNode parNode) throws MetadataException, IOException; - void writeUpdatedChildren(ICacheMNode parNode) throws MetadataException, IOException; + void writeUpdatedChildren(ICachedMNode parNode) throws MetadataException, IOException; - void delete(ICacheMNode node) throws IOException, MetadataException; + void delete(ICachedMNode node) throws IOException, MetadataException; - ICacheMNode getChildNode(ICacheMNode parent, String childName) + ICachedMNode getChildNode(ICachedMNode parent, String childName) throws MetadataException, IOException; - Iterator getChildren(ICacheMNode parent) throws MetadataException, IOException; + Iterator getChildren(ICachedMNode parent) throws MetadataException, IOException; void clear() throws IOException, MetadataException; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java index cef4bad6176e9..d85e0e94ab939 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/disk/schemafile/pagemgr/PageManager.java @@ -21,7 +21,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.schemafile.SchemaPageOverflowException; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegmentedPage; @@ -150,16 +150,16 @@ private long recoverFromLog(String logPath) throws IOException, MetadataExceptio // region Framework Methods @Override - public void writeNewChildren(ICacheMNode node) throws MetadataException, IOException { + public void writeNewChildren(ICachedMNode node) throws MetadataException, IOException { int subIndex; long curSegAddr = getNodeAddress(node); long actualAddress; // actual segment to write record - ICacheMNode child; + ICachedMNode child; ISchemaPage curPage; ByteBuffer childBuffer; String alias; // TODO: reserve order of insert in container may be better - for (Map.Entry entry : + for (Map.Entry entry : ICachedMNodeContainer.getCachedMNodeContainer(node).getNewChildBuffer().entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toList())) { @@ -238,16 +238,16 @@ public void writeNewChildren(ICacheMNode node) throws MetadataException, IOExcep } @Override - public void writeUpdatedChildren(ICacheMNode node) throws MetadataException, IOException { + public void writeUpdatedChildren(ICachedMNode node) throws MetadataException, IOException { boolean removeOldSubEntry = false, insertNewSubEntry = false; int subIndex; long curSegAddr = getNodeAddress(node); long actualAddress; // actual segment to write record String alias, oldAlias; // key of the sub-index entry now - ICacheMNode child, oldChild; + ICachedMNode child, oldChild; ISchemaPage curPage; ByteBuffer childBuffer; - for (Map.Entry entry : + for (Map.Entry entry : ICachedMNodeContainer.getCachedMNodeContainer(node).getUpdatedChildBuffer().entrySet()) { child = entry.getValue(); actualAddress = getTargetSegmentAddress(curSegAddr, entry.getKey()); @@ -376,7 +376,7 @@ protected abstract void multiPageUpdateOverflowOperation( * * @param parNode node needs to build subordinate index. */ - protected abstract void buildSubIndex(ICacheMNode parNode) throws MetadataException, IOException; + protected abstract void buildSubIndex(ICachedMNode parNode) throws MetadataException, IOException; /** * Insert an entry of subordinate index of the target node. @@ -571,7 +571,7 @@ private synchronized int loadFromFile(ByteBuffer dst, int pageIndex) throws IOEx return readChannel.read(dst, getPageAddress(pageIndex)); } - private void updateParentalRecord(ICacheMNode parent, String key, long newSegAddr) + private void updateParentalRecord(ICachedMNode parent, String key, long newSegAddr) throws IOException, MetadataException { if (parent == null || parent.getChild(key).isDatabase()) { throw new MetadataException("Root page shall not be migrated."); @@ -601,12 +601,12 @@ private static long getPageAddress(int pageIndex) { * @param node * @return */ - private static short estimateSegmentSize(ICacheMNode node) { + private static short estimateSegmentSize(ICachedMNode node) { int childNum = node.getChildren().size(); if (childNum < SEG_SIZE_METRIC[0]) { // for record offset, length of string key int totalSize = SEG_HEADER_SIZE + 6 * childNum; - for (ICacheMNode child : node.getChildren().values()) { + for (ICachedMNode child : node.getChildren().values()) { totalSize += child.getName().getBytes().length; if (child.isMeasurement()) { totalSize += @@ -640,7 +640,7 @@ private static short estimateSegmentSize(ICacheMNode node) { * here. Supposed to merge with SchemaFile#reEstimateSegSize. * * @param expSize expected size calculated from next new record - * @param batchSize size of children within one {@linkplain #writeNewChildren(ICacheMNode)} + * @param batchSize size of children within one {@linkplain #writeNewChildren(ICachedMNode)} * @return estimated size * @throws MetadataException */ diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java index 13d7c4064f835..38319a833e36e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java @@ -45,7 +45,7 @@ import org.apache.iotdb.db.metadata.logfile.SchemaLogWriter; import org.apache.iotdb.db.metadata.metric.ISchemaRegionMetric; import org.apache.iotdb.db.metadata.metric.SchemaRegionCachedMetric; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGCachedImpl; import org.apache.iotdb.db.metadata.mtree.store.disk.cache.CacheMemoryManager; import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan; @@ -599,7 +599,7 @@ public void createTimeseries(ICreateTimeSeriesPlan plan, long offset) throws Met try { PartialPath path = plan.getPath(); - IMeasurementMNode leafMNode; + IMeasurementMNode leafMNode; // using try-catch to restore seriesNumberMonitor's state while create failed try { SchemaUtils.checkDataTypeWithEncoding(plan.getDataType(), plan.getEncoding()); @@ -726,7 +726,7 @@ public void createAlignedTimeSeries(ICreateAlignedTimeSeriesPlan plan) throws Me List encodings = plan.getEncodings(); List> tagsList = plan.getTagsList(); List> attributesList = plan.getAttributesList(); - List> measurementMNodeList; + List> measurementMNodeList; // using try-catch to restore seriesNumberMonitor's state while create failed try { for (int i = 0; i < measurements.size(); i++) { @@ -802,7 +802,7 @@ public void createAlignedTimeSeries(ICreateAlignedTimeSeriesPlan plan) throws Me } } } finally { - for (IMeasurementMNode measurementMNode : measurementMNodeList) { + for (IMeasurementMNode measurementMNode : measurementMNodeList) { mtree.unPinMNode(measurementMNode.getAsMNode()); } } @@ -887,7 +887,7 @@ public void deleteTimeseriesInBlackList(PathPatternTree patternTree) throws Meta private void deleteSingleTimeseriesInBlackList(PartialPath path) throws MetadataException, IOException { - IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); + IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); removeFromTagInvertedIndex(measurementMNode); regionStatistics.deleteTimeseries(1L); @@ -899,7 +899,7 @@ private void deleteSingleTimeseriesInBlackList(PartialPath path) /** @param path full path from root to leaf node */ private void deleteOneTimeseriesUpdateStatistics(PartialPath path) throws MetadataException, IOException { - IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); + IMeasurementMNode measurementMNode = mtree.deleteTimeseries(path); removeFromTagInvertedIndex(measurementMNode); regionStatistics.deleteTimeseries(1L); @@ -917,15 +917,15 @@ private void deleteOneTimeseriesUpdateStatistics(PartialPath path) * * @param path path */ - private ICacheMNode getDeviceNodeWithAutoCreate(PartialPath path) + private ICachedMNode getDeviceNodeWithAutoCreate(PartialPath path) throws IOException, MetadataException { - ICacheMNode node = mtree.getDeviceNodeWithAutoCreating(path); + ICachedMNode node = mtree.getDeviceNodeWithAutoCreating(path); writeToMLog(SchemaRegionWritePlanFactory.getAutoCreateDeviceMNodePlan(node.getPartialPath())); return node; } private void autoCreateDeviceMNode(IAutoCreateDeviceMNodePlan plan) throws MetadataException { - ICacheMNode node = mtree.getDeviceNodeWithAutoCreating(plan.getPath()); + ICachedMNode node = mtree.getDeviceNodeWithAutoCreating(plan.getPath()); mtree.unPinMNode(node); try { writeToMLog(plan); @@ -959,7 +959,7 @@ public List fetchSchema( * @param offset offset in the tag file */ private void changeOffset(PartialPath path, long offset) throws MetadataException { - IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); + IMeasurementMNode measurementMNode = mtree.getMeasurementMNode(path); try { measurementMNode.setOffset(offset); mtree.updateMNode(measurementMNode.getAsMNode()); @@ -979,9 +979,9 @@ private void changeOffset(PartialPath path, long offset) throws MetadataExceptio } private void changeAlias(PartialPath path, String alias) throws MetadataException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(path); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(path); try { - IDeviceMNode device = leafMNode.getParent().getAsDeviceMNode(); + IDeviceMNode device = leafMNode.getParent().getAsDeviceMNode(); if (leafMNode.getAlias() != null) { device.deleteAliasChild(leafMNode.getAlias()); } @@ -1015,7 +1015,7 @@ public void upsertAliasAndTagsAndAttributes( Map attributesMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { // upsert alias upsertAlias(alias, fullPath, leafMNode); @@ -1045,11 +1045,11 @@ public void upsertAliasAndTagsAndAttributes( } private void upsertAlias( - String alias, PartialPath fullPath, IMeasurementMNode leafMNode) + String alias, PartialPath fullPath, IMeasurementMNode leafMNode) throws MetadataException, IOException { // upsert alias if (alias != null && !alias.equals(leafMNode.getAlias())) { - IDeviceMNode device = leafMNode.getParent().getAsDeviceMNode(); + IDeviceMNode device = leafMNode.getParent().getAsDeviceMNode(); if (!device.addAlias(alias, leafMNode)) { throw new MetadataException("The alias already exists."); } @@ -1074,7 +1074,7 @@ private void upsertAlias( @Override public void addAttributes(Map attributesMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { // no tag or attribute, we need to add a new record in log if (leafMNode.getOffset() < 0) { @@ -1101,7 +1101,7 @@ public void addAttributes(Map attributesMap, PartialPath fullPat @Override public void addTags(Map tagsMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { // no tag or attribute, we need to add a new record in log if (leafMNode.getOffset() < 0) { @@ -1132,7 +1132,7 @@ public void addTags(Map tagsMap, PartialPath fullPath) @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public void dropTagsOrAttributes(Set keySet, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { // no tag or attribute, just do nothing. if (leafMNode.getOffset() != -1) { @@ -1156,7 +1156,7 @@ public void dropTagsOrAttributes(Set keySet, PartialPath fullPath) @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public void setTagsOrAttributesValue(Map alterMap, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { if (leafMNode.getOffset() < 0) { throw new MetadataException( @@ -1183,7 +1183,7 @@ public void setTagsOrAttributesValue(Map alterMap, PartialPath f @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public void renameTagOrAttributeKey(String oldKey, String newKey, PartialPath fullPath) throws MetadataException, IOException { - IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); + IMeasurementMNode leafMNode = mtree.getMeasurementMNode(fullPath); try { if (leafMNode.getOffset() < 0) { throw new MetadataException( @@ -1199,7 +1199,7 @@ public void renameTagOrAttributeKey(String oldKey, String newKey, PartialPath fu /** remove the node from the tag inverted index */ @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning - private void removeFromTagInvertedIndex(IMeasurementMNode node) throws IOException { + private void removeFromTagInvertedIndex(IMeasurementMNode node) throws IOException { tagManager.removeFromTagInvertedIndex(node); } // endregion @@ -1210,7 +1210,7 @@ public void activateSchemaTemplate(IActivateTemplateInClusterPlan plan, Template throws MetadataException { try { - ICacheMNode deviceNode = getDeviceNodeWithAutoCreate(plan.getActivatePath()); + ICachedMNode deviceNode = getDeviceNodeWithAutoCreate(plan.getActivatePath()); try { mtree.activateTemplate(plan.getActivatePath(), template); writeToMLog(plan); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java index de8af8af4ff10..3a224321a0bbb 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/ConfigMTreeTest.java @@ -254,11 +254,12 @@ public void testSerialization() throws Exception { }; for (int i = 0; i < pathList.length; i++) { root.setStorageGroup(pathList[i]); - IDatabaseMNode storageGroupMNode = root.getDatabaseNodeByDatabasePath(pathList[i]); + IDatabaseMNode storageGroupMNode = + root.getDatabaseNodeByDatabasePath(pathList[i]); storageGroupMNode.setDataTTL(i); - storageGroupMNode.setDataReplicationFactor(i); - storageGroupMNode.setSchemaReplicationFactor(i); - storageGroupMNode.setTimePartitionInterval(i); + storageGroupMNode.getAsMNode().getDatabaseSchema().setDataReplicationFactor(i); + storageGroupMNode.getAsMNode().getDatabaseSchema().setSchemaReplicationFactor(i); + storageGroupMNode.getAsMNode().getDatabaseSchema().setTimePartitionInterval(i); root.getNodeWithAutoCreate(pathList[i].concatNode("a")).setSchemaTemplateId(i); } @@ -271,7 +272,7 @@ public void testSerialization() throws Exception { for (int i = 0; i < pathList.length; i++) { TDatabaseSchema storageGroupSchema = - newTree.getDatabaseNodeByDatabasePath(pathList[i]).getStorageGroupSchema(); + newTree.getDatabaseNodeByDatabasePath(pathList[i]).getAsMNode().getDatabaseSchema(); Assert.assertEquals(i, storageGroupSchema.getTTL()); Assert.assertEquals(i, storageGroupSchema.getSchemaReplicationFactor()); Assert.assertEquals(i, storageGroupSchema.getDataReplicationFactor()); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java index 43f41bf39ed31..9312c67d3a877 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/disk/CachedMNodeContainerTest.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.metadata.mtree.disk; import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.CachedMNodeContainer; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; @@ -31,12 +31,12 @@ public class CachedMNodeContainerTest { - private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); @Test public void testIterator() { CachedMNodeContainer container = new CachedMNodeContainer(); - Map childCache = new HashMap<>(); + Map childCache = new HashMap<>(); childCache.put("1", nodeFactory.createInternalMNode(null, "1")); childCache.put("2", nodeFactory.createInternalMNode(null, "2")); childCache.put("5", nodeFactory.createInternalMNode(null, "5")); @@ -46,7 +46,7 @@ public void testIterator() { container.put("6", nodeFactory.createInternalMNode(null, "6")); container.updateMNode("5"); container.updateMNode("6"); - Iterator iterator = container.getChildrenIterator(); + Iterator iterator = container.getChildrenIterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java index ed32890d3099b..31d6bca72096b 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/RecordUtilTests.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; @@ -42,7 +42,7 @@ public class RecordUtilTests { - private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); @Before public void setUp() { @@ -56,14 +56,14 @@ public void tearDown() throws Exception { @Test public void internalNodeTest() throws MetadataException { - ICacheMNode oneNode = nodeFactory.createInternalMNode(null, "abcd"); - ICacheMNode twoNode = nodeFactory.createDeviceMNode(null, "efgh").getAsMNode(); + ICachedMNode oneNode = nodeFactory.createInternalMNode(null, "abcd"); + ICachedMNode twoNode = nodeFactory.createDeviceMNode(null, "efgh").getAsMNode(); ICachedMNodeContainer.getCachedMNodeContainer(oneNode).setSegmentAddress(1234567L); ICachedMNodeContainer.getCachedMNodeContainer(twoNode).setSegmentAddress(66666L); twoNode.getAsDeviceMNode().setUseTemplate(true); ByteBuffer buffer = RecordUtils.node2Buffer(oneNode); buffer.clear(); - ICacheMNode node1 = RecordUtils.buffer2Node("abcd", buffer); + ICachedMNode node1 = RecordUtils.buffer2Node("abcd", buffer); Assert.assertEquals( 1234567L, ICachedMNodeContainer.getCachedMNodeContainer(node1).getSegmentAddress()); buffer = RecordUtils.node2Buffer(twoNode); @@ -83,7 +83,7 @@ public void measurementTest() throws MetadataException { IMeasurementSchema schema = new MeasurementSchema( "amn", TSDataType.FLOAT, TSEncoding.BITMAP, CompressionType.GZIP, props); - ICacheMNode amn = + ICachedMNode amn = nodeFactory.createMeasurementMNode(null, "amn", schema, "anothername").getAsMNode(); ByteBuffer tBuf = RecordUtils.node2Buffer(amn); @@ -99,7 +99,7 @@ public void measurementTest() throws MetadataException { ByteBuffer buffer = RecordUtils.node2Buffer(amn); buffer.clear(); - ICacheMNode node2 = RecordUtils.buffer2Node("amn", buffer); + ICachedMNode node2 = RecordUtils.buffer2Node("amn", buffer); Assert.assertTrue( amn.getAsMeasurementMNode().getSchema().equals(node2.getAsMeasurementMNode().getSchema())); diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java index 1a04c929a3cb2..777fdc9410bcf 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileLogTest.java @@ -22,7 +22,7 @@ import org.apache.iotdb.commons.schema.node.role.IDatabaseMNode; import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; @@ -51,7 +51,7 @@ public class SchemaFileLogTest { private static final int TEST_SCHEMA_REGION_ID = 0; - private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); @Before public void setUp() { @@ -73,16 +73,16 @@ public void tearDown() throws Exception { public void essentialLogTest() throws IOException, MetadataException { SchemaFile sf = (SchemaFile) SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - IDatabaseMNode newSGNode = + IDatabaseMNode newSGNode = nodeFactory.createDatabaseDeviceMNode(null, "newSG", 10000L).getAsDatabaseMNode(); sf.updateDatabaseNode(newSGNode); - ICacheMNode root = virtualTriangleMTree(5, "root.test"); + ICachedMNode root = virtualTriangleMTree(5, "root.test"); - Iterator ite = getTreeBFT(root); - ICacheMNode lastNode = null; + Iterator ite = getTreeBFT(root); + ICachedMNode lastNode = null; while (ite.hasNext()) { - ICacheMNode curNode = ite.next(); + ICachedMNode curNode = ite.next(); if (!curNode.isMeasurement()) { sf.writeMNode(curNode); lastNode = curNode; @@ -97,7 +97,7 @@ public void essentialLogTest() throws IOException, MetadataException { ByteBuffer.allocate(SchemaFileConfig.PAGE_LENGTH), corruptPageIndex); // record number of children now - Iterator res = sf.getChildren(lastNode); + Iterator res = sf.getChildren(lastNode); int cnt = 0; while (res.hasNext()) { cnt++; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java index e8f5cd43e16f4..bcdd9d6ec0b11 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaFileTest.java @@ -25,7 +25,7 @@ import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.commons.utils.PathUtils; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.container.ICachedMNodeContainer; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mnode.utils.MNodeUtils; @@ -62,7 +62,7 @@ public class SchemaFileTest { private static final int TEST_SCHEMA_REGION_ID = 0; - private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); @Before public void setUp() { @@ -83,22 +83,22 @@ public void tearDown() throws Exception { @Test public void essentialTestSchemaFile() throws IOException, MetadataException { ISchemaFile sf = SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - IDatabaseMNode newSGNode = + IDatabaseMNode newSGNode = nodeFactory.createDatabaseDeviceMNode(null, "newSG", 10000L).getAsDatabaseMNode(); sf.updateDatabaseNode(newSGNode); - ICacheMNode root = virtualTriangleMTree(5, "root.test"); - ICacheMNode int0 = root.getChild("int0"); - ICacheMNode int1 = root.getChild("int0").getChild("int1"); - ICacheMNode int4 = + ICachedMNode root = virtualTriangleMTree(5, "root.test"); + ICachedMNode int0 = root.getChild("int0"); + ICachedMNode int1 = root.getChild("int0").getChild("int1"); + ICachedMNode int4 = root.getChild("int0").getChild("int1").getChild("int2").getChild("int3").getChild("int4"); ICachedMNodeContainer.getCachedMNodeContainer(int0) .getNewChildBuffer() .put("mint1", getMeasurementNode(int0, "mint1", "alas")); - Iterator ite = getTreeBFT(root); + Iterator ite = getTreeBFT(root); while (ite.hasNext()) { - ICacheMNode curNode = ite.next(); + ICachedMNode curNode = ite.next(); if (!curNode.isMeasurement()) { sf.writeMNode(curNode); } @@ -158,23 +158,23 @@ public void essentialTestSchemaFile() throws IOException, MetadataException { @Test public void testVerticalTree() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sgvt.vt", TEST_SCHEMA_REGION_ID); - IDatabaseMNode sgNode = + IDatabaseMNode sgNode = nodeFactory.createDatabaseDeviceMNode(null, "sg", 11_111L).getAsDatabaseMNode(); sf.updateDatabaseNode(sgNode); - ICacheMNode root = getVerticalTree(100, "VT"); - Iterator ite = getTreeBFT(root); + ICachedMNode root = getVerticalTree(100, "VT"); + Iterator ite = getTreeBFT(root); while (ite.hasNext()) { sf.writeMNode(ite.next()); } - ICacheMNode vt1 = getNode(root, "root.VT_0.VT_1"); - ICacheMNode vt4 = getNode(root, "root.VT_0.VT_1.VT_2.VT_3.VT_4"); + ICachedMNode vt1 = getNode(root, "root.VT_0.VT_1"); + ICachedMNode vt4 = getNode(root, "root.VT_0.VT_1.VT_2.VT_3.VT_4"); ICachedMNodeContainer.getCachedMNodeContainer(vt1).getNewChildBuffer().clear(); addMeasurementChild(vt1, "newM"); sf.writeMNode(vt1); - ICacheMNode vt0 = getNode(root, "root.VT_0"); + ICachedMNode vt0 = getNode(root, "root.VT_0"); Assert.assertEquals( ICachedMNodeContainer.getCachedMNodeContainer(vt1).getSegmentAddress(), RecordUtils.getRecordSegAddr( @@ -204,8 +204,8 @@ public void testVerticalTree() throws MetadataException, IOException { nsf.close(); nsf = SchemaFile.loadSchemaFile("root.sgvt.vt", TEST_SCHEMA_REGION_ID); - Iterator vt1Children = nsf.getChildren(vt1); - Iterator vt4Children = nsf.getChildren(vt4); + Iterator vt1Children = nsf.getChildren(vt1); + Iterator vt4Children = nsf.getChildren(vt4); while (vt1Children.hasNext()) { newNodes.remove(vt1Children.next().getName()); @@ -237,19 +237,19 @@ public void testVerticalTree() throws MetadataException, IOException { public void testFaltTree() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - Iterator ite = getTreeBFT(getFlatTree(50000, "aa")); + Iterator ite = getTreeBFT(getFlatTree(50000, "aa")); while (ite.hasNext()) { - ICacheMNode cur = ite.next(); + ICachedMNode cur = ite.next(); if (!cur.isMeasurement()) { sf.writeMNode(cur); } } - ICacheMNode node = nodeFactory.createInternalMNode(null, "a"); + ICachedMNode node = nodeFactory.createInternalMNode(null, "a"); ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(0L); List tryReadList = Arrays.asList(199, 1999, 2999, 3999, 4999, 5999); for (Integer rid : tryReadList) { - ICacheMNode target = sf.getChildNode(node, "aa" + rid); + ICachedMNode target = sf.getChildNode(node, "aa" + rid); Assert.assertEquals("aa" + rid + "als", target.getAsMeasurementMNode().getAlias()); } sf.close(); @@ -259,12 +259,12 @@ public void testFaltTree() throws MetadataException, IOException { public void testGetChildren() throws MetadataException, IOException { essentialTestSchemaFile(); - ICacheMNode node = nodeFactory.createInternalMNode(null, "test"); + ICachedMNode node = nodeFactory.createInternalMNode(null, "test"); ICachedMNodeContainer.getCachedMNodeContainer(node) .setSegmentAddress(SchemaFile.getGlobalIndex(2, (short) 0)); ISchemaFile sf = SchemaFile.loadSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - Iterator res = sf.getChildren(node); + Iterator res = sf.getChildren(node); int cnt = 0; while (res.hasNext()) { res.next(); @@ -277,19 +277,19 @@ public void testGetChildren() throws MetadataException, IOException { @Test public void test200KMeasurement() throws MetadataException, IOException { int i = 200000, j = 20; - ICacheMNode sgNode = nodeFactory.createDatabaseMNode(null, "sgRoot", 11111111L).getAsMNode(); + ICachedMNode sgNode = nodeFactory.createDatabaseMNode(null, "sgRoot", 11111111L).getAsMNode(); ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); while (j >= 0) { - ICacheMNode aDevice = nodeFactory.createDeviceMNode(sgNode, "dev_" + j).getAsMNode(); + ICachedMNode aDevice = nodeFactory.createDeviceMNode(sgNode, "dev_" + j).getAsMNode(); sgNode.addChild(aDevice); j--; } sf.writeMNode(sgNode); - ICacheMNode meas; - ICacheMNode dev = sgNode.getChildren().get("dev_2"); + ICachedMNode meas; + ICachedMNode dev = sgNode.getChildren().get("dev_2"); while (i >= 0) { meas = getMeasurementNode(dev, "m_" + i, "ma_" + i); dev.addChild(meas); @@ -310,19 +310,19 @@ public void test200KMeasurement() throws MetadataException, IOException { @Test public void test10KDevices() throws MetadataException, IOException { int i = 1000; - ICacheMNode sgNode = nodeFactory.createDatabaseMNode(null, "sgRoot", 11111111L).getAsMNode(); + ICachedMNode sgNode = nodeFactory.createDatabaseMNode(null, "sgRoot", 11111111L).getAsMNode(); // write with empty entitiy while (i >= 0) { - ICacheMNode aDevice = nodeFactory.createInternalMNode(sgNode, "dev_" + i); + ICachedMNode aDevice = nodeFactory.createInternalMNode(sgNode, "dev_" + i); sgNode.addChild(aDevice); i--; } - Iterator orderedTree = getTreeBFT(sgNode); + Iterator orderedTree = getTreeBFT(sgNode); ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); ICachedMNodeContainer.getCachedMNodeContainer(sgNode).setSegmentAddress(0L); - ICacheMNode node = null; + ICachedMNode node = null; try { while (orderedTree.hasNext()) { node = orderedTree.next(); @@ -335,7 +335,7 @@ public void test10KDevices() throws MetadataException, IOException { i = 1000; while (i >= 0) { long addr = getSegAddrInContainer(sgNode.getChild("dev_" + i)); - ICacheMNode aDevice = nodeFactory.createDeviceMNode(sgNode, "dev_" + i).getAsMNode(); + ICachedMNode aDevice = nodeFactory.createDeviceMNode(sgNode, "dev_" + i).getAsMNode(); sgNode.deleteChild(aDevice.getName()); sgNode.addChild(aDevice); moveToUpdateBuffer(sgNode, "dev_" + i); @@ -358,7 +358,7 @@ public void test10KDevices() throws MetadataException, IOException { } // write with few measurement - for (ICacheMNode etn : sgNode.getChildren().values()) { + for (ICachedMNode etn : sgNode.getChildren().values()) { int j = 10; while (j >= 0) { addMeasurementChild(etn, String.format("mtc_%d_%d", i, j)); @@ -385,7 +385,7 @@ public void test10KDevices() throws MetadataException, IOException { Set resName = new HashSet<>(); // more measurement - for (ICacheMNode etn : sgNode.getChildren().values()) { + for (ICachedMNode etn : sgNode.getChildren().values()) { int j = 1000; while (j >= 0) { addMeasurementChild(etn, String.format("mtc2_%d_%d", i, j)); @@ -398,7 +398,7 @@ public void test10KDevices() throws MetadataException, IOException { orderedTree = getTreeBFT(sgNode); sf = SchemaFile.loadSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); - List arbitraryNode = new ArrayList<>(); + List arbitraryNode = new ArrayList<>(); try { while (orderedTree.hasNext()) { node = orderedTree.next(); @@ -419,12 +419,12 @@ public void test10KDevices() throws MetadataException, IOException { sf = SchemaFile.loadSchemaFile("sgRoot", TEST_SCHEMA_REGION_ID); for (String key : resName) { - ICacheMNode resNode = sf.getChildNode(arbitraryNode.get(arbitraryNode.size() - 3), key); + ICachedMNode resNode = sf.getChildNode(arbitraryNode.get(arbitraryNode.size() - 3), key); Assert.assertTrue( resNode.getAsMeasurementMNode().getAlias().equals(resNode.getName() + "alias")); } - Iterator res = sf.getChildren(arbitraryNode.get(arbitraryNode.size() - 1)); + Iterator res = sf.getChildren(arbitraryNode.get(arbitraryNode.size() - 1)); int i2 = 0; while (res.hasNext()) { resName.remove(res.next().getName()); @@ -437,10 +437,10 @@ public void test10KDevices() throws MetadataException, IOException { @Test public void testUpdateOnFullPageSegment() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - ICacheMNode root = getFlatTree(783, "aa"); - Iterator ite = getTreeBFT(root); + ICachedMNode root = getFlatTree(783, "aa"); + Iterator ite = getTreeBFT(root); while (ite.hasNext()) { - ICacheMNode cur = ite.next(); + ICachedMNode cur = ite.next(); if (!cur.isMeasurement()) { sf.writeMNode(cur); } @@ -461,7 +461,7 @@ public void testUpdateOnFullPageSegment() throws MetadataException, IOException root.addChild(nodeFactory.createDeviceMNode(root, "ent1").getAsMNode()); - ICacheMNode ent1 = root.getChild("ent1"); + ICachedMNode ent1 = root.getChild("ent1"); ent1.addChild(getMeasurementNode(ent1, "m1", "m1a")); sf.writeMNode(root); @@ -512,8 +512,8 @@ public void testEstimateSegSize() throws Exception { * related methods shall be merged further: {@linkplain SchemaFile#reEstimateSegSize} * ,{@linkplain PageManager#reEstimateSegSize} */ - ICacheMNode sgNode = nodeFactory.createDatabaseMNode(null, "mma", 111111111L).getAsMNode(); - ICacheMNode d1 = fillChildren(sgNode, 300, "d", this::supplyEntity); + ICachedMNode sgNode = nodeFactory.createDatabaseMNode(null, "mma", 111111111L).getAsMNode(); + ICachedMNode d1 = fillChildren(sgNode, 300, "d", this::supplyEntity); ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); try { sf.writeMNode(sgNode); @@ -532,7 +532,7 @@ public void testEstimateSegSize() throws Exception { fillChildren(d1, 20, "ss", this::supplyMeasurement); sf.writeMNode(d1); - Iterator verifyChildren = sf.getChildren(d1); + Iterator verifyChildren = sf.getChildren(d1); int cnt = 0; while (verifyChildren.hasNext()) { cnt++; @@ -547,10 +547,10 @@ public void testEstimateSegSize() throws Exception { @Test public void test200KAlias() throws Exception { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - ICacheMNode sgNode = nodeFactory.createDatabaseMNode(null, "mma", 111111111L).getAsMNode(); + ICachedMNode sgNode = nodeFactory.createDatabaseMNode(null, "mma", 111111111L).getAsMNode(); // 5 devices, each for 200k measurements int factor20K = 20000; - List devs = new ArrayList<>(); + List devs = new ArrayList<>(); List senList = new ArrayList<>(); Map aliasAns = new HashMap<>(); @@ -560,8 +560,8 @@ public void test200KAlias() throws Exception { sgNode.addChild(devs.get(i)); } - for (ICacheMNode dev : devs) { - List sens = new ArrayList<>(); + for (ICachedMNode dev : devs) { + List sens = new ArrayList<>(); for (int i = 0; i < factor20K; i++) { sens.add(getMeasurementNode(dev, "s_" + i, null)); dev.addChild(sens.get(i)); @@ -573,9 +573,9 @@ public void test200KAlias() throws Exception { senList.add(sens); } - Iterator ite = getTreeBFT(sgNode); + Iterator ite = getTreeBFT(sgNode); - ICacheMNode curNode; + ICachedMNode curNode; while (ite.hasNext()) { curNode = ite.next(); if (!curNode.isMeasurement()) { @@ -589,8 +589,8 @@ public void test200KAlias() throws Exception { sf = SchemaFile.loadSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); try { - ICacheMNode dev2 = devs.get(2); - for (ICacheMNode child : dev2.getChildren().values()) { + ICachedMNode dev2 = devs.get(2); + for (ICachedMNode child : dev2.getChildren().values()) { child.getAsMeasurementMNode().setAlias(aliasAns.get(child.getName())); } @@ -608,7 +608,7 @@ public void test200KAlias() throws Exception { Assert.assertEquals(entry.getKey(), sf.getChildNode(dev2, entry.getValue()).getName()); } - Iterator children = sf.getChildren(dev2); + Iterator children = sf.getChildren(dev2); int cnt = 0; while (children.hasNext()) { cnt++; @@ -624,12 +624,12 @@ public void test200KAlias() throws Exception { @Test public void testRearrangementWhenInsert() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile("root.sg", TEST_SCHEMA_REGION_ID); - ICacheMNode root = nodeFactory.createDatabaseDeviceMNode(null, "sgRoot", 0L); + ICachedMNode root = nodeFactory.createDatabaseDeviceMNode(null, "sgRoot", 0L); root.getChildren().clear(); - ICacheMNode ent2 = nodeFactory.createDeviceMNode(root, "ent2").getAsMNode(); - ICacheMNode ent3 = nodeFactory.createDeviceMNode(root, "ent3").getAsMNode(); - ICacheMNode ent4 = nodeFactory.createDeviceMNode(root, "ent4").getAsMNode(); + ICachedMNode ent2 = nodeFactory.createDeviceMNode(root, "ent2").getAsMNode(); + ICachedMNode ent3 = nodeFactory.createDeviceMNode(root, "ent3").getAsMNode(); + ICachedMNode ent4 = nodeFactory.createDeviceMNode(root, "ent4").getAsMNode(); root.addChild(ent2); root.addChild(ent3); root.addChild(ent4); @@ -681,7 +681,7 @@ public void testRearrangementWhenInsert() throws MetadataException, IOException getSegAddr(sf, getSegAddrInContainer(ent4), "e4m0")); root.getChildren().clear(); - ICacheMNode ent5 = nodeFactory.createDeviceMNode(root, "ent5").getAsMNode(); + ICachedMNode ent5 = nodeFactory.createDeviceMNode(root, "ent5").getAsMNode(); root.addChild(ent5); while (ent5.getChildren().size() < 19) { ent5.addChild( @@ -749,7 +749,7 @@ public void bitwiseTest() { public void basicTest() throws IOException, MetadataException { SchemaFileConfig.INTERNAL_SPLIT_VALVE = 16000; int i = 10000; - ICacheMNode sgNode = nodeFactory.createDatabaseDeviceMNode(null, "sgRoot", 11111111L); + ICachedMNode sgNode = nodeFactory.createDatabaseDeviceMNode(null, "sgRoot", 11111111L); Set checkSet = new HashSet<>(); // write with empty entitiy while (i >= 0) { @@ -759,17 +759,17 @@ public void basicTest() throws IOException, MetadataException { } else if (i < 100) { name = "0" + name; } - ICacheMNode aMeas = getMeasurementNode(sgNode, "s_" + name, null); + ICachedMNode aMeas = getMeasurementNode(sgNode, "s_" + name, null); checkSet.add(aMeas.getName()); sgNode.addChild(aMeas); i--; } - Iterator orderedTree = getTreeBFT(sgNode); + Iterator orderedTree = getTreeBFT(sgNode); ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); sf.writeMNode(sgNode); - Iterator res = sf.getChildren(sgNode); + Iterator res = sf.getChildren(sgNode); while (res.hasNext()) { checkSet.remove(res.next().getName()); } @@ -783,7 +783,7 @@ public void basicSplitTest() throws MetadataException, IOException { SchemaFileConfig.INTERNAL_SPLIT_VALVE = 16230; SchemaFileConfig.DETAIL_SKETCH = true; int i = 999; - ICacheMNode sgNode = nodeFactory.createDatabaseDeviceMNode(null, "sgRoot", 11111111L); + ICachedMNode sgNode = nodeFactory.createDatabaseDeviceMNode(null, "sgRoot", 11111111L); Set checkSet = new HashSet<>(); // write with empty entitiy while (i >= 0) { @@ -793,7 +793,7 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (i < 100) { name = "0" + name; } - ICacheMNode aMeas = getMeasurementNode(sgNode, "s_" + name, null); + ICachedMNode aMeas = getMeasurementNode(sgNode, "s_" + name, null); checkSet.add(aMeas.getName()); sgNode.addChild(aMeas); i--; @@ -802,7 +802,7 @@ public void basicSplitTest() throws MetadataException, IOException { ISchemaFile sf = SchemaFile.initSchemaFile(sgNode.getName(), TEST_SCHEMA_REGION_ID); sf.writeMNode(sgNode); - Iterator res = sf.getChildren(sgNode); + Iterator res = sf.getChildren(sgNode); while (res.hasNext()) { checkSet.remove(res.next().getName()); @@ -818,7 +818,7 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (j < 100) { name = "0" + name; } - ICacheMNode aMeas = nodeFactory.createInternalMNode(sgNode, "d_" + name); + ICachedMNode aMeas = nodeFactory.createInternalMNode(sgNode, "d_" + name); sgNode.addChild(aMeas); } @@ -829,14 +829,14 @@ public void basicSplitTest() throws MetadataException, IOException { } else if (j < 100) { name = "0" + name; } - ICacheMNode aMeas = nodeFactory.createInternalMNode(sgNode, "dd2_" + name); + ICachedMNode aMeas = nodeFactory.createInternalMNode(sgNode, "dd2_" + name); checkSet.add(aMeas.getName()); sgNode.getChildren().get("d_010").addChild(aMeas); } - ICacheMNode d010 = sgNode.getChildren().get("d_010"); + ICachedMNode d010 = sgNode.getChildren().get("d_010"); d010 = MNodeUtils.setToEntity(d010, nodeFactory).getAsMNode(); - ICacheMNode ano = getMeasurementNode(d010, "splitover", "aliaslasialsai"); + ICachedMNode ano = getMeasurementNode(d010, "splitover", "aliaslasialsai"); d010.addChild(ano); sgNode.addChild(d010); @@ -852,7 +852,7 @@ public void basicSplitTest() throws MetadataException, IOException { sf.writeMNode(d010); int d010cs = 0; - Iterator res2 = sf.getChildren(d010); + Iterator res2 = sf.getChildren(d010); while (res2.hasNext()) { checkSet.add(res2.next().getName()); d010cs++; @@ -919,25 +919,25 @@ private static long getSegAddr(ISchemaFile sf, long curAddr, String key) { // region ICacheMNode Shortcut - private ICacheMNode supplyMeasurement(ICacheMNode par, String name) { + private ICachedMNode supplyMeasurement(ICachedMNode par, String name) { return getMeasurementNode(par, name, name + "_als"); } - private ICacheMNode supplyInternal(ICacheMNode par, String name) { + private ICachedMNode supplyInternal(ICachedMNode par, String name) { return nodeFactory.createInternalMNode(par, name); } - private ICacheMNode supplyEntity(ICacheMNode par, String name) { + private ICachedMNode supplyEntity(ICachedMNode par, String name) { return nodeFactory.createDeviceMNode(par, name).getAsMNode(); } - private ICacheMNode fillChildren( - ICacheMNode par, + private ICachedMNode fillChildren( + ICachedMNode par, int number, String prefix, - BiFunction nodeFactory) { + BiFunction nodeFactory) { String childName; - ICacheMNode lastChild = null; + ICachedMNode lastChild = null; for (int i = 0; i < number; i++) { childName = prefix + "_" + i; lastChild = nodeFactory.apply(par, childName); @@ -947,7 +947,7 @@ private ICacheMNode fillChildren( } // open for package - static void addMeasurementChild(ICacheMNode par, String mid) { + static void addMeasurementChild(ICachedMNode par, String mid) { par.addChild(getMeasurementNode(par, mid, mid + "alias")); } @@ -955,9 +955,9 @@ static IMeasurementSchema getSchema(String id) { return new MeasurementSchema(id, TSDataType.FLOAT); } - private ICacheMNode getNode(ICacheMNode root, String path) throws MetadataException { + private ICachedMNode getNode(ICachedMNode root, String path) throws MetadataException { String[] pathNodes = PathUtils.splitPathToDetachedNodes(path); - ICacheMNode cur = root; + ICachedMNode cur = root; for (String node : pathNodes) { if (!node.equals("root")) { cur = cur.getChild(node); @@ -966,33 +966,33 @@ private ICacheMNode getNode(ICacheMNode root, String path) throws MetadataExcept return cur; } - static ICacheMNode getInternalWithSegAddr(ICacheMNode par, String name, long segAddr) { - ICacheMNode node = nodeFactory.createDeviceMNode(par, name).getAsMNode(); + static ICachedMNode getInternalWithSegAddr(ICachedMNode par, String name, long segAddr) { + ICachedMNode node = nodeFactory.createDeviceMNode(par, name).getAsMNode(); ICachedMNodeContainer.getCachedMNodeContainer(node).setSegmentAddress(segAddr); return node; } - static ICacheMNode getMeasurementNode(ICacheMNode par, String name, String alias) { + static ICachedMNode getMeasurementNode(ICachedMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); return nodeFactory .createMeasurementMNode(par.getAsDeviceMNode(), name, schema, alias) .getAsMNode(); } - static void addNodeToUpdateBuffer(ICacheMNode par, ICacheMNode child) { + static void addNodeToUpdateBuffer(ICachedMNode par, ICachedMNode child) { ICachedMNodeContainer.getCachedMNodeContainer(par).remove(child.getName()); ICachedMNodeContainer.getCachedMNodeContainer(par).appendMNode(child); ICachedMNodeContainer.getCachedMNodeContainer(par).moveMNodeToCache(child.getName()); ICachedMNodeContainer.getCachedMNodeContainer(par).updateMNode(child.getName()); } - static void moveToUpdateBuffer(ICacheMNode par, String childName) { + static void moveToUpdateBuffer(ICachedMNode par, String childName) { ICachedMNodeContainer.getCachedMNodeContainer(par).appendMNode(par.getChild(childName)); ICachedMNodeContainer.getCachedMNodeContainer(par).moveMNodeToCache(childName); ICachedMNodeContainer.getCachedMNodeContainer(par).updateMNode(childName); } - static void moveAllToUpdate(ICacheMNode par) { + static void moveAllToUpdate(ICachedMNode par) { List childNames = par.getChildren().values().stream().map(IMNode::getName).collect(Collectors.toList()); for (String name : childNames) { @@ -1001,7 +1001,7 @@ static void moveAllToUpdate(ICacheMNode par) { } } - static void moveAllToBuffer(ICacheMNode par) { + static void moveAllToBuffer(ICachedMNode par) { List childNames = par.getChildren().values().stream().map(IMNode::getName).collect(Collectors.toList()); for (String name : childNames) { @@ -1009,7 +1009,7 @@ static void moveAllToBuffer(ICacheMNode par) { } } - static long getSegAddrInContainer(ICacheMNode par) { + static long getSegAddrInContainer(ICachedMNode par) { return ICachedMNodeContainer.getCachedMNodeContainer(par).getSegmentAddress(); } @@ -1017,40 +1017,40 @@ static long getSegAddrInContainer(ICacheMNode par) { // region Tree Constructor - static ICacheMNode virtualTriangleMTree(int size, String sgPath) throws MetadataException { + static ICachedMNode virtualTriangleMTree(int size, String sgPath) throws MetadataException { String[] sgPathNodes = PathUtils.splitPathToDetachedNodes(sgPath); - ICacheMNode upperNode = null; + ICachedMNode upperNode = null; for (String name : sgPathNodes) { upperNode = nodeFactory.createInternalMNode(upperNode, name); } - ICacheMNode internalNode = nodeFactory.createDatabaseDeviceMNode(upperNode, "vRoot1", 0L); + ICachedMNode internalNode = nodeFactory.createDatabaseDeviceMNode(upperNode, "vRoot1", 0L); for (int idx = 0; idx < size; idx++) { String measurementId = "mid" + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); - IMeasurementMNode mNode = + IMeasurementMNode mNode = nodeFactory.createMeasurementMNode( internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); internalNode.addChild(mNode.getAsMNode()); } - ICacheMNode curNode = internalNode; + ICachedMNode curNode = internalNode; for (int idx = 0; idx < size; idx++) { String nodeName = "int" + idx; - ICacheMNode newNode = nodeFactory.createDeviceMNode(curNode, nodeName).getAsMNode(); + ICachedMNode newNode = nodeFactory.createDeviceMNode(curNode, nodeName).getAsMNode(); curNode.addChild(newNode); curNode = newNode; } for (int idx = 0; idx < 1000; idx++) { IMeasurementSchema schema = new MeasurementSchema("finalM" + idx, TSDataType.FLOAT); - IMeasurementMNode mNode = + IMeasurementMNode mNode = nodeFactory.createMeasurementMNode( internalNode.getAsDeviceMNode(), "finalM" + idx, schema, "finalals" + idx); curNode.addChild(mNode.getAsMNode()); } IMeasurementSchema schema = new MeasurementSchema("finalM", TSDataType.FLOAT); - IMeasurementMNode mNode = + IMeasurementMNode mNode = nodeFactory.createMeasurementMNode( internalNode.getAsDeviceMNode(), "finalM", schema, "finalals"); curNode.addChild(mNode.getAsMNode()); @@ -1058,15 +1058,15 @@ static ICacheMNode virtualTriangleMTree(int size, String sgPath) throws Metadata return internalNode; } - static ICacheMNode getFlatTree(int flatSize, String id) { - ICacheMNode root = nodeFactory.createInternalMNode(null, "root"); - ICacheMNode test = nodeFactory.createInternalMNode(root, "test"); - ICacheMNode internalNode = nodeFactory.createDatabaseDeviceMNode(null, "vRoot1", 0L); + static ICachedMNode getFlatTree(int flatSize, String id) { + ICachedMNode root = nodeFactory.createInternalMNode(null, "root"); + ICachedMNode test = nodeFactory.createInternalMNode(root, "test"); + ICachedMNode internalNode = nodeFactory.createDatabaseDeviceMNode(null, "vRoot1", 0L); for (int idx = 0; idx < flatSize; idx++) { String measurementId = id + idx; IMeasurementSchema schema = new MeasurementSchema(measurementId, TSDataType.FLOAT); - IMeasurementMNode mNode = + IMeasurementMNode mNode = nodeFactory.createMeasurementMNode( internalNode.getAsDeviceMNode(), measurementId, schema, measurementId + "als"); internalNode.addChild(mNode.getAsMNode()); @@ -1076,12 +1076,12 @@ static ICacheMNode getFlatTree(int flatSize, String id) { return internalNode; } - static ICacheMNode getVerticalTree(int height, String id) { - ICacheMNode trueRoot = nodeFactory.createInternalMNode(null, "root"); + static ICachedMNode getVerticalTree(int height, String id) { + ICachedMNode trueRoot = nodeFactory.createInternalMNode(null, "root"); trueRoot.addChild(nodeFactory.createInternalMNode(trueRoot, "sgvt")); - ICacheMNode root = nodeFactory.createDatabaseDeviceMNode(null, "vt", 0L); + ICachedMNode root = nodeFactory.createDatabaseDeviceMNode(null, "vt", 0L); int cnt = 0; - ICacheMNode cur = root; + ICachedMNode cur = root; while (cnt < height) { cur.addChild(nodeFactory.createDeviceMNode(cur, id + "_" + cnt).getAsMNode()); cur = cur.getChild(id + "_" + cnt); @@ -1091,9 +1091,9 @@ static ICacheMNode getVerticalTree(int height, String id) { return root; } - static Iterator getTreeBFT(ICacheMNode root) { - return new Iterator() { - final Queue queue = new LinkedList<>(); + static Iterator getTreeBFT(ICachedMNode root) { + return new Iterator() { + final Queue queue = new LinkedList<>(); { this.queue.add(root); @@ -1105,10 +1105,10 @@ public boolean hasNext() { } @Override - public ICacheMNode next() { - ICacheMNode curNode = queue.poll(); + public ICachedMNode next() { + ICachedMNode curNode = queue.poll(); if (!curNode.isMeasurement() && curNode.getChildren().size() > 0) { - for (ICacheMNode child : curNode.getChildren().values()) { + for (ICachedMNode child : curNode.getChildren().values()) { queue.add(child); } } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java index 89e7a2eec458a..0294ab5f53deb 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/SchemaPageTest.java @@ -20,7 +20,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaPage; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; @@ -41,7 +41,7 @@ public class SchemaPageTest { - private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); @Before public void setUp() { @@ -57,11 +57,11 @@ public void tearDown() throws Exception { public void flatTreeInsert() throws IOException, MetadataException { ISchemaPage page = ISchemaPage.initSegmentedPage(ByteBuffer.allocate(SchemaFileConfig.PAGE_LENGTH), 0); - ICacheMNode root = virtualFlatMTree(15); + ICachedMNode root = virtualFlatMTree(15); for (int i = 0; i < 7; i++) { page.getAsSegmentedPage().allocNewSegment(SchemaFileConfig.SEG_SIZE_LST[0]); int cnt = 0; - for (ICacheMNode child : root.getChildren().values()) { + for (ICachedMNode child : root.getChildren().values()) { cnt++; try { page.getAsSegmentedPage() @@ -105,8 +105,8 @@ public void essentialPageTest() throws MetadataException, IOException { Assert.assertEquals(256, (int) nPage.getAsInternalPage().getRecordByKey("aab")); } - private ICacheMNode virtualFlatMTree(int childSize) { - ICacheMNode internalNode = nodeFactory.createDeviceMNode(null, "vRoot1").getAsMNode(); + private ICachedMNode virtualFlatMTree(int childSize) { + ICachedMNode internalNode = nodeFactory.createDeviceMNode(null, "vRoot1").getAsMNode(); for (int idx = 0; idx < childSize; idx++) { String measurementId = "mid" + idx; diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java index ab28d100186f2..3bfc57fef6b46 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/schemafile/WrappedSegmentTest.java @@ -21,7 +21,7 @@ import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISegment; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.RecordUtils; @@ -42,7 +42,7 @@ public class WrappedSegmentTest { - private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private static final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); @Before public void setUp() { @@ -63,8 +63,8 @@ public void tearDown() throws Exception { @Test public void flatTreeInsert() throws MetadataException { WrappedSegment sf = new WrappedSegment(500); - ICacheMNode rNode = virtualFlatMTree(10); - for (ICacheMNode node : rNode.getChildren().values()) { + ICachedMNode rNode = virtualFlatMTree(10); + for (ICachedMNode node : rNode.getChildren().values()) { sf.insertRecord(node.getName(), RecordUtils.node2Buffer(node)); } sf.syncBuffer(); @@ -101,8 +101,8 @@ public void flatTreeInsert() throws MetadataException { Assert.assertEquals(sf.getRecord("aaa"), nsf.getRecord("aaa")); } - private ICacheMNode virtualFlatMTree(int childSize) { - ICacheMNode internalNode = nodeFactory.createDeviceMNode(null, "vRoot1").getAsMNode(); + private ICachedMNode virtualFlatMTree(int childSize) { + ICachedMNode internalNode = nodeFactory.createDeviceMNode(null, "vRoot1").getAsMNode(); for (int idx = 0; idx < childSize; idx++) { String measurementId = "mid" + idx; @@ -119,9 +119,9 @@ private ICacheMNode virtualFlatMTree(int childSize) { @Test public void evenSplitTest() throws MetadataException { ByteBuffer buffer = ByteBuffer.allocate(500); - ISegment seg = WrappedSegment.initAsSegment(buffer); + ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9"}; - ICacheMNode mNode = getMeasurementNode(null, "m", null); + ICachedMNode mNode = getMeasurementNode(null, "m", null); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = 0; i < test.length; i++) { @@ -156,9 +156,9 @@ public void evenSplitTest() throws MetadataException { public void increasingSplitTest() throws MetadataException { ByteBuffer buffer = ByteBuffer.allocate(500); ByteBuffer buf2 = ByteBuffer.allocate(500); - ISegment seg = WrappedSegment.initAsSegment(buffer); + ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8"}; - ICacheMNode mNode = nodeFactory.createInternalMNode(null, "m"); + ICachedMNode mNode = nodeFactory.createInternalMNode(null, "m"); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = 0; i < test.length; i++) { @@ -190,9 +190,9 @@ public void increasingSplitTest() throws MetadataException { public void decreasingSplitTest() throws MetadataException { ByteBuffer buffer = ByteBuffer.allocate(500); ByteBuffer buf2 = ByteBuffer.allocate(500); - ISegment seg = WrappedSegment.initAsSegment(buffer); + ISegment seg = WrappedSegment.initAsSegment(buffer); String[] test = new String[] {"a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8"}; - ICacheMNode mNode = nodeFactory.createInternalMNode(null, "m"); + ICachedMNode mNode = nodeFactory.createInternalMNode(null, "m"); ByteBuffer buf = RecordUtils.node2Buffer(mNode); for (int i = test.length - 1; i >= 0; i--) { @@ -239,7 +239,7 @@ public void print(Object s) { System.out.println(s); } - private ICacheMNode getMeasurementNode(ICacheMNode par, String name, String alias) { + private ICachedMNode getMeasurementNode(ICachedMNode par, String name, String alias) { IMeasurementSchema schema = new MeasurementSchema(name, TSDataType.FLOAT); return nodeFactory .createMeasurementMNode(par == null ? null : par.getAsDeviceMNode(), name, schema, alias) diff --git a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java index b1d19e18d3026..63a52e8e5a48f 100644 --- a/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java +++ b/server/src/test/java/org/apache/iotdb/db/tools/SchemaFileSketchTest.java @@ -23,7 +23,7 @@ import org.apache.iotdb.commons.schema.node.utils.IMNodeFactory; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.metadata.MetadataConstant; -import org.apache.iotdb.db.metadata.mnode.schemafile.ICacheMNode; +import org.apache.iotdb.db.metadata.mnode.schemafile.ICachedMNode; import org.apache.iotdb.db.metadata.mnode.schemafile.factory.CacheMNodeFactory; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.ISchemaFile; import org.apache.iotdb.db.metadata.mtree.store.disk.schemafile.SchemaFile; @@ -51,7 +51,7 @@ public class SchemaFileSketchTest { - private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); + private final IMNodeFactory nodeFactory = CacheMNodeFactory.getInstance(); @Before public void setUp() { @@ -75,9 +75,9 @@ private void prepareData() throws IOException, MetadataException { int TEST_SCHEMA_REGION_ID = 0; ISchemaFile sf = SchemaFile.initSchemaFile("root.test.vRoot1", TEST_SCHEMA_REGION_ID); - Iterator ite = getTreeBFT(getFlatTree(500, "aa")); + Iterator ite = getTreeBFT(getFlatTree(500, "aa")); while (ite.hasNext()) { - ICacheMNode cur = ite.next(); + ICachedMNode cur = ite.next(); if (!cur.isMeasurement()) { sf.writeMNode(cur); } @@ -118,9 +118,9 @@ public void testSchemaFileSketch() throws Exception { } } - private Iterator getTreeBFT(ICacheMNode root) { - return new Iterator() { - Queue queue = new LinkedList<>(); + private Iterator getTreeBFT(ICachedMNode root) { + return new Iterator() { + Queue queue = new LinkedList<>(); { this.queue.add(root); @@ -132,10 +132,10 @@ public boolean hasNext() { } @Override - public ICacheMNode next() { - ICacheMNode curNode = queue.poll(); + public ICachedMNode next() { + ICachedMNode curNode = queue.poll(); if (!curNode.isMeasurement() && curNode.getChildren().size() > 0) { - for (ICacheMNode child : curNode.getChildren().values()) { + for (ICachedMNode child : curNode.getChildren().values()) { queue.add(child); } } @@ -144,10 +144,10 @@ public ICacheMNode next() { }; } - private ICacheMNode getFlatTree(int flatSize, String id) { - ICacheMNode root = nodeFactory.createInternalMNode(null, "root"); - ICacheMNode test = nodeFactory.createInternalMNode(root, "test"); - ICacheMNode internalNode = nodeFactory.createDatabaseDeviceMNode(null, "vRoot1", 0L); + private ICachedMNode getFlatTree(int flatSize, String id) { + ICachedMNode root = nodeFactory.createInternalMNode(null, "root"); + ICachedMNode test = nodeFactory.createInternalMNode(root, "test"); + ICachedMNode internalNode = nodeFactory.createDatabaseDeviceMNode(null, "vRoot1", 0L); for (int idx = 0; idx < flatSize; idx++) { String measurementId = id + idx; From 94046236c8e6db24e90b4c0bbd601310c845852b Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Tue, 14 Mar 2023 12:30:16 +0800 Subject: [PATCH 22/26] done --- .../org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java index 5ba3644c4b27e..70d8269bd4a87 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/store/MemMTreeStore.java @@ -156,7 +156,6 @@ public IMemMNode setToInternal(IDeviceMNode entityMNode) { } if (result.isDatabase()) { root = result; - // TODO: 这里和cached不一致,记得检查 } return result; } From e02263db41fce7e5f6ec2984783f168573d9499b Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Tue, 14 Mar 2023 15:24:26 +0800 Subject: [PATCH 23/26] fix ci --- .../java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGTest.java deleted file mode 100644 index e69de29bb2d1d..0000000000000 From 31fed06446a26bbb76ccd3d0f8cada6f27e754c5 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Wed, 15 Mar 2023 09:52:02 +0800 Subject: [PATCH 24/26] eliminate IMtreeBelowSG interface --- .../db/metadata/mtree/IMTreeBelowSG.java | 194 ------------------ .../mtree/MTreeBelowSGCachedImpl.java | 74 ++----- .../mtree/MTreeBelowSGMemoryImpl.java | 70 ++----- 3 files changed, 32 insertions(+), 306 deletions(-) delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java deleted file mode 100644 index bbd37898d60b3..0000000000000 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java +++ /dev/null @@ -1,194 +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.metadata.mtree; - -import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.commons.path.MeasurementPath; -import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.commons.schema.node.IMNode; -import org.apache.iotdb.commons.schema.node.role.IMeasurementMNode; -import org.apache.iotdb.db.metadata.template.Template; -import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; -import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; -import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; - -import java.io.File; -import java.util.List; -import java.util.Map; -import java.util.Set; - -// TODO: eliminate this class -public interface IMTreeBelowSG> { - void clear(); - - /** - * Create MTree snapshot - * - * @param snapshotDir specify snapshot directory - * @return false if failed to create snapshot; true if success - */ - boolean createSnapshot(File snapshotDir); - - IMeasurementMNode createTimeseries( - PartialPath path, - TSDataType dataType, - TSEncoding encoding, - CompressionType compressor, - Map props, - String alias) - throws MetadataException; - - /** - * Create aligned timeseries with full paths from root to one leaf node. Before creating - * timeseries, the * database should be set first, throw exception otherwise - * - * @param devicePath device path - * @param measurements measurements list - * @param dataTypes data types list - * @param encodings encodings list - * @param compressors compressor - */ - List> createAlignedTimeseries( - PartialPath devicePath, - List measurements, - List dataTypes, - List encodings, - List compressors, - List aliasList) - throws MetadataException; - - /** - * Check if measurements under device exists in MTree - * - * @param devicePath device full path - * @param measurementList measurements list - * @param aliasList alias of measurement - * @return If all measurements not exists, return empty map. Otherwise, return a map whose key is - * index of measurement in list and value is exception. - */ - Map checkMeasurementExistence( - PartialPath devicePath, List measurementList, List aliasList); - - /** - * Delete path. The path should be a full path from root to leaf node - * - * @param path Format: root.node(.node)+ - */ - IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataException; - - /** - * Construct schema black list via setting matched timeseries to pre deleted. - * - * @param pathPattern path pattern - * @return PartialPath of timeseries that has been set to pre deleted - */ - List constructSchemaBlackList(PartialPath pathPattern) throws MetadataException; - - /** - * Rollback schema black list via setting matched timeseries to not pre deleted. - * - * @param pathPattern path pattern - * @return PartialPath of timeseries that has been set to not pre deleted - */ - List rollbackSchemaBlackList(PartialPath pathPattern) throws MetadataException; - - /** - * Get all pre-deleted timeseries matched by given pathPattern. For example, given path pattern - * root.sg.*.s1 and pre-deleted timeseries root.sg.d1.s1, root.sg.d2.s1, then the result set is - * {root.sg.d1.s1, root.sg.d2.s1}. - * - * @param pathPattern path pattern - * @return all pre-deleted timeseries matched by given pathPattern - */ - List getPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException; - - /** - * Get all devices of pre-deleted timeseries matched by given pathPattern. For example, given path - * pattern root.sg.*.s1 and pre-deleted timeseries root.sg.d1.s1, root.sg.d2.s1, then the result - * set is {root.sg.d1, root.sg.d2}. - * - * @param pathPattern path pattern - * @return all devices of pre-deleted timeseries matched by given pathPattern - */ - Set getDevicesOfPreDeletedTimeseries(PartialPath pathPattern) - throws MetadataException; - - void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException; - - /** - * Add an interval path to MTree. This is only used for automatically creating schema - * - *

      e.g., get root.sg.d1, get or create all internal nodes and return the node of d1 - */ - N getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException; - - /** - * Fetch all measurement path - * - * @param pathPattern a path pattern or a full path, may contain wildcard - * @param templateMap - * @param withTags whether returns all the tags of each timeseries as well. - * @return schema - */ - List fetchSchema( - PartialPath pathPattern, Map templateMap, boolean withTags) - throws MetadataException; - - /** - * Get node by the path - * - * @return last node in given seriesPath - */ - N getNodeByPath(PartialPath path) throws MetadataException; - - IMeasurementMNode getMeasurementMNode(PartialPath path) throws MetadataException; - - long countAllMeasurement() throws MetadataException; - - void activateTemplate(PartialPath activatePath, Template template) throws MetadataException; - - /** - * constructSchemaBlackListWithTemplate - * - * @param templateSetInfo PathPattern and templateId to pre-deactivate - * @return Actual full path and templateId that has been pre-deactivated - */ - Map> constructSchemaBlackListWithTemplate( - Map> templateSetInfo) throws MetadataException; - - /** - * rollbackSchemaBlackListWithTemplate - * - * @param templateSetInfo PathPattern and templateId to rollback pre-deactivate - * @return Actual full path and templateId that has been rolled back - */ - Map> rollbackSchemaBlackListWithTemplate( - Map> templateSetInfo) throws MetadataException; - - /** - * deactivateTemplateInBlackList - * - * @param templateSetInfo PathPattern and templateId to rollback deactivate - * @return Actual full path and templateId that has been deactivated - */ - Map> deactivateTemplateInBlackList( - Map> templateSetInfo) throws MetadataException; - - long countPathsUsingTemplate(PartialPath pathPattern, int templateId) throws MetadataException; -} diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java index 52c5caeb23968..e754bbf616da7 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java @@ -101,7 +101,7 @@ *

    • Interfaces and Implementation for Template check * */ -public class MTreeBelowSGCachedImpl implements IMTreeBelowSG { +public class MTreeBelowSGCachedImpl { private final CachedMTreeStore store; private volatile ICachedMNode storageGroupMNode; @@ -130,7 +130,7 @@ public MTreeBelowSGCachedImpl( try (MeasurementCollector collector = new MeasurementCollector( this.rootNode, new PartialPath(storageGroupMNode.getFullPath()), this.store, true) { - @Override + protected Void collectMeasurement(IMeasurementMNode node) { measurementProcess.accept(node); regionStatistics.addTimeseries(1L); @@ -158,7 +158,7 @@ private MTreeBelowSGCachedImpl( try (MeasurementCollector collector = new MeasurementCollector( this.rootNode, new PartialPath(storageGroupMNode.getFullPath()), this.store, true) { - @Override + protected Void collectMeasurement(IMeasurementMNode node) { measurementProcess.accept(node); return null; @@ -168,7 +168,6 @@ protected Void collectMeasurement(IMeasurementMNode node) { } } - @Override public void clear() { store.clear(); storageGroupMNode = null; @@ -181,7 +180,6 @@ protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { this.storageGroupMNode = newMNode.getAsMNode(); } - @Override public boolean createSnapshot(File snapshotDir) { return store.createSnapshot(snapshotDir); } @@ -207,7 +205,6 @@ public static MTreeBelowSGCachedImpl loadFromSnapshot( // region Timeseries operation, including create and delete - @Override public IMeasurementMNode createTimeseries( PartialPath path, TSDataType dataType, @@ -318,7 +315,6 @@ public IMeasurementMNode createTimeseriesWithPinnedReturn( * @param encodings encodings list * @param compressors compressor */ - @Override public List> createAlignedTimeseries( PartialPath devicePath, List measurements, @@ -399,7 +395,6 @@ public List> createAlignedTimeseries( } } - @Override public Map checkMeasurementExistence( PartialPath devicePath, List measurementList, List aliasList) { ICachedMNode device; @@ -516,7 +511,6 @@ private ICachedMNode checkAndAutoCreateDeviceNode(String deviceName, ICachedMNod * * @param path Format: root.node(.node)+ */ - @Override public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataException { String[] nodes = path.getNodes(); @@ -595,13 +589,12 @@ private boolean isEmptyInternalMNode(ICachedMNode node) throws MetadataException } } - @Override public List constructSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); try (MeasurementUpdater updater = new MeasurementUpdater(rootNode, pathPattern, store, false) { - @Override + protected void updateMeasurement(IMeasurementMNode node) throws MetadataException { node.setPreDeleted(true); @@ -614,13 +607,12 @@ protected void updateMeasurement(IMeasurementMNode node) return result; } - @Override public List rollbackSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); try (MeasurementUpdater updater = new MeasurementUpdater(rootNode, pathPattern, store, false) { - @Override + protected void updateMeasurement(IMeasurementMNode node) throws MetadataException { node.setPreDeleted(false); @@ -633,13 +625,12 @@ protected void updateMeasurement(IMeasurementMNode node) return result; } - @Override public List getPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { List result = new LinkedList<>(); try (MeasurementCollector collector = new MeasurementCollector(rootNode, pathPattern, store, false) { - @Override + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { result.add(getPartialPathFromRootToNode(node.getAsMNode())); @@ -652,13 +643,12 @@ protected Void collectMeasurement(IMeasurementMNode node) { return result; } - @Override public Set getDevicesOfPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { Set result = new HashSet<>(); try (MeasurementCollector collector = new MeasurementCollector(rootNode, pathPattern, store, false) { - @Override + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { result.add(getPartialPathFromRootToNode(node.getAsMNode()).getDevicePath()); @@ -672,7 +662,6 @@ protected Void collectMeasurement(IMeasurementMNode node) { return result; } - @Override public void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException { store.setAlias(measurementMNode, alias); @@ -687,7 +676,6 @@ public void setAlias(IMeasurementMNode measurementMNode, String al * *

      e.g., get root.sg.d1, get or create all internal nodes and return the node of d1 */ - @Override public ICachedMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException { String[] nodeNames = deviceId.getNodes(); MetaFormatUtils.checkTimeseries(deviceId); @@ -712,14 +700,13 @@ public ICachedMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws M // region Interfaces and Implementation for metadata info Query - @Override public List fetchSchema( PartialPath pathPattern, Map templateMap, boolean withTags) throws MetadataException { List result = new LinkedList<>(); try (MeasurementCollector collector = new MeasurementCollector(rootNode, pathPattern, store, false) { - @Override + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { return null; @@ -750,7 +737,6 @@ protected Void collectMeasurement(IMeasurementMNode node) { * * @return last node in given seriesPath */ - @Override public ICachedMNode getNodeByPath(PartialPath path) throws MetadataException { String[] nodes = path.getNodes(); ICachedMNode cur = storageGroupMNode; @@ -776,7 +762,6 @@ public ICachedMNode getNodeByPath(PartialPath path) throws MetadataException { } } - @Override public IMeasurementMNode getMeasurementMNode(PartialPath path) throws MetadataException { ICachedMNode node = getNodeByPath(path); @@ -789,7 +774,6 @@ public IMeasurementMNode getMeasurementMNode(PartialPath path) } } - @Override public long countAllMeasurement() throws MetadataException { try (MeasurementCounter measurementCounter = new MeasurementCounter<>(rootNode, MetadataConstant.ALL_MATCH_PATTERN, store, false)) { @@ -800,7 +784,6 @@ public long countAllMeasurement() throws MetadataException { // region Interfaces and Implementation for Template check and query - @Override public void activateTemplate(PartialPath activatePath, Template template) throws MetadataException { String[] nodes = activatePath.getNodes(); @@ -854,14 +837,13 @@ public void activateTemplate(PartialPath activatePath, Template template) } } - @Override public Map> constructSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { try (EntityUpdater updater = new EntityUpdater(rootNode, entry.getKey(), store, false) { - @Override + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId())) { resultTemplateSetInfo.put( @@ -877,14 +859,13 @@ protected void updateEntity(IDeviceMNode node) throws MetadataExce return resultTemplateSetInfo; } - @Override public Map> rollbackSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { try (EntityUpdater updater = new EntityUpdater(rootNode, entry.getKey(), store, false) { - @Override + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { @@ -901,14 +882,13 @@ protected void updateEntity(IDeviceMNode node) throws MetadataExce return resultTemplateSetInfo; } - @Override public Map> deactivateTemplateInBlackList( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { try (EntityUpdater collector = new EntityUpdater(rootNode, entry.getKey(), store, false) { - @Override + protected void updateEntity(IDeviceMNode node) throws MetadataException { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { @@ -928,7 +908,6 @@ protected void updateEntity(IDeviceMNode node) throws MetadataExce return resultTemplateSetInfo; } - @Override public long countPathsUsingTemplate(PartialPath pathPattern, int templateId) throws MetadataException { try (EntityCounter counter = @@ -974,7 +953,7 @@ public ISchemaReader getDeviceReader(IShowDevicesPlan showDev EntityCollector collector = new EntityCollector( rootNode, showDevicesPlan.getPath(), store, showDevicesPlan.isPrefixMatch()) { - @Override + protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { PartialPath device = getPartialPathFromRootToNode(node.getAsMNode()); return new ShowDevicesResult(device.getFullPath(), node.isAligned()); @@ -987,27 +966,23 @@ protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { new TraverserWithLimitOffsetWrapper<>( collector, showDevicesPlan.getLimit(), showDevicesPlan.getOffset()); return new ISchemaReader() { - @Override + public boolean isSuccess() { return traverser.isSuccess(); } - @Override public Throwable getFailure() { return traverser.getFailure(); } - @Override public void close() { traverser.close(); } - @Override public boolean hasNext() { return traverser.hasNext(); } - @Override public IDeviceSchemaInfo next() { return traverser.next(); } @@ -1021,23 +996,20 @@ public ISchemaReader getTimeSeriesReader( MeasurementCollector collector = new MeasurementCollector( rootNode, showTimeSeriesPlan.getPath(), store, showTimeSeriesPlan.isPrefixMatch()) { - @Override + protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) { return new ITimeSeriesSchemaInfo() { private Pair, Map> tagAndAttribute = null; - @Override public String getAlias() { return node.getAlias(); } - @Override public MeasurementSchema getSchema() { return (MeasurementSchema) node.getSchema(); } - @Override public Map getTags() { if (tagAndAttribute == null) { tagAndAttribute = tagAndAttributeProvider.apply(node.getOffset()); @@ -1045,7 +1017,6 @@ public Map getTags() { return tagAndAttribute.left; } - @Override public Map getAttributes() { if (tagAndAttribute == null) { tagAndAttribute = tagAndAttributeProvider.apply(node.getOffset()); @@ -1053,17 +1024,14 @@ public Map getAttributes() { return tagAndAttribute.right; } - @Override public boolean isUnderAlignedDevice() { return getParentOfNextMatchedNode().getAsDeviceMNode().isAligned(); } - @Override public String getFullPath() { return getPartialPathFromRootToNode(node.getAsMNode()).getFullPath(); } - @Override public PartialPath getPartialPath() { return getPartialPathFromRootToNode(node.getAsMNode()); } @@ -1081,27 +1049,23 @@ public PartialPath getPartialPath() { traverser = collector; } return new ISchemaReader() { - @Override + public boolean isSuccess() { return traverser.isSuccess(); } - @Override public Throwable getFailure() { return traverser.getFailure(); } - @Override public void close() { traverser.close(); } - @Override public boolean hasNext() { return traverser.hasNext(); } - @Override public ITimeSeriesSchemaInfo next() { return traverser.next(); } @@ -1113,7 +1077,7 @@ public ISchemaReader getNodeReader(IShowNodesPlan showNodesPlan MNodeCollector collector = new MNodeCollector( rootNode, showNodesPlan.getPath(), store, showNodesPlan.isPrefixMatch()) { - @Override + protected INodeSchemaInfo collectMNode(ICachedMNode node) { return new ShowNodesResult( getPartialPathFromRootToNode(node).getFullPath(), node.getMNodeType(false)); @@ -1121,27 +1085,23 @@ protected INodeSchemaInfo collectMNode(ICachedMNode node) { }; collector.setTargetLevel(showNodesPlan.getLevel()); return new ISchemaReader() { - @Override + public boolean isSuccess() { return collector.isSuccess(); } - @Override public Throwable getFailure() { return collector.getFailure(); } - @Override public void close() { collector.close(); } - @Override public boolean hasNext() { return collector.hasNext(); } - @Override public INodeSchemaInfo next() { return collector.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java index 33a46e99d47ee..7e3c558b1c862 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java @@ -101,7 +101,7 @@ *

    • Interfaces and Implementation for Template check * */ -public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG { +public class MTreeBelowSGMemoryImpl { // this implementation is based on memory, thus only MTree write operation must invoke MTreeStore private final MemMTreeStore store; @@ -134,7 +134,6 @@ private MTreeBelowSGMemoryImpl( this.tagGetter = tagGetter; } - @Override public void clear() { store.clear(); storageGroupMNode = null; @@ -147,7 +146,6 @@ protected void replaceStorageGroupMNode(IDatabaseMNode newMNode) { this.storageGroupMNode = newMNode.getAsMNode(); } - @Override public synchronized boolean createSnapshot(File snapshotDir) { return store.createSnapshot(snapshotDir); } @@ -180,7 +178,6 @@ public static MTreeBelowSGMemoryImpl loadFromSnapshot( * @param props props * @param alias alias of measurement */ - @Override public IMeasurementMNode createTimeseries( PartialPath path, TSDataType dataType, @@ -265,7 +262,6 @@ public IMeasurementMNode createTimeseries( * @param encodings encodings list * @param compressors compressor */ - @Override public List> createAlignedTimeseries( PartialPath devicePath, List measurements, @@ -386,7 +382,6 @@ private IMemMNode checkAndAutoCreateDeviceNode(String deviceName, IMemMNode devi return device; } - @Override public Map checkMeasurementExistence( PartialPath devicePath, List measurementList, List aliasList) { IMemMNode device; @@ -436,7 +431,6 @@ public Map checkMeasurementExistence( * * @param path Format: root.node(.node)+ */ - @Override public IMeasurementMNode deleteTimeseries(PartialPath path) throws MetadataException { String[] nodes = path.getNodes(); if (nodes.length == 0) { @@ -497,13 +491,12 @@ private boolean isEmptyInternalMNode(IMemMNode node) { && node.getChildren().isEmpty(); } - @Override public List constructSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); try (MeasurementUpdater updater = new MeasurementUpdater(rootNode, pathPattern, store, false) { - @Override + protected void updateMeasurement(IMeasurementMNode node) { node.setPreDeleted(true); result.add(getPartialPathFromRootToNode(node.getAsMNode())); @@ -514,13 +507,12 @@ protected void updateMeasurement(IMeasurementMNode node) { return result; } - @Override public List rollbackSchemaBlackList(PartialPath pathPattern) throws MetadataException { List result = new ArrayList<>(); try (MeasurementUpdater updater = new MeasurementUpdater(rootNode, pathPattern, store, false) { - @Override + protected void updateMeasurement(IMeasurementMNode node) { node.setPreDeleted(false); result.add(getPartialPathFromRootToNode(node.getAsMNode())); @@ -531,13 +523,12 @@ protected void updateMeasurement(IMeasurementMNode node) { return result; } - @Override public List getPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { List result = new LinkedList<>(); try (MeasurementCollector collector = new MeasurementCollector(rootNode, pathPattern, store, false) { - @Override + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { result.add(getPartialPathFromRootToNode(node.getAsMNode())); @@ -550,13 +541,12 @@ protected Void collectMeasurement(IMeasurementMNode node) { return result; } - @Override public Set getDevicesOfPreDeletedTimeseries(PartialPath pathPattern) throws MetadataException { Set result = new HashSet<>(); try (MeasurementCollector collector = new MeasurementCollector(rootNode, pathPattern, store, false) { - @Override + protected Void collectMeasurement(IMeasurementMNode node) { if (node.isPreDeleted()) { result.add(getPartialPathFromRootToNode(node.getAsMNode()).getDevicePath()); @@ -569,7 +559,6 @@ protected Void collectMeasurement(IMeasurementMNode node) { return result; } - @Override public void setAlias(IMeasurementMNode measurementMNode, String alias) throws MetadataException { store.setAlias(measurementMNode, alias); @@ -584,7 +573,6 @@ public void setAlias(IMeasurementMNode measurementMNode, String alias * *

      e.g., get root.sg.d1, get or create all internal nodes and return the node of d1 */ - @Override public IMemMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws MetadataException { MetaFormatUtils.checkTimeseries(deviceId); String[] nodeNames = deviceId.getNodes(); @@ -604,14 +592,13 @@ public IMemMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws Meta // region Interfaces and Implementation for metadata info Query - @Override public List fetchSchema( PartialPath pathPattern, Map templateMap, boolean withTags) throws MetadataException { List result = new LinkedList<>(); try (MeasurementCollector collector = new MeasurementCollector(rootNode, pathPattern, store, false) { - @Override + protected Void collectMeasurement(IMeasurementMNode node) { MeasurementPath path = getCurrentMeasurementPathInTraverse(node); if (nodes[nodes.length - 1].equals(node.getAlias())) { @@ -640,7 +627,6 @@ protected Void collectMeasurement(IMeasurementMNode node) { * * @return last node in given seriesPath */ - @Override public IMemMNode getNodeByPath(PartialPath path) throws PathNotExistException { String[] nodes = path.getNodes(); IMemMNode cur = storageGroupMNode; @@ -661,7 +647,6 @@ public IMemMNode getNodeByPath(PartialPath path) throws PathNotExistException { return cur; } - @Override public IMeasurementMNode getMeasurementMNode(PartialPath path) throws MetadataException { IMemMNode node = getNodeByPath(path); @@ -673,7 +658,6 @@ public IMeasurementMNode getMeasurementMNode(PartialPath path) } } - @Override public long countAllMeasurement() throws MetadataException { try (MeasurementCounter measurementCounter = new MeasurementCounter<>(rootNode, MetadataConstant.ALL_MATCH_PATTERN, store, false)) { @@ -685,7 +669,6 @@ public long countAllMeasurement() throws MetadataException { // region Interfaces and Implementation for Template check and query - @Override public void activateTemplate(PartialPath activatePath, Template template) throws MetadataException { String[] nodes = activatePath.getNodes(); @@ -729,14 +712,13 @@ public void activateTemplate(PartialPath activatePath, Template template) entityMNode.setSchemaTemplateId(template.getId()); } - @Override public Map> constructSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { try (EntityUpdater updater = new EntityUpdater(rootNode, entry.getKey(), store, false) { - @Override + protected void updateEntity(IDeviceMNode node) { if (entry.getValue().contains(node.getSchemaTemplateId())) { resultTemplateSetInfo.put( @@ -751,14 +733,13 @@ protected void updateEntity(IDeviceMNode node) { return resultTemplateSetInfo; } - @Override public Map> rollbackSchemaBlackListWithTemplate( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { try (EntityUpdater updater = new EntityUpdater(rootNode, entry.getKey(), store, false) { - @Override + protected void updateEntity(IDeviceMNode node) { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { @@ -774,14 +755,13 @@ protected void updateEntity(IDeviceMNode node) { return resultTemplateSetInfo; } - @Override public Map> deactivateTemplateInBlackList( Map> templateSetInfo) throws MetadataException { Map> resultTemplateSetInfo = new HashMap<>(); for (Map.Entry> entry : templateSetInfo.entrySet()) { try (EntityUpdater collector = new EntityUpdater(rootNode, entry.getKey(), store, false) { - @Override + protected void updateEntity(IDeviceMNode node) { if (entry.getValue().contains(node.getSchemaTemplateId()) && node.isPreDeactivateTemplate()) { @@ -823,7 +803,6 @@ public void activateTemplateWithoutCheck( entityMNode.setSchemaTemplateId(templateId); } - @Override public long countPathsUsingTemplate(PartialPath pathPattern, int templateId) throws MetadataException { try (EntityCounter counter = @@ -842,7 +821,7 @@ public ISchemaReader getDeviceReader(IShowDevicesPlan showDev EntityCollector collector = new EntityCollector( rootNode, showDevicesPlan.getPath(), store, showDevicesPlan.isPrefixMatch()) { - @Override + protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { PartialPath device = getPartialPathFromRootToNode(node.getAsMNode()); return new ShowDevicesResult(device.getFullPath(), node.isAligned()); @@ -855,27 +834,23 @@ protected IDeviceSchemaInfo collectEntity(IDeviceMNode node) { new TraverserWithLimitOffsetWrapper<>( collector, showDevicesPlan.getLimit(), showDevicesPlan.getOffset()); return new ISchemaReader() { - @Override + public boolean isSuccess() { return traverser.isSuccess(); } - @Override public Throwable getFailure() { return traverser.getFailure(); } - @Override public void close() { traverser.close(); } - @Override public boolean hasNext() { return traverser.hasNext(); } - @Override public IDeviceSchemaInfo next() { return traverser.next(); } @@ -889,23 +864,20 @@ public ISchemaReader getTimeSeriesReader( MeasurementCollector collector = new MeasurementCollector( rootNode, showTimeSeriesPlan.getPath(), store, showTimeSeriesPlan.isPrefixMatch()) { - @Override + protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) { return new ITimeSeriesSchemaInfo() { private Pair, Map> tagAndAttribute = null; - @Override public String getAlias() { return node.getAlias(); } - @Override public MeasurementSchema getSchema() { return (MeasurementSchema) node.getSchema(); } - @Override public Map getTags() { if (tagAndAttribute == null) { tagAndAttribute = tagAndAttributeProvider.apply(node.getOffset()); @@ -913,7 +885,6 @@ public Map getTags() { return tagAndAttribute.left; } - @Override public Map getAttributes() { if (tagAndAttribute == null) { tagAndAttribute = tagAndAttributeProvider.apply(node.getOffset()); @@ -921,17 +892,14 @@ public Map getAttributes() { return tagAndAttribute.right; } - @Override public boolean isUnderAlignedDevice() { return getParentOfNextMatchedNode().getAsDeviceMNode().isAligned(); } - @Override public String getFullPath() { return getPartialPathFromRootToNode(node.getAsMNode()).getFullPath(); } - @Override public PartialPath getPartialPath() { return getPartialPathFromRootToNode(node.getAsMNode()); } @@ -948,27 +916,23 @@ public PartialPath getPartialPath() { traverser = collector; } return new ISchemaReader() { - @Override + public boolean isSuccess() { return traverser.isSuccess(); } - @Override public Throwable getFailure() { return traverser.getFailure(); } - @Override public void close() { traverser.close(); } - @Override public boolean hasNext() { return traverser.hasNext(); } - @Override public ITimeSeriesSchemaInfo next() { return traverser.next(); } @@ -980,7 +944,7 @@ public ISchemaReader getNodeReader(IShowNodesPlan showNodesPlan MNodeCollector collector = new MNodeCollector( rootNode, showNodesPlan.getPath(), store, showNodesPlan.isPrefixMatch()) { - @Override + protected INodeSchemaInfo collectMNode(IMemMNode node) { return new ShowNodesResult( getPartialPathFromRootToNode(node).getFullPath(), node.getMNodeType(false)); @@ -989,27 +953,23 @@ protected INodeSchemaInfo collectMNode(IMemMNode node) { collector.setTargetLevel(showNodesPlan.getLevel()); return new ISchemaReader() { - @Override + public boolean isSuccess() { return collector.isSuccess(); } - @Override public Throwable getFailure() { return collector.getFailure(); } - @Override public void close() { collector.close(); } - @Override public boolean hasNext() { return collector.hasNext(); } - @Override public INodeSchemaInfo next() { return collector.next(); } From 2f4ecf1d6b56b4e729b5f79029c26344d288ccf7 Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Wed, 15 Mar 2023 17:18:57 +0800 Subject: [PATCH 25/26] save --- .../iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java index 764b032a1f316..2403b54bb6fde 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java @@ -97,7 +97,6 @@ public void testMemoryStatistics() throws Exception { null, "sg1", CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()); sg1.setFullPath("root.sg1"); long size1 = sg1.estimateSize(); - System.out.println("===" + size1); IMNode tmp = nodeFactory.createMeasurementMNode( sg1.getAsDeviceMNode(), @@ -151,6 +150,7 @@ public void testMemoryStatistics() throws Exception { Assert.assertEquals(size2, schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); } + System.out.println(engineStatistics.getMemoryUsage()); Assert.assertEquals(0, schemaRegion1.getSchemaRegionStatistics().getSchemaRegionId()); Assert.assertEquals(1, schemaRegion2.getSchemaRegionStatistics().getSchemaRegionId()); checkSchemaFileStatistics(engineStatistics); From d2d71f4140f38213bc2f84c9b4df7703bc48af7e Mon Sep 17 00:00:00 2001 From: Cpaulyz Date: Wed, 15 Mar 2023 18:05:44 +0800 Subject: [PATCH 26/26] fix ci --- .../java/org/apache/iotdb/db/it/schema/AbstractSchemaIT.java | 2 +- .../iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/AbstractSchemaIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/AbstractSchemaIT.java index 380be264870f9..0c74d462253db 100644 --- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/AbstractSchemaIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/AbstractSchemaIT.java @@ -60,7 +60,7 @@ public void setUp() throws Exception { break; case SchemaFile: EnvFactory.getEnv().getConfig().getCommonConfig().setSchemaEngineMode("Schema_File"); - allocateMemoryForSchemaRegion(3600); + allocateMemoryForSchemaRegion(4000); break; } } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java index 2403b54bb6fde..4318c13f163e5 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaStatisticsTest.java @@ -150,7 +150,6 @@ public void testMemoryStatistics() throws Exception { Assert.assertEquals(size2, schemaRegion2.getSchemaRegionStatistics().getRegionMemoryUsage()); Assert.assertEquals(size1 + size2, engineStatistics.getMemoryUsage()); } - System.out.println(engineStatistics.getMemoryUsage()); Assert.assertEquals(0, schemaRegion1.getSchemaRegionStatistics().getSchemaRegionId()); Assert.assertEquals(1, schemaRegion2.getSchemaRegionStatistics().getSchemaRegionId()); checkSchemaFileStatistics(engineStatistics);