Skip to content

Pika 主从同步过程中如果 PikaServer repl_state_ 和 SyncSlaveSlot repl_state_ 进入到ERROR状态无法自动修复,只能人为干预,修复主从同步的异常状态 #2279

@chengyu-l

Description

@chengyu-l

Is this a regression?

Yes

Description

Pika 主从同步过程涉及到两个状态码,分别根据这两个状态码触发不同的主从复制逻辑,状态码流转如下图:

image

这里存在两个问题:

  1. PikaServer repl_state_ 的 PIKA_REPL_ERROR 状态,只能通过 slaveof 命令将其变为其他状态(PIKA_REPL_NO_CONNECT),如果 MetaSync 请求异常,导致状态成为 PIKA_REPL_ERROR 后,会影响主从同步的后续状态。
  2. SyncSlaveSlot repl_state_ 的 kError 状态,只能通过 dbslaveof 命令将其变成其他状态(kTryConnect或kTryDBSync),如果TrySync和DBSync请求异常,则无法后续处理流程。

当出现上述两个状态码后,只能由人通过日志或info Replication命令查看发现异常状态,然后通过重新执行 slaveof 或 dbslaveof 命令修复上述问题。

Please provide a link to a minimal reproduction of the bug

No response

Screenshots or videos

No response

Please provide the version you discovered this bug in (check about page for version information)

No response

Anything else?

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions