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 <[email protected]>
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 {