Skip to content

json decode exception, Invalid UTF-8 start byte 0x90 #6709

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
caishaodong opened this issue Jul 30, 2024 · 7 comments · Fixed by #6711
Closed

json decode exception, Invalid UTF-8 start byte 0x90 #6709

caishaodong opened this issue Jul 30, 2024 · 7 comments · Fixed by #6711
Assignees
Labels
task: help-wanted Extra attention is needed type: bug Category issues or prs related to bug.

Comments

@caishaodong
Copy link

压缩类型是ZIP的数据,在回滚调用io.seata.rm.datasource.undo.parser.JacksonUndoLogParser#decode方法的时候,提示解码失败,还伴随这一些乱码情况
2024-07-30 13:37:50.507 ERROR traceId: io.seata.rm.datasource.undo.parser.JacksonUndoLogParser - json decode exception, Invalid UTF-8 start byte 0x90
at [Source: (byte[])"PK� $��X � zip���n�����{!z�!f���Qe�F�Ȕ+Qh� ��oc���RRR#�Q� �у���q��n��2���N[+t����k�0E����p�����/'?-���zrorq5�n�&MWO������]�6�}V���W�Yyr����>��M~{Q���T�0USR�^�Q��:8c%EI�@� %�z~��9��?Naor���׋�v|2�U�<Moo..���Uzqtq}3�����Zz���5���|��K���ɒ��I��-���ɫUm��g�7ܼv���]�^��m�ժ͟�����0��^߬n��t�/���^��OfO�߼x��u믮���'>����I�n�jh�7Ӟ��r��/��h�uS�|�/�����Z�����y>?�~�^�~�<:�?�?y|���q��/�T�7�<]��?��������ND��p�T�VQVr��ސ�=:9>����/�?�}�m����7�2oڤ����v:_����'�W��.0)4U% �y�"[truncated 1956 bytes]; line: 1, column: 13] com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0x90 at [Source: (byte[])"PK� $��X � zip���n�����{!z�!f���Qe�F�Ȕ+Qh� ��oc���RRR#�Q� �у���q��n��2���N[+t����k�0E����p�����/'?-���zrorq5�n�&MWO������]�6�}V���W�Yyr����>��M~{Q��*�T�0USR�^�Q��:8c%EI�@� %�z~��9��?~Naor���׋�v|2�U�<Moo..���Uzqtq}3�����Zz���5���|��K���ɒ��I��-���ɫUm��g�7ܼv���]�^��m�ժ͟����~�0��^߬n��t�/���^��OfO�߼x��u믮���'>����I�n�jh�7Ӟ�*�r��/��h�uS�|�/�����Z�����y>?��^��<:�?�?y|���q��/�T�7�<]��?��������ND��p�T�VQVr��ސ�=:9>����/�?�}�m����7�2oڤ����v:_����'�W��.0)4U% �y�"[truncated 1956 bytes]; line: 1, column: 13]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:707)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidInitial(UTF8StreamJsonParser.java:3601)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._decodeCharForError(UTF8StreamJsonParser.java:3344)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3576)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2683)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:865)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:757)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4664)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4513)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3529)
at io.seata.rm.datasource.undo.parser.JacksonUndoLogParser.decode(JacksonUndoLogParser.java:188)
at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:302)
at io.seata.rm.datasource.DataSourceManager.branchRollback(DataSourceManager.java:122)
at io.seata.rm.AbstractRMHandler.doBranchRollback(AbstractRMHandler.java:125)
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:67)
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:63)
at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:131)
at io.seata.rm.AbstractRMHandler.handle(AbstractRMHandler.java:63)
at io.seata.rm.DefaultRMHandler.handle(DefaultRMHandler.java:68)
at io.seata.core.protocol.transaction.BranchRollbackRequest.handle(BranchRollbackRequest.java:35)
at io.seata.rm.AbstractRMHandler.onRequest(AbstractRMHandler.java:150)
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.handleBranchRollback(RmBranchRollbackProcessor.java:63)
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.process(RmBranchRollbackProcessor.java:58)
at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:281)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:834)

@funky-eyes
Copy link
Contributor

AbstractUndoLogManager#getRollbackInfo
请debug以上代码位置,查看压缩类型是否读取正确
Please debug the above code location to see if the compression type is read correctly

@caishaodong
Copy link
Author

数据库中存储的是serializer=jackson&compressorType=ZIP,debug解压出来的也是一样的
image
image

@funky-eyes
Copy link
Contributor

帮忙修改为其它压缩方式看下是否有相同错误
Help modify it to other compression methods to see if there is the same error.

@caishaodong
Copy link
Author

我根据CompressorType中的类型,都试过了,仍然还是解析不出来
我看在io.seata.rm.datasource.undo.dm.DmUndoLogManager#getRollbackInfo方法中,没有根据压缩类型来进行解析,而是直接获取byte数组
protected byte[] getRollbackInfo(ResultSet rs) throws SQLException {
Blob b = rs.getBlob("rollback_info");
byte[] rollbackInfo = BlobUtils.blob2Bytes(b);
return rollbackInfo;
}
但是在io.seata.rm.datasource.undo.AbstractUndoLogManager#getRollbackInfo中是会根据压缩类型来解析的
protected byte[] getRollbackInfo(ResultSet rs) throws SQLException {
byte[] rollbackInfo = rs.getBytes("rollback_info");
String rollbackInfoContext = rs.getString("context");
Map<String, String> context = CollectionUtils.decodeMap(rollbackInfoContext);
CompressorType compressorType = CompressorType.getByName((String)context.getOrDefault("compressorType", CompressorType.NONE.name()));
return CompressorFactory.getCompressor(compressorType.getCode()).decompress(rollbackInfo);
}

我基于达梦数据库的情况下,没有按照指定的压缩类型来解析,这是正常的吗?

@funky-eyes
Copy link
Contributor

这一块逻辑是根据你数据库里已经存进去的undolog信息来的,你得改动不会生效。所以我的意思是让你重头试一下。
This piece of logic is based on the undolog information already saved in your database, and your changes will not take effect. So I mean let you try again.

@funky-eyes funky-eyes added type: bug Category issues or prs related to bug. task: help-wanted Extra attention is needed labels Jul 30, 2024
@caohdgege
Copy link
Contributor

确认了一下,这里是由于达梦的回滚的实现没有处理compress的情况导致的,这个问题我们会在接下来的release版本修复。

当前你们可以选择通过配置client.undo.compress.enable=false关闭压缩来保证程序运行正常 / 等待我们推送的升级更新。

@caishaodong
Copy link
Author

好的,谢谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
task: help-wanted Extra attention is needed type: bug Category issues or prs related to bug.
Projects
None yet
3 participants