This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 1d116161506 Fixed multiple bugs related to schema (#17405)
1d116161506 is described below
commit 1d116161506a9263d569c74b061671b954618228
Author: Caideyipi <[email protected]>
AuthorDate: Thu Apr 2 09:09:34 2026 +0800
Fixed multiple bugs related to schema (#17405)
---
.../persistence/schema/mnode/impl/ConfigTableNode.java | 4 ++++
.../impl/schema/table/DeleteDevicesProcedure.java | 1 -
.../plan/analyze/schema/ClusterSchemaFetcher.java | 8 +++++---
.../plan/analyze/schema/NormalSchemaFetcher.java | 16 +++++++---------
.../metadata/fetcher/TableDeviceSchemaFetcher.java | 12 ++++++------
.../{ => fetcher}/cache/DeviceSchemaRequestCache.java | 2 +-
.../metadata/fetcher/cache/TableDeviceSchemaCache.java | 4 +++-
.../queryengine/plan/relational/sql/ast/Expression.java | 2 ++
.../relational/sql/ast/RelationalAuthorStatement.java | 2 +-
.../schemaengine/rescon/MemSchemaRegionStatistics.java | 4 +++-
.../schemaengine/schemaregion/SchemaRegionPlanType.java | 2 +-
.../schemaregion/impl/SchemaRegionMemoryImpl.java | 2 +-
.../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 +++++-------
.../schemaRegion/SchemaRegionManagementTest.java | 12 ++++++++++++
.../apache/iotdb/commons/schema/filter/SchemaFilter.java | 3 +++
.../org/apache/iotdb/commons/schema/ttl/TTLCache.java | 3 +++
19 files changed, 77 insertions(+), 36 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/impl/ConfigTableNode.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/impl/ConfigTableNode.java
index b95b50ff0be..196a0ed47e9 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/impl/ConfigTableNode.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/impl/ConfigTableNode.java
@@ -101,6 +101,10 @@ public class ConfigTableNode implements IConfigMNode {
@Override
public void setName(final String name) {
tableNodeInfo.setName(name);
+
+ // Full path ends with name, so it needs to be updated when name changes
+ // Clear cache and compute again when fullPath is next accessed
+ this.fullPath = null;
}
@Override
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java
index b78b99539ed..89b81613172 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java
@@ -204,7 +204,6 @@ public class DeleteDevicesProcedure extends
AbstractAlterOrDropTableProcedure<De
};
deleteDevicesExecutor.execute();
- setNextState(CONSTRUCT_BLACK_LIST);
deletedDevicesNum =
!isFailed()
? deleteDevicesExecutor.getSuccessResult().stream()
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
index 1be03d479b6..f4ae6c679d0 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
@@ -329,9 +329,11 @@ public class ClusterSchemaFetcher implements
ISchemaFetcher {
if (!config.isAutoCreateSchemaEnabled()) {
// disable auto-create for non-system series
indexOfDevicesWithMissingMeasurements.removeIf(
- i -> !devicePathList.get(i).startsWith("root." +
SystemConstant.SYSTEM_PREFIX_KEY));
- indexOfDevicesWithMissingMeasurements.removeIf(
- i -> !devicePathList.get(i).startsWith("root." +
SystemConstant.AUDIT_PREFIX_KEY));
+ i ->
+ !devicePathList.get(i).startsWith("root." +
SystemConstant.SYSTEM_PREFIX_KEY)
+ && !devicePathList
+ .get(i)
+ .startsWith("root." +
SystemConstant.AUDIT_PREFIX_KEY));
if (indexOfDevicesWithMissingMeasurements.isEmpty()) {
return schemaTree;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java
index 59bb199acf0..d7d5275ef55 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java
@@ -330,15 +330,13 @@ class NormalSchemaFetcher {
indexOfDevicesNeedAutoCreateSchema.removeIf(
i ->
!schemaComputationWithAutoCreationList
- .get(i)
- .getDevicePath()
- .startsWith("root." + SystemConstant.SYSTEM_PREFIX_KEY));
- indexOfDevicesNeedAutoCreateSchema.removeIf(
- i ->
- !schemaComputationWithAutoCreationList
- .get(i)
- .getDevicePath()
- .startsWith("root." + SystemConstant.AUDIT_PREFIX_KEY));
+ .get(i)
+ .getDevicePath()
+ .startsWith("root." + SystemConstant.SYSTEM_PREFIX_KEY)
+ && !schemaComputationWithAutoCreationList
+ .get(i)
+ .getDevicePath()
+ .startsWith("root." + SystemConstant.AUDIT_PREFIX_KEY));
}
// [Step 5] Auto Create and process the missing schema
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
index e6c6048fa6b..be8ddca051b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
@@ -38,7 +38,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.analyzer.predicate.schema
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.AlignedDeviceEntry;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.DeviceEntry;
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.NonAlignedDeviceEntry;
-import
org.apache.iotdb.db.queryengine.plan.relational.metadata.cache.DeviceSchemaRequestCache;
+import
org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.DeviceSchemaRequestCache;
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.IDeviceSchema;
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TableDeviceSchemaCache;
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TreeDeviceNormalSchema;
@@ -169,7 +169,7 @@ public class TableDeviceSchemaFetcher {
for (int i = 0; i < tsBlock.get().getPositionCount(); i++) {
final String[] nodes = new String[tagLength + 1];
final Map<String, Binary> attributeMap = new HashMap<>();
- constructNodsArrayAndAttributeMap(
+ constructNodesArrayAndAttributeMap(
attributeMap, nodes, table, columnHeaderList, columns,
tableInstance, i);
fetchedDeviceSchema.put(IDeviceID.Factory.DEFAULT_FACTORY.create(nodes),
attributeMap);
@@ -566,7 +566,7 @@ public class TableDeviceSchemaFetcher {
for (int i = 0; i < tsBlock.getPositionCount(); i++) {
final String[] nodes = new String[tableInstance.getTagNum() + 1];
final Map<String, Binary> attributeMap = new HashMap<>();
- constructNodsArrayAndAttributeMap(
+ constructNodesArrayAndAttributeMap(
attributeMap,
nodes,
tableInstance.getTableName(),
@@ -597,7 +597,7 @@ public class TableDeviceSchemaFetcher {
final Column[] columns = tsBlock.getValueColumns();
for (int i = 0; i < tsBlock.getPositionCount(); i++) {
final String[] nodes = new String[tableInstance.getTagNum()];
- constructNodsArrayAndAttributeMap(
+ constructNodesArrayAndAttributeMap(
Collections.emptyMap(), nodes, null, columnHeaderList, columns,
tableInstance, i);
final IDeviceID deviceID =
DataNodeTreeViewSchemaUtils.convertToIDeviceID(tableInstance, nodes);
@@ -608,13 +608,13 @@ public class TableDeviceSchemaFetcher {
mppQueryContext.reserveMemoryForFrontEnd(deviceEntry.ramBytesUsed());
deviceEntryMap
.computeIfAbsent(
- columns[columns.length -
1].getBinary(0).getStringValue(TSFileConfig.STRING_CHARSET),
+ columns[columns.length -
1].getBinary(i).getStringValue(TSFileConfig.STRING_CHARSET),
k -> new ArrayList<>())
.add(deviceEntry);
}
}
- private void constructNodsArrayAndAttributeMap(
+ private void constructNodesArrayAndAttributeMap(
final Map<String, Binary> attributeMap,
final String[] nodes,
final String tableName,
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/cache/DeviceSchemaRequestCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/DeviceSchemaRequestCache.java
similarity index 99%
rename from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/cache/DeviceSchemaRequestCache.java
rename to
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/DeviceSchemaRequestCache.java
index b2711779fcc..e612d633653 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/cache/DeviceSchemaRequestCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/DeviceSchemaRequestCache.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.queryengine.plan.relational.metadata.cache;
+package org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.FetchDevice;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
index ebbb137a2d8..3e599355098 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
@@ -37,6 +37,7 @@ import
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.dualkeycache.im
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
import org.apache.iotdb.db.schemaengine.schemaregion.SchemaRegion;
import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
+import org.apache.iotdb.rpc.subscription.annotation.TableModel;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -667,6 +668,7 @@ public class TableDeviceSchemaCache {
}
}
+ @TableModel
public void invalidate(
final String database,
final String tableName,
@@ -680,7 +682,7 @@ public class TableDeviceSchemaCache {
isAttributeColumn
? entry -> -entry.invalidateAttributeColumn(columnName)
: entry -> -entry.invalidateLastCache(columnName);
- dualKeyCache.update(new TableId(null, tableName), deviceID -> true,
updateFunction);
+ dualKeyCache.update(new TableId(database, tableName), deviceID -> true,
updateFunction);
} finally {
readWriteLock.writeLock().unlock();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Expression.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Expression.java
index 26d12beecb1..9ebe61cdb35 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Expression.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Expression.java
@@ -158,6 +158,8 @@ public abstract class Expression extends Node {
case 28:
expression = new WhenClause(byteBuffer);
break;
+ // 29: CurrentDatabase, 30: CurrentUser
+ // Do not deserialize here and throw exception because it's unexpected
case 31:
expression = new Row(byteBuffer);
break;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java
index 638de594395..8fbf1339e41 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java
@@ -380,7 +380,7 @@ public class RelationalAuthorStatement extends Statement {
}
break;
case DROP_ROLE:
- if (AuthorityChecker.SUPER_USER.equals(userName)) {
+ if (AuthorityChecker.SUPER_USER.equals(roleName)) {
return AuthorityChecker.getTSStatus(false, "Cannot drop role with
admin name");
}
break;
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 e5ab6e7ba95..79babd53909 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
@@ -214,10 +214,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 b0d41c725ee..ff1d118d545 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,7 +39,7 @@ public enum SchemaRegionPlanType {
ACTIVATE_TEMPLATE_IN_CLUSTER((byte) 63),
PRE_DELETE_TIMESERIES_IN_CLUSTER((byte) 64),
ROLLBACK_PRE_DELETE_TIMESERIES((byte) 65),
- ALTER_ENCODING_COMPRESSOR((byte) 66),
+ ALTER_ENCODING_COMPRESSOR((byte) 80),
// endregion
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 0719835fe7a..c5c3b7f57b8 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
@@ -1002,7 +1002,7 @@ public class SchemaRegionMemoryImpl implements
ISchemaRegion {
writeToMLog(plan);
}
// 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 5f72358418b..5e5788fa5f9 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 c222d5ecd86..8a0dd8da31b 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 529ddd44658..0075e7da6e6 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 8d9d4032883..0e77214afa7 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 4fae0f9fc0f..38f56b66dd9 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
@@ -29,6 +29,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;
@@ -41,6 +42,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;
@@ -230,4 +232,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 bb993c172e6..cdfd4164b8e 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
@@ -119,6 +119,9 @@ public abstract class SchemaFilter implements Accountable {
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 3bc72ed0472..d8640bceaa0 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
@@ -339,6 +339,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 {