• Binbin's avatar
    AOF_FSYNC_EVERYSEC higher resolution, change aof_last_fsync and... · 9103ccc3
    Binbin authored
    
    AOF_FSYNC_EVERYSEC higher resolution, change aof_last_fsync and aof_flush_postponed_start to use mstime (#13041)
    
    Currently aof_last_fsync is using a low resolution unixtime is really
    bad,
    it checks if the absolute number of (full) seconds changed by one.
    depending on which side of the second barrier it falls, we can get very
    different results.
    
    This PR change the resolution to use milliseconds instead of complete
    seconds.
    
    In cases where the event loop cycle duration is short and their rapid
    (e.g. running
    many fast commands with short pipeline, or a high `hz` config), this
    change will not
    make much difference, since in anyway, we'll be quick to detect that
    we're on a "new
    second", and it's likely that these fsync will always be executed close
    to the second
    switch barrier.
    
    But in cases of rare or slow event loops cycles (e.g. either slow
    commands, or very
    low rate of traffic to redis, and low `hz`), it could easily be that
    with the old code,
    in some cases we'll have over 1.5 seconds between fsyncs, and in others
    less than 0.5.
    
    see discussion in #8612
    
    This PR also handle aof_flush_postponed_start as well, the damage there
    is smaller
    since the threshold is 2 seconds, and not 1.
    
    ---------
    Co-authored-by: default avatarOran Agra <oran@redislabs.com>
    9103ccc3
aof.c 102 KB