Skip to content

Commit 0d64827

Browse files
authored
Support all push-able expressions in push down to metaData & Optimized database-related error logs
1 parent de22d8f commit 0d64827

File tree

14 files changed

+305
-163
lines changed

14 files changed

+305
-163
lines changed

integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1009,7 +1009,7 @@ public static void assertDataEventuallyOnEnv(
10091009
String expectedHeader,
10101010
Set<String> expectedResSet,
10111011
String dataBaseName) {
1012-
assertDataEventuallyOnEnv(env, sql, expectedHeader, expectedResSet, 300, dataBaseName);
1012+
assertDataEventuallyOnEnv(env, sql, expectedHeader, expectedResSet, 600, dataBaseName);
10131013
}
10141014

10151015
public static void assertDataEventuallyOnEnv(

integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBTableIT.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,13 +453,56 @@ public void testManageTable() {
453453

454454
statement.execute("drop database test1");
455455

456+
// Test error messages
456457
try {
457458
statement.executeQuery("SHOW tables from test1");
458459
fail();
459460
} catch (final SQLException e) {
460461
assertEquals("500: Unknown database test1", e.getMessage());
461462
}
462463

464+
try {
465+
statement.execute("create table test1.test()");
466+
fail();
467+
} catch (final SQLException e) {
468+
assertEquals("500: Unknown database test1", e.getMessage());
469+
}
470+
471+
try {
472+
statement.execute("alter table test1.test add column a int32");
473+
fail();
474+
} catch (final SQLException e) {
475+
assertEquals("500: Unknown database test1", e.getMessage());
476+
}
477+
478+
try {
479+
statement.execute("alter table test1.test drop column a");
480+
fail();
481+
} catch (final SQLException e) {
482+
assertEquals("500: Unknown database test1", e.getMessage());
483+
}
484+
485+
try {
486+
statement.execute("alter table test1.test set properties ttl=default");
487+
fail();
488+
} catch (final SQLException e) {
489+
assertEquals("500: Unknown database test1", e.getMessage());
490+
}
491+
492+
try {
493+
statement.execute("desc test1.test");
494+
fail();
495+
} catch (final SQLException e) {
496+
assertEquals("500: Unknown database test1", e.getMessage());
497+
}
498+
499+
try {
500+
statement.execute("drop table test1.test");
501+
fail();
502+
} catch (final SQLException e) {
503+
assertEquals("500: Unknown database test1", e.getMessage());
504+
}
505+
463506
} catch (final SQLException e) {
464507
e.printStackTrace();
465508
fail(e.getMessage());

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,14 +1152,16 @@ public void updateSchemaQuotaConfiguration(long seriesThreshold, long deviceThre
11521152
schemaQuotaStatistics.setSeriesThreshold(seriesThreshold);
11531153
}
11541154

1155-
public Optional<TsTable> getTableIfExists(final String database, final String tableName) {
1155+
public Optional<TsTable> getTableIfExists(final String database, final String tableName)
1156+
throws MetadataException {
11561157
return clusterSchemaInfo.getTsTableIfExists(database, tableName);
11571158
}
11581159

11591160
public synchronized Pair<TSStatus, TsTable> tableColumnCheckForColumnExtension(
11601161
final String database,
11611162
final String tableName,
1162-
final List<TsTableColumnSchema> columnSchemaList) {
1163+
final List<TsTableColumnSchema> columnSchemaList)
1164+
throws MetadataException {
11631165
final TsTable originalTable = getTableIfExists(database, tableName).orElse(null);
11641166

11651167
if (Objects.isNull(originalTable)) {
@@ -1196,7 +1198,8 @@ public synchronized Pair<TSStatus, TsTable> tableColumnCheckForColumnExtension(
11961198
}
11971199

11981200
public synchronized Pair<TSStatus, TsTable> tableColumnCheckForColumnRenaming(
1199-
final String database, final String tableName, final String oldName, final String newName) {
1201+
final String database, final String tableName, final String oldName, final String newName)
1202+
throws MetadataException {
12001203
final TsTable originalTable = getTableIfExists(database, tableName).orElse(null);
12011204

12021205
if (Objects.isNull(originalTable)) {
@@ -1289,7 +1292,8 @@ public synchronized Pair<TSStatus, TsTable> updateTableProperties(
12891292
final String database,
12901293
final String tableName,
12911294
final Map<String, String> originalProperties,
1292-
final Map<String, String> updatedProperties) {
1295+
final Map<String, String> updatedProperties)
1296+
throws MetadataException {
12931297
final TsTable originalTable = getTableIfExists(database, tableName).orElse(null);
12941298

12951299
if (Objects.isNull(originalTable)) {

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,13 +1212,11 @@ public Map<String, List<TsTable>> getAllPreCreateTables() {
12121212
}
12131213
}
12141214

1215-
public Optional<TsTable> getTsTableIfExists(final String database, final String tableName) {
1215+
public Optional<TsTable> getTsTableIfExists(final String database, final String tableName)
1216+
throws MetadataException {
12161217
databaseReadWriteLock.readLock().lock();
12171218
try {
12181219
return mTree.getTableIfExists(getQualifiedDatabasePartialPath(database), tableName);
1219-
} catch (final MetadataException e) {
1220-
LOGGER.warn(e.getMessage(), e);
1221-
throw new RuntimeException(e);
12221220
} finally {
12231221
databaseReadWriteLock.readLock().unlock();
12241222
}

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.apache.iotdb.common.rpc.thrift.TSStatus;
2323
import org.apache.iotdb.commons.exception.IoTDBException;
24+
import org.apache.iotdb.commons.exception.MetadataException;
2425
import org.apache.iotdb.commons.schema.table.TsTable;
2526
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
2627
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchemaUtil;
@@ -99,17 +100,22 @@ protected Flow executeFromState(final ConfigNodeProcedureEnv env, final AddTable
99100
}
100101

101102
private void columnCheck(final ConfigNodeProcedureEnv env) {
102-
final Pair<TSStatus, TsTable> result =
103-
env.getConfigManager()
104-
.getClusterSchemaManager()
105-
.tableColumnCheckForColumnExtension(database, tableName, addedColumnList);
106-
final TSStatus status = result.getLeft();
107-
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
108-
setFailure(new ProcedureException(new IoTDBException(status.getMessage(), status.getCode())));
109-
return;
103+
try {
104+
final Pair<TSStatus, TsTable> result =
105+
env.getConfigManager()
106+
.getClusterSchemaManager()
107+
.tableColumnCheckForColumnExtension(database, tableName, addedColumnList);
108+
final TSStatus status = result.getLeft();
109+
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
110+
setFailure(
111+
new ProcedureException(new IoTDBException(status.getMessage(), status.getCode())));
112+
return;
113+
}
114+
table = result.getRight();
115+
setNextState(AddTableColumnState.PRE_RELEASE);
116+
} catch (final MetadataException e) {
117+
setFailure(new ProcedureException(e));
110118
}
111-
table = result.getRight();
112-
setNextState(AddTableColumnState.PRE_RELEASE);
113119
}
114120

115121
@Override

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -128,19 +128,23 @@ protected Flow executeFromState(final ConfigNodeProcedureEnv env, final CreateTa
128128
}
129129

130130
private void checkTableExistence(final ConfigNodeProcedureEnv env) {
131-
if (env.getConfigManager()
132-
.getClusterSchemaManager()
133-
.getTableIfExists(database, table.getTableName())
134-
.isPresent()) {
135-
setFailure(
136-
new ProcedureException(
137-
new IoTDBException(
138-
String.format(
139-
"Table '%s.%s' already exists.",
140-
database.substring(ROOT.length() + 1), table.getTableName()),
141-
TABLE_ALREADY_EXISTS.getStatusCode())));
142-
} else {
143-
setNextState(CreateTableState.PRE_CREATE);
131+
try {
132+
if (env.getConfigManager()
133+
.getClusterSchemaManager()
134+
.getTableIfExists(database, table.getTableName())
135+
.isPresent()) {
136+
setFailure(
137+
new ProcedureException(
138+
new IoTDBException(
139+
String.format(
140+
"Table '%s.%s' already exists.",
141+
database.substring(ROOT.length() + 1), table.getTableName()),
142+
TABLE_ALREADY_EXISTS.getStatusCode())));
143+
} else {
144+
setNextState(CreateTableState.PRE_CREATE);
145+
}
146+
} catch (final MetadataException e) {
147+
setFailure(new ProcedureException(e));
144148
}
145149
}
146150

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -134,19 +134,23 @@ protected Flow executeFromState(final ConfigNodeProcedureEnv env, final DeleteDe
134134
}
135135

136136
private void checkTableExistence(final ConfigNodeProcedureEnv env) {
137-
if (env.getConfigManager()
138-
.getClusterSchemaManager()
139-
.getTableIfExists(database, table.getTableName())
140-
.isPresent()) {
141-
setFailure(
142-
new ProcedureException(
143-
new IoTDBException(
144-
String.format(
145-
"Table '%s.%s' already exists.",
146-
database.substring(ROOT.length() + 1), table.getTableName()),
147-
TABLE_ALREADY_EXISTS.getStatusCode())));
148-
} else {
149-
setNextState(CONSTRUCT_BLACK_LIST);
137+
try {
138+
if (env.getConfigManager()
139+
.getClusterSchemaManager()
140+
.getTableIfExists(database, table.getTableName())
141+
.isPresent()) {
142+
setFailure(
143+
new ProcedureException(
144+
new IoTDBException(
145+
String.format(
146+
"Table '%s.%s' already exists.",
147+
database.substring(ROOT.length() + 1), table.getTableName()),
148+
TABLE_ALREADY_EXISTS.getStatusCode())));
149+
} else {
150+
setNextState(CONSTRUCT_BLACK_LIST);
151+
}
152+
} catch (final MetadataException e) {
153+
setFailure(new ProcedureException(e));
150154
}
151155
}
152156

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.apache.iotdb.common.rpc.thrift.TSStatus;
2323
import org.apache.iotdb.commons.exception.IoTDBException;
24+
import org.apache.iotdb.commons.exception.MetadataException;
2425
import org.apache.iotdb.commons.schema.table.TsTable;
2526
import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
2627
import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
@@ -105,17 +106,22 @@ protected Flow executeFromState(
105106
}
106107

107108
private void columnCheck(final ConfigNodeProcedureEnv env) {
108-
final Pair<TSStatus, TsTable> result =
109-
env.getConfigManager()
110-
.getClusterSchemaManager()
111-
.tableColumnCheckForColumnRenaming(database, tableName, oldName, newName);
112-
final TSStatus status = result.getLeft();
113-
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
114-
setFailure(new ProcedureException(new IoTDBException(status.getMessage(), status.getCode())));
115-
return;
109+
try {
110+
final Pair<TSStatus, TsTable> result =
111+
env.getConfigManager()
112+
.getClusterSchemaManager()
113+
.tableColumnCheckForColumnRenaming(database, tableName, oldName, newName);
114+
final TSStatus status = result.getLeft();
115+
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
116+
setFailure(
117+
new ProcedureException(new IoTDBException(status.getMessage(), status.getCode())));
118+
return;
119+
}
120+
table = result.getRight();
121+
setNextState(RenameTableColumnState.PRE_RELEASE);
122+
} catch (final MetadataException e) {
123+
setFailure(new ProcedureException(e));
116124
}
117-
table = result.getRight();
118-
setNextState(RenameTableColumnState.PRE_RELEASE);
119125
}
120126

121127
private void renameColumn(final ConfigNodeProcedureEnv env) {

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.apache.iotdb.common.rpc.thrift.TSStatus;
2323
import org.apache.iotdb.commons.exception.IoTDBException;
24+
import org.apache.iotdb.commons.exception.MetadataException;
2425
import org.apache.iotdb.commons.schema.table.TsTable;
2526
import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
2627
import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
@@ -115,17 +116,22 @@ protected Flow executeFromState(
115116
}
116117

117118
private void validateTable(final ConfigNodeProcedureEnv env) {
118-
final Pair<TSStatus, TsTable> result =
119-
env.getConfigManager()
120-
.getClusterSchemaManager()
121-
.updateTableProperties(database, tableName, originalProperties, updatedProperties);
122-
final TSStatus status = result.getLeft();
123-
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
124-
setFailure(new ProcedureException(new IoTDBException(status.getMessage(), status.getCode())));
125-
return;
119+
try {
120+
final Pair<TSStatus, TsTable> result =
121+
env.getConfigManager()
122+
.getClusterSchemaManager()
123+
.updateTableProperties(database, tableName, originalProperties, updatedProperties);
124+
final TSStatus status = result.getLeft();
125+
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
126+
setFailure(
127+
new ProcedureException(new IoTDBException(status.getMessage(), status.getCode())));
128+
return;
129+
}
130+
table = result.getRight();
131+
setNextState(PRE_RELEASE);
132+
} catch (final MetadataException e) {
133+
setFailure(new ProcedureException(e));
126134
}
127-
table = result.getRight();
128-
setNextState(PRE_RELEASE);
129135
}
130136

131137
@Override

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/exception/metadata/DatabaseModelException.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,19 @@
2020
package org.apache.iotdb.db.exception.metadata;
2121

2222
import org.apache.iotdb.commons.exception.MetadataException;
23+
import org.apache.iotdb.commons.utils.PathUtils;
2324
import org.apache.iotdb.rpc.TSStatusCode;
2425

2526
public class DatabaseModelException extends MetadataException {
2627
public DatabaseModelException(final String path, final boolean isTableModel) {
2728
super(
28-
"The database " + path + " is a " + (isTableModel ? "table" : "tree") + " model database.",
29+
"The database "
30+
+ (isTableModel
31+
? PathUtils.qualifyDatabaseName(path)
32+
: PathUtils.unQualifyDatabaseName(path))
33+
+ " is a "
34+
+ (isTableModel ? "table" : "tree")
35+
+ " model database.",
2936
TSStatusCode.DATABASE_MODEL.getStatusCode());
3037
}
3138
}

0 commit comments

Comments
 (0)