Netty "не может прочитать несжатый буфер" при передаче сжатых файлов .tla со сжатием - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть клиент, использующий наш IoT SDK для беспроводной передачи данных с сервера на свои устройства.Если передача представляет собой сжатый архив, содержащий один или несколько файлов .tla, а размер файла .tla превышает 300 КБ или около того, Netty обнаруживает ошибку «невозможно прочитать несжатый буфер», показанную ниже.На нескольких тестах это надежно происходит в одном пакете.Это не происходит с выключенным сжатием, или для неархивированных файлов .tla, или для небольших файлов .tla, или (насколько мы можем судить) для любого другого типа файла.

После просмотра Эта проблема на Github , я пытался обновить до последних версий Netty, но не увидел изменений через 4.1.40, 4.1.41 и 4.1.42.Я задаюсь вопросом о следующих шагах - это похоже на ошибку Netty или, возможно, ошибка конфигурации с нашей стороны?

Журналы, конечно, усекаются.

    10:56:12.344 [NettyClient-NIO-1] DEBUG ///DispatchingClientEndpoint - API REQUEST received [endpoint id: 0] APIRequestMessage [requestId: 1777, endpointId: -1, sessionId: -1, method: POST, entityName: RemoteFileRepo, characteristic: Unknown, target: , multipart: true, packet #: 1, total packets: 9]
10:56:12.348 [NettyClient-NIO-1] DEBUG ///DispatchingClientEndpoint - API REQUEST received [endpoint id: 0] APIRequestMessage [requestId: 1777, endpointId: -1, sessionId: -1, method: POST, entityName: RemoteFileRepo, characteristic: Unknown, target: , multipart: true, packet #: 2, total packets: 9]
10:56:12.351 [NettyClient-NIO-1] DEBUG ///DispatchingClientEndpoint - API REQUEST received [endpoint id: 0] APIRequestMessage [requestId: 1777, endpointId: -1, sessionId: -1, method: POST, entityName: RemoteFileRepo, characteristic: Unknown, target: , multipart: true, packet #: 3, total packets: 9]
10:56:12.360 [NettyClient-NIO-1] DEBUG ///DispatchingClientEndpoint - API REQUEST received [endpoint id: 0] APIRequestMessage [requestId: 1777, endpointId: -1, sessionId: -1, method: POST, entityName: RemoteFileRepo, characteristic: Unknown, target: , multipart: true, packet #: 4, total packets: 9]
10:56:12.366 [NettyClient-NIO-1] ERROR ///ClientConnectionHandler - WebSocket exception caught!, closing connection!
io.netty.handler.codec.DecoderException: io.netty.handler.codec.CodecException: cannot read uncompressed buffer
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:328)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:302)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1475)
    at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1224)
    at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1271)
    at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:505)
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:444)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:283)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514)
    at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at java.lang.Thread.run(Thread.java:748)
Caused by: io.netty.handler.codec.CodecException: cannot read uncompressed buffer
    at io.netty.handler.codec.http.websocketx.extensions.compression.DeflateDecoder.decompressContent(DeflateDecoder.java:140)
    at io.netty.handler.codec.http.websocketx.extensions.compression.DeflateDecoder.decode(DeflateDecoder.java:80)
    at io.netty.handler.codec.http.websocketx.extensions.compression.PerMessageDeflateDecoder.decode(PerMessageDeflateDecoder.java:87)
    at io.netty.handler.codec.http.websocketx.extensions.compression.PerMessageDeflateDecoder.decode(PerMessageDeflateDecoder.java:31)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
    ... 29 common frames omitted

Спасибо!

...