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 2021/06/06 12:26:53 UTC

[shardingsphere] branch master updated: Refactor MetadataRefreshEngine (#10677)

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 eed668f  Refactor MetadataRefreshEngine (#10677)
eed668f is described below

commit eed668f6553f2820a82352f3787cca7da0c9f6c4
Author: Juan Pan(Trista) <pa...@apache.org>
AuthorDate: Sun Jun 6 20:26:04 2021 +0800

    Refactor MetadataRefreshEngine (#10677)
    
    * Refactor MetadataRefreshEngine
    
    * FIX TESTS
---
 .../metadata/{engine => }/MetadataRefresher.java   |  2 +-
 .../metadata/schema/refresher/SchemaRefresher.java |  2 +-
 .../metadata/refresher}/MetadataRefreshEngine.java | 48 ++++++++++++++--------
 .../refresher}/MetadataRefresherFactory.java       | 44 ++++++++++++++------
 .../refresher/MetadataRefresherFactoryTest.java    | 18 ++++----
 .../core/metadata/FederateSchemaMetadatas.java     | 10 +++++
 .../core/metadata/refresher/FederateRefresher.java |  2 +-
 .../driver/executor/JDBCLockEngine.java            |  5 ++-
 .../communication/DatabaseCommunicationEngine.java |  3 +-
 .../backend/communication/ProxyLockEngine.java     |  2 +-
 10 files changed, 90 insertions(+), 46 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresher.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/MetadataRefresher.java
similarity index 93%
rename from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresher.java
rename to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/MetadataRefresher.java
index f646850..847e5f8 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/MetadataRefresher.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.metadata.engine;
+package org.apache.shardingsphere.infra.metadata;
 
 /**
  * Metadata refresher.
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/SchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/SchemaRefresher.java
index a4a9946..afb5121 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/SchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/SchemaRefresher.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.infra.metadata.schema.refresher;
 
-import org.apache.shardingsphere.infra.metadata.engine.MetadataRefresher;
+import org.apache.shardingsphere.infra.metadata.MetadataRefresher;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefreshEngine.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/refresher/MetadataRefreshEngine.java
similarity index 57%
rename from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefreshEngine.java
rename to shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/refresher/MetadataRefreshEngine.java
index d86201b..d83326e 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefreshEngine.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/refresher/MetadataRefreshEngine.java
@@ -15,19 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.metadata.engine;
+package org.apache.shardingsphere.infra.context.metadata.refresher;
 
 import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.exception.ShardingSphereException;
 import org.apache.shardingsphere.infra.lock.LockNameUtil;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
+import org.apache.shardingsphere.infra.metadata.MetadataRefresher;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.metadata.mapper.SQLStatementEventMapper;
 import org.apache.shardingsphere.infra.metadata.mapper.SQLStatementEventMapperFactory;
 import org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
 import org.apache.shardingsphere.infra.metadata.schema.refresher.SchemaRefresher;
 import org.apache.shardingsphere.infra.metadata.schema.refresher.event.SchemaAlteredEvent;
+import org.apache.shardingsphere.infra.optimize.core.metadata.FederateSchemaMetadata;
+import org.apache.shardingsphere.infra.optimize.core.metadata.refresher.FederateRefresher;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.sql.SQLException;
@@ -40,16 +43,20 @@ import java.util.Optional;
  */
 public final class MetadataRefreshEngine {
     
-    private final ShardingSphereMetaData metaData;
+    private final ShardingSphereMetaData schemaMetadata;
+    
+    private final FederateSchemaMetadata federateMetadata;
     
     private final SchemaBuilderMaterials materials;
     
     private final ShardingSphereLock shardingSphereLock;
     
-    public MetadataRefreshEngine(final ShardingSphereMetaData metaData, final ConfigurationProperties properties, final ShardingSphereLock shardingSphereLock) {
-        this.metaData = metaData;
+    public MetadataRefreshEngine(final ShardingSphereMetaData schemaMetadata, 
+                                 final FederateSchemaMetadata federateMetadata, final ConfigurationProperties properties, final ShardingSphereLock shardingSphereLock) {
+        this.schemaMetadata = schemaMetadata;
+        this.federateMetadata = federateMetadata;
         this.shardingSphereLock = shardingSphereLock;
-        materials = new SchemaBuilderMaterials(metaData.getResource().getDatabaseType(), metaData.getResource().getDataSources(), metaData.getRuleMetaData().getRules(), properties);
+        materials = new SchemaBuilderMaterials(schemaMetadata.getResource().getDatabaseType(), schemaMetadata.getResource().getDataSources(), schemaMetadata.getRuleMetaData().getRules(), properties);
     }
     
     /**
@@ -60,9 +67,9 @@ public final class MetadataRefreshEngine {
      * @throws SQLException SQL exception
      */
     public void refresh(final SQLStatement sqlStatement, final Collection<String> routeDataSourceNames) throws SQLException {
-        Optional<MetadataRefresher> metadataRefresher = MetadataRefresherFactory.newInstance(sqlStatement);
-        if (metadataRefresher.isPresent()) {
-            refreshSchema(sqlStatement, routeDataSourceNames, (SchemaRefresher) metadataRefresher.get());
+        Collection<MetadataRefresher> metadataRefreshers = MetadataRefresherFactory.newInstance(sqlStatement);
+        if (!metadataRefreshers.isEmpty()) {
+            refresh(sqlStatement, routeDataSourceNames, metadataRefreshers);
         }
         Optional<SQLStatementEventMapper> sqlStatementEventMapper = SQLStatementEventMapperFactory.newInstance(sqlStatement);
         if (sqlStatementEventMapper.isPresent()) {
@@ -71,21 +78,20 @@ public final class MetadataRefreshEngine {
         }
     }
     
-    @SuppressWarnings("rawtypes")
-    private void refreshSchema(final SQLStatement sqlStatement, final Collection<String> routeDataSourceNames, final SchemaRefresher refresher) throws SQLException {
+    private void refresh(final SQLStatement sqlStatement, final Collection<String> routeDataSourceNames, final Collection<MetadataRefresher> refreshers) throws SQLException {
         if (Objects.nonNull(shardingSphereLock)) {
-            refreshSchemaWithLock(sqlStatement, routeDataSourceNames, refresher);
+            refreshWithLock(sqlStatement, routeDataSourceNames, refreshers);
         } else {
-            refreshSchemaWithoutLock(sqlStatement, routeDataSourceNames, refresher);
+            refreshWithoutLock(sqlStatement, routeDataSourceNames, refreshers);
         }
     }
     
-    private void refreshSchemaWithLock(final SQLStatement sqlStatement, final Collection<String> routeDataSourceNames, final SchemaRefresher refresher) throws SQLException {
+    private void refreshWithLock(final SQLStatement sqlStatement, final Collection<String> routeDataSourceNames, final Collection<MetadataRefresher> refreshers) throws SQLException {
         try {
             if (!shardingSphereLock.tryLock(LockNameUtil.getMetadataRefreshLockName())) {
                 throw new ShardingSphereException("Metadata refresh failed.");
             }
-            refreshSchemaWithoutLock(sqlStatement, routeDataSourceNames, refresher);
+            refreshWithoutLock(sqlStatement, routeDataSourceNames, refreshers);
             if (!shardingSphereLock.isReleased(LockNameUtil.getMetadataRefreshLockName())) {
                 throw new ShardingSphereException("Metadata refresh failed.");
             }
@@ -94,8 +100,16 @@ public final class MetadataRefreshEngine {
         }
     }
     
-    private void refreshSchemaWithoutLock(final SQLStatement sqlStatement, final Collection<String> routeDataSourceNames, final SchemaRefresher refresher) throws SQLException {
-        refresher.refresh(metaData.getSchema(), routeDataSourceNames, sqlStatement, materials);
-        ShardingSphereEventBus.getInstance().post(new SchemaAlteredEvent(metaData.getName(), metaData.getSchema()));
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    private void refreshWithoutLock(final SQLStatement sqlStatement, final Collection<String> routeDataSourceNames, final Collection<MetadataRefresher> refreshers) throws SQLException {
+        for (MetadataRefresher each : refreshers) {
+            if (each instanceof SchemaRefresher) {
+                ((SchemaRefresher) each).refresh(schemaMetadata.getSchema(), routeDataSourceNames, sqlStatement, materials);
+            }
+            if (each instanceof FederateRefresher) {
+                ((FederateRefresher) each).refresh(federateMetadata, routeDataSourceNames, sqlStatement, materials);
+            }
+        }
+        ShardingSphereEventBus.getInstance().post(new SchemaAlteredEvent(schemaMetadata.getName(), schemaMetadata.getSchema()));
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresherFactory.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/refresher/MetadataRefresherFactory.java
similarity index 58%
rename from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresherFactory.java
rename to shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/refresher/MetadataRefresherFactory.java
index f4e5f66..4fc2c0d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresherFactory.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/refresher/MetadataRefresherFactory.java
@@ -15,10 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.metadata.engine;
+package org.apache.shardingsphere.infra.context.metadata.refresher;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.metadata.MetadataRefresher;
 import org.apache.shardingsphere.infra.metadata.schema.refresher.type.AlterIndexStatementSchemaRefresher;
 import org.apache.shardingsphere.infra.metadata.schema.refresher.type.AlterTableStatementSchemaRefresher;
 import org.apache.shardingsphere.infra.metadata.schema.refresher.type.CreateIndexStatementSchemaRefresher;
@@ -27,6 +28,7 @@ import org.apache.shardingsphere.infra.metadata.schema.refresher.type.CreateView
 import org.apache.shardingsphere.infra.metadata.schema.refresher.type.DropIndexStatementSchemaRefresher;
 import org.apache.shardingsphere.infra.metadata.schema.refresher.type.DropTableStatementSchemaRefresher;
 import org.apache.shardingsphere.infra.metadata.schema.refresher.type.DropViewStatementSchemaRefresher;
+import org.apache.shardingsphere.infra.optimize.core.metadata.refresher.type.CreateTableStatementFederateRefresher;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
@@ -37,10 +39,12 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropIndexSt
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropViewStatement;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Optional;
 
 /**
  * ShardingSphere schema refresher factory.
@@ -48,17 +52,26 @@ import java.util.Optional;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class MetadataRefresherFactory {
     
-    private static final Map<Class<?>, MetadataRefresher> REGISTRY = new HashMap<>();
+    private static final Map<Class<?>, Collection<MetadataRefresher>> REGISTRY = new HashMap<>();
     
     static {
-        REGISTRY.put(CreateTableStatement.class, new CreateTableStatementSchemaRefresher());
-        REGISTRY.put(AlterTableStatement.class, new AlterTableStatementSchemaRefresher());
-        REGISTRY.put(DropTableStatement.class, new DropTableStatementSchemaRefresher());
-        REGISTRY.put(CreateIndexStatement.class, new CreateIndexStatementSchemaRefresher());
-        REGISTRY.put(AlterIndexStatement.class, new AlterIndexStatementSchemaRefresher());
-        REGISTRY.put(DropIndexStatement.class, new DropIndexStatementSchemaRefresher());
-        REGISTRY.put(CreateViewStatement.class, new CreateViewStatementSchemaRefresher());
-        REGISTRY.put(DropViewStatement.class, new DropViewStatementSchemaRefresher());
+        REGISTRY.put(CreateTableStatement.class, new LinkedHashSet<>());
+        REGISTRY.put(AlterTableStatement.class, new LinkedHashSet<>());
+        REGISTRY.put(DropTableStatement.class, new LinkedHashSet<>());
+        REGISTRY.put(CreateIndexStatement.class, new LinkedHashSet<>());
+        REGISTRY.put(AlterIndexStatement.class, new LinkedHashSet<>());
+        REGISTRY.put(DropIndexStatement.class, new LinkedHashSet<>());
+        REGISTRY.put(CreateViewStatement.class, new LinkedHashSet<>());
+        REGISTRY.put(DropViewStatement.class, new LinkedHashSet<>());
+        REGISTRY.get(CreateTableStatement.class).add(new CreateTableStatementSchemaRefresher());
+        REGISTRY.get(CreateTableStatement.class).add(new CreateTableStatementFederateRefresher());
+        REGISTRY.get(AlterTableStatement.class).add(new AlterTableStatementSchemaRefresher());
+        REGISTRY.get(DropTableStatement.class).add(new DropTableStatementSchemaRefresher());
+        REGISTRY.get(CreateIndexStatement.class).add(new CreateIndexStatementSchemaRefresher());
+        REGISTRY.get(AlterIndexStatement.class).add(new AlterIndexStatementSchemaRefresher());
+        REGISTRY.get(DropIndexStatement.class).add(new DropIndexStatementSchemaRefresher());
+        REGISTRY.get(CreateViewStatement.class).add(new CreateViewStatementSchemaRefresher());
+        REGISTRY.get(DropViewStatement.class).add(new DropViewStatementSchemaRefresher());
     }
     
     /**
@@ -67,7 +80,12 @@ public final class MetadataRefresherFactory {
      * @param sqlStatement SQL statement
      * @return instance of schema refresher
      */
-    public static Optional<MetadataRefresher> newInstance(final SQLStatement sqlStatement) {
-        return REGISTRY.entrySet().stream().filter(entry -> entry.getKey().isAssignableFrom(sqlStatement.getClass())).findFirst().map(Entry::getValue);
+    public static Collection<MetadataRefresher> newInstance(final SQLStatement sqlStatement) {
+        for (Entry<Class<?>, Collection<MetadataRefresher>> entry : REGISTRY.entrySet()) {
+            if (entry.getKey().isAssignableFrom(sqlStatement.getClass())) {
+                return entry.getValue();
+            }
+        }
+        return Collections.emptyList();
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/MetadataRefresherFactoryTest.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/refresher/MetadataRefresherFactoryTest.java
similarity index 71%
rename from shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/MetadataRefresherFactoryTest.java
rename to shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/refresher/MetadataRefresherFactoryTest.java
index df80591..3eccaf4 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/MetadataRefresherFactoryTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/refresher/MetadataRefresherFactoryTest.java
@@ -15,9 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.metadata.schema.refresher;
+package org.apache.shardingsphere.infra.context.metadata.refresher;
 
-import org.apache.shardingsphere.infra.metadata.engine.MetadataRefresherFactory;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndexStatement;
@@ -28,7 +27,8 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -36,31 +36,31 @@ public final class MetadataRefresherFactoryTest {
     
     @Test
     public void assertNewInstanceWithCreateTableStatement() {
-        assertTrue(MetadataRefresherFactory.newInstance(mock(CreateTableStatement.class)).isPresent());
+        assertThat(MetadataRefresherFactory.newInstance(mock(CreateTableStatement.class)).size(), is(2));
     }
     
     @Test
     public void assertNewInstanceWithAlterTableStatement() {
-        assertTrue(MetadataRefresherFactory.newInstance(mock(AlterTableStatement.class)).isPresent());
+        assertThat(MetadataRefresherFactory.newInstance(mock(AlterTableStatement.class)).size(), is(1));
     }
     
     @Test
     public void assertNewInstanceWithDropTableStatement() {
-        assertTrue(MetadataRefresherFactory.newInstance(mock(DropTableStatement.class)).isPresent());
+        assertThat(MetadataRefresherFactory.newInstance(mock(DropTableStatement.class)).size(), is(1));
     }
     
     @Test
     public void assertNewInstanceWithCreateIndexStatement() {
-        assertTrue(MetadataRefresherFactory.newInstance(mock(CreateIndexStatement.class)).isPresent());
+        assertThat(MetadataRefresherFactory.newInstance(mock(CreateIndexStatement.class)).size(), is(1));
     }
     
     @Test
     public void assertNewInstanceWithDropIndexStatement() {
-        assertTrue(MetadataRefresherFactory.newInstance(mock(DropIndexStatement.class)).isPresent());
+        assertThat(MetadataRefresherFactory.newInstance(mock(DropIndexStatement.class)).size(), is(1));
     }
     
     @Test
     public void assertNewInstanceWithAlterIndexStatement() {
-        assertTrue(MetadataRefresherFactory.newInstance(mock(AlterIndexStatement.class)).isPresent());
+        assertThat(MetadataRefresherFactory.newInstance(mock(AlterIndexStatement.class)).size(), is(1));
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/core/metadata/FederateSchemaMetadatas.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/core/metadata/FederateSchemaMetadatas.java
index 10dc6e5..8f59adc 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/core/metadata/FederateSchemaMetadatas.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/core/metadata/FederateSchemaMetadatas.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.optimize.core.metadata;
 
 import lombok.Getter;
 import org.apache.commons.collections4.map.LinkedMap;
+import org.apache.shardingsphere.infra.database.DefaultSchema;
 import org.apache.shardingsphere.infra.exception.ShardingSphereException;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 
@@ -43,4 +44,13 @@ public final class FederateSchemaMetadatas {
             }
         }
     }
+    
+    /**
+     * Get default schema metadata.
+     * 
+     * @return default schema metadata
+     */
+    public FederateSchemaMetadata getDefaultSchemaMetadata() {
+        return schemas.get(DefaultSchema.LOGIC_NAME);
+    }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/FederateRefresher.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/FederateRefresher.java
index e580ade..1fdf83f 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/FederateRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/FederateRefresher.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.infra.optimize.core.metadata.refresher;
 
-import org.apache.shardingsphere.infra.metadata.engine.MetadataRefresher;
+import org.apache.shardingsphere.infra.metadata.MetadataRefresher;
 import org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
 import org.apache.shardingsphere.infra.optimize.core.metadata.FederateSchemaMetadata;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/JDBCLockEngine.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/JDBCLockEngine.java
index 4adf330..06fb1df 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/JDBCLockEngine.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/JDBCLockEngine.java
@@ -26,7 +26,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.J
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
 import org.apache.shardingsphere.infra.lock.LockNameUtil;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
-import org.apache.shardingsphere.infra.metadata.engine.MetadataRefreshEngine;
+import org.apache.shardingsphere.infra.context.metadata.refresher.MetadataRefreshEngine;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
@@ -55,7 +55,8 @@ public final class JDBCLockEngine {
     public JDBCLockEngine(final MetaDataContexts metaDataContexts, final JDBCExecutor jdbcExecutor) {
         this.metaDataContexts = metaDataContexts;
         this.jdbcExecutor = jdbcExecutor;
-        metadataRefreshEngine = new MetadataRefreshEngine(metaDataContexts.getDefaultMetaData(), metaDataContexts.getProps(), metaDataContexts.getLock().orElse(null));
+        metadataRefreshEngine = new MetadataRefreshEngine(metaDataContexts.getDefaultMetaData(), 
+                metaDataContexts.getOptimizeContextFactory().getSchemaMetadatas().getDefaultSchemaMetadata(), metaDataContexts.getProps(), metaDataContexts.getLock().orElse(null));
     }
     
     /**
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 6f8c4d8..c5ec642 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
@@ -30,7 +30,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.ShardingSphereMetaData;
-import org.apache.shardingsphere.infra.metadata.engine.MetadataRefreshEngine;
+import org.apache.shardingsphere.infra.context.metadata.refresher.MetadataRefreshEngine;
 import org.apache.shardingsphere.infra.rule.type.DataNodeContainedRule;
 import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -80,6 +80,7 @@ public final class DatabaseCommunicationEngine {
         proxySQLExecutor = new ProxySQLExecutor(driverType, backendConnection);
         kernelProcessor = new KernelProcessor();
         proxyLockEngine = new ProxyLockEngine(proxySQLExecutor, new MetadataRefreshEngine(metaData, 
+                ProxyContext.getInstance().getMetaDataContexts().getOptimizeContextFactory().getSchemaMetadatas().getSchemas().get(backendConnection.getSchemaName()), 
                 ProxyContext.getInstance().getMetaDataContexts().getProps(), ProxyContext.getInstance().getLock().orElse(null)), backendConnection.getSchemaName());
     }
     
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxyLockEngine.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxyLockEngine.java
index e5fcb56..601148f 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxyLockEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxyLockEngine.java
@@ -21,7 +21,7 @@ import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.ExecuteResult;
 import org.apache.shardingsphere.infra.lock.LockNameUtil;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
-import org.apache.shardingsphere.infra.metadata.engine.MetadataRefreshEngine;
+import org.apache.shardingsphere.infra.context.metadata.refresher.MetadataRefreshEngine;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.exception.TableLockWaitTimeoutException;
 import org.apache.shardingsphere.proxy.backend.exception.TableLockedException;