diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java index be960b3807b63..a3a833f06abf6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java @@ -168,7 +168,7 @@ public void clear() { memoryUsage.getAndSet(0); measurementNumber.getAndSet(0); devicesNumber.getAndSet(0); - viewNumber.getAndAdd(0); + viewNumber.getAndSet(0); templateUsage.forEach( (templateId, cnt) -> schemaEngineStatistics.deactivateTemplate(templateId, cnt)); templateUsage.clear(); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/SchemaRegionPlanType.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/SchemaRegionPlanType.java index 09a69f2b4f699..41ec8e649c599 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/SchemaRegionPlanType.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/SchemaRegionPlanType.java @@ -39,6 +39,7 @@ public enum SchemaRegionPlanType { ACTIVATE_TEMPLATE_IN_CLUSTER((byte) 63), PRE_DELETE_TIMESERIES_IN_CLUSTER((byte) 64), ROLLBACK_PRE_DELETE_TIMESERIES((byte) 65), + // endregion PRE_DEACTIVATE_TEMPLATE((byte) 0), diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java index 7f8074c61ff30..3b9057e4dcfd1 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java @@ -857,8 +857,8 @@ public void createLogicalView(ICreateLogicalViewPlan plan) throws MetadataExcept regionStatistics.getGlobalMemoryUsage(), regionStatistics.getGlobalSeriesNumber()); } + final List pathList = plan.getViewPathList(); try { - List pathList = plan.getViewPathList(); Map viewPathToSourceMap = plan.getViewPathToSourceExpressionMap(); for (PartialPath path : pathList) { @@ -873,7 +873,7 @@ public void createLogicalView(ICreateLogicalViewPlan plan) throws MetadataExcept throw new RuntimeException(e); } // update statistics - regionStatistics.addView(1L); + regionStatistics.addView(pathList.size()); } @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java index f7f6d7d1ae65f..e9aa30333c7db 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java @@ -107,12 +107,15 @@ public boolean hasNext() { if (skipPreDeletedSchema && nextMatchedNode.isMeasurement() && nextMatchedNode.getAsMeasurementMNode().isPreDeleted()) { + releaseSkippedNode(nextMatchedNode); nextMatchedNode = null; } } return true; } + protected abstract void releaseSkippedNode(final N node); + @Override public N next() { if (!hasNext()) { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java index 15eb95df4ab90..684b398c47249 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.iterator; import org.apache.iotdb.commons.exception.MetadataException; @@ -30,11 +31,16 @@ // only use for IConfigMNode and IMemMNode public class MemoryTraverserIterator> extends AbstractTraverserIterator { public MemoryTraverserIterator( - IMTreeStore store, - IDeviceMNode parent, - Map templateMap, - IMNodeFactory nodeFactory) + final IMTreeStore store, + final IDeviceMNode parent, + final Map templateMap, + final IMNodeFactory nodeFactory) throws MetadataException { super(store, parent, templateMap, nodeFactory); } + + @Override + protected void releaseSkippedNode(final N node) { + // Do nothing + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java index 0d14e2251c4d5..0654c93b834ff 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java @@ -48,4 +48,11 @@ public void close() { } super.close(); } + + @Override + protected void releaseSkippedNode(final ICachedMNode node) { + if (usingDirectChildrenIterator) { + store.unPin(node); + } + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/WrappedSegment.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/WrappedSegment.java index e46f1aea0251c..65e1edebcf999 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/WrappedSegment.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/WrappedSegment.java @@ -105,17 +105,16 @@ public WrappedSegment(ByteBuffer buffer, boolean override) { } } - public WrappedSegment(ByteBuffer buffer) throws RecordDuplicatedException { + public WrappedSegment(ByteBuffer buffer) { this(buffer, true); } @TestOnly - public WrappedSegment(int size) throws RecordDuplicatedException { + public WrappedSegment(int size) { this(ByteBuffer.allocate(size)); } - public static ISegment initAsSegment(ByteBuffer buffer) - throws RecordDuplicatedException { + public static ISegment initAsSegment(ByteBuffer buffer) { if (buffer == null) { return null; } @@ -559,7 +558,6 @@ public Queue getAllRecords() throws MetadataException { @Override public int updateRecord(String key, ByteBuffer uBuffer) throws MetadataException { - int idx = binarySearchOnKeys(key); if (idx < 0) { throw new MetadataException(String.format("Record[key:%s] Not Existed.", key)); @@ -614,8 +612,8 @@ public int removeRecord(String key) { } // shift offsets forward - if (idx != recordNum) { - int shift = recordNum - idx; + if (idx != recordNum - 1) { + int shift = recordNum - idx - 1; this.buffer.position(SchemaFileConfig.SEG_HEADER_SIZE + idx * 2); ShortBuffer lb = this.buffer.asReadOnlyBuffer().asShortBuffer(); lb.get(); diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java index d027871121910..2d79a6a4766c8 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java @@ -27,6 +27,7 @@ import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion; +import org.apache.iotdb.db.schemaengine.schemaregion.SchemaRegionPlanType; import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.ISchemaInfo; import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.ITimeSeriesSchemaInfo; import org.apache.iotdb.db.schemaengine.schemaregion.write.req.SchemaRegionWritePlanFactory; @@ -40,6 +41,7 @@ import org.junit.Test; import java.io.File; +import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -229,4 +231,14 @@ public void testSnapshotPerformance() throws Exception { config.setSchemaRegionConsensusProtocolClass(schemaRegionConsensusProtocolClass); } } + + @Test + public void testSchemaRegionPlanType() throws Exception { + Assert.assertEquals( + SchemaRegionPlanType.values().length, + Arrays.stream(SchemaRegionPlanType.values()) + .map(SchemaRegionPlanType::getPlanType) + .distinct() + .count()); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/SchemaFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/SchemaFilter.java index a9e5fea0b73ca..d59e59ba2bc88 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/SchemaFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/SchemaFilter.java @@ -91,7 +91,12 @@ public static List extract(SchemaFilter schemaFilter, SchemaFilter } private static void internalExtract( - List result, SchemaFilter schemaFilter, SchemaFilterType filterType) { + final List result, + final SchemaFilter schemaFilter, + final SchemaFilterType filterType) { + if (schemaFilter == null) { + return; + } if (schemaFilter.getSchemaFilterType().equals(filterType)) { result.add(schemaFilter); } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/ttl/TTLCache.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/ttl/TTLCache.java index b3a3e3a891cd7..59f4653f0ae1f 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/ttl/TTLCache.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/ttl/TTLCache.java @@ -335,6 +335,9 @@ public void deserialize(InputStream bufferedInputStream) public void clear() { ttlCacheTree.removeAllChildren(); ttlCacheTree.addChild(IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD, Long.MAX_VALUE); + + // root.** + ttlCount = 1; } static class CacheNode {