You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/11/16 10:23:50 UTC
[shardingsphere] branch master updated: For #21483, add DistSQL `REFRESH DATABASE METADATA FROM GOVERNANCE CENTER` (#22208)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 628e250ee52 For #21483, add DistSQL `REFRESH DATABASE METADATA FROM GOVERNANCE CENTER` (#22208)
628e250ee52 is described below
commit 628e250ee5227588e32d5a748f25b1388ee70c6a
Author: Raigor <ra...@gmail.com>
AuthorDate: Wed Nov 16 18:23:40 2022 +0800
For #21483, add DistSQL `REFRESH DATABASE METADATA FROM GOVERNANCE CENTER` (#22208)
---
distsql/parser/src/main/antlr4/imports/Keyword.g4 | 8 ++++
.../parser/src/main/antlr4/imports/RALStatement.g4 | 4 ++
.../parser/autogen/KernelDistSQLStatement.g4 | 1 +
.../core/kernel/KernelDistSQLStatementVisitor.java | 13 ++++--
....java => RefreshDatabaseMetadataStatement.java} | 40 +++--------------
.../updatable/RefreshTableMetadataStatement.java | 2 -
.../distsql/ral/RALBackendHandlerFactory.java | 21 +++++----
.../updatable/RefreshDatabaseMetadataHandler.java | 51 ++++++++++++++++++++++
8 files changed, 93 insertions(+), 47 deletions(-)
diff --git a/distsql/parser/src/main/antlr4/imports/Keyword.g4 b/distsql/parser/src/main/antlr4/imports/Keyword.g4
index 41bc0d83c3a..66d1488d0de 100644
--- a/distsql/parser/src/main/antlr4/imports/Keyword.g4
+++ b/distsql/parser/src/main/antlr4/imports/Keyword.g4
@@ -346,3 +346,11 @@ REGISTER
UNREGISTER
: U N R E G I S T E R
;
+
+GOVERNANCE
+ : G O V E R N A N C E
+ ;
+
+CENTER
+ : C E N T E R
+ ;
diff --git a/distsql/parser/src/main/antlr4/imports/RALStatement.g4 b/distsql/parser/src/main/antlr4/imports/RALStatement.g4
index 6f203eb1e92..7356ca7c036 100644
--- a/distsql/parser/src/main/antlr4/imports/RALStatement.g4
+++ b/distsql/parser/src/main/antlr4/imports/RALStatement.g4
@@ -51,6 +51,10 @@ clearHint
: CLEAR HINT
;
+refreshDatabaseMetadata
+ : REFRESH DATABASE METADATA databaseName? FROM GOVERNANCE CENTER
+ ;
+
refreshTableMetadata
: REFRESH TABLE METADATA refreshScope?
;
diff --git a/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/KernelDistSQLStatement.g4 b/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/KernelDistSQLStatement.g4
index 1b85de6fe30..7089795e9dd 100644
--- a/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/KernelDistSQLStatement.g4
+++ b/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/KernelDistSQLStatement.g4
@@ -44,6 +44,7 @@ execute
| showSingleTable
| showDefaultSingleTableStorageUnit
| setDefaultSingleTableStorageUnit
+ | refreshDatabaseMetadata
| refreshTableMetadata
| showTableMetadata
| exportDatabaseConfiguration
diff --git a/distsql/parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java b/distsql/parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
index 10ce1388cca..3894219d473 100644
--- a/distsql/parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
+++ b/distsql/parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
@@ -44,6 +44,7 @@ import org.apache.shardingsphere.distsql.parser.autogen.KernelDistSQLStatementPa
import org.apache.shardingsphere.distsql.parser.autogen.KernelDistSQLStatementParser.PropertyContext;
import org.apache.shardingsphere.distsql.parser.autogen.KernelDistSQLStatementParser.RateLimiterContext;
import org.apache.shardingsphere.distsql.parser.autogen.KernelDistSQLStatementParser.ReadDefinitionContext;
+import org.apache.shardingsphere.distsql.parser.autogen.KernelDistSQLStatementParser.RefreshDatabaseMetadataContext;
import org.apache.shardingsphere.distsql.parser.autogen.KernelDistSQLStatementParser.RefreshTableMetadataContext;
import org.apache.shardingsphere.distsql.parser.autogen.KernelDistSQLStatementParser.RegisterStorageUnitContext;
import org.apache.shardingsphere.distsql.parser.autogen.KernelDistSQLStatementParser.SetDefaultSingleTableStorageUnitContext;
@@ -75,12 +76,12 @@ import org.apache.shardingsphere.distsql.parser.segment.URLBasedDataSourceSegmen
import org.apache.shardingsphere.distsql.parser.statement.ral.hint.ClearHintStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ConvertYamlConfigurationStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ExportDatabaseConfigurationStatement;
-import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowDistVariableStatement;
-import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowDistVariablesStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowComputeNodeInfoStatement;
+import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowComputeNodeModeStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowComputeNodesStatement;
+import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowDistVariableStatement;
+import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowDistVariablesStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowMigrationRuleStatement;
-import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowComputeNodeModeStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowTableMetadataStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.AlterComputeNodeStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.AlterInventoryIncrementalRuleStatement;
@@ -89,6 +90,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.DiscardD
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.ImportDatabaseConfigurationStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.LabelComputeNodeStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.PrepareDistSQLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshDatabaseMetadataStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshTableMetadataStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.SetDistVariableStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.SetInstanceStatusStatement;
@@ -268,6 +270,11 @@ public final class KernelDistSQLStatementVisitor extends KernelDistSQLStatementB
return new ClearHintStatement();
}
+ @Override
+ public ASTNode visitRefreshDatabaseMetadata(final RefreshDatabaseMetadataContext ctx) {
+ return new RefreshDatabaseMetadataStatement(null == ctx.databaseName() ? null : getIdentifierValue(ctx.databaseName()));
+ }
+
@Override
public ASTNode visitRefreshTableMetadata(final RefreshTableMetadataContext ctx) {
if (null == ctx.refreshScope()) {
diff --git a/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshTableMetadataStatement.java b/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshDatabaseMetadataStatement.java
similarity index 57%
copy from distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshTableMetadataStatement.java
copy to distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshDatabaseMetadataStatement.java
index 455bdd2ee72..462a39737a7 100644
--- a/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshTableMetadataStatement.java
+++ b/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshDatabaseMetadataStatement.java
@@ -24,46 +24,20 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableRALStatem
import java.util.Optional;
/**
- * Refresh table metadata statement.
+ * Refresh database metadata statement.
*/
@RequiredArgsConstructor
@Getter
-public final class RefreshTableMetadataStatement extends UpdatableRALStatement {
+public final class RefreshDatabaseMetadataStatement extends UpdatableRALStatement {
- private final String tableName;
-
- private final String storageUnitName;
-
- private final String schemaName;
-
- public RefreshTableMetadataStatement() {
- this(null, null, null);
- }
-
- /**
- * Get table name.
- *
- * @return table name
- */
- public Optional<String> getTableName() {
- return Optional.ofNullable(tableName);
- }
-
- /**
- * Get storage unit name.
- *
- * @return storage unit name
- */
- public Optional<String> getStorageUnitName() {
- return Optional.ofNullable(storageUnitName);
- }
+ private final String databaseName;
/**
- * Get schema name.
+ * Get database name.
*
- * @return schema name
+ * @return database name
*/
- public Optional<String> getSchemaName() {
- return Optional.ofNullable(schemaName);
+ public Optional<String> getDatabaseName() {
+ return Optional.ofNullable(databaseName);
}
}
diff --git a/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshTableMetadataStatement.java b/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshTableMetadataStatement.java
index 455bdd2ee72..40752b0249b 100644
--- a/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshTableMetadataStatement.java
+++ b/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/updatable/RefreshTableMetadataStatement.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.distsql.parser.statement.ral.updatable;
-import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableRALStatement;
@@ -27,7 +26,6 @@ import java.util.Optional;
* Refresh table metadata statement.
*/
@RequiredArgsConstructor
-@Getter
public final class RefreshTableMetadataStatement extends UpdatableRALStatement {
private final String tableName;
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/RALBackendHandlerFactory.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/RALBackendHandlerFactory.java
index 3b85a82ee85..0a9bf8031a6 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/RALBackendHandlerFactory.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/RALBackendHandlerFactory.java
@@ -25,12 +25,12 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.RALStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableGlobalRuleRALStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ConvertYamlConfigurationStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ExportDatabaseConfigurationStatement;
-import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowDistVariablesStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowComputeNodeInfoStatement;
-import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowComputeNodesStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowComputeNodeModeStatement;
-import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowTableMetadataStatement;
+import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowComputeNodesStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowDistVariableStatement;
+import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowDistVariablesStatement;
+import org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowTableMetadataStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.QueryableScalingRALStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.ApplyDistSQLStatement;
@@ -38,9 +38,10 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.DiscardD
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.ImportDatabaseConfigurationStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.LabelComputeNodeStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.PrepareDistSQLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshDatabaseMetadataStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshTableMetadataStatement;
-import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.SetInstanceStatusStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.SetDistVariableStatement;
+import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.SetInstanceStatusStatement;
import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.UnlabelComputeNodeStatement;
import org.apache.shardingsphere.infra.distsql.query.DatabaseDistSQLResultSet;
import org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet;
@@ -53,22 +54,23 @@ import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.migration.que
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.migration.update.UpdatableScalingRALBackendHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ConvertYamlConfigurationHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ExportDatabaseConfigurationHandler;
-import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowDistVariablesHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowComputeNodeInfoHandler;
-import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowComputeNodesHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowComputeNodeModeHandler;
+import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowComputeNodesHandler;
+import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowDistVariableHandler;
+import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowDistVariablesHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowStatusFromReadwriteSplittingRulesHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowTableMetadataHandler;
-import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ShowDistVariableHandler;
+import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.AlterReadwriteSplittingStorageUnitStatusStatementHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.ApplyDistSQLHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.DiscardDistSQLHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.ImportDatabaseConfigurationHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.LabelComputeNodeHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.PrepareDistSQLHandler;
+import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.RefreshDatabaseMetadataHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.RefreshTableMetadataHandler;
-import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.SetInstanceStatusHandler;
-import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.AlterReadwriteSplittingStorageUnitStatusStatementHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.SetDistVariableHandler;
+import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.SetInstanceStatusHandler;
import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.UnlabelComputeNodeHandler;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.ShowStatusFromReadwriteSplittingRulesStatement;
@@ -91,6 +93,7 @@ public final class RALBackendHandlerFactory {
HANDLERS.put(SetInstanceStatusStatement.class, SetInstanceStatusHandler.class);
HANDLERS.put(SetDistVariableStatement.class, SetDistVariableHandler.class);
HANDLERS.put(AlterReadwriteSplittingStorageUnitStatusStatement.class, AlterReadwriteSplittingStorageUnitStatusStatementHandler.class);
+ HANDLERS.put(RefreshDatabaseMetadataStatement.class, RefreshDatabaseMetadataHandler.class);
HANDLERS.put(RefreshTableMetadataStatement.class, RefreshTableMetadataHandler.class);
HANDLERS.put(PrepareDistSQLStatement.class, PrepareDistSQLHandler.class);
HANDLERS.put(ApplyDistSQLStatement.class, ApplyDistSQLHandler.class);
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshDatabaseMetadataHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshDatabaseMetadataHandler.java
new file mode 100644
index 00000000000..481df436615
--- /dev/null
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshDatabaseMetadataHandler.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable;
+
+import com.google.common.base.Strings;
+import org.apache.shardingsphere.dialect.exception.syntax.database.NoDatabaseSelectedException;
+import org.apache.shardingsphere.dialect.exception.syntax.database.UnknownDatabaseException;
+import org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshDatabaseMetadataStatement;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.handler.distsql.ral.UpdatableRALBackendHandler;
+
+import java.util.Optional;
+
+/**
+ * Refresh database metadata handler.
+ */
+public final class RefreshDatabaseMetadataHandler extends UpdatableRALBackendHandler<RefreshDatabaseMetadataStatement> {
+
+ @Override
+ protected void update(final ContextManager contextManager) {
+ contextManager.reloadDatabaseMetaData(getDatabaseName());
+ }
+
+ private String getDatabaseName() {
+ Optional<String> databaseName = getSqlStatement().getDatabaseName();
+ String result = databaseName.isPresent() ? databaseName.get() : getConnectionSession().getDatabaseName();
+ if (Strings.isNullOrEmpty(result)) {
+ throw new NoDatabaseSelectedException();
+ }
+ if (!ProxyContext.getInstance().databaseExists(result)) {
+ throw new UnknownDatabaseException(result);
+ }
+ return result;
+ }
+}