1. 28 Oct, 2020 8 commits
    • yoav-steinberg's avatar
      Add local address to CLIENT LIST, and a CLIENT KILL filter. (#7913) · 84b3c18f
      yoav-steinberg authored
      Useful when you want to know through which bind address the client connected to
      the server in case of multiple bind addresses.
      
      - Adding `laddr` field to CLIENT list showing the local (bind) address.
      - Adding `LADDR` option to CLIENT KILL to kill all the clients connected
        to a specific local address.
      - Refactoring to share code.
      84b3c18f
    • Oran Agra's avatar
      Optionally (default) fail to start if requested bind address is not available (#7936) · 441bfa2d
      Oran Agra authored
      Background:
      #3467 (redis 4.0.0), started ignoring ENOPROTOOPT, but did that only for
      the default bind (in case bind config wasn't explicitly set).
      #5598 (redis 5.0.3), added that for bind addresses explicitly set
      (following bug reports in Debian for redis 4.0.9 and 5.0.1), it
      also ignored a bunch of other errors like EPROTONOSUPPORT which was
      requested in #3894, and also added EADDRNOTAVAIL (wasn't clear why).
      
      This (ignoring EADDRNOTAVAIL) makes redis start successfully, even if a
      certain network interface isn't up yet , in which case we rather redis
      fail and will be re-tried when the NIC is up, see #7933.
      
      However, it turns out that when IPv6 is disabled (supported but unused),
      the error we're getting is EADDRNOTAVAIL. and in many systems the
      default config file tries to bind to localhost for both v4 and v6 and
      would like to silently ignore the error on v6 if disabled.
      This means that we sometimes want to ignore EADDRNOTAVAIL and other times
      we wanna fail.
      
      So this commit changes these main things:
      1. Ignore all the errors we ignore for both explicitly requested bind
         address and a default implicit one.
      2. Add a '-' prefix to allow EADDRNOTAVAIL be ignored (by default that's
         different than the previous behavior).
      3. Restructure that function in a more readable and maintainable way see
         below.
      4. Make the default behavior of listening to all achievable by setting
        a bind config directive to * (previously only possible by omitting
        it)
      5. document everything.
      
      The old structure of this function was that even if there are no bind
      addresses requested, the loop that runs though the bind addresses runs
      at least once anyway!
      In that one iteration of the loop it binds to both v4 and v6 addresses,
      handles errors for each of them separately, and then eventually at the
      if-else chain, handles the error of the last bind attempt again!
      This was very hard to read and very error prone to maintain, instead now
      when the bind info is missing we create one with two entries, and run
      the simple loop twice.
      441bfa2d
    • Madelyn Olson's avatar
      d310beb4
    • Madelyn Olson's avatar
      411bcf1a
    • Wen Hui's avatar
      add acl related config in sentinel.conf (#7952) · efd17316
      Wen Hui authored
      efd17316
    • Wen Hui's avatar
    • sundb's avatar
      69871760
    • filipe oliveira's avatar
      TLS Support for redis-benchmark (#7959) · 39436b21
      filipe oliveira authored
      39436b21
  2. 27 Oct, 2020 8 commits
    • WuYunlong's avatar
      Fix waste of CPU time about server log in serverCron. · 66037309
      WuYunlong authored
      When all the work is just adding logs, we could pull
      the condition out so as to use less CPU time when
      loglevel is bigger than LL_VERBOSE.
      66037309
    • Oran Agra's avatar
      Fix cluster access to unaligned memory (SIGBUS on old ARM) (#7958) · 380f6048
      Oran Agra authored
      Turns out this was broken since version 4.0 when we added sds size
      classes.
      The cluster code uses sds for the receive buffer, and then casts it to a
      struct and accesses a 64 bit variable.
      This commit replaces the use of sds with a simple reallocated buffer.
      380f6048
    • zhenwei pi's avatar
      Disable THP if enabled (#7381) · a9c06021
      zhenwei pi authored
      In case redis starts and find that THP is enabled ("always"), instead
      of printing a log message, which might go unnoticed, redis will try to
      disable it (just for the redis process).
      
      Note: it looks like on self-bulit kernels THP is likely be set to "always" by default.
      
      Some discuss about THP side effect on Linux:
      according to http://www.antirez.com/news/84
      
      , we can see that
      redis latency spikes are caused by linux kernel THP feature.
      I have tested on E3-2650 v3, and found that 2M huge page costs
      about 0.25ms to fix COW page fault.
      
      Add a new config 'disable-thp', the recommended setting is 'yes',
      (default) the redis tries to disable THP by prctl syscall. But
      users who really want THP can set it to "no"
      
      Thanks to Oran & Yossi for suggestions.
      Signed-off-by: default avatarzhenwei pi <pizhenwei@bytedance.com>
      a9c06021
    • Andrij Fedyk's avatar
      rdb.c: fix typo in a comment (#7970) · 825fe7bd
      Andrij Fedyk authored
      825fe7bd
    • Wang Yuan's avatar
      Fix timing dependence in replication tcl tests (#7969) · dc899c4c
      Wang Yuan authored
      Remove 'fork child $pid' log in replication.tcl
      dc899c4c
    • WuYunlong's avatar
      Speedup cluster failover. (#7948) · 7fa56dd7
      WuYunlong authored
      
      
      This commit deals with manual failover as well as non-manual failover.
      
      We did tests with manual failover as follows:
      1, Setup redis cluster which holds 16 partions, each having only
         1 corresponding replica.
      2, Write a batch of data to redis cluster and make sure the redis is doing
         a active expire in serverCron.
      3, Do a manual failover sequentially to each partions with a time interval
         of 3 minutes.
      4, Collect logs and do some computaiton work.
      
      The result:
      case    avgTime    maxTime    minTime
      C1      95.8ms	   227ms      25ms
      C2      47.9ms     96ms       12ms
      C3      12.6ms     27ms       7ms
      
      Explanation
      case C1: All nodes use the version before optimization
      case C2: Masters use the elder version while replicas use the optimized version
      case C3: All nodes use the optimized version
      failover time: The time between when replica got a `manual failover request` and
                     when it `won the failover election`.
      avgTime: average failover time
      maxTime: maximum failover time
      minTime: mimimum failover time
      ms: millisecond
      Co-authored-by: default avatarchendq8 <c.d_q@163.com>
      7fa56dd7
    • Madelyn Olson's avatar
      Only supress implitic fallthrough on GCC 7 · dac26729
      Madelyn Olson authored
      dac26729
    • Madelyn Olson's avatar
      4d1120f5
  3. 26 Oct, 2020 3 commits
    • Yossi Gottlieb's avatar
      Fix wrong zmalloc_size() assumption. (#7963) · 9824fe3e
      Yossi Gottlieb authored
      When using a system with no malloc_usable_size(), zmalloc_size() assumed
      that the heap allocator always returns blocks that are long-padded.
      
      This may not always be the case, and will result with zmalloc_size()
      returning a size that is bigger than allocated. At least in one case
      this leads to out of bound write, process crash and a potential security
      vulnerability.
      
      Effectively this does not affect the vast majority of users, who use
      jemalloc or glibc.
      
      This problem along with a (different) fix was reported by Drew DeVault.
      9824fe3e
    • Oran Agra's avatar
      Attempt to fix sporadic test failures due to wait_for_log_messages (#7955) · 4e2e5be2
      Oran Agra authored
      The tests sometimes fail to find a log message.
      Recently i added a print that shows the log files that are searched
      and it shows that the message was in deed there.
      The only reason i can't think of for this seach to fail, is we we
      happened to read an incomplete line, which didn't match our pattern and
      then on the next iteration we would continue reading from the line after
      it.
      
      The fix is to always re-evaluation the previous line.
      4e2e5be2
    • filipe oliveira's avatar
      redis-benchmark: add tests, --version, a minor bug fixes (#7947) · 01acfa71
      filipe oliveira authored
      
      
      - add test suite coverage for redis-benchmark
      - add --version (similar to what redis-cli has)
      - fix bug sending more requests than intended when pipeline > 1.
      - when done sending requests, avoid freeing client in the write handler, in theory before
        responses are received (probably dead code since the read handler will call clientDone first)
      Co-authored-by: default avatarOran Agra <oran@redislabs.com>
      01acfa71
  4. 25 Oct, 2020 3 commits
  5. 23 Oct, 2020 1 commit
  6. 22 Oct, 2020 4 commits
  7. 20 Oct, 2020 2 commits
  8. 19 Oct, 2020 2 commits
    • Wen Hui's avatar
      fix double fclose in aofrewrite (#7919) · 04a0af90
      Wen Hui authored
      minor fix for a bug which happen on error handling code
      and doesn't look like it could have caused any real harm
      (fd number wouldn't have been reused yet)
      04a0af90
    • Wen Hui's avatar
      Support ACL for Sentinel Mode (#7888) · 0047702a
      Wen Hui authored
      
      
      This commit implements ACL for Sentinel mode, main work of this PR includes:
      
      - Update Sentinel command table in order to better support ACLs.
      - Fix couple of things which currently blocks the support for ACL on sentinel mode.
      - Provide "sentinel sentinel-user" and "sentinel sentinel-pass " configuration in order to let sentinel authenticate with a specific user in other sentinels.
      - requirepass is kept just for compatibility with old config files
      Co-authored-by: default avatarOran Agra <oran@redislabs.com>
      0047702a
  9. 18 Oct, 2020 5 commits
  10. 14 Oct, 2020 1 commit
    • Oran Agra's avatar
      Allow requirepass config to clear the password (#7899) · 19418b6b
      Oran Agra authored
      This is a compatibility issue with redis 5.0 that was introduced by ACL.
      Before this commit, setting requirepass to an empty string will result
      in a server that needs an empty AUTH, unlike redis 5.0 which would
      accept connections without an AUTH.
      19418b6b
  11. 13 Oct, 2020 3 commits