You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/09/11 13:57:20 UTC

[shardingsphere] branch master updated: Scaling prepare tables part 1 : Define interface and implement MySQL dialect (#12369)

This is an automated email from the ASF dual-hosted git repository.

panjuan 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 237fa0a  Scaling prepare tables part 1 : Define interface and implement MySQL dialect (#12369)
237fa0a is described below

commit 237fa0aaa13210e67f3f0758bdeb1bfe613febfe
Author: Hongsheng Zhong <sa...@126.com>
AuthorDate: Sat Sep 11 21:56:41 2021 +0800

    Scaling prepare tables part 1 : Define interface and implement MySQL dialect (#12369)
    
    * Add JobTargetPreparer interface and fixture impl
    
    * EnvironmentChecker add getJobTargetPreparerClass() method and empty impl
    
    * Integrate JobTargetPreparer with ScalingJobPreparer
    
    * Rename
    
    * Add DataSourcePreparer MySQL impl
    
    * Log
---
 .../sqlbuilder/AbstractScalingSQLBuilder.java      |  2 +-
 .../scaling/core/job/JobContext.java               |  2 +-
 .../scaling/core/job/check/EnvironmentChecker.java |  8 ++
 .../core/job/check/EnvironmentCheckerFactory.java  | 17 ++++
 .../core/job/preparer/DataSourcePreparer.java}     | 23 +++--
 .../core/job/preparer/ScalingJobPreparer.java      | 11 +++
 .../core/fixture/FixtureDataSourcePreparer.java}   | 15 ++--
 .../core/fixture/FixtureEnvironmentChecker.java    |  6 ++
 .../component/checker/MySQLDataSourcePreparer.java | 99 ++++++++++++++++++++++
 .../component/checker/MySQLEnvironmentChecker.java |  6 ++
 .../checker/PostgreSQLEnvironmentChecker.java      |  7 ++
 11 files changed, 171 insertions(+), 25 deletions(-)

diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/common/sqlbuilder/AbstractScalingSQLBuilder.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/common/sqlbuilder/AbstractScalingSQLBuilder.java
index 9ceeecc..b163e9c 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/common/sqlbuilder/AbstractScalingSQLBuilder.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/common/sqlbuilder/AbstractScalingSQLBuilder.java
@@ -68,7 +68,7 @@ public abstract class AbstractScalingSQLBuilder implements ScalingSQLBuilder {
      * @param item to add quote item
      * @return add quote string
      */
-    protected StringBuilder quote(final String item) {
+    public StringBuilder quote(final String item) {
         return new StringBuilder().append(getLeftIdentifierQuoteString()).append(item).append(getRightIdentifierQuoteString());
     }
     
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/JobContext.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/JobContext.java
index 880db2f..be4c690 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/JobContext.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/JobContext.java
@@ -51,7 +51,7 @@ public final class JobContext {
     
     private final List<IncrementalTask> incrementalTasks = new LinkedList<>();
     
-    private JobConfiguration jobConfig;
+    private final JobConfiguration jobConfig;
     
     private ScalingJobPreparer jobPreparer;
     
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/check/EnvironmentChecker.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/check/EnvironmentChecker.java
index 84e9434..8d88e59 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/check/EnvironmentChecker.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/check/EnvironmentChecker.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.core.job.check;
 
 import org.apache.shardingsphere.scaling.core.job.check.consistency.DataConsistencyChecker;
 import org.apache.shardingsphere.scaling.core.job.check.source.DataSourceChecker;
+import org.apache.shardingsphere.scaling.core.job.preparer.DataSourcePreparer;
 
 /**
  * Environment checker.
@@ -38,4 +39,11 @@ public interface EnvironmentChecker {
      * @return data consistency checker type.
      */
     Class<? extends DataConsistencyChecker> getDataConsistencyCheckerClass();
+    
+    /**
+     * Get data source preparer type.
+     *
+     * @return data source preparer type.
+     */
+    Class<? extends DataSourcePreparer> getDataSourcePreparerClass();
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/check/EnvironmentCheckerFactory.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/check/EnvironmentCheckerFactory.java
index 3d5f659..d7233ea 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/check/EnvironmentCheckerFactory.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/check/EnvironmentCheckerFactory.java
@@ -21,6 +21,7 @@ import lombok.SneakyThrows;
 import org.apache.shardingsphere.scaling.core.job.JobContext;
 import org.apache.shardingsphere.scaling.core.job.check.consistency.DataConsistencyChecker;
 import org.apache.shardingsphere.scaling.core.job.check.source.DataSourceChecker;
+import org.apache.shardingsphere.scaling.core.job.preparer.DataSourcePreparer;
 import org.apache.shardingsphere.scaling.core.spi.ScalingEntry;
 import org.apache.shardingsphere.scaling.core.spi.ScalingEntryLoader;
 
@@ -53,4 +54,20 @@ public final class EnvironmentCheckerFactory {
         ScalingEntry scalingEntry = ScalingEntryLoader.getInstance(databaseType);
         return scalingEntry.getEnvironmentCheckerClass().getConstructor().newInstance().getDataSourceCheckerClass().getConstructor().newInstance();
     }
+    
+    /**
+     * Create data source preparer instance.
+     *
+     * @param databaseType database type
+     * @return data source preparer
+     */
+    @SneakyThrows(ReflectiveOperationException.class)
+    public static DataSourcePreparer getDataSourcePreparer(final String databaseType) {
+        ScalingEntry scalingEntry = ScalingEntryLoader.getInstance(databaseType);
+        Class<? extends DataSourcePreparer> preparerClass = scalingEntry.getEnvironmentCheckerClass().getConstructor().newInstance().getDataSourcePreparerClass();
+        if (null == preparerClass) {
+            return null;
+        }
+        return preparerClass.getConstructor().newInstance();
+    }
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLEnvironmentChecker.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/DataSourcePreparer.java
similarity index 60%
copy from shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLEnvironmentChecker.java
copy to shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/DataSourcePreparer.java
index ce34ebf..94f0a81 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLEnvironmentChecker.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/DataSourcePreparer.java
@@ -15,22 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.scaling.mysql.component.checker;
+package org.apache.shardingsphere.scaling.core.job.preparer;
 
-import org.apache.shardingsphere.scaling.core.job.check.EnvironmentChecker;
+import org.apache.shardingsphere.scaling.core.config.JobConfiguration;
 
 /**
- * MySQL environment checker.
+ * Data source preparer.
  */
-public final class MySQLEnvironmentChecker implements EnvironmentChecker {
+public interface DataSourcePreparer {
     
-    @Override
-    public Class<MySQLDataSourceChecker> getDataSourceCheckerClass() {
-        return MySQLDataSourceChecker.class;
-    }
-    
-    @Override
-    public Class<MySQLDataConsistencyChecker> getDataConsistencyCheckerClass() {
-        return MySQLDataConsistencyChecker.class;
-    }
+    /**
+     * Prepare target tables.
+     *
+     * @param jobConfig job configuration
+     */
+    void prepareTargetTables(JobConfiguration jobConfig);
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/ScalingJobPreparer.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/ScalingJobPreparer.java
index 18a36eb..e0087b2 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/ScalingJobPreparer.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/ScalingJobPreparer.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.scaling.core.job.preparer;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.scaling.core.common.datasource.DataSourceManager;
 import org.apache.shardingsphere.scaling.core.common.exception.PrepareFailedException;
+import org.apache.shardingsphere.scaling.core.config.JobConfiguration;
 import org.apache.shardingsphere.scaling.core.config.TaskConfiguration;
 import org.apache.shardingsphere.scaling.core.job.JobContext;
 import org.apache.shardingsphere.scaling.core.job.JobStatus;
@@ -50,6 +51,7 @@ public final class ScalingJobPreparer {
      * @param jobContext job context
      */
     public void prepare(final JobContext jobContext) {
+        prepareTarget(jobContext.getJobConfig());
         try (DataSourceManager dataSourceManager = new DataSourceManager(jobContext.getTaskConfigs())) {
             checkDataSource(jobContext, dataSourceManager);
             initIncrementalTasks(jobContext, dataSourceManager);
@@ -60,6 +62,15 @@ public final class ScalingJobPreparer {
         }
     }
     
+    private void prepareTarget(final JobConfiguration jobConfig) {
+        DataSourcePreparer dataSourcePreparer = EnvironmentCheckerFactory.getDataSourcePreparer(jobConfig.getHandleConfig().getDatabaseType());
+        if (null == dataSourcePreparer) {
+            log.info("dataSourcePreparer null, ignore prepare target");
+            return;
+        }
+        dataSourcePreparer.prepareTargetTables(jobConfig);
+    }
+    
     private void checkDataSource(final JobContext jobContext, final DataSourceManager dataSourceManager) {
         checkSourceDataSources(jobContext, dataSourceManager);
         if (null == jobContext.getInitProgress()) {
diff --git a/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-postgresql/src/main/java/org/apache/shardingsphere/scaling/postgresql/component/checker/PostgreSQLEnvironmentChecker.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureDataSourcePreparer.java
similarity index 61%
copy from shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-postgresql/src/main/java/org/apache/shardingsphere/scaling/postgresql/component/checker/PostgreSQLEnvironmentChecker.java
copy to shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureDataSourcePreparer.java
index a75d9ea..0230e98 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-postgresql/src/main/java/org/apache/shardingsphere/scaling/postgresql/component/checker/PostgreSQLEnvironmentChecker.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureDataSourcePreparer.java
@@ -15,19 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.scaling.postgresql.component.checker;
+package org.apache.shardingsphere.scaling.core.fixture;
 
-import org.apache.shardingsphere.scaling.core.job.check.EnvironmentChecker;
+import org.apache.shardingsphere.scaling.core.config.JobConfiguration;
+import org.apache.shardingsphere.scaling.core.job.preparer.DataSourcePreparer;
 
-public final class PostgreSQLEnvironmentChecker implements EnvironmentChecker {
+public final class FixtureDataSourcePreparer implements DataSourcePreparer {
     
     @Override
-    public Class<PostgreSQLDataSourceChecker> getDataSourceCheckerClass() {
-        return PostgreSQLDataSourceChecker.class;
-    }
-    
-    @Override
-    public Class<PostgreSQLDataConsistencyChecker> getDataConsistencyCheckerClass() {
-        return PostgreSQLDataConsistencyChecker.class;
+    public void prepareTargetTables(final JobConfiguration jobConfig) {
     }
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureEnvironmentChecker.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureEnvironmentChecker.java
index 0a8066e..90e8d28 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureEnvironmentChecker.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureEnvironmentChecker.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.scaling.core.fixture;
 import org.apache.shardingsphere.scaling.core.job.check.EnvironmentChecker;
 import org.apache.shardingsphere.scaling.core.job.check.consistency.DataConsistencyChecker;
 import org.apache.shardingsphere.scaling.core.job.check.source.DataSourceChecker;
+import org.apache.shardingsphere.scaling.core.job.preparer.DataSourcePreparer;
 
 public final class FixtureEnvironmentChecker implements EnvironmentChecker {
     
@@ -32,4 +33,9 @@ public final class FixtureEnvironmentChecker implements EnvironmentChecker {
     public Class<? extends DataConsistencyChecker> getDataConsistencyCheckerClass() {
         return FixtureDataConsistencyChecker.class;
     }
+    
+    @Override
+    public Class<? extends DataSourcePreparer> getDataSourcePreparerClass() {
+        return FixtureDataSourcePreparer.class;
+    }
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLDataSourcePreparer.java b/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLDataSourcePreparer.java
new file mode 100644
index 0000000..96949dc
--- /dev/null
+++ b/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLDataSourcePreparer.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.scaling.mysql.component.checker;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.scaling.core.common.datasource.DataSourceFactory;
+import org.apache.shardingsphere.scaling.core.common.datasource.DataSourceWrapper;
+import org.apache.shardingsphere.scaling.core.common.exception.PrepareFailedException;
+import org.apache.shardingsphere.scaling.core.config.JobConfiguration;
+import org.apache.shardingsphere.scaling.core.config.datasource.ScalingDataSourceConfiguration;
+import org.apache.shardingsphere.scaling.core.config.datasource.ShardingSphereJDBCDataSourceConfiguration;
+import org.apache.shardingsphere.scaling.core.config.yaml.ShardingRuleConfigurationSwapper;
+import org.apache.shardingsphere.scaling.core.job.preparer.DataSourcePreparer;
+import org.apache.shardingsphere.scaling.mysql.component.MySQLScalingSQLBuilder;
+import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Data source preparer for MySQL.
+ */
+@Slf4j
+public final class MySQLDataSourcePreparer implements DataSourcePreparer {
+    
+    private final DataSourceFactory dataSourceFactory = new DataSourceFactory();
+    
+    private final MySQLScalingSQLBuilder scalingSQLBuilder = new MySQLScalingSQLBuilder(Collections.emptyMap());
+    
+    @Override
+    public void prepareTargetTables(final JobConfiguration jobConfig) {
+        ScalingDataSourceConfiguration sourceConfig = jobConfig.getRuleConfig().getSource().unwrap();
+        ScalingDataSourceConfiguration targetConfig = jobConfig.getRuleConfig().getTarget().unwrap();
+        try (DataSourceWrapper sourceDataSource = dataSourceFactory.newInstance(sourceConfig);
+             Connection sourceConnection = sourceDataSource.getConnection();
+             DataSourceWrapper targetDataSource = dataSourceFactory.newInstance(targetConfig);
+             Connection targetConnection = targetDataSource.getConnection()) {
+            List<String> logicTableNames = getLogicTableNames(sourceConfig);
+            for (String logicTableName : logicTableNames) {
+                createTargetTable(sourceConnection, targetConnection, logicTableName);
+                log.info("create target table '{}' success", logicTableName);
+            }
+        } catch (final SQLException ex) {
+            throw new PrepareFailedException("prepare target tables failed.", ex);
+        }
+    }
+    
+    private List<String> getLogicTableNames(final ScalingDataSourceConfiguration sourceConfig) {
+        List<String> result = new ArrayList<>();
+        ShardingSphereJDBCDataSourceConfiguration source = (ShardingSphereJDBCDataSourceConfiguration) sourceConfig;
+        ShardingRuleConfiguration ruleConfig = ShardingRuleConfigurationSwapper.findAndConvertShardingRuleConfiguration(source.getRootConfig().getRules());
+        List<String> tableNames = ruleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getLogicTable).collect(Collectors.toList());
+        List<String> autoTableNames = ruleConfig.getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getLogicTable).collect(Collectors.toList());
+        result.addAll(tableNames);
+        result.addAll(autoTableNames);
+        return result;
+    }
+    
+    private void createTargetTable(final Connection sourceConnection, final Connection targetConnection, final String logicTableName) throws SQLException {
+        String createTableSQL = getCreateTableSQL(sourceConnection, logicTableName);
+        log.info("logicTableName: {}, createTableSQL: {}", logicTableName, createTableSQL);
+        try (Statement statement = targetConnection.createStatement()) {
+            statement.execute(createTableSQL);
+        }
+    }
+    
+    private String getCreateTableSQL(final Connection sourceConnection, final String logicTableName) throws SQLException {
+        String showCreateTableSQL = "SHOW CREATE TABLE " + scalingSQLBuilder.quote(logicTableName);
+        try (Statement statement = sourceConnection.createStatement(); ResultSet resultSet = statement.executeQuery(showCreateTableSQL)) {
+            if (!resultSet.next()) {
+                throw new PrepareFailedException("show create table has no result, sql: " + showCreateTableSQL);
+            }
+            return resultSet.getString(2);
+        }
+    }
+}
diff --git a/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLEnvironmentChecker.java b/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLEnvironmentChecker.java
index ce34ebf..d833216 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLEnvironmentChecker.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-mysql/src/main/java/org/apache/shardingsphere/scaling/mysql/component/checker/MySQLEnvironmentChecker.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.scaling.mysql.component.checker;
 
 import org.apache.shardingsphere.scaling.core.job.check.EnvironmentChecker;
+import org.apache.shardingsphere.scaling.core.job.preparer.DataSourcePreparer;
 
 /**
  * MySQL environment checker.
@@ -33,4 +34,9 @@ public final class MySQLEnvironmentChecker implements EnvironmentChecker {
     public Class<MySQLDataConsistencyChecker> getDataConsistencyCheckerClass() {
         return MySQLDataConsistencyChecker.class;
     }
+    
+    @Override
+    public Class<? extends DataSourcePreparer> getDataSourcePreparerClass() {
+        return MySQLDataSourcePreparer.class;
+    }
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-postgresql/src/main/java/org/apache/shardingsphere/scaling/postgresql/component/checker/PostgreSQLEnvironmentChecker.java b/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-postgresql/src/main/java/org/apache/shardingsphere/scaling/postgresql/component/checker/PostgreSQLEnvironmentChecker.java
index a75d9ea..86a2f03 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-postgresql/src/main/java/org/apache/shardingsphere/scaling/postgresql/component/checker/PostgreSQLEnvironmentChecker.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-dialect/shardingsphere-scaling-postgresql/src/main/java/org/apache/shardingsphere/scaling/postgresql/component/checker/PostgreSQLEnvironmentChecker.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.scaling.postgresql.component.checker;
 
 import org.apache.shardingsphere.scaling.core.job.check.EnvironmentChecker;
+import org.apache.shardingsphere.scaling.core.job.preparer.DataSourcePreparer;
 
 public final class PostgreSQLEnvironmentChecker implements EnvironmentChecker {
     
@@ -30,4 +31,10 @@ public final class PostgreSQLEnvironmentChecker implements EnvironmentChecker {
     public Class<PostgreSQLDataConsistencyChecker> getDataConsistencyCheckerClass() {
         return PostgreSQLDataConsistencyChecker.class;
     }
+    
+    @Override
+    public Class<? extends DataSourcePreparer> getDataSourcePreparerClass() {
+        //TODO
+        return null;
+    }
 }