• A
    Avoid simultaneous RDB and AOF child process. · 0a628e51
    antirez 提交于
    This patch, written in collaboration with Oran Agra (@oranagra) is a companion
    to 780a8b1d. Together the two patches should avoid that the AOF and RDB saving
    processes can be spawned at the same time. Previously conditions that
    could lead to two saving processes at the same time were:
    
    1. When AOF is enabled via CONFIG SET and an RDB saving process is
       already active.
    
    2. When the SYNC command decides to start an RDB saving process ASAP in
       order to serve a new slave that cannot partially resynchronize (but
       only if we have a disk target for replication, for diskless
       replication there is not such a problem).
    
    Condition "1" is not very severe but "2" can happen often and is
    definitely good at degrading Redis performances in an unexpected way.
    
    The two commits have the effect of always spawning RDB savings for
    replication in replicationCron() instead of attempting to start an RDB
    save synchronously. Moreover when a BGSAVE or AOF rewrite must be
    performed, they are instead just postponed using flags that will try to
    perform such operations ASAP.
    
    Finally the BGSAVE command was modified in order to accept a SCHEDULE
    option so that if an AOF rewrite is in progress, when this option is
    given, the command no longer returns an error, but instead schedules an
    RDB rewrite operation for when it will be possible to start it.
    0a628e51
server.h 79.7 KB