This is an automated email from the ASF dual-hosted git repository.
jianbin pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git
The following commit(s) were added to refs/heads/2.x by this push:
new c1515acbe3 optimize: deserialize performance optimize (#6727)
c1515acbe3 is described below
commit c1515acbe33193304c814aeadfcf630d19a22710
Author: wt_better <[email protected]>
AuthorDate: Tue Aug 6 11:17:58 2024 +0800
optimize: deserialize performance optimize (#6727)
---
changes/en-us/2.x.md | 1 +
changes/zh-cn/2.x.md | 1 +
.../serializer/seata/MessageCodecFactory.java | 208 ++++++++-------------
.../seata/serializer/seata/SeataSerializer.java | 7 +-
4 files changed, 86 insertions(+), 131 deletions(-)
diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 18addd0908..2e6f4907f8 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -37,6 +37,7 @@ Add changes here for all PR submitted to the 2.x branch.
- [[#6667](https://github.com/apache/incubator-seata/pull/6667)] optimize
Namingserver log output
- [[#6687](https://github.com/apache/incubator-seata/pull/6687)] delete static
code built on the frontend
- [[#6700](https://github.com/apache/incubator-seata/pull/6700)] remove sdk
version checking
+- [[#6727](https://github.com/apache/incubator-seata/pull/6727)] deserialize
performance optimize
### refactor:
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index 66ef670815..d88e714cae 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -37,6 +37,7 @@
- [[#6667](https://github.com/apache/incubator-seata/pull/6667)]
优化Namingserver日志输出
- [[#6687](https://github.com/apache/incubator-seata/pull/6687)] 删除前端构建的静态代码
- [[#6700](https://github.com/apache/incubator-seata/pull/6700)] 去掉sdk版本检查
+- [[#6727](https://github.com/apache/incubator-seata/pull/6727)] 反序列化性能优化
### refactor:
diff --git
a/serializer/seata-serializer-seata/src/main/java/org/apache/seata/serializer/seata/MessageCodecFactory.java
b/serializer/seata-serializer-seata/src/main/java/org/apache/seata/serializer/seata/MessageCodecFactory.java
index 2675751cd2..6231c72bbd 100644
---
a/serializer/seata-serializer-seata/src/main/java/org/apache/seata/serializer/seata/MessageCodecFactory.java
+++
b/serializer/seata-serializer-seata/src/main/java/org/apache/seata/serializer/seata/MessageCodecFactory.java
@@ -137,90 +137,69 @@ public class MessageCodecFactory {
case MessageType.TYPE_BATCH_RESULT_MSG:
msgCodec = new BatchResultMessageCodec(version);
break;
- default:
- break;
- }
-
- if (msgCodec != null) {
- return msgCodec;
- }
-
- try {
- msgCodec = getMergeRequestMessageSeataCodec(typeCode, version);
- } catch (Exception exx) {
- }
-
- if (msgCodec != null) {
- return msgCodec;
- }
-
- msgCodec = getMergeResponseMessageSeataCodec(typeCode, version);
-
- return msgCodec;
- }
-
- /**
- * Gets merge request instance by code.
- *
- * @param typeCode the type code
- * @return the merge request instance by code
- */
- protected static MessageSeataCodec getMergeRequestMessageSeataCodec(int
typeCode, byte version) {
- switch (typeCode) {
case MessageType.TYPE_GLOBAL_BEGIN:
- return new GlobalBeginRequestCodec();
+ msgCodec = new GlobalBeginRequestCodec();
+ break;
case MessageType.TYPE_GLOBAL_COMMIT:
- return new GlobalCommitRequestCodec();
+ msgCodec = new GlobalCommitRequestCodec();
+ break;
case MessageType.TYPE_GLOBAL_ROLLBACK:
- return new GlobalRollbackRequestCodec();
+ msgCodec = new GlobalRollbackRequestCodec();
+ break;
case MessageType.TYPE_GLOBAL_STATUS:
- return new GlobalStatusRequestCodec();
+ msgCodec = new GlobalStatusRequestCodec();
+ break;
case MessageType.TYPE_GLOBAL_LOCK_QUERY:
- return new GlobalLockQueryRequestCodec();
+ msgCodec = new GlobalLockQueryRequestCodec();
+ break;
case MessageType.TYPE_BRANCH_REGISTER:
- return new BranchRegisterRequestCodec();
+ msgCodec = new BranchRegisterRequestCodec();
+ break;
case MessageType.TYPE_BRANCH_STATUS_REPORT:
- return new BranchReportRequestCodec();
- case MessageType.TYPE_GLOBAL_REPORT:
- return new GlobalReportRequestCodec();
- default:
- throw new IllegalArgumentException("not support typeCode," +
typeCode);
- }
- }
-
- /**
- * Gets merge response instance by code.
- *
- * @param typeCode the type code
- * @return the merge response instance by code
- */
- protected static MessageSeataCodec getMergeResponseMessageSeataCodec(int
typeCode, byte version) {
- switch (typeCode) {
+ msgCodec = new BranchReportRequestCodec();
+ break;
case MessageType.TYPE_GLOBAL_BEGIN_RESULT:
- return new GlobalBeginResponseCodec();
+ msgCodec = new GlobalBeginResponseCodec();
+ break;
case MessageType.TYPE_GLOBAL_COMMIT_RESULT:
- return new GlobalCommitResponseCodec();
+ msgCodec = new GlobalCommitResponseCodec();
+ break;
case MessageType.TYPE_GLOBAL_ROLLBACK_RESULT:
- return new GlobalRollbackResponseCodec();
+ msgCodec = new GlobalRollbackResponseCodec();
+ break;
case MessageType.TYPE_GLOBAL_STATUS_RESULT:
- return new GlobalStatusResponseCodec();
+ msgCodec = new GlobalStatusResponseCodec();
+ break;
case MessageType.TYPE_GLOBAL_LOCK_QUERY_RESULT:
- return new GlobalLockQueryResponseCodec();
+ msgCodec = new GlobalLockQueryResponseCodec();
+ break;
case MessageType.TYPE_BRANCH_REGISTER_RESULT:
- return new BranchRegisterResponseCodec();
+ msgCodec = new BranchRegisterResponseCodec();
+ break;
case MessageType.TYPE_BRANCH_STATUS_REPORT_RESULT:
- return new BranchReportResponseCodec();
+ msgCodec = new BranchReportResponseCodec();
+ break;
case MessageType.TYPE_BRANCH_COMMIT_RESULT:
- return new BranchCommitResponseCodec();
+ msgCodec = new BranchCommitResponseCodec();
+ break;
case MessageType.TYPE_BRANCH_ROLLBACK_RESULT:
- return new BranchRollbackResponseCodec();
+ msgCodec = new BranchRollbackResponseCodec();
+ break;
case MessageType.TYPE_RM_DELETE_UNDOLOG:
- return new UndoLogDeleteRequestCodec();
+ msgCodec = new UndoLogDeleteRequestCodec();
+ break;
case MessageType.TYPE_GLOBAL_REPORT_RESULT:
- return new GlobalReportResponseCodec();
+ msgCodec = new GlobalReportResponseCodec();
+ break;
default:
- throw new IllegalArgumentException("not support typeCode," +
typeCode);
+ break;
+ }
+
+ if (msgCodec != null) {
+ return msgCodec;
}
+
+ throw new IllegalArgumentException("not support typeCode," + typeCode);
}
/**
@@ -268,86 +247,63 @@ public class MessageCodecFactory {
case MessageType.TYPE_BATCH_RESULT_MSG:
abstractMessage = new BatchResultMessage();
break;
- default:
- break;
- }
-
- if (abstractMessage != null) {
- return abstractMessage;
- }
-
- try {
- abstractMessage = getMergeRequestInstanceByCode(typeCode);
- } catch (Exception exx) {
- }
-
- if (abstractMessage != null) {
- return abstractMessage;
- }
-
- return getMergeResponseInstanceByCode(typeCode);
- }
-
- /**
- * Gets merge request instance by code.
- *
- * @param typeCode the type code
- * @return the merge request instance by code
- */
- protected static AbstractMessage getMergeRequestInstanceByCode(int
typeCode) {
- switch (typeCode) {
case MessageType.TYPE_GLOBAL_BEGIN:
- return new GlobalBeginRequest();
+ abstractMessage = new GlobalBeginRequest();
+ break;
case MessageType.TYPE_GLOBAL_COMMIT:
- return new GlobalCommitRequest();
+ abstractMessage = new GlobalCommitRequest();
+ break;
case MessageType.TYPE_GLOBAL_ROLLBACK:
- return new GlobalRollbackRequest();
+ abstractMessage = new GlobalRollbackRequest();
+ break;
case MessageType.TYPE_GLOBAL_STATUS:
- return new GlobalStatusRequest();
+ abstractMessage = new GlobalStatusRequest();
+ break;
case MessageType.TYPE_GLOBAL_LOCK_QUERY:
- return new GlobalLockQueryRequest();
+ abstractMessage = new GlobalLockQueryRequest();
+ break;
case MessageType.TYPE_BRANCH_REGISTER:
- return new BranchRegisterRequest();
+ abstractMessage = new BranchRegisterRequest();
+ break;
case MessageType.TYPE_BRANCH_STATUS_REPORT:
- return new BranchReportRequest();
- case MessageType.TYPE_GLOBAL_REPORT:
- return new GlobalReportRequest();
- default:
- throw new IllegalArgumentException("not support typeCode," +
typeCode);
- }
- }
-
- /**
- * Gets merge response instance by code.
- *
- * @param typeCode the type code
- * @return the merge response instance by code
- */
- protected static AbstractMessage getMergeResponseInstanceByCode(int
typeCode) {
- switch (typeCode) {
+ abstractMessage = new BranchReportRequest();
+ break;
case MessageType.TYPE_GLOBAL_BEGIN_RESULT:
- return new GlobalBeginResponse();
+ abstractMessage = new GlobalBeginResponse();
+ break;
case MessageType.TYPE_GLOBAL_COMMIT_RESULT:
- return new GlobalCommitResponse();
+ abstractMessage = new GlobalCommitResponse();
+ break;
case MessageType.TYPE_GLOBAL_ROLLBACK_RESULT:
- return new GlobalRollbackResponse();
+ abstractMessage = new GlobalRollbackResponse();
+ break;
case MessageType.TYPE_GLOBAL_STATUS_RESULT:
- return new GlobalStatusResponse();
+ abstractMessage = new GlobalStatusResponse();
+ break;
case MessageType.TYPE_GLOBAL_LOCK_QUERY_RESULT:
- return new GlobalLockQueryResponse();
+ abstractMessage = new GlobalLockQueryResponse();
+ break;
case MessageType.TYPE_BRANCH_REGISTER_RESULT:
- return new BranchRegisterResponse();
+ abstractMessage = new BranchRegisterResponse();
+ break;
case MessageType.TYPE_BRANCH_STATUS_REPORT_RESULT:
- return new BranchReportResponse();
+ abstractMessage = new BranchReportResponse();
+ break;
case MessageType.TYPE_BRANCH_COMMIT_RESULT:
- return new BranchCommitResponse();
+ abstractMessage = new BranchCommitResponse();
+ break;
case MessageType.TYPE_BRANCH_ROLLBACK_RESULT:
- return new BranchRollbackResponse();
- case MessageType.TYPE_GLOBAL_REPORT_RESULT:
- return new GlobalReportResponse();
+ abstractMessage = new BranchRollbackResponse();
+ break;
default:
- throw new IllegalArgumentException("not support typeCode," +
typeCode);
+ break;
+ }
+
+ if (abstractMessage != null) {
+ return abstractMessage;
}
+
+ throw new IllegalArgumentException("not support typeCode," + typeCode);
}
}
diff --git
a/serializer/seata-serializer-seata/src/main/java/org/apache/seata/serializer/seata/SeataSerializer.java
b/serializer/seata-serializer-seata/src/main/java/org/apache/seata/serializer/seata/SeataSerializer.java
index 0e5bdb74c8..81730db3d2 100644
---
a/serializer/seata-serializer-seata/src/main/java/org/apache/seata/serializer/seata/SeataSerializer.java
+++
b/serializer/seata-serializer-seata/src/main/java/org/apache/seata/serializer/seata/SeataSerializer.java
@@ -172,11 +172,8 @@ public class SeataSerializer implements Serializer {
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
//typecode
short typecode = byteBuffer.getShort();
- //msg body
- byte[] body = new byte[byteBuffer.remaining()];
- byteBuffer.get(body);
- ByteBuffer in = ByteBuffer.wrap(body);
- //new Messgae
+ ByteBuffer in = byteBuffer.slice();
+ //new message
AbstractMessage abstractMessage =
MessageCodecFactory.getMessage(typecode);
//get messageCodec
MessageSeataCodec messageCodec =
MessageCodecFactory.getMessageCodec(typecode, version);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]