This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 be90b88f2ca Fix openGauss scaling IT problems (#19361)
be90b88f2ca is described below
commit be90b88f2cac293cb66f0e76c3b70d401ad575df
Author: azexcy <[email protected]>
AuthorDate: Wed Jul 20 21:22:32 2022 +0800
Fix openGauss scaling IT problems (#19361)
---
.../metadata/generator/PipelineDDLGenerator.java | 7 +++-
.../pipeline/cases/base/BaseExtraSQLITCase.java | 8 +++-
.../data/pipeline/cases/base/BaseITCase.java | 19 ++++++++-
.../container/database/OpenGaussContainer.java | 5 ++-
.../proxy/ShardingSphereProxyDockerContainer.java | 3 +-
.../src/test/resources/env/opengauss/initdb.sql | 45 ++++++++++++++++++++++
.../src/test/resources/env/opengauss/pg_hba.conf | 33 ++++++++++++++++
7 files changed, 114 insertions(+), 6 deletions(-)
diff --git
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
index dd95e4fa4c2..90cc053e4f9 100644
---
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
+++
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.data.pipeline.core.metadata.generator;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import
org.apache.shardingsphere.data.pipeline.spi.ddlgenerator.CreateTableSQLGeneratorFactory;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
@@ -225,6 +226,10 @@ public final class PipelineDDLGenerator {
if (logicSQL.toLowerCase().startsWith(SET_SEARCH_PATH_PREFIX)) {
return Optional.empty();
}
- return Optional.of(replaceTableNameWithPrefix(logicSQL, schemaName +
".", databaseType, databaseName));
+ String result = replaceTableNameWithPrefix(logicSQL, schemaName + ".",
databaseType, databaseName);
+ if (StringUtils.startsWithIgnoreCase(result, "CREATE TABLE")) {
+ result = StringUtils.replaceIgnoreCase(result, "CREATE TABLE",
"CREATE TABLE IF NOT EXISTS");
+ }
+ return Optional.of(result);
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseExtraSQLITCase.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseExtraSQLITCase.java
index b605a7e41af..cb7faf64ab7 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseExtraSQLITCase.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseExtraSQLITCase.java
@@ -80,7 +80,13 @@ public abstract class BaseExtraSQLITCase extends BaseITCase {
// CHECKSTYLE:OFF
} catch (final Exception ex) {
// CHECKSTYLE:ON
- assertTrue(ex.getCause().getMessage().endsWith("The database
sharding_db is read-only"));
+ // TODO openGauss seem return the different error message, need to
check it
+ if (DatabaseTypeUtil.isOpenGauss(getDatabaseType())) {
+ log.info("openGauss error msg:{}", ex.getMessage());
+ return false;
+ } else {
+ assertTrue(ex.getMessage(),
ex.getCause().getMessage().endsWith("The database sharding_db is read-only"));
+ }
return false;
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseITCase.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseITCase.java
index 9910c968372..645bb4aacd4 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseITCase.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseITCase.java
@@ -42,7 +42,9 @@ import
org.apache.shardingsphere.integration.data.pipeline.framework.watcher.Sca
import
org.apache.shardingsphere.integration.data.pipeline.util.DatabaseTypeUtil;
import
org.apache.shardingsphere.test.integration.env.runtime.DataSourceEnvironment;
import org.junit.Rule;
+import org.opengauss.util.PSQLException;
import org.springframework.dao.DataAccessException;
+import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
@@ -269,7 +271,22 @@ public abstract class BaseITCase {
}
protected void createSchema(final String schemaName) {
- executeWithLog(String.format("CREATE SCHEMA %s", schemaName));
+ if (DatabaseTypeUtil.isPostgreSQL(databaseType)) {
+ executeWithLog(String.format("CREATE SCHEMA IF NOT EXISTS %s",
schemaName));
+ return;
+ }
+ if (DatabaseTypeUtil.isOpenGauss(databaseType)) {
+ try {
+ executeWithLog(String.format("CREATE SCHEMA %s", schemaName));
+ } catch (final BadSqlGrammarException ex) {
+ // only used for native mode.
+ if (ex.getCause() instanceof PSQLException &&
"42P06".equals(((PSQLException) ex.getCause()).getSQLState())) {
+ log.info("Schema {} already exists.", schemaName);
+ } else {
+ throw ex;
+ }
+ }
+ }
}
protected void executeWithLog(final Connection connection, final String
sql) throws SQLException {
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/framework/container/database/OpenGaussContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/framework/container/database/OpenGaussContainer.java
index 2669de72821..3645ff9e5b8 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/framework/container/database/OpenGaussContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/framework/container/database/OpenGaussContainer.java
@@ -33,7 +33,7 @@ public final class OpenGaussContainer extends
DatabaseContainer {
private static final DatabaseType DATABASE_TYPE = new
OpenGaussDatabaseType();
- private final String username = "gaussdb";
+ private final String username = "scaling";
private final String password = "Root@123";
@@ -48,7 +48,8 @@ public final class OpenGaussContainer extends
DatabaseContainer {
withCommand("--max_connections=600");
addEnv("GS_PASSWORD", password);
withClasspathResourceMapping("/env/postgresql/postgresql.conf",
"/usr/local/opengauss/share/postgresql/postgresql.conf.sample",
BindMode.READ_ONLY);
- withClasspathResourceMapping("/env/postgresql/initdb.sql",
"/docker-entrypoint-initdb.d/", BindMode.READ_ONLY);
+ withClasspathResourceMapping("/env/opengauss/pg_hba.conf",
"/usr/local/opengauss/share/postgresql/pg_hba.conf.sample", BindMode.READ_ONLY);
+ withClasspathResourceMapping("/env/opengauss/initdb.sql",
"/docker-entrypoint-initdb.d/", BindMode.READ_ONLY);
withPrivilegedMode(true);
withExposedPorts(port);
setWaitStrategy(new JDBCConnectionWaitStrategy(() ->
DriverManager.getConnection(DataSourceEnvironment.getURL(DATABASE_TYPE,
"localhost", getFirstMappedPort(), "postgres"),
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/framework/container/proxy/ShardingSphereProxyDockerContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/framework/container/proxy/ShardingSphereProxyDockerContainer.java
index 9b4726783f0..4a6786f895a 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/framework/container/proxy/ShardingSphereProxyDockerContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/framework/container/proxy/ShardingSphereProxyDockerContainer.java
@@ -20,9 +20,9 @@ package
org.apache.shardingsphere.integration.data.pipeline.framework.container.
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.integration.data.pipeline.util.DatabaseTypeUtil;
-import
org.apache.shardingsphere.test.integration.env.runtime.DataSourceEnvironment;
import
org.apache.shardingsphere.test.integration.env.container.atomic.DockerITContainer;
import
org.apache.shardingsphere.test.integration.env.container.wait.JDBCConnectionWaitStrategy;
+import
org.apache.shardingsphere.test.integration.env.runtime.DataSourceEnvironment;
import org.testcontainers.containers.BindMode;
import java.sql.DriverManager;
@@ -44,6 +44,7 @@ public final class ShardingSphereProxyDockerContainer extends
DockerITContainer
protected void configure() {
withExposedPorts(3307);
mapConfigurationFiles();
+ // TODO openGauss can't use this wait strategy now.
if (DatabaseTypeUtil.isPostgreSQL(databaseType) ||
DatabaseTypeUtil.isOpenGauss(databaseType)) {
setWaitStrategy(new JDBCConnectionWaitStrategy(() ->
DriverManager.getConnection(DataSourceEnvironment.getURL(databaseType,
getHost(), getMappedPort(3307), "postgres"), "root", "root")));
} else {
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/resources/env/opengauss/initdb.sql
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/resources/env/opengauss/initdb.sql
new file mode 100644
index 00000000000..0d5b1ef5605
--- /dev/null
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/resources/env/opengauss/initdb.sql
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements. See the NOTICE file distributed with
+-- 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.
+
+CREATE DATABASE scaling_it_0;
+CREATE DATABASE scaling_it_1;
+CREATE DATABASE scaling_it_2;
+CREATE DATABASE scaling_it_3;
+CREATE DATABASE scaling_it_4;
+CREATE USER scaling WITH ENCRYPTED PASSWORD 'Root@123';
+CREATE DATABASE scaling;
+ALTER ROLE scaling CREATEDB REPLICATION;
+GRANT CREATE, CONNECT ON DATABASE scaling_it_0 TO scaling;
+GRANT CREATE, CONNECT ON DATABASE scaling_it_1 TO scaling;
+GRANT CREATE, CONNECT ON DATABASE scaling_it_2 TO scaling;
+GRANT CREATE, CONNECT ON DATABASE scaling_it_3 TO scaling;
+GRANT CREATE, CONNECT ON DATABASE scaling_it_4 TO scaling;
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/resources/env/opengauss/pg_hba.conf
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/resources/env/opengauss/pg_hba.conf
new file mode 100644
index 00000000000..28319b9acb0
--- /dev/null
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/resources/env/opengauss/pg_hba.conf
@@ -0,0 +1,33 @@
+#
+# 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.
+#
+
+# TYPE DATABASE USER ADDRESS METHOD
+
+@remove-line-for-nolocal@# "local" is for Unix domain socket connections only
+@remove-line-for-nolocal@local all all
@authmethodlocal@
+# IPv4 local connections:
+host all all 127.0.0.1/32
@authmethodhost@
+# IPv6 local connections:
+host all all ::1/128
@authmethodhost@
+# Allow replication connections from localhost, by a user with the
+# replication privilege.
+@remove-line-for-nolocal@#local replication @default_username@
@authmethodlocal@
+#host replication @default_username@ 127.0.0.1/32
@authmethodhost@
+#host replication @default_username@ ::1/128
@authmethodhost@
+#
+
+host replication scaling 0.0.0.0/0 md5