• antirez's avatar
    Force slaves to resync after unsuccessful PSYNC. · 194b7e21
    antirez authored
    Using chained replication where C is slave of B which is in turn slave of
    A, if B reconnects the replication link with A but discovers it is no
    longer possible to PSYNC, slaves of B must be disconnected and PSYNC
    not allowed, since the new B dataset may be completely different after
    the synchronization with the master.
    
    Note that there are varius semantical differences in the way this is
    handled now compared to the past. In the past the semantics was:
    
    1. When a slave lost connection with its master, disconnected the chained
    slaves ASAP. Which is not needed since after a successful PSYNC with the
    master, the slaves can continue and don't need to resync in turn.
    
    2. However after a failed PSYNC the replication backlog was not reset, so a
    slave was able to PSYNC successfully even if the instance did a full
    sync with its master, containing now an entirely different data set.
    
    Now instead chained slaves are not disconnected when the slave lose the
    connection with its master, but only when it is forced to full SYNC with
    its master. This means that if the slave having chained slaves does a
    successful PSYNC all its slaves can continue without troubles.
    
    See issue #2694 for more details.
    194b7e21
replication.c 87.4 KB