pomelo-cn
pomelo-cn copied to clipboard
RPC 当server端停止断开而client端刚好有请求过程时 TypeError: Object Error: disconnect with remote server. has no method 'info'
当rpc server端断开时 mailbox 监听的 disconnect
this.socket.on('disconnect', function(reason) {
var reqs = self.requests, cb;
for(var id in reqs) {
cb = reqs[id];
utils.invokeCallback(cb, new Error('disconnect with remote server.'));
}
self.emit('close', self.id);
});
实际上这里req的cb的第一个参数应该是tracer,
mailbox.send(tracer, msg, opts, function() {
var tracer_send = arguments[0];
var err = arguments[1];
if(!!err) {
logger.error('rpc send message error: %j', err.stack);
utils.applyCallback(cb, new Error('rpc send message error'));
return;
}
var args = Array.prototype.slice.call(arguments, 2);
doFilter(tracer_send, null, serverId, msg, opts, self.afters, 0, 'after', function(tracer, err, serverId, msg, opts) {
if(!!err) {
errorHandler(self, err, serverId, msg, opts, false);
}
utils.applyCallback(cb, args);
});
});
这个时候会导致 执行doFilter的时候出现异常
if(index < filters.length) {
tracer.info('client', __filename, 'doFilter', 'do ' + operate + ' filter ' + filters[index].name);
}
貌似后面会连锁导致一些严重的问题 所有 rpc 组件均有这个问题,望尽快修正
这是个非常严重的问题,会导致服务从master断开,可以从crash日志中看到,该服务已经 disconnect
嗯,谢谢提出的意见,我们会尽快修复。