pomelo-cn icon indicating copy to clipboard operation
pomelo-cn copied to clipboard

RPC 当server端停止断开而client端刚好有请求过程时 TypeError: Object Error: disconnect with remote server. has no method 'info'

Open tdlrobin opened this issue 10 years ago • 2 comments

当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 组件均有这个问题,望尽快修正

tdlrobin avatar Mar 08 '14 08:03 tdlrobin

这是个非常严重的问题,会导致服务从master断开,可以从crash日志中看到,该服务已经 disconnect

tdlrobin avatar Mar 08 '14 08:03 tdlrobin

嗯,谢谢提出的意见,我们会尽快修复。

py8765 avatar Mar 10 '14 01:03 py8765