AlexStocks opened a new issue #1967: ignore serialization ID for heartbeat 
message
URL: https://github.com/apache/incubator-dubbo/issues/1967
 
 
   我构造了一个二进制心跳包对服务端进行测试。在代码中我循环增大serialID从0开始直到其最大值31。其中 serialID 取值 [1, 3, 4, 
5, 6, 7] 时,服务端有以下异常日志:
   
   2018-06-14 14:50:04,598 [New I/O server worker #1-1] WARN  
alibaba.dubbo.rpc.protocol.dubbo.DubboCodec (DubboCodec.java:140) -  [DUBBO] 
Decode request failed: Flag error, expect 
OBJECT_NULL|OBJECT_DUMMY|OBJECT_DESC|OBJECT_DESC_ID, get 78, dubbo version: 
2.5.4, current host: 127.0.0.1
   java.io.IOException: Flag error, expect 
OBJECT_NULL|OBJECT_DUMMY|OBJECT_DESC|OBJECT_DESC_ID, get 78
     at 
com.alibaba.dubbo.common.serialize.support.dubbo.GenericObjectInput.readObject(GenericObjectInput.java:79)
     at 
com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decodeHeartbeatData(ExchangeCodec.java:381)
     at 
com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:121)
     at 
com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:118)
     at 
com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:79)
     at 
com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:46)
     at 
com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:134)
     at 
org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
     at 
org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
     at 
org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
     at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
     at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
     at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
     at 
org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
     at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
     at 
org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
     at 
org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
     at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
     at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
     at java.lang.Thread.run(Thread.java:748)
   2018-06-14 14:50:05,599 [New I/O server worker #1-1] WARN  
com.alibaba.dubbo.remoting.transport.AbstractServer (AbstractServer.java:199) - 
 [DUBBO] All clients has discontected from /127.0.0.1:20000. You can graceful 
shutdown now., dubbo version: 2.5.4, current host: 127.0.0.1
   
        经过与 相关同行 们讨论,说是这几个 ID 是内部保留的实例ID,如 
https://github.com/apache/incubator-dubbo/blob/2.5.x/dubbo-common/src/main/java/com/alibaba/dubbo/common/serialize/support/json/FastJsonSerialization.java。
   
        针对这个例子,这个解释是 okay 的,可以解释这个错误。不过个人建议:服务端收到心跳包的时候不要检查 header 里面的 
serialID,直接放过,可否?
   
        
因为心跳包不设计逻辑处理,不需要获取serialID对应的实例,这里检查这个字段有什么意义呢?因为这个原因就导致服务端抛出异常,个人觉得这个处理欠妥。

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to