This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 824dff269e8 Add XATransactionSQLException (#30787)
824dff269e8 is described below
commit 824dff269e88846ad8aadb8e04263b3acf00d820
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Apr 6 12:35:24 2024 +0800
Add XATransactionSQLException (#30787)
* Refactor TransactionSQLException's impl
* Refactor TransactionSQLException's impl
* Add XATransactionSQLException
---
.../user-manual/error-code/sql-error-code.cn.md | 26 ++++++++++-----------
.../user-manual/error-code/sql-error-code.en.md | 27 ++++++++++------------
.../MySQLXATransactionPrivilegeChecker.java | 10 ++++----
.../exception/XADataSourceInitializeException.java | 5 ++--
.../XATransactionNestedBeginException.java | 5 ++--
...a => XATransactionPrivilegeCheckException.java} | 13 +++++------
...ception.java => XATransactionSQLException.java} | 24 ++++++++++++++-----
.../MySQLXATransactionPrivilegeCheckerTest.java | 7 +++---
8 files changed, 60 insertions(+), 57 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 33e343a8225..989d0933f7e 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
@@ -82,20 +82,18 @@ SQL 错误码以标准的 SQL State,Vendor Code 和详细错误信息提供,
### 事务
-| Vendor Code | SQL State | 错误信息
|
-|-------------|-----------|--------------------------------------------------------------------------------|
-| 14000 | 25000 | Switch transaction type failed, please terminate
the current transaction. |
-| 14001 | 42S02 | Can not find transaction manager of '%s'.
|
-| 14002 | 44000 | Max length of unique resource name '%s' exceeded,
should be less than 45. |
-| 14003 | 25000 | Transaction timeout should more than 0.
|
-| 14004 | 25000 | Close transaction manager failed.
|
-| 14200 | 25000 | Can not start new XA transaction in a active
transaction. |
-| 14201 | 25000 | Failed to create \`%s\` XA data source.
|
-| 14202 | 25000 | Max length of xa unique resource name \`%s\`
exceeded: should be less than 45. |
-| 14203 | 25000 | Check privileges failed on data source, reason is:
\`%s\` |
-| 14204 | 25000 | Failed to create XA transaction manager, requires
\`%s\` privileges |
-| 14301 | 25000 | ShardingSphere Seata-AT transaction has been
disabled. |
-| 14302 | 25000 | Please config application id within seata.conf
file. |
+| Vendor Code | SQL State | 错误信息
|
+|-------------|-----------|-------------------------------------------------------------------------------------------|
+| 14000 | 25000 | Switch transaction type failed, please terminate
the current transaction. |
+| 14001 | 42S02 | Can not find transaction manager of '%s'.
|
+| 14002 | 44000 | Max length of unique resource name '%s' exceeded,
should be less than 45. |
+| 14003 | 25000 | Transaction timeout should more than 0.
|
+| 14004 | 25000 | Close transaction manager failed.
|
+| 14100 | 25000 | Failed to create '%s' XA data source.
|
+| 14101 | 25000 | Can not start new XA transaction in a active
transaction. |
+| 14102 | 25000 | Check XA transaction privileges failed on data
source, please grant '%s' to current user. |
+| 14301 | 25000 | ShardingSphere Seata-AT transaction has been
disabled. |
+| 14302 | 25000 | Please config application id within seata.conf
file. |
### 集群
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 50e11a6ded0..797f76eb9d6 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
@@ -83,21 +83,18 @@ SQL error codes provide by standard `SQL State`, `Vendor
Code` and `Reason`, whi
### Transaction
-| Vendor Code | SQL State | Reason
|
-|-------------|-----------|--------------------------------------------------------------------------------|
-| 14000 | 25000 | Switch transaction type failed, please terminate
the current transaction. |
-| 14001 | 42S02 | Can not find transaction manager of '%s'.
|
-| 14002 | 44000 | Max length of unique resource name '%s' exceeded,
should be less than 45. |
-| 14003 | 25000 | Transaction timeout should more than 0.
|
-| 14004 | 25000 | Close transaction manager failed.
|
-| 14200 | 25000 | Can not start new XA transaction in a active
transaction. |
-| 14201 | 25000 | Failed to create \`%s\` XA data source.
|
-| 14202 | 25000 | Max length of xa unique resource name \`%s\`
exceeded: should be less than 45. |
-| 14203 | 25000 | Check privileges failed on data source, reason is:
\`%s\` |
-| 14204 | 25000 | Failed to create XA transaction manager, requires
\`%s\` privileges |
-| 14205 | 25000 | Close transaction manager failed.
|
-| 14301 | 25000 | ShardingSphere Seata-AT transaction has been
disabled. |
-| 14302 | 25000 | Please config application id within seata.conf
file. |
+| Vendor Code | SQL State | Reason
|
+|-------------|-----------|-------------------------------------------------------------------------------------------|
+| 14000 | 25000 | Switch transaction type failed, please terminate
the current transaction. |
+| 14001 | 42S02 | Can not find transaction manager of '%s'.
|
+| 14002 | 44000 | Max length of unique resource name '%s' exceeded,
should be less than 45. |
+| 14003 | 25000 | Transaction timeout should more than 0.
|
+| 14004 | 25000 | Close transaction manager failed.
|
+| 14100 | 25000 | Failed to create '%s' XA data source.
|
+| 14101 | 25000 | Can not start new XA transaction in a active
transaction. |
+| 14102 | 25000 | Check XA transaction privileges failed on data
source, please grant '%s' to current user. |
+| 14301 | 25000 | ShardingSphere Seata-AT transaction has been
disabled. |
+| 14302 | 25000 | Please config application id within seata.conf
file. |
### Cluster
diff --git
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/datasource/checker/dialect/MySQLXATransactionPrivilegeChecker.java
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/datasource/checker/dialect/MySQLXATransactionPrivilegeChecker.java
index 38f8f8f6972..fba038c0a32 100644
---
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/datasource/checker/dialect/MySQLXATransactionPrivilegeChecker.java
+++
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/datasource/checker/dialect/MySQLXATransactionPrivilegeChecker.java
@@ -17,9 +17,9 @@
package
org.apache.shardingsphere.transaction.xa.jta.datasource.checker.dialect;
+import org.apache.shardingsphere.infra.exception.generic.UnknownSQLException;
import
org.apache.shardingsphere.transaction.xa.jta.datasource.checker.XATransactionPrivilegeChecker;
-import
org.apache.shardingsphere.transaction.xa.jta.exception.XATransactionCheckPrivilegeFailedException;
-import
org.apache.shardingsphere.transaction.xa.jta.exception.XATransactionPrivilegeException;
+import
org.apache.shardingsphere.transaction.xa.jta.exception.XATransactionPrivilegeCheckException;
import javax.sql.DataSource;
import java.sql.Connection;
@@ -46,7 +46,7 @@ public final class MySQLXATransactionPrivilegeChecker
implements XATransactionPr
checkPrivilege(connection);
}
} catch (final SQLException ex) {
- throw new XATransactionCheckPrivilegeFailedException(ex);
+ throw new UnknownSQLException(ex);
}
}
@@ -61,9 +61,9 @@ public final class MySQLXATransactionPrivilegeChecker
implements XATransactionPr
}
}
} catch (final SQLException ex) {
- throw new XATransactionCheckPrivilegeFailedException(ex, "GRANT
XA_RECOVER_ADMIN TO currentUser");
+ throw new XATransactionPrivilegeCheckException("XA_RECOVER_ADMIN",
ex);
}
- throw new XATransactionPrivilegeException("XA_RECOVER_ADMIN");
+ throw new XATransactionPrivilegeCheckException("XA_RECOVER_ADMIN");
}
private boolean matchPrivileges(final String privilege) {
diff --git
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XADataSourceInitializeException.java
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XADataSourceInitializeException.java
index 36bf76d438e..263b722acbf 100644
---
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XADataSourceInitializeException.java
+++
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XADataSourceInitializeException.java
@@ -18,17 +18,16 @@
package org.apache.shardingsphere.transaction.xa.jta.exception;
import
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
-import
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.TransactionSQLException;
import
org.apache.shardingsphere.transaction.xa.jta.datasource.properties.XADataSourceDefinition;
/**
* XA data source initialize exception.
*/
-public final class XADataSourceInitializeException extends
TransactionSQLException {
+public final class XADataSourceInitializeException extends
XATransactionSQLException {
private static final long serialVersionUID = -4515239569528215614L;
public XADataSourceInitializeException(final XADataSourceDefinition
xaDataSourceDefinition) {
- super(XOpenSQLState.INVALID_TRANSACTION_STATE, 201, "Failed to create
`%s` XA data source.", xaDataSourceDefinition.getType());
+ super(XOpenSQLState.INVALID_TRANSACTION_STATE, 0, "Failed to create
'%s' XA data source.", xaDataSourceDefinition.getType());
}
}
diff --git
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionNestedBeginException.java
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionNestedBeginException.java
index 1133c916b3e..11a37982610 100644
---
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionNestedBeginException.java
+++
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionNestedBeginException.java
@@ -18,16 +18,15 @@
package org.apache.shardingsphere.transaction.xa.jta.exception;
import
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
-import
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.TransactionSQLException;
/**
* XA transaction nested begin exception.
*/
-public final class XATransactionNestedBeginException extends
TransactionSQLException {
+public final class XATransactionNestedBeginException extends
XATransactionSQLException {
private static final long serialVersionUID = 7761100591709104351L;
public XATransactionNestedBeginException() {
- super(XOpenSQLState.INVALID_TRANSACTION_STATE, 200, "Can not start new
XA transaction in a active transaction.");
+ super(XOpenSQLState.INVALID_TRANSACTION_STATE, 1, "Can not start new
XA transaction in a active transaction.");
}
}
diff --git
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionCheckPrivilegeFailedException.java
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionPrivilegeCheckException.java
similarity index 57%
rename from
kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionCheckPrivilegeFailedException.java
rename to
kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionPrivilegeCheckException.java
index b9ca5372f72..1748fd9bc39 100644
---
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionCheckPrivilegeFailedException.java
+++
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionPrivilegeCheckException.java
@@ -18,22 +18,21 @@
package org.apache.shardingsphere.transaction.xa.jta.exception;
import
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
-import
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.TransactionSQLException;
import java.sql.SQLException;
/**
- * XA transaction check privilege failed exception.
+ * XA transaction privilege check exception.
*/
-public final class XATransactionCheckPrivilegeFailedException extends
TransactionSQLException {
+public final class XATransactionPrivilegeCheckException extends
XATransactionSQLException {
private static final long serialVersionUID = 6073175429050058508L;
- public XATransactionCheckPrivilegeFailedException(final SQLException
cause) {
- super(XOpenSQLState.INVALID_TRANSACTION_STATE, 203,
String.format("Check xa transaction privileges failed on data source, reason
is: `%s`", cause.getMessage()), cause);
+ public XATransactionPrivilegeCheckException(final String privilege) {
+ super(XOpenSQLState.INVALID_TRANSACTION_STATE, 2, "Check XA
transaction privileges failed on data source, please grant '%s' to current
user.", privilege);
}
- public XATransactionCheckPrivilegeFailedException(final SQLException
cause, final String advice) {
- super(XOpenSQLState.INVALID_TRANSACTION_STATE, 203,
String.format("Check xa transaction privileges failed on data source, reason
is: `%s`, please `%s`", cause.getMessage(), advice), cause);
+ public XATransactionPrivilegeCheckException(final String privilege, final
SQLException cause) {
+ super(XOpenSQLState.INVALID_TRANSACTION_STATE, 2, String.format("Check
XA transaction privileges failed on data source, please grant '%s' to current
user.", privilege), cause);
}
}
diff --git
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionPrivilegeException.java
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionSQLException.java
similarity index 53%
rename from
kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionPrivilegeException.java
rename to
kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionSQLException.java
index bad94efaa3e..3533c35e264 100644
---
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionPrivilegeException.java
+++
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/exception/XATransactionSQLException.java
@@ -17,17 +17,29 @@
package org.apache.shardingsphere.transaction.xa.jta.exception;
-import
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
+import com.google.common.base.Preconditions;
+import
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.SQLState;
import
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.TransactionSQLException;
/**
- * XA transaction privilege exception.
+ * XA transaction SQL exception.
*/
-public final class XATransactionPrivilegeException extends
TransactionSQLException {
+public class XATransactionSQLException extends TransactionSQLException {
- private static final long serialVersionUID = -1565168229743080642L;
+ private static final long serialVersionUID = 7649367025303908263L;
- public XATransactionPrivilegeException(final String errorMessage) {
- super(XOpenSQLState.INVALID_TRANSACTION_STATE, 204, "Failed to create
XA transaction manager, requires `%s` privileges", errorMessage);
+ private static final int XA_CODE = 1;
+
+ protected XATransactionSQLException(final SQLState sqlState, final int
errorCode, final String reason, final Object... messageArgs) {
+ super(sqlState, getErrorCode(errorCode), reason, messageArgs);
+ }
+
+ protected XATransactionSQLException(final SQLState sqlState, final int
errorCode, final String reason, final Exception cause) {
+ super(sqlState, getErrorCode(errorCode), reason, cause);
+ }
+
+ private static int getErrorCode(final int errorCode) {
+ Preconditions.checkArgument(errorCode >= 0 && errorCode < 100, "The
value range of error code should be [0, 100).");
+ return XA_CODE * 100 + errorCode;
}
}
diff --git
a/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/jta/datasource/checker/MySQLXATransactionPrivilegeCheckerTest.java
b/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/jta/datasource/checker/MySQLXATransactionPrivilegeCheckerTest.java
index 21bb51e795c..c3f71baccdd 100644
---
a/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/jta/datasource/checker/MySQLXATransactionPrivilegeCheckerTest.java
+++
b/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/jta/datasource/checker/MySQLXATransactionPrivilegeCheckerTest.java
@@ -18,8 +18,7 @@
package org.apache.shardingsphere.transaction.xa.jta.datasource.checker;
import
org.apache.shardingsphere.transaction.xa.jta.datasource.checker.dialect.MySQLXATransactionPrivilegeChecker;
-import
org.apache.shardingsphere.transaction.xa.jta.exception.XATransactionCheckPrivilegeFailedException;
-import
org.apache.shardingsphere.transaction.xa.jta.exception.XATransactionPrivilegeException;
+import
org.apache.shardingsphere.transaction.xa.jta.exception.XATransactionPrivilegeCheckException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -86,7 +85,7 @@ class MySQLXATransactionPrivilegeCheckerTest {
void assertCheckPrivilegeLackPrivilegesInMySQL8() throws SQLException {
when(preparedStatement.executeQuery()).thenReturn(resultSet);
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(8);
- assertThrows(XATransactionPrivilegeException.class, () -> new
MySQLXATransactionPrivilegeChecker().check(dataSource));
+ assertThrows(XATransactionPrivilegeCheckException.class, () -> new
MySQLXATransactionPrivilegeChecker().check(dataSource));
}
@Test
@@ -94,6 +93,6 @@ class MySQLXATransactionPrivilegeCheckerTest {
when(preparedStatement.executeQuery()).thenReturn(resultSet);
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(8);
when(resultSet.next()).thenThrow(new SQLException(""));
- assertThrows(XATransactionCheckPrivilegeFailedException.class, () ->
new MySQLXATransactionPrivilegeChecker().check(dataSource));
+ assertThrows(XATransactionPrivilegeCheckException.class, () -> new
MySQLXATransactionPrivilegeChecker().check(dataSource));
}
}