You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/03/17 05:27:29 UTC
[shardingsphere] branch master updated: Add savepoint support for shardingsphere-proxy on xa transaction mode (#16127)
This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 bf7a90f Add savepoint support for shardingsphere-proxy on xa transaction mode (#16127)
bf7a90f is described below
commit bf7a90f2c86cc1fdb97956a123e39b066185b5b6
Author: JingShang Lu <ji...@gmail.com>
AuthorDate: Thu Mar 17 13:26:05 2022 +0800
Add savepoint support for shardingsphere-proxy on xa transaction mode (#16127)
* add savepoint support for shardingsphere-proxy
---
.../AbstractCommandExecutorTaskAdviceTest.java | 4 +-
.../transaction/ConnectionSavepointManager.java | 2 +-
.../config/NarayanaConfigurationFileGenerator.java | 1 +
.../NarayanaConfigurationFileGeneratorTest.java | 2 +-
.../transaction/JDBCBackendTransactionManager.java | 58 ++++++++++++++--------
.../jdbc/transaction/LocalTransactionManager.java | 50 +++----------------
.../proxy/backend/session/ConnectionSession.java | 6 ++-
.../transaction/TransactionBackendHandler.java | 40 ++++++++++++---
.../JDBCBackendTransactionManagerTest.java | 49 ------------------
.../backend/session/ConnectionSessionTest.java | 4 +-
.../executor/ShowProcessListExecutorTest.java | 4 +-
.../queryable/ShowVariableBackendHandlerTest.java | 3 +-
.../updatable/SetVariableBackendHandlerTest.java | 2 +-
.../rql/RuleDefinitionBackendHandlerTest.java | 3 +-
.../netty/FrontendChannelInboundHandler.java | 3 +-
.../netty/FrontendChannelInboundHandlerTest.java | 1 +
16 files changed, 104 insertions(+), 128 deletions(-)
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractCommandExecutorTaskAdviceTest.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractCommandExecutorTaskAdviceTest.java
index c545267..5972d47 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractCommandExecutorTaskAdviceTest.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-test/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/advice/AbstractCommandExecutorTaskAdviceTest.java
@@ -21,10 +21,12 @@ import io.netty.util.DefaultAttributeMap;
import lombok.Getter;
import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
import org.apache.shardingsphere.agent.plugin.tracing.AgentRunner;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.junit.runner.RunWith;
+import static org.mockito.Mockito.mock;
@RunWith(AgentRunner.class)
public abstract class AbstractCommandExecutorTaskAdviceTest implements AdviceTestBase {
@@ -35,7 +37,7 @@ public abstract class AbstractCommandExecutorTaskAdviceTest implements AdviceTes
@SuppressWarnings("ConstantConditions")
@Override
public final void prepare() {
- ConnectionSession connectionSession = new ConnectionSession(TransactionType.BASE, new DefaultAttributeMap());
+ ConnectionSession connectionSession = new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.BASE, new DefaultAttributeMap());
Object executorTask = new CommandExecutorTask(null, connectionSession, null, null);
targetObject = (AdviceTargetObject) executorTask;
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/ConnectionSavepointManager.java b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-core/src/main/java/org/apache/shardingsphere/transaction/ConnectionSavepointManager.java
similarity index 97%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/ConnectionSavepointManager.java
rename to shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-core/src/main/java/org/apache/shardingsphere/transaction/ConnectionSavepointManager.java
index 78cc9ba..5b737e0 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/ConnectionSavepointManager.java
+++ b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-core/src/main/java/org/apache/shardingsphere/transaction/ConnectionSavepointManager.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction;
+package org.apache.shardingsphere.transaction;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
diff --git a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGenerator.java b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-x [...]
index 1299416..25349e3 100644
--- a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGenerator.java
+++ b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGenerator.java
@@ -79,6 +79,7 @@ public final class NarayanaConfigurationFileGenerator implements TransactionConf
result.getEntries().add(createEntry("RecoveryEnvironmentBean.transactionStatusManagerAddress", ""));
result.getEntries().add(createEntry("RecoveryEnvironmentBean.recoveryListener", "NO"));
result.getEntries().add(createEntry("RecoveryEnvironmentBean.recoveryBackoffPeriod", "1"));
+ result.getEntries().add(createEntry("CoordinatorEnvironmentBean.defaultTimeout", "180"));
return result;
}
diff --git a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/test/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGeneratorTest.java b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transacti [...]
index 6e43fd9..2ef79d0 100644
--- a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/test/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGeneratorTest.java
+++ b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/test/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGeneratorTest.java
@@ -96,7 +96,7 @@ public final class NarayanaConfigurationFileGeneratorTest {
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
InputStream inputStream = new FileInputStream(new File(ClassLoader.getSystemResource("").getPath(), "jbossts-properties.xml"));
NarayanaConfiguration narayanaConfiguration = (NarayanaConfiguration) unmarshaller.unmarshal(inputStream);
- assertThat(narayanaConfiguration.getEntries().size(), is(26));
+ assertThat(narayanaConfiguration.getEntries().size(), is(27));
assertCommitOnePhase(narayanaConfiguration);
assertTransactionSync(narayanaConfiguration);
assertNodeIdentifier(narayanaConfiguration);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/JDBCBackendTransactionManager.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/JDBCBackendTransactionManager.java
index bd266fa..e139fb4 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/JDBCBackendTransactionManager.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/JDBCBackendTransactionManager.java
@@ -18,14 +18,18 @@
package org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction;
import org.apache.shardingsphere.proxy.backend.communication.TransactionManager;
-import org.apache.shardingsphere.transaction.TransactionHolder;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.transaction.ConnectionSavepointManager;
import org.apache.shardingsphere.transaction.ShardingSphereTransactionManagerEngine;
+import org.apache.shardingsphere.transaction.TransactionHolder;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManager;
+import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Collection;
+import java.util.LinkedList;
/**
* Backend transaction manager.
@@ -102,37 +106,51 @@ public final class JDBCBackendTransactionManager implements TransactionManager<V
@Override
public Void setSavepoint(final String savepointName) throws SQLException {
- if (!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
- return null;
- }
- if (TransactionType.LOCAL == transactionType || null == shardingSphereTransactionManager) {
- localTransactionManager.setSavepoint(savepointName);
+ for (Connection each : connection.getCachedConnections().values()) {
+ ConnectionSavepointManager.getInstance().setSavepoint(each, savepointName);
}
+ connection.getConnectionPostProcessors().add(target -> {
+ try {
+ ConnectionSavepointManager.getInstance().setSavepoint(target, savepointName);
+ } catch (final SQLException ex) {
+ throw new RuntimeException(ex);
+ }
+ });
return null;
- // TODO Non-local transaction manager
}
@Override
public Void rollbackTo(final String savepointName) throws SQLException {
- if (!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
- return null;
- }
- if (TransactionType.LOCAL == transactionType || null == shardingSphereTransactionManager) {
- localTransactionManager.rollbackTo(savepointName);
+ Collection<SQLException> result = new LinkedList<>();
+ for (Connection each : connection.getCachedConnections().values()) {
+ try {
+ ConnectionSavepointManager.getInstance().rollbackToSavepoint(each, savepointName);
+ } catch (final SQLException ex) {
+ result.add(ex);
+ }
}
- return null;
- // TODO Non-local transaction manager
+ return throwSQLExceptionIfNecessary(result);
}
@Override
public Void releaseSavepoint(final String savepointName) throws SQLException {
- if (!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
- return null;
+ Collection<SQLException> result = new LinkedList<>();
+ for (Connection each : connection.getCachedConnections().values()) {
+ try {
+ ConnectionSavepointManager.getInstance().releaseSavepoint(each, savepointName);
+ } catch (final SQLException ex) {
+ result.add(ex);
+ }
}
- if (TransactionType.LOCAL == transactionType || null == shardingSphereTransactionManager) {
- localTransactionManager.releaseSavepoint(savepointName);
+ return throwSQLExceptionIfNecessary(result);
+ }
+
+ private Void throwSQLExceptionIfNecessary(final Collection<SQLException> exceptions) throws SQLException {
+ if (exceptions.isEmpty()) {
+ return null;
}
- return null;
- // TODO Non-local transaction manager
+ SQLException ex = new SQLException("");
+ exceptions.forEach(ex::setNextException);
+ throw ex;
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/LocalTransactionManager.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/LocalTransactionManager.java
index 2298bf8..2b05cbe 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/LocalTransactionManager.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/LocalTransactionManager.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.proxy.backend.communication.TransactionManager;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
+import org.apache.shardingsphere.transaction.ConnectionSavepointManager;
import java.sql.Connection;
import java.sql.SQLException;
@@ -93,58 +94,23 @@ public final class LocalTransactionManager implements TransactionManager<Void> {
}
@Override
- public Void setSavepoint(final String savepointName) throws SQLException {
- if (!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
- return null;
- }
- for (Connection each : connection.getCachedConnections().values()) {
- ConnectionSavepointManager.getInstance().setSavepoint(each, savepointName);
- }
- connection.getConnectionPostProcessors().add(target -> {
- try {
- ConnectionSavepointManager.getInstance().setSavepoint(target, savepointName);
- } catch (final SQLException ex) {
- throw new RuntimeException(ex);
- }
- });
+ public Void setSavepoint(final String savepointName) {
return null;
}
@Override
- public Void rollbackTo(final String savepointName) throws SQLException {
- if (!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
- return null;
- }
- Collection<SQLException> result = new LinkedList<>();
- for (Connection each : connection.getCachedConnections().values()) {
- try {
- ConnectionSavepointManager.getInstance().rollbackToSavepoint(each, savepointName);
- } catch (final SQLException ex) {
- result.add(ex);
- }
- }
- return throwSQLExceptionIfNecessary(result);
+ public Void rollbackTo(final String savepointName) {
+ return null;
}
@Override
- public Void releaseSavepoint(final String savepointName) throws SQLException {
- if (!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
- return null;
- }
- Collection<SQLException> result = new LinkedList<>();
- for (Connection each : connection.getCachedConnections().values()) {
- try {
- ConnectionSavepointManager.getInstance().releaseSavepoint(each, savepointName);
- } catch (final SQLException ex) {
- result.add(ex);
- }
- }
- return throwSQLExceptionIfNecessary(result);
+ public Void releaseSavepoint(final String savepointName) {
+ return null;
}
- private Void throwSQLExceptionIfNecessary(final Collection<SQLException> exceptions) throws SQLException {
+ private void throwSQLExceptionIfNecessary(final Collection<SQLException> exceptions) throws SQLException {
if (exceptions.isEmpty()) {
- return null;
+ return;
}
SQLException ex = new SQLException("");
exceptions.forEach(ex::setNextException);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
index cb7bcb7..1af819d 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
@@ -22,6 +22,7 @@ import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import org.apache.shardingsphere.infra.executor.sql.prepare.driver.ExecutorStatementManager;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
@@ -45,6 +46,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
@Setter
public final class ConnectionSession {
+ private final DatabaseType databaseType;
+
@Setter(AccessLevel.NONE)
private volatile String schemaName;
@@ -70,7 +73,8 @@ public final class ConnectionSession {
private final ExecutorStatementManager statementManager;
- public ConnectionSession(final TransactionType initialTransactionType, final AttributeMap attributeMap) {
+ public ConnectionSession(final DatabaseType databaseType, final TransactionType initialTransactionType, final AttributeMap attributeMap) {
+ this.databaseType = databaseType;
transactionStatus = new TransactionStatus(initialTransactionType);
this.attributeMap = attributeMap;
backendConnection = determineBackendConnection();
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionBackendHandler.java
index a3efda5..5118fac 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionBackendHandler.java
@@ -18,6 +18,8 @@
package org.apache.shardingsphere.proxy.backend.text.transaction;
import io.vertx.core.Future;
+import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.proxy.backend.communication.TransactionManager;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction.JDBCBackendTransactionManager;
@@ -105,17 +107,13 @@ public final class TransactionBackendHandler implements TextProtocolBackendHandl
backendTransactionManager.begin();
break;
case SAVEPOINT:
- backendTransactionManager.setSavepoint(((SavepointStatement) tclStatement).getSavepointName());
+ handleSavepoint();
break;
case ROLLBACK_TO_SAVEPOINT:
- if (((RollbackStatement) tclStatement).getSavepointName().isPresent()) {
- backendTransactionManager.rollbackTo(((RollbackStatement) tclStatement).getSavepointName().get());
- break;
- }
- backendTransactionManager.rollback();
+ handleRollbackToSavepoint();
break;
case RELEASE_SAVEPOINT:
- backendTransactionManager.releaseSavepoint(((ReleaseSavepointStatement) tclStatement).getSavepointName());
+ handleReleaseSavepoint();
break;
case COMMIT:
SQLStatement sqlStatement = getSQLStatementByCommit();
@@ -130,6 +128,34 @@ public final class TransactionBackendHandler implements TextProtocolBackendHandl
return new UpdateResponseHeader(tclStatement);
}
+ private void handleSavepoint() throws SQLException {
+ if (!connectionSession.getTransactionStatus().isInTransaction() && checkPostgreSQLOrOpengauss()) {
+ throw new SQLFeatureNotSupportedException("SAVEPOINT can only be used in transaction blocks");
+ }
+ backendTransactionManager.setSavepoint(((SavepointStatement) tclStatement).getSavepointName());
+ }
+
+ private void handleRollbackToSavepoint() throws SQLException {
+ if (!connectionSession.getTransactionStatus().isInTransaction() && checkPostgreSQLOrOpengauss()) {
+ throw new SQLFeatureNotSupportedException("ROLLBACK TO SAVEPOINT can only be used in transaction blocks");
+ }
+ backendTransactionManager.rollbackTo(((RollbackStatement) tclStatement).getSavepointName().get());
+ }
+
+ private void handleReleaseSavepoint() throws SQLException {
+ if (!connectionSession.getTransactionStatus().isInTransaction() && checkPostgreSQLOrOpengauss()) {
+ throw new SQLFeatureNotSupportedException("RELEASE SAVEPOINT can only be used in transaction blocks");
+ }
+ backendTransactionManager.releaseSavepoint(((ReleaseSavepointStatement) tclStatement).getSavepointName());
+ }
+
+ private boolean checkPostgreSQLOrOpengauss() {
+ if (connectionSession.getDatabaseType() instanceof PostgreSQLDatabaseType || connectionSession.getDatabaseType() instanceof OpenGaussDatabaseType) {
+ return true;
+ }
+ return false;
+ }
+
private SQLStatement getSQLStatementByCommit() {
SQLStatement result = tclStatement;
if (connectionSession.getTransactionStatus().isRollbackOnly()) {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/JDBCBackendTransactionManagerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/JDBCBackendTransactionManagerTest.java
index d8d2544..65c3df3 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/JDBCBackendTransactionManagerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/JDBCBackendTransactionManagerTest.java
@@ -38,7 +38,6 @@ import java.sql.SQLException;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -158,54 +157,6 @@ public final class JDBCBackendTransactionManagerTest {
verify(shardingSphereTransactionManager, times(0)).rollback();
}
- @Test
- public void assertSetSavepointForLocalTransaction() throws SQLException {
- newBackendTransactionManager(TransactionType.LOCAL, true);
- String savepointName = "JDBC_SAVEPOINT_0";
- backendTransactionManager.setSavepoint(savepointName);
- verify(localTransactionManager).setSavepoint(savepointName);
- }
-
- @Test
- public void assertSetSavepointWithoutTransaction() throws SQLException {
- newBackendTransactionManager(TransactionType.LOCAL, false);
- String savepointName = "JDBC_SAVEPOINT_0";
- backendTransactionManager.setSavepoint(savepointName);
- verify(localTransactionManager, never()).setSavepoint(savepointName);
- }
-
- @Test
- public void assertRollbackToSavepointForLocalTransaction() throws SQLException {
- newBackendTransactionManager(TransactionType.LOCAL, true);
- String savepointName = "JDBC_SAVEPOINT_0";
- backendTransactionManager.rollbackTo(savepointName);
- verify(localTransactionManager).rollbackTo(savepointName);
- }
-
- @Test
- public void assertRollbackToSavepointWithoutTransaction() throws SQLException {
- newBackendTransactionManager(TransactionType.LOCAL, false);
- String savepointName = "JDBC_SAVEPOINT_0";
- backendTransactionManager.rollbackTo(savepointName);
- verify(localTransactionManager, never()).rollbackTo(savepointName);
- }
-
- @Test
- public void assertReleaseSavepointForLocalTransaction() throws SQLException {
- newBackendTransactionManager(TransactionType.LOCAL, true);
- String savepointName = "JDBC_SAVEPOINT_0";
- backendTransactionManager.releaseSavepoint(savepointName);
- verify(localTransactionManager).releaseSavepoint(savepointName);
- }
-
- @Test
- public void assertReleaseSavepointWithoutTransaction() throws SQLException {
- newBackendTransactionManager(TransactionType.LOCAL, false);
- String savepointName = "JDBC_SAVEPOINT_0";
- backendTransactionManager.releaseSavepoint(savepointName);
- verify(localTransactionManager, never()).releaseSavepoint(savepointName);
- }
-
private void newBackendTransactionManager(final TransactionType transactionType, final boolean inTransaction) {
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(transactionType);
when(transactionStatus.isInTransaction()).thenReturn(inTransaction);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
index 256825c..ffa16f7 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.proxy.backend.session;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
@@ -38,6 +39,7 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
@@ -61,7 +63,7 @@ public final class ConnectionSessionTest {
@Before
public void setup() {
ProxyContext.getInstance().init(contextManager);
- connectionSession = new ConnectionSession(TransactionType.LOCAL, null);
+ connectionSession = new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, null);
when(backendConnection.getConnectionSession()).thenReturn(connectionSession);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowProcessListExecutorTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowProcessListExecutorTest.java
index 80c6004..87308a2 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowProcessListExecutorTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowProcessListExecutorTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.proxy.backend.text.admin.mysql.executor;
import io.netty.util.DefaultAttributeMap;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.transaction.core.TransactionType;
@@ -30,6 +31,7 @@ import java.util.Collections;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
public final class ShowProcessListExecutorTest {
@@ -60,7 +62,7 @@ public final class ShowProcessListExecutorTest {
@Test
public void assertExecute() throws SQLException {
- showProcessListExecutor.execute(new ConnectionSession(TransactionType.LOCAL, new DefaultAttributeMap()));
+ showProcessListExecutor.execute(new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new DefaultAttributeMap()));
assertThat(showProcessListExecutor.getQueryResultMetaData().getColumnCount(), is(8));
MergedResult mergedResult = showProcessListExecutor.getMergedResult();
while (mergedResult.next()) {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowVariableBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowVariableBackendHandlerTest.java
index 98a8581..914af81 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowVariableBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowVariableBackendHandlerTest.java
@@ -21,6 +21,7 @@ import io.netty.util.DefaultAttributeMap;
import org.apache.shardingsphere.distsql.parser.statement.ral.common.queryable.ShowVariableStatement;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -58,7 +59,7 @@ public final class ShowVariableBackendHandlerTest {
contextManagerBefore = ProxyContext.getInstance().getContextManager();
ProxyContext.getInstance().init(mock(ContextManager.class, RETURNS_DEEP_STUBS));
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getProps().getValue(ConfigurationPropertyKey.PROXY_BACKEND_DRIVER_TYPE)).thenReturn("JDBC");
- connectionSession = new ConnectionSession(TransactionType.LOCAL, new DefaultAttributeMap());
+ connectionSession = new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new DefaultAttributeMap());
}
@Test
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/SetVariableBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/SetVariableBackendHandlerTest.java
index 4c6e922..7d571a4 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/SetVariableBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/SetVariableBackendHandlerTest.java
@@ -75,7 +75,7 @@ public final class SetVariableBackendHandlerTest {
ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
ProxyContext.getInstance().init(contextManager);
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
- connectionSession = new ConnectionSession(TransactionType.LOCAL, new DefaultAttributeMap());
+ connectionSession = new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new DefaultAttributeMap());
}
private Map<String, ShardingSphereMetaData> getMetaDataMap() {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleDefinitionBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleDefinitionBackendHandlerTest.java
index 990d299..8b1ad85 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleDefinitionBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleDefinitionBackendHandlerTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
import io.netty.util.DefaultAttributeMap;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater;
import org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -59,7 +60,7 @@ public final class RuleDefinitionBackendHandlerTest {
@Test
public void assertExecute() throws SQLException {
- ConnectionSession connectionSession = new ConnectionSession(TransactionType.LOCAL, new DefaultAttributeMap());
+ ConnectionSession connectionSession = new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new DefaultAttributeMap());
connectionSession.setCurrentSchema("test");
ResponseHeader response = new RuleDefinitionBackendHandler<>(new CreateFixtureRuleStatement(), connectionSession).execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
index 4bf47dd..d08c820 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
@@ -24,6 +24,7 @@ import io.netty.channel.ChannelInboundHandlerAdapter;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.db.protocol.CommonConstants;
import org.apache.shardingsphere.db.protocol.payload.PacketPayload;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -52,7 +53,7 @@ public final class FrontendChannelInboundHandler extends ChannelInboundHandlerAd
public FrontendChannelInboundHandler(final DatabaseProtocolFrontendEngine databaseProtocolFrontendEngine, final Channel channel) {
this.databaseProtocolFrontendEngine = databaseProtocolFrontendEngine;
- connectionSession = new ConnectionSession(getTransactionRule().getDefaultType(), channel);
+ connectionSession = new ConnectionSession(DatabaseTypeRegistry.getActualDatabaseType(databaseProtocolFrontendEngine.getDatabaseType()), getTransactionRule().getDefaultType(), channel);
}
private TransactionRule getTransactionRule() {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
index 190bdd8..6fd298e 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
@@ -66,6 +66,7 @@ public final class FrontendChannelInboundHandlerTest {
@Before
public void setup() {
when(frontendEngine.getAuthenticationEngine()).thenReturn(authenticationEngine);
+ when(frontendEngine.getDatabaseType()).thenReturn("MySQL");
when(authenticationEngine.handshake(any(ChannelHandlerContext.class))).thenReturn(CONNECTION_ID);
channel = new EmbeddedChannel(false, true);
frontendChannelInboundHandler = new FrontendChannelInboundHandler(frontendEngine, channel);