replSetStepDown работает, но ошибка EOF возвращается в мой Ruby mon go драйвер - PullRequest
0 голосов
/ 08 марта 2020

Я взаимодействую с моим ReplicaSet MongoDB через мой Ruby mon go драйвер, v. 2.6.2 .

@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)):

Так что это только при успешном инициировании возникновения исключения.

Есть идеи, как получить правильный ответ, а не исключение?

1 Ответ

0 голосов
/ 08 марта 2020

ошибка: EOFError: достигнут конец файла

Это ожидаемое поведение на серверах до 4.2, которые закрывают все соединения при выходе из строя. Серверы 4.2+ этого не делают.

Есть идеи, как получить правильный ответ, а не исключение?

Использовать сервер 4.2+.

...