You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/06/01 03:07:17 UTC
[shardingsphere] branch master updated: refactor event for meta data refresher (#18110)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 5b4010f1b1f refactor event for meta data refresher (#18110)
5b4010f1b1f is described below
commit 5b4010f1b1fc88dc5a33de3d55e53d153b3b76dc
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Wed Jun 1 11:07:11 2022 +0800
refactor event for meta data refresher (#18110)
---
.../infra/instance/InstanceContext.java | 9 +++++++++
.../database/schema/event/AddSchemaEvent.java | 2 +-
.../database/schema/event/AlterSchemaEvent.java | 2 +-
.../{AddSchemaEvent.java => DropIndexEvent.java} | 13 ++++++-------
.../database/schema/event/DropSchemaEvent.java | 2 +-
...SchemaEvent.java => MetaDataRefreshedEvent.java} | 13 ++-----------
.../database/schema/event/SchemaAlteredEvent.java | 2 +-
.../context/refresher/MetaDataRefreshEngine.java | 9 ++++++---
.../infra/context/refresher/MetaDataRefresher.java | 7 +++++--
.../type/AlterIndexStatementSchemaRefresher.java | 13 ++++++++-----
.../type/AlterSchemaStatementSchemaRefresher.java | 12 +++++++-----
.../type/AlterTableStatementSchemaRefresher.java | 10 ++++++----
.../type/AlterViewStatementSchemaRefresher.java | 10 ++++++----
.../type/CreateIndexStatementSchemaRefresher.java | 13 ++++++++-----
.../type/CreateSchemaStatementSchemaRefresher.java | 12 +++++++-----
.../type/CreateTableStatementSchemaRefresher.java | 21 ++++++++++++---------
.../type/CreateViewStatementSchemaRefresher.java | 21 ++++++++++++---------
.../type/DropIndexStatementSchemaRefresher.java | 21 +++++++++++++--------
.../type/DropSchemaStatementSchemaRefresher.java | 10 ++++++----
.../type/DropTableStatementSchemaRefresher.java | 11 +++++++----
.../type/DropViewStatementSchemaRefresher.java | 11 +++++++----
.../type/RenameTableStatementSchemaRefresher.java | 10 ++++++----
.../type/DummyDropDatabaseMetaDataRefresher.java | 9 +++++++--
.../RenameTableStatementSchemaRefresherTest.java | 17 ++++++++++-------
.../driver/executor/DriverExecutor.java | 2 +-
.../driver/executor/DriverJDBCExecutor.java | 16 +++++++++++++---
.../SchemaMetaDataRegistrySubscriber.java | 10 ++++++++++
.../communication/DatabaseCommunicationEngine.java | 7 ++++++-
28 files changed, 184 insertions(+), 111 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java
index 3e08608b5c0..a17fa712026 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java
@@ -200,4 +200,13 @@ public final class InstanceContext {
public void initLockContext() {
lockContext.initLockState(this);
}
+
+ /**
+ * Is cluster instance or not.
+ *
+ * @return true if is cluster, else false
+ */
+ public boolean isCluster() {
+ return "Cluster".equalsIgnoreCase(modeConfiguration.getType());
+ }
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java
index fb1bb8da16d..b0e690a9511 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java
@@ -25,7 +25,7 @@ import lombok.RequiredArgsConstructor;
*/
@RequiredArgsConstructor
@Getter
-public final class AddSchemaEvent {
+public final class AddSchemaEvent implements MetaDataRefreshedEvent {
private final String databaseName;
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AlterSchemaEvent.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AlterSchemaEvent.java
index 316bcedc45d..641bb803800 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AlterSchemaEvent.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AlterSchemaEvent.java
@@ -26,7 +26,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.
*/
@RequiredArgsConstructor
@Getter
-public final class AlterSchemaEvent {
+public final class AlterSchemaEvent implements MetaDataRefreshedEvent {
private final String databaseName;
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/DropIndexEvent.java
similarity index 80%
copy from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java
copy to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/DropIndexEvent.java
index fb1bb8da16d..c061ce81572 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/DropIndexEvent.java
@@ -18,16 +18,15 @@
package org.apache.shardingsphere.infra.metadata.database.schema.event;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+
+import java.util.LinkedList;
+import java.util.List;
/**
- * Add schema event.
+ * Drop index event.
*/
-@RequiredArgsConstructor
@Getter
-public final class AddSchemaEvent {
-
- private final String databaseName;
+public final class DropIndexEvent implements MetaDataRefreshedEvent {
- private final String schemaName;
+ private List<SchemaAlteredEvent> schemaAlteredEvents = new LinkedList<>();
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/DropSchemaEvent.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/DropSchemaEvent.java
index 29e246fda8a..34fe24bb86c 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/DropSchemaEvent.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/DropSchemaEvent.java
@@ -27,7 +27,7 @@ import java.util.Collection;
*/
@RequiredArgsConstructor
@Getter
-public final class DropSchemaEvent {
+public final class DropSchemaEvent implements MetaDataRefreshedEvent {
private final String databaseName;
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/MetaDataRefreshedEvent.java
similarity index 78%
copy from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java
copy to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/MetaDataRefreshedEvent.java
index fb1bb8da16d..db4221daaab 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/AddSchemaEvent.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/MetaDataRefreshedEvent.java
@@ -17,17 +17,8 @@
package org.apache.shardingsphere.infra.metadata.database.schema.event;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
/**
- * Add schema event.
+ * Meta data refreshed event.
*/
-@RequiredArgsConstructor
-@Getter
-public final class AddSchemaEvent {
-
- private final String databaseName;
-
- private final String schemaName;
+public interface MetaDataRefreshedEvent {
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/SchemaAlteredEvent.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/SchemaAlteredEvent.java
index 215d09ecc5f..24bc40140b3 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/SchemaAlteredEvent.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/event/SchemaAlteredEvent.java
@@ -27,7 +27,7 @@ import java.util.Collection;
* Schema altered event.
*/
@Getter
-public final class SchemaAlteredEvent {
+public final class SchemaAlteredEvent implements MetaDataRefreshedEvent {
private final String databaseName;
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
index c3a6a54756d..01ed9b71c66 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.sql.SQLException;
@@ -57,20 +58,22 @@ public final class MetaDataRefreshEngine {
* @param sqlStatementContext SQL statement context
* @param logicDataSourceNamesSupplier logic data source names supplier
* @throws SQLException SQL exception
+ * @return meta data refreshed event
*/
@SuppressWarnings({"unchecked", "rawtypes"})
- public void refresh(final SQLStatementContext<?> sqlStatementContext, final Supplier<Collection<String>> logicDataSourceNamesSupplier) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final SQLStatementContext<?> sqlStatementContext, final Supplier<Collection<String>> logicDataSourceNamesSupplier) throws SQLException {
Class<? extends SQLStatement> sqlStatementClass = sqlStatementContext.getSqlStatement().getClass();
if (IGNORABLE_SQL_STATEMENT_CLASSES.contains(sqlStatementClass)) {
- return;
+ return Optional.empty();
}
Optional<MetaDataRefresher> schemaRefresher = MetaDataRefresherFactory.findInstance(sqlStatementClass);
if (schemaRefresher.isPresent()) {
String schemaName = sqlStatementContext.getTablesContext().getSchemaName()
.orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), database.getName()));
- schemaRefresher.get().refresh(database, federationMetaData, optimizerPlanners, logicDataSourceNamesSupplier.get(), schemaName, sqlStatementContext.getSqlStatement(), props);
+ return schemaRefresher.get().refresh(database, federationMetaData, optimizerPlanners, logicDataSourceNamesSupplier.get(), schemaName, sqlStatementContext.getSqlStatement(), props);
} else {
IGNORABLE_SQL_STATEMENT_CLASSES.add(sqlStatementClass);
}
+ return Optional.empty();
}
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresher.java
index 2d0baf55ad7..be1b8a62174 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresher.java
@@ -21,6 +21,7 @@ import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.spi.type.typed.TypedSPI;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -28,6 +29,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
/**
* Meta data refresher.
@@ -47,8 +49,9 @@ public interface MetaDataRefresher<T extends SQLStatement> extends TypedSPI {
* @param schemaName schema name
* @param sqlStatement SQL statement
* @param props configuration properties
+ * @return meta data refreshed event
* @throws SQLException SQL exception
*/
- void refresh(ShardingSphereDatabase database, FederationDatabaseMetaData federationDatabaseMetaData, Map<String, OptimizerPlannerContext> optimizerPlanners,
- Collection<String> logicDataSourceNames, String schemaName, T sqlStatement, ConfigurationProperties props) throws SQLException;
+ Optional<MetaDataRefreshedEvent> refresh(ShardingSphereDatabase database, FederationDatabaseMetaData federationDatabaseMetaData, Map<String, OptimizerPlannerContext> optimizerPlanners,
+ Collection<String> logicDataSourceNames, String schemaName, T sqlStatement, ConfigurationProperties props) throws SQLException;
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterIndexStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterIndexStatementSchemaRefresher.java
index 272db900c0f..8c626210779 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterIndexStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterIndexStatementSchemaRefresher.java
@@ -20,13 +20,13 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import com.google.common.base.Preconditions;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereIndex;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
@@ -45,11 +45,13 @@ public final class AlterIndexStatementSchemaRefresher implements MetaDataRefresh
private static final String TYPE = AlterIndexStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final AlterIndexStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final AlterIndexStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
Optional<IndexSegment> renameIndex = AlterIndexStatementHandler.getRenameIndexSegment(sqlStatement);
if (!sqlStatement.getIndex().isPresent() || !renameIndex.isPresent()) {
- return;
+ return Optional.empty();
}
String actualSchemaName = sqlStatement.getIndex().get().getOwner().map(optional -> optional.getIdentifier().getValue()).orElse(schemaName);
String indexName = sqlStatement.getIndex().get().getIndexName().getIdentifier().getValue();
@@ -62,8 +64,9 @@ public final class AlterIndexStatementSchemaRefresher implements MetaDataRefresh
table.getIndexes().put(renameIndexName, new ShardingSphereIndex(renameIndexName));
SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), actualSchemaName);
event.getAlteredTables().add(table);
- ShardingSphereEventBus.getInstance().post(event);
+ return Optional.of(event);
}
+ return Optional.empty();
}
private Optional<String> findLogicTableName(final ShardingSphereSchema schema, final String indexName) {
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterSchemaStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterSchemaStatementSchemaRefresher.java
index a5df39eac7e..837f4d91db2 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterSchemaStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterSchemaStatementSchemaRefresher.java
@@ -19,13 +19,13 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.database.schema.event.AlterSchemaEvent;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterSchemaStatement;
@@ -45,18 +45,20 @@ public final class AlterSchemaStatementSchemaRefresher implements MetaDataRefres
private static final String TYPE = AlterSchemaStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final AlterSchemaStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final AlterSchemaStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
Optional<IdentifierValue> renameSchemaName = AlterSchemaStatementHandler.getRenameSchema(sqlStatement);
if (!renameSchemaName.isPresent()) {
- return;
+ return Optional.empty();
}
String actualSchemaName = sqlStatement.getSchemaName().getValue();
putSchemaMetaData(database, federationDatabaseMetaData, optimizerPlanners, actualSchemaName, renameSchemaName.get().getValue(), logicDataSourceNames);
removeSchemaMetaData(database, federationDatabaseMetaData, optimizerPlanners, actualSchemaName);
AlterSchemaEvent event = new AlterSchemaEvent(
database.getName(), actualSchemaName, renameSchemaName.get().getValue(), database.getSchemas().get(renameSchemaName.get().getValue()));
- ShardingSphereEventBus.getInstance().post(event);
+ return Optional.of(event);
}
private void removeSchemaMetaData(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
index 014262ce193..a644a864992 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
@@ -28,6 +27,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -47,8 +47,10 @@ public final class AlterTableStatementSchemaRefresher implements MetaDataRefresh
private static final String TYPE = AlterTableStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final AlterTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final AlterTableStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), schemaName);
if (sqlStatement.getRenameTable().isPresent()) {
@@ -61,7 +63,7 @@ public final class AlterTableStatementSchemaRefresher implements MetaDataRefresh
putTableMetaData(database, federationDatabaseMetaData, optimizerPlanners, logicDataSourceNames, schemaName, tableName, props);
event.getAlteredTables().add(database.getSchemas().get(schemaName).get(tableName));
}
- ShardingSphereEventBus.getInstance().post(event);
+ return Optional.of(event);
}
private void removeTableMetaData(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
index 8e6dc533082..e765e73c2ad 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
@@ -28,6 +27,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -49,8 +49,10 @@ public final class AlterViewStatementSchemaRefresher implements MetaDataRefreshe
private static final String TYPE = AlterViewStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final AlterViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final AlterViewStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
String viewName = sqlStatement.getView().getTableName().getIdentifier().getValue();
SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), schemaName);
Optional<SimpleTableSegment> renameView = AlterViewStatementHandler.getRenameView(sqlStatement);
@@ -64,7 +66,7 @@ public final class AlterViewStatementSchemaRefresher implements MetaDataRefreshe
putTableMetaData(database, federationDatabaseMetaData, optimizerPlanners, logicDataSourceNames, schemaName, viewName, props);
event.getAlteredTables().add(database.getSchemas().get(schemaName).get(viewName));
}
- ShardingSphereEventBus.getInstance().post(event);
+ return Optional.of(event);
}
private void removeTableMetaData(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateIndexStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateIndexStatementSchemaRefresher.java
index e86ce6efcd8..860ebaec475 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateIndexStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateIndexStatementSchemaRefresher.java
@@ -20,11 +20,11 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import com.google.common.base.Strings;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereIndex;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.util.IndexMetaDataUtil;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndexStatement;
@@ -32,6 +32,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndex
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
/**
* Schema refresher for create index statement.
@@ -41,18 +42,20 @@ public final class CreateIndexStatementSchemaRefresher implements MetaDataRefres
private static final String TYPE = CreateIndexStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final CreateIndexStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final CreateIndexStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
String indexName = null != sqlStatement.getIndex() ? sqlStatement.getIndex().getIndexName().getIdentifier().getValue()
: IndexMetaDataUtil.getGeneratedLogicIndexName(sqlStatement.getColumns());
if (Strings.isNullOrEmpty(indexName)) {
- return;
+ return Optional.empty();
}
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
database.getSchemas().get(schemaName).get(tableName).getIndexes().put(indexName, new ShardingSphereIndex(indexName));
SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), schemaName);
event.getAlteredTables().add(database.getSchemas().get(schemaName).get(tableName));
- ShardingSphereEventBus.getInstance().post(event);
+ return Optional.of(event);
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
index 484524c6977..c8624481fab 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
@@ -27,6 +26,7 @@ import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationS
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.database.schema.event.AddSchemaEvent;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.CreateSchemaStatementHandler;
@@ -45,18 +45,20 @@ public final class CreateSchemaStatementSchemaRefresher implements MetaDataRefre
private static final String TYPE = CreateSchemaStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final CreateSchemaStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final CreateSchemaStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
Optional<IdentifierValue> schema = sqlStatement.getSchemaName().isPresent() ? sqlStatement.getSchemaName() : CreateSchemaStatementHandler.getUsername(sqlStatement);
if (!schema.isPresent()) {
- return;
+ return Optional.empty();
}
String actualSchemaName = schema.get().getValue();
database.getSchemas().put(actualSchemaName, new ShardingSphereSchema());
federationDatabaseMetaData.putSchemaMetadata(actualSchemaName, new FederationSchemaMetaData(actualSchemaName, new LinkedHashMap<>()));
optimizerPlanners.put(federationDatabaseMetaData.getName(), OptimizerPlannerContextFactory.create(federationDatabaseMetaData));
AddSchemaEvent event = new AddSchemaEvent(database.getName(), actualSchemaName);
- ShardingSphereEventBus.getInstance().post(event);
+ return Optional.of(event);
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
index 167160a4a9b..1bb9a3720e1 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
@@ -28,6 +27,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -47,8 +47,10 @@ public final class CreateTableStatementSchemaRefresher implements MetaDataRefres
private static final String TYPE = CreateTableStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final CreateTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final CreateTableStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
if (!containsInImmutableDataNodeContainedRule(tableName, database)) {
database.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(logicDataSourceNames.iterator().next(), schemaName, tableName));
@@ -57,14 +59,15 @@ public final class CreateTableStatementSchemaRefresher implements MetaDataRefres
database.getResource().getDatabaseType(), database.getResource().getDataSources(), database.getRuleMetaData().getRules(), props, schemaName);
Map<String, ShardingSphereSchema> schemaMap = GenericSchemaBuilder.build(Collections.singletonList(tableName), materials);
Optional<ShardingSphereTable> actualTableMetaData = Optional.ofNullable(schemaMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
- actualTableMetaData.ifPresent(optional -> {
- database.getSchemas().get(schemaName).put(tableName, optional);
- federationDatabaseMetaData.putTable(schemaName, optional);
+ if (actualTableMetaData.isPresent()) {
+ database.getSchemas().get(schemaName).put(tableName, actualTableMetaData.get());
+ federationDatabaseMetaData.putTable(schemaName, actualTableMetaData.get());
optimizerPlanners.put(federationDatabaseMetaData.getName(), OptimizerPlannerContextFactory.create(federationDatabaseMetaData));
SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), schemaName);
- event.getAlteredTables().add(optional);
- ShardingSphereEventBus.getInstance().post(event);
- });
+ event.getAlteredTables().add(actualTableMetaData.get());
+ return Optional.of(event);
+ }
+ return Optional.empty();
}
private boolean containsInImmutableDataNodeContainedRule(final String tableName, final ShardingSphereDatabase database) {
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
index 09c79d13f59..d66278e505a 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
@@ -28,6 +27,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -47,8 +47,10 @@ public final class CreateViewStatementSchemaRefresher implements MetaDataRefresh
private static final String TYPE = CreateViewStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final CreateViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final CreateViewStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
String viewName = sqlStatement.getView().getTableName().getIdentifier().getValue();
if (!containsInImmutableDataNodeContainedRule(viewName, database)) {
database.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(logicDataSourceNames.iterator().next(), schemaName, viewName));
@@ -57,14 +59,15 @@ public final class CreateViewStatementSchemaRefresher implements MetaDataRefresh
database.getResource().getDatabaseType(), database.getResource().getDataSources(), database.getRuleMetaData().getRules(), props, schemaName);
Map<String, ShardingSphereSchema> schemaMap = GenericSchemaBuilder.build(Collections.singletonList(viewName), materials);
Optional<ShardingSphereTable> actualViewMetaData = Optional.ofNullable(schemaMap.get(schemaName)).map(optional -> optional.getTables().get(viewName));
- actualViewMetaData.ifPresent(optional -> {
- database.getSchemas().get(schemaName).put(viewName, optional);
- federationDatabaseMetaData.putTable(schemaName, optional);
+ if (actualViewMetaData.isPresent()) {
+ database.getSchemas().get(schemaName).put(viewName, actualViewMetaData.get());
+ federationDatabaseMetaData.putTable(schemaName, actualViewMetaData.get());
optimizerPlanners.put(federationDatabaseMetaData.getName(), OptimizerPlannerContextFactory.create(federationDatabaseMetaData));
SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), schemaName);
- event.getAlteredTables().add(optional);
- ShardingSphereEventBus.getInstance().post(event);
- });
+ event.getAlteredTables().add(actualViewMetaData.get());
+ return Optional.of(event);
+ }
+ return Optional.empty();
}
private boolean containsInImmutableDataNodeContainedRule(final String tableName, final ShardingSphereDatabase database) {
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropIndexStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropIndexStatementSchemaRefresher.java
index ea1926ba78d..9fcf7f1ec0e 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropIndexStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropIndexStatementSchemaRefresher.java
@@ -19,12 +19,13 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.DropIndexEvent;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.util.IndexMetaDataUtil;
import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
@@ -46,8 +47,11 @@ public final class DropIndexStatementSchemaRefresher implements MetaDataRefreshe
private static final String TYPE = DropIndexStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final DropIndexStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final DropIndexStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
+ DropIndexEvent event = new DropIndexEvent();
for (IndexSegment each : sqlStatement.getIndexes()) {
String actualSchemaName = each.getOwner().map(optional -> optional.getIdentifier().getValue()).orElse(schemaName);
Optional<String> logicTableName = findLogicTableName(database, sqlStatement, Collections.singletonList(each));
@@ -56,8 +60,9 @@ public final class DropIndexStatementSchemaRefresher implements MetaDataRefreshe
}
ShardingSphereTable table = database.getSchemas().get(actualSchemaName).get(logicTableName.get());
table.getIndexes().remove(each.getIndexName().getIdentifier().getValue());
- post(database.getName(), actualSchemaName, table);
+ event.getSchemaAlteredEvents().add(buildSchemaAlteredEvent(database.getName(), actualSchemaName, table));
}
+ return Optional.of(event);
}
private Optional<String> findLogicTableName(final ShardingSphereDatabase database, final DropIndexStatement sqlStatement, final Collection<IndexSegment> indexSegments) {
@@ -69,10 +74,10 @@ public final class DropIndexStatementSchemaRefresher implements MetaDataRefreshe
return tableNames.isEmpty() ? Optional.empty() : Optional.of(tableNames.iterator().next().getTableName());
}
- private void post(final String databaseName, final String schemaName, final ShardingSphereTable table) {
- SchemaAlteredEvent event = new SchemaAlteredEvent(databaseName, schemaName);
- event.getAlteredTables().add(table);
- ShardingSphereEventBus.getInstance().post(event);
+ private SchemaAlteredEvent buildSchemaAlteredEvent(final String databaseName, final String schemaName, final ShardingSphereTable table) {
+ SchemaAlteredEvent result = new SchemaAlteredEvent(databaseName, schemaName);
+ result.getAlteredTables().add(table);
+ return result;
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java
index 54f599e0f35..9f3008dcad0 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java
@@ -19,12 +19,12 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.event.DropSchemaEvent;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropSchemaStatement;
import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
@@ -44,8 +44,10 @@ public final class DropSchemaStatementSchemaRefresher implements MetaDataRefresh
private static final String TYPE = DropSchemaStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final DropSchemaStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final DropSchemaStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
Collection<String> tobeRemovedTables = new LinkedHashSet<>();
Collection<String> tobeRemovedSchemas = new LinkedHashSet<>();
Collection<String> schemaNames = getSchemaNames(sqlStatement);
@@ -59,7 +61,7 @@ public final class DropSchemaStatementSchemaRefresher implements MetaDataRefresh
for (String each : tobeRemovedTables) {
removeDataNode(rules, each, tobeRemovedSchemas);
}
- ShardingSphereEventBus.getInstance().post(new DropSchemaEvent(database.getName(), schemaNames));
+ return Optional.of(new DropSchemaEvent(database.getName(), schemaNames));
}
private Collection<String> getSchemaNames(final DropSchemaStatement sqlStatement) {
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java
index 15c42a962e7..22fa97d367f 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java
@@ -19,11 +19,11 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
@@ -32,6 +32,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableSt
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
/**
* Schema refresher for drop table statement.
@@ -41,8 +42,10 @@ public final class DropTableStatementSchemaRefresher implements MetaDataRefreshe
private static final String TYPE = DropTableStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final DropTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final DropTableStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), schemaName);
sqlStatement.getTables().forEach(each -> {
database.getSchemas().get(schemaName).remove(each.getTableName().getIdentifier().getValue());
@@ -54,7 +57,7 @@ public final class DropTableStatementSchemaRefresher implements MetaDataRefreshe
for (SimpleTableSegment each : sqlStatement.getTables()) {
removeDataNode(rules, each, schemaName);
}
- ShardingSphereEventBus.getInstance().post(event);
+ return Optional.of(event);
}
private void removeDataNode(final Collection<MutableDataNodeRule> rules, final SimpleTableSegment tobeRemovedSegment, final String schemaName) {
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropViewStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropViewStatementSchemaRefresher.java
index 416b3d6fd47..6f0624b4c75 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropViewStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropViewStatementSchemaRefresher.java
@@ -19,10 +19,10 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
@@ -31,6 +31,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropViewSta
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
/**
* Schema refresher for drop view statement.
@@ -40,8 +41,10 @@ public final class DropViewStatementSchemaRefresher implements MetaDataRefresher
private static final String TYPE = DropViewStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final DropViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final DropViewStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), schemaName);
sqlStatement.getViews().forEach(each -> {
database.getSchemas().get(schemaName).remove(each.getTableName().getIdentifier().getValue());
@@ -51,7 +54,7 @@ public final class DropViewStatementSchemaRefresher implements MetaDataRefresher
for (SimpleTableSegment each : sqlStatement.getViews()) {
removeDataNode(rules, each, schemaName);
}
- ShardingSphereEventBus.getInstance().post(event);
+ return Optional.of(event);
}
private void removeDataNode(final Collection<MutableDataNodeRule> rules, final SimpleTableSegment tobeRemovedSegment, final String schemaName) {
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
index 375f11d6f98..74bd82758c5 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
@@ -28,6 +27,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -48,8 +48,10 @@ public final class RenameTableStatementSchemaRefresher implements MetaDataRefres
private static final String TYPE = RenameTableStatement.class.getName();
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final RenameTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final RenameTableStatement sqlStatement,
+ final ConfigurationProperties props) throws SQLException {
SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), schemaName);
for (RenameTableDefinitionSegment each : sqlStatement.getRenameTables()) {
String tableName = each.getTable().getTableName().getIdentifier().getValue();
@@ -59,7 +61,7 @@ public final class RenameTableStatementSchemaRefresher implements MetaDataRefres
event.getAlteredTables().add(database.getSchemas().get(schemaName).get(renameTable));
event.getDroppedTables().add(tableName);
}
- ShardingSphereEventBus.getInstance().post(event);
+ return Optional.of(event);
}
private void removeTableMetaData(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
index a9e3f5c8010..4358371ecc7 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
@@ -22,10 +22,12 @@ import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
/**
* MetaDataRefresher for testing.
@@ -33,9 +35,12 @@ import java.util.Map;
public final class DummyDropDatabaseMetaDataRefresher implements MetaDataRefresher<DropDatabaseStatement> {
@Override
- public void refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final DropDatabaseStatement sqlStatement, final ConfigurationProperties props) {
+ public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final FederationDatabaseMetaData federationDatabaseMetaData,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final DropDatabaseStatement sqlStatement,
+ final ConfigurationProperties props) {
sqlStatement.getDatabaseName();
+ return Optional.empty();
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
index 6e84a896ee4..59ef48616d9 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
@@ -23,12 +23,12 @@ import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.DefaultDatabase;
import org.apache.shardingsphere.infra.database.type.dialect.SQL92DatabaseType;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResource;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.table.RenameTableDefinitionSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
@@ -43,10 +43,12 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
+import java.util.Optional;
import java.util.Properties;
-import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -54,12 +56,13 @@ public final class RenameTableStatementSchemaRefresherTest {
@Test
public void assertRefresh() throws SQLException {
- RenameTableLister listener = new RenameTableLister(2);
- ShardingSphereEventBus.getInstance().register(listener);
- new RenameTableStatementSchemaRefresher().refresh(createDatabaseMetaData(), new FederationDatabaseMetaData("foo_database", Collections.emptyMap()),
+ ShardingSphereDatabase actual = createDatabaseMetaData();
+ Optional<MetaDataRefreshedEvent> event = new RenameTableStatementSchemaRefresher().refresh(actual, new FederationDatabaseMetaData("foo_database", Collections.emptyMap()),
new HashMap<>(), Collections.singleton("foo_ds"), "foo_schema", createRenameTableStatement(), new ConfigurationProperties(new Properties()));
- assertThat(listener.getActualCount(), is(listener.getRenameCount()));
- ShardingSphereEventBus.getInstance().unregister(listener);
+ assertTrue(event.isPresent());
+ assertThat(((SchemaAlteredEvent) event.get()).getDatabaseName(), is(DefaultDatabase.LOGIC_NAME));
+ assertThat(((SchemaAlteredEvent) event.get()).getSchemaName(), is("foo_schema"));
+ assertThat(((SchemaAlteredEvent) event.get()).getDroppedTables(), is(Arrays.asList("tbl_0", "tbl_1")));
}
private RenameTableStatement createRenameTableStatement() {
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
index f77df1a50b6..bc29723a5b3 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
@@ -49,7 +49,7 @@ public final class DriverExecutor implements AutoCloseable {
MetaDataContexts metaDataContexts = connection.getContextManager().getMetaDataContexts();
ExecutorEngine executorEngine = connection.getContextManager().getExecutorEngine();
JDBCExecutor jdbcExecutor = new JDBCExecutor(executorEngine, connection.isHoldTransaction());
- regularExecutor = new DriverJDBCExecutor(connection.getDatabaseName(), metaDataContexts, jdbcExecutor);
+ regularExecutor = new DriverJDBCExecutor(connection.getDatabaseName(), connection.getContextManager(), jdbcExecutor);
rawExecutor = new RawExecutor(executorEngine, connection.isHoldTransaction(), metaDataContexts.getMetaData().getProps());
DatabaseType databaseType = metaDataContexts.getMetaData().getDatabases().get(connection.getDatabaseName()).getResource().getDatabaseType();
String schemaName = DatabaseTypeEngine.getDefaultSchemaName(databaseType, connection.getDatabaseName());
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
index 3fceb1a719b..eea7f4e617a 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
@@ -22,21 +22,25 @@ import org.apache.shardingsphere.driver.executor.callback.ExecuteQueryCallback;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefreshEngine;
+import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.executor.sql.process.ExecuteProcessEngine;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
+import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -48,15 +52,18 @@ public final class DriverJDBCExecutor {
private final MetaDataContexts metaDataContexts;
+ private final ContextManager contextManager;
+
@Getter
private final JDBCExecutor jdbcExecutor;
private final MetaDataRefreshEngine metadataRefreshEngine;
- public DriverJDBCExecutor(final String databaseName, final MetaDataContexts metaDataContexts, final JDBCExecutor jdbcExecutor) {
+ public DriverJDBCExecutor(final String databaseName, final ContextManager contextManager, final JDBCExecutor jdbcExecutor) {
this.databaseName = databaseName;
- this.metaDataContexts = metaDataContexts;
+ this.contextManager = contextManager;
this.jdbcExecutor = jdbcExecutor;
+ metaDataContexts = contextManager.getMetaDataContexts();
metadataRefreshEngine = new MetaDataRefreshEngine(metaDataContexts.getMetaData().getDatabases().get(databaseName),
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().get(databaseName),
metaDataContexts.getOptimizerContext().getPlannerContexts(), metaDataContexts.getMetaData().getProps());
@@ -155,7 +162,10 @@ public final class DriverJDBCExecutor {
}
private void refreshMetaData(final SQLStatementContext<?> sqlStatementContext, final Collection<RouteUnit> routeUnits) throws SQLException {
- metadataRefreshEngine.refresh(sqlStatementContext, () -> routeUnits.stream()
+ Optional<MetaDataRefreshedEvent> event = metadataRefreshEngine.refresh(sqlStatementContext, () -> routeUnits.stream()
.map(each -> each.getDataSourceMapper().getLogicName()).collect(Collectors.toCollection(() -> new ArrayList<>(routeUnits.size()))));
+ if (contextManager.getInstanceContext().isCluster() && event.isPresent()) {
+ ShardingSphereEventBus.getInstance().post(event.get());
+ }
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriber.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySu [...]
index 09bd2739009..bc6a9326eb8 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriber.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriber.java
@@ -21,6 +21,7 @@ import com.google.common.eventbus.Subscribe;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.metadata.database.schema.event.AddSchemaEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.AlterSchemaEvent;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.DropIndexEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.DropSchemaEvent;
import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.mode.metadata.persist.service.SchemaMetaDataPersistService;
@@ -79,4 +80,13 @@ public final class SchemaMetaDataRegistrySubscriber {
public void dropSchema(final DropSchemaEvent event) {
event.getSchemaNames().forEach(each -> persistService.deleteSchema(event.getDatabaseName(), each));
}
+
+ /**
+ * Drop index.
+ * @param event drop index event
+ */
+ @Subscribe
+ public void dropIndex(final DropIndexEvent event) {
+ event.getSchemaAlteredEvents().forEach(this::update);
+ }
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index c95947b5fc7..70feea1c4b8 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.context.kernel.KernelProcessor;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefreshEngine;
+import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
@@ -34,6 +35,7 @@ import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.JDBCDriv
import org.apache.shardingsphere.infra.merge.MergeEngine;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.mode.manager.lock.ShardingSphereLockJudgeEngine;
@@ -104,8 +106,11 @@ public abstract class DatabaseCommunicationEngine<T> {
public abstract T execute();
protected void refreshMetaData(final ExecutionContext executionContext) throws SQLException {
- metadataRefreshEngine.refresh(executionContext.getSqlStatementContext(), () -> executionContext.getRouteContext().getRouteUnits().stream()
+ Optional<MetaDataRefreshedEvent> event = metadataRefreshEngine.refresh(executionContext.getSqlStatementContext(), () -> executionContext.getRouteContext().getRouteUnits().stream()
.map(each -> each.getDataSourceMapper().getLogicName()).collect(Collectors.toList()));
+ if (ProxyContext.getInstance().getContextManager().getInstanceContext().isCluster() && event.isPresent()) {
+ ShardingSphereEventBus.getInstance().post(event.get());
+ }
}
protected QueryResponseHeader processExecuteQuery(final ExecutionContext executionContext, final List<QueryResult> queryResults, final QueryResult queryResultSample) throws SQLException {