首页 > 解决方案 > replSetStepDown 工作,但 EOF 错误返回到我的 Ruby mongo 驱动程序

问题描述

我正在通过我的Ruby mongo 驱动程序 v. 2.6.2与我的 MongoDB ReplicaSet 进行交互。

@mongo_client = Mongo::Client.new(@uri, connect: :replica_set).use("admin")

当我想启动故障转移时,我运行此命令

begin
  failover = @mongo_client.command(
    {
      replSetStepDown:            60,
      secondaryCatchUpPeriodSecs: 10,
      force:                      false
    }
  )
  Rails.logger.error "failover: #{failover}"
rescue Mongo::Error::SocketError => e
  Rails.logger.error "error: #{e.to_s.inspect}"
end

该命令有效,并且发生故障转移。但是引发了一个例外,这就是我必须拯救它的原因:

error: EOFError: end of file reached

当我传递无效参数时,我确实得到了正确的响应,例如:

failover: Mongo::Error::OperationFailure (stepdown period must be longer than secondaryCatchUpPeriodSecs (2)):

因此,只有在成功启动时才会引发异常。

知道如何获得正确的响应,而不是例外吗?

标签: rubymongodbreplicaset

解决方案


错误:EOFError:到达文件末尾

这是 4.2 之前的服务器中的预期行为,当它们关闭时会关闭所有连接。4.2+ 服务器没有。

知道如何获得正确的响应,而不是例外吗?

使用 4.2+ 服务器。


推荐阅读