Skip to content

Commit 1d11616

Browse files
authored
Fixed multiple bugs related to schema (#17405)
1 parent 436524f commit 1d11616

19 files changed

Lines changed: 77 additions & 36 deletions

File tree

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/mnode/impl/ConfigTableNode.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ public String getName() {
101101
@Override
102102
public void setName(final String name) {
103103
tableNodeInfo.setName(name);
104+
105+
// Full path ends with name, so it needs to be updated when name changes
106+
// Clear cache and compute again when fullPath is next accessed
107+
this.fullPath = null;
104108
}
105109

106110
@Override

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@ protected void onAllReplicasetFailure(
204204
};
205205
deleteDevicesExecutor.execute();
206206

207-
setNextState(CONSTRUCT_BLACK_LIST);
208207
deletedDevicesNum =
209208
!isFailed()
210209
? deleteDevicesExecutor.getSuccessResult().stream()

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,11 @@ public ISchemaTree fetchSchemaListWithAutoCreate(
329329
if (!config.isAutoCreateSchemaEnabled()) {
330330
// disable auto-create for non-system series
331331
indexOfDevicesWithMissingMeasurements.removeIf(
332-
i -> !devicePathList.get(i).startsWith("root." + SystemConstant.SYSTEM_PREFIX_KEY));
333-
indexOfDevicesWithMissingMeasurements.removeIf(
334-
i -> !devicePathList.get(i).startsWith("root." + SystemConstant.AUDIT_PREFIX_KEY));
332+
i ->
333+
!devicePathList.get(i).startsWith("root." + SystemConstant.SYSTEM_PREFIX_KEY)
334+
&& !devicePathList
335+
.get(i)
336+
.startsWith("root." + SystemConstant.AUDIT_PREFIX_KEY));
335337
if (indexOfDevicesWithMissingMeasurements.isEmpty()) {
336338
return schemaTree;
337339
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -330,15 +330,13 @@ void processNormalTimeSeries(
330330
indexOfDevicesNeedAutoCreateSchema.removeIf(
331331
i ->
332332
!schemaComputationWithAutoCreationList
333-
.get(i)
334-
.getDevicePath()
335-
.startsWith("root." + SystemConstant.SYSTEM_PREFIX_KEY));
336-
indexOfDevicesNeedAutoCreateSchema.removeIf(
337-
i ->
338-
!schemaComputationWithAutoCreationList
339-
.get(i)
340-
.getDevicePath()
341-
.startsWith("root." + SystemConstant.AUDIT_PREFIX_KEY));
333+
.get(i)
334+
.getDevicePath()
335+
.startsWith("root." + SystemConstant.SYSTEM_PREFIX_KEY)
336+
&& !schemaComputationWithAutoCreationList
337+
.get(i)
338+
.getDevicePath()
339+
.startsWith("root." + SystemConstant.AUDIT_PREFIX_KEY));
342340
}
343341

344342
// [Step 5] Auto Create and process the missing schema

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import org.apache.iotdb.db.queryengine.plan.relational.metadata.AlignedDeviceEntry;
3939
import org.apache.iotdb.db.queryengine.plan.relational.metadata.DeviceEntry;
4040
import org.apache.iotdb.db.queryengine.plan.relational.metadata.NonAlignedDeviceEntry;
41-
import org.apache.iotdb.db.queryengine.plan.relational.metadata.cache.DeviceSchemaRequestCache;
41+
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.DeviceSchemaRequestCache;
4242
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.IDeviceSchema;
4343
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TableDeviceSchemaCache;
4444
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache.TreeDeviceNormalSchema;
@@ -169,7 +169,7 @@ Map<IDeviceID, Map<String, Binary>> fetchMissingDeviceSchemaForDataInsertion(
169169
for (int i = 0; i < tsBlock.get().getPositionCount(); i++) {
170170
final String[] nodes = new String[tagLength + 1];
171171
final Map<String, Binary> attributeMap = new HashMap<>();
172-
constructNodsArrayAndAttributeMap(
172+
constructNodesArrayAndAttributeMap(
173173
attributeMap, nodes, table, columnHeaderList, columns, tableInstance, i);
174174

175175
fetchedDeviceSchema.put(IDeviceID.Factory.DEFAULT_FACTORY.create(nodes), attributeMap);
@@ -566,7 +566,7 @@ private void constructTableResults(
566566
for (int i = 0; i < tsBlock.getPositionCount(); i++) {
567567
final String[] nodes = new String[tableInstance.getTagNum() + 1];
568568
final Map<String, Binary> attributeMap = new HashMap<>();
569-
constructNodsArrayAndAttributeMap(
569+
constructNodesArrayAndAttributeMap(
570570
attributeMap,
571571
nodes,
572572
tableInstance.getTableName(),
@@ -597,7 +597,7 @@ private void constructTreeResults(
597597
final Column[] columns = tsBlock.getValueColumns();
598598
for (int i = 0; i < tsBlock.getPositionCount(); i++) {
599599
final String[] nodes = new String[tableInstance.getTagNum()];
600-
constructNodsArrayAndAttributeMap(
600+
constructNodesArrayAndAttributeMap(
601601
Collections.emptyMap(), nodes, null, columnHeaderList, columns, tableInstance, i);
602602
final IDeviceID deviceID =
603603
DataNodeTreeViewSchemaUtils.convertToIDeviceID(tableInstance, nodes);
@@ -608,13 +608,13 @@ private void constructTreeResults(
608608
mppQueryContext.reserveMemoryForFrontEnd(deviceEntry.ramBytesUsed());
609609
deviceEntryMap
610610
.computeIfAbsent(
611-
columns[columns.length - 1].getBinary(0).getStringValue(TSFileConfig.STRING_CHARSET),
611+
columns[columns.length - 1].getBinary(i).getStringValue(TSFileConfig.STRING_CHARSET),
612612
k -> new ArrayList<>())
613613
.add(deviceEntry);
614614
}
615615
}
616616

617-
private void constructNodsArrayAndAttributeMap(
617+
private void constructNodesArrayAndAttributeMap(
618618
final Map<String, Binary> attributeMap,
619619
final String[] nodes,
620620
final String tableName,

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/cache/DeviceSchemaRequestCache.java renamed to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/DeviceSchemaRequestCache.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* under the License.
1818
*/
1919

20-
package org.apache.iotdb.db.queryengine.plan.relational.metadata.cache;
20+
package org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache;
2121

2222
import org.apache.iotdb.db.conf.IoTDBDescriptor;
2323
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.FetchDevice;

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
3838
import org.apache.iotdb.db.schemaengine.schemaregion.SchemaRegion;
3939
import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
40+
import org.apache.iotdb.rpc.subscription.annotation.TableModel;
4041

4142
import org.apache.tsfile.enums.TSDataType;
4243
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -667,6 +668,7 @@ public void invalidate(
667668
}
668669
}
669670

671+
@TableModel
670672
public void invalidate(
671673
final String database,
672674
final String tableName,
@@ -680,7 +682,7 @@ public void invalidate(
680682
isAttributeColumn
681683
? entry -> -entry.invalidateAttributeColumn(columnName)
682684
: entry -> -entry.invalidateLastCache(columnName);
683-
dualKeyCache.update(new TableId(null, tableName), deviceID -> true, updateFunction);
685+
dualKeyCache.update(new TableId(database, tableName), deviceID -> true, updateFunction);
684686
} finally {
685687
readWriteLock.writeLock().unlock();
686688
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Expression.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ public static Expression deserialize(ByteBuffer byteBuffer) {
158158
case 28:
159159
expression = new WhenClause(byteBuffer);
160160
break;
161+
// 29: CurrentDatabase, 30: CurrentUser
162+
// Do not deserialize here and throw exception because it's unexpected
161163
case 31:
162164
expression = new Row(byteBuffer);
163165
break;

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ public TSStatus checkStatementIsValid(String currentUser) {
380380
}
381381
break;
382382
case DROP_ROLE:
383-
if (AuthorityChecker.SUPER_USER.equals(userName)) {
383+
if (AuthorityChecker.SUPER_USER.equals(roleName)) {
384384
return AuthorityChecker.getTSStatus(false, "Cannot drop role with admin name");
385385
}
386386
break;

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,12 @@ public void clear() {
214214
memoryUsage.getAndSet(0);
215215
measurementNumber.getAndSet(0);
216216
devicesNumber.getAndSet(0);
217-
viewNumber.getAndAdd(0);
217+
viewNumber.getAndSet(0);
218218
templateUsage.forEach(
219219
(templateId, cnt) -> schemaEngineStatistics.deactivateTemplate(templateId, cnt));
220220
templateUsage.clear();
221+
tableDeviceNumber.clear();
222+
tableAttributeMemory.clear();
221223
}
222224

223225
@Override

0 commit comments

Comments
 (0)