This is an automated email from the ASF dual-hosted git repository.
justinchen pushed a commit to branch schema_13
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/schema_13 by this push:
new 5131d56b130 Fixed multiple bugs related to schema (#17405)
5131d56b130 is described below
commit 5131d56b1306d0af47b2d4be3fb25c2e829e898a
Author: Caideyipi <[email protected]>
AuthorDate: Thu Apr 2 09:09:34 2026 +0800
Fixed multiple bugs related to schema (#17405)
---
.../db/schemaengine/rescon/MemSchemaRegionStatistics.java | 4 +++-
.../db/schemaengine/schemaregion/SchemaRegionPlanType.java | 1 +
.../schemaregion/impl/SchemaRegionMemoryImpl.java | 2 +-
.../impl/mem/mnode/iterator/AbstractTraverserIterator.java | 3 +++
.../impl/mem/mnode/iterator/MemoryTraverserIterator.java | 14 ++++++++++----
.../pbtree/mnode/iterator/CachedTraverserIterator.java | 7 +++++++
.../mtree/impl/pbtree/schemafile/WrappedSegment.java | 12 +++++-------
.../metadata/schemaRegion/SchemaRegionManagementTest.java | 12 ++++++++++++
.../apache/iotdb/commons/schema/filter/SchemaFilter.java | 7 ++++++-
.../java/org/apache/iotdb/commons/schema/ttl/TTLCache.java | 3 +++
10 files changed, 51 insertions(+), 14 deletions(-)
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 be960b3807b..2bcc0e159e2 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,10 +168,12 @@ public class MemSchemaRegionStatistics implements
ISchemaRegionStatistics {
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();
+ tableDeviceNumber.clear();
+ tableAttributeMemory.clear();
}
@Override
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 09a69f2b4f6..41ec8e649c5 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 7f8074c61ff..27ae6eb7f5d 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
@@ -873,7 +873,7 @@ public class SchemaRegionMemoryImpl implements
ISchemaRegion {
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 f7f6d7d1ae6..e9aa30333c7 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 abstract class AbstractTraverserIterator<N extends
IMNode<N>> implements
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 15eb95df4ab..684b398c472 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 @@ import java.util.Map;
// only use for IConfigMNode and IMemMNode
public class MemoryTraverserIterator<N extends IMNode<N>> extends
AbstractTraverserIterator<N> {
public MemoryTraverserIterator(
- IMTreeStore<N> store,
- IDeviceMNode<N> parent,
- Map<Integer, Template> templateMap,
- IMNodeFactory<N> nodeFactory)
+ final IMTreeStore<N> store,
+ final IDeviceMNode<N> parent,
+ final Map<Integer, Template> templateMap,
+ final IMNodeFactory<N> 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 0d14e2251c4..0654c93b834 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 class CachedTraverserIterator extends
AbstractTraverserIterator<ICachedMN
}
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 e46f1aea025..65e1edebcf9 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 class WrappedSegment implements
ISegment<ByteBuffer, ICachedMNode> {
}
}
- 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<ByteBuffer, ICachedMNode> initAsSegment(ByteBuffer
buffer)
- throws RecordDuplicatedException {
+ public static ISegment<ByteBuffer, ICachedMNode> initAsSegment(ByteBuffer
buffer) {
if (buffer == null) {
return null;
}
@@ -559,7 +558,6 @@ public class WrappedSegment implements ISegment<ByteBuffer,
ICachedMNode> {
@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 class WrappedSegment implements ISegment<ByteBuffer,
ICachedMNode> {
}
// 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 d0278711219..2d79a6a4766 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.consensus.ConsensusFactory;
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.Ignore;
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 class SchemaRegionManagementTest extends
AbstractSchemaRegionTest {
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 a9e5fea0b73..d59e59ba2bc 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 abstract class SchemaFilter {
}
private static void internalExtract(
- List<SchemaFilter> result, SchemaFilter schemaFilter, SchemaFilterType
filterType) {
+ final List<SchemaFilter> 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 b3a3e3a891c..59f4653f0ae 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 class TTLCache {
public void clear() {
ttlCacheTree.removeAllChildren();
ttlCacheTree.addChild(IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD,
Long.MAX_VALUE);
+
+ // root.**
+ ttlCount = 1;
}
static class CacheNode {