This is an automated email from the ASF dual-hosted git repository.
JackieTien97 pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new e1a6847aef4 [To dev/1.3] Fixed multiple bugs related to schema
(#17405) (#17420)
e1a6847aef4 is described below
commit e1a6847aef4885ab7e8aa0052104b31e0708ee4b
Author: Caideyipi <[email protected]>
AuthorDate: Wed Apr 29 14:55:16 2026 +0800
[To dev/1.3] Fixed multiple bugs related to schema (#17405) (#17420)
---
.../db/schemaengine/rescon/MemSchemaRegionStatistics.java | 2 +-
.../db/schemaengine/schemaregion/SchemaRegionPlanType.java | 1 +
.../schemaregion/impl/SchemaRegionMemoryImpl.java | 4 ++--
.../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, 50 insertions(+), 15 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..a3a833f06ab 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 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();
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 6fc556a1089..a55de193914 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 class SchemaRegionMemoryImpl implements
ISchemaRegion {
regionStatistics.getGlobalMemoryUsage(),
regionStatistics.getGlobalSeriesNumber());
}
+ final List<PartialPath> pathList = plan.getViewPathList();
try {
- List<PartialPath> pathList = plan.getViewPathList();
Map<PartialPath, ViewExpression> viewPathToSourceMap =
plan.getViewPathToSourceExpressionMap();
for (PartialPath path : pathList) {
@@ -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 {