You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/09/07 05:00:53 UTC
[shardingsphere] branch master updated: Reuse OverallConnectionNotEnoughException (#20844)
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 6c50075aca2 Reuse OverallConnectionNotEnoughException (#20844)
6c50075aca2 is described below
commit 6c50075aca2dfc6e2c866a0d344e74793867d98f
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Sep 7 13:00:44 2022 +0800
Reuse OverallConnectionNotEnoughException (#20844)
* Reuse OverallConnectionNotEnoughException
* Reuse OverallConnectionNotEnoughException
* Fix test case
* Fix test case
---
.../content/user-manual/error-code/sql-error-code.cn.md | 2 +-
.../content/user-manual/error-code/sql-error-code.en.md | 2 +-
.../exception/OverallConnectionNotEnoughException.java | 5 +++--
.../driver/jdbc/core/connection/ConnectionManager.java | 2 +-
.../driver/jdbc/core/connection/ConnectionManagerTest.java | 3 ++-
.../communication/jdbc/datasource/JDBCBackendDataSource.java | 4 ++--
.../jdbc/datasource/JDBCBackendDataSourceTest.java | 12 ++++++------
7 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/docs/document/content/user-manual/error-code/sql-error-code.cn.md b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
index 9d572a110f4..3ad4d917de0 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.cn.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
@@ -17,7 +17,7 @@ SQL 错误码以标准的 SQL State,Vendor Code 和详细错误信息提供,
| HY004 | 10004 | Unsupported conversion data type \`%s\` for value \`%s\` |
| HY004 | 10005 | Unsupported conversion stream charset \`%s\` |
| HY004 | 10006 | SQL String can not be NULL or empty |
-| 08000 | 10007 | Can not get %d connections one time, partition succeed connection(%d) have released |
+| 08000 | 10007 | Can not get %d connections one time, partition succeed connection(%d) have released. Please consider increasing the \`maxPoolSize\` of the data sources or decreasing the \`max-connections-size-per-query\` in properties |
| HY004 | 10100 | Can not register driver, reason is: %s |
| 34000 | 10200 | Can not get cursor name from fetch statement |
| HY000 | 10300 | Could not support variable \`%s\` |
diff --git a/docs/document/content/user-manual/error-code/sql-error-code.en.md b/docs/document/content/user-manual/error-code/sql-error-code.en.md
index 39eb1167e19..eb7241cc4c9 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.en.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.en.md
@@ -17,7 +17,7 @@ SQL error codes provide by standard `SQL State`, `Vendor Code` and `Reason`, whi
| HY004 | 10004 | Unsupported conversion data type \`%s\` for value \`%s\` |
| HY004 | 10005 | Unsupported conversion stream charset \`%s\` |
| HY004 | 10006 | SQL String can not be NULL or empty |
-| 08000 | 10007 | Can not get %d connections one time, partition succeed connection(%d) have released |
+| 08000 | 10007 | Can not get %d connections one time, partition succeed connection(%d) have released. Please consider increasing the \`maxPoolSize\` of the data sources or decreasing the \`max-connections-size-per-query\` in properties |
| HY004 | 10100 | Can not register driver, reason is: %s |
| 34000 | 10200 | Can not get cursor name from fetch statement |
| HY000 | 10300 | Could not support variable \`%s\` |
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/exception/OverallConnectionNotEnoughException.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/exception/OverallConnectionNotEnoughException.java
similarity index 85%
rename from shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/exception/OverallConnectionNotEnoughException.java
rename to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/exception/OverallConnectionNotEnoughException.java
index 0ad901620fe..719cc33fc9d 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/exception/OverallConnectionNotEnoughException.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/exception/OverallConnectionNotEnoughException.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.driver.jdbc.exception;
+package org.apache.shardingsphere.infra.exception;
import org.apache.shardingsphere.infra.util.exception.external.sql.ShardingSphereSQLException;
import org.apache.shardingsphere.infra.util.exception.external.sql.sqlstate.XOpenSQLState;
@@ -28,6 +28,7 @@ public final class OverallConnectionNotEnoughException extends ShardingSphereSQL
private static final long serialVersionUID = -1297088138042287804L;
public OverallConnectionNotEnoughException(final int desiredSize, final int actualSize) {
- super(XOpenSQLState.CONNECTION_EXCEPTION, 10007, "Can not get %d connections one time, partition succeed connection(%d) have released", desiredSize, actualSize);
+ super(XOpenSQLState.CONNECTION_EXCEPTION, 10007, "Can not get %d connections one time, partition succeed connection(%d) have released. "
+ + "Please consider increasing the `maxPoolSize` of the data sources or decreasing the `max-connections-size-per-query` in properties", desiredSize, actualSize);
}
}
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
index b9f6d547f1f..13a49c3f67e 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
@@ -25,7 +25,7 @@ import lombok.Getter;
import org.apache.shardingsphere.driver.jdbc.adapter.executor.ForceExecuteTemplate;
import org.apache.shardingsphere.driver.jdbc.adapter.invocation.MethodInvocationRecorder;
import org.apache.shardingsphere.driver.jdbc.core.ShardingSphereSavepoint;
-import org.apache.shardingsphere.driver.jdbc.exception.OverallConnectionNotEnoughException;
+import org.apache.shardingsphere.infra.exception.OverallConnectionNotEnoughException;
import org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
index 281d4fd9010..9ac92b3d832 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
@@ -225,7 +225,8 @@ public final class ConnectionManagerTest {
try {
connectionManager.getConnections("invalid_ds", 3, ConnectionMode.CONNECTION_STRICTLY);
} catch (final SQLException ex) {
- assertThat(ex.getMessage(), is("Can not get 3 connections one time, partition succeed connection(0) have released"));
+ assertThat(ex.getMessage(), is("Can not get 3 connections one time, partition succeed connection(0) have released. "
+ + "Please consider increasing the `maxPoolSize` of the data sources or decreasing the `max-connections-size-per-query` in properties"));
}
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSource.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSource.java
index ae329b3366f..72812e2af27 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSource.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSource.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource;
import com.google.common.base.Preconditions;
import org.apache.shardingsphere.infra.datasource.registry.GlobalDataSourceRegistry;
+import org.apache.shardingsphere.infra.exception.OverallConnectionNotEnoughException;
import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
import org.apache.shardingsphere.proxy.backend.communication.BackendDataSource;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -96,8 +97,7 @@ public final class JDBCBackendDataSource implements BackendDataSource {
for (Connection each : result) {
each.close();
}
- throw new SQLException(String.format("Could not get %d connections at once. The %d obtained connections have been released. "
- + "Please consider increasing the `maxPoolSize` of the data sources or decreasing the `max-connections-size-per-query` in props.", connectionSize, result.size()), ex);
+ throw new OverallConnectionNotEnoughException(connectionSize, result.size());
}
}
return result;
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
index 595f2a42191..01a2efeefb5 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
+import org.apache.shardingsphere.infra.exception.OverallConnectionNotEnoughException;
import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -51,7 +52,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -104,13 +105,13 @@ public final class JDBCBackendDataSourceTest extends ProxyContextRestorer {
assertThat(actual.size(), is(5));
}
- @Test(expected = SQLException.class)
+ @Test(expected = OverallConnectionNotEnoughException.class)
public void assertGetConnectionsFailed() throws SQLException {
ProxyContext.getInstance().getBackendDataSource().getConnections("schema", String.format(DATA_SOURCE_PATTERN, 1), 6, ConnectionMode.MEMORY_STRICTLY);
}
@Test
- public void assertGetConnectionsByMultiThread() {
+ public void assertGetConnectionsByMultiThread() throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(20);
Collection<Future<List<Connection>>> futures = new LinkedList<>();
for (int i = 0; i < 200; i++) {
@@ -120,9 +121,8 @@ public final class JDBCBackendDataSourceTest extends ProxyContextRestorer {
for (Future<List<Connection>> each : futures) {
try {
actual.addAll(each.get());
- } catch (final InterruptedException | ExecutionException ex) {
- assertThat(ex.getMessage(), containsString("Could not get 6 connections at once. The 5 obtained connections have been released. "
- + "Please consider increasing the `maxPoolSize` of the data sources or decreasing the `max-connections-size-per-query` in props."));
+ } catch (final ExecutionException ex) {
+ assertThat(ex.getCause(), instanceOf(OverallConnectionNotEnoughException.class));
}
}
assertTrue(actual.isEmpty());