1. 11 9月, 2018 3 次提交
  2. 07 9月, 2018 4 次提交
  3. 06 9月, 2018 4 次提交
  4. 05 9月, 2018 5 次提交
    • A
      Safer script stop condition on OOM. · 7e11825e
      antirez 提交于
      Here the idea is that we do not want freeMemoryIfNeeded() to propagate a
      DEL command before the script and change what happens in the script
      execution once it reaches the slave. For example see this potential
      issue (in the words of @soloestoy):
      
      On master, we run the following script:
      
          if redis.call('get','key')
          then
              redis.call('set','xxx','yyy')
          end
          redis.call('set','c','d')
      
      Then when redis attempts to execute redis.call('set','xxx','yyy'), we call freeMemoryIfNeeded(), and the key may get deleted, and because redis.call('set','xxx','yyy') has already been executed on master, this script will be replicated to slave.
      
      But the slave received "DEL key" before the script, and will ignore maxmemory, so after that master has xxx and c, slave has only one key c.
      
      Note that this patch (and other related work) was authored collaboratively in
      issue #5250 with the help of @soloestoy and @oranagra.
      
      Related to issue #5250.
      7e11825e
    • A
      Propagate read-only scripts as SCRIPT LOAD. · 092e4de6
      antirez 提交于
      See issue #5250 and the new comments added to the code in this commit
      for details.
      092e4de6
    • A
      Don't perform eviction when re-entering the event loop. · 51b627d9
      antirez 提交于
      Related to #5250.
      51b627d9
    • Y
      bio: fix bioWaitStepOfType. · c3288348
      youjiali1995 提交于
      c3288348
    • Y
      sentinel: fix randomized sentinelTimer. · a8322f44
      youjiali1995 提交于
      a8322f44
  5. 04 9月, 2018 11 次提交
  6. 03 9月, 2018 2 次提交
  7. 02 9月, 2018 1 次提交
  8. 31 8月, 2018 6 次提交
    • A
      Test: processing of master stream in slave -BUSY state. · febe102b
      antirez 提交于
      See #5297.
      febe102b
    • A
      After slave Lua script leaves busy state, re-process the master buffer. · 7fa49391
      antirez 提交于
      Technically speaking we don't really need to put the master client in
      the clients that need to be processed, since in practice the PING
      commands from the master will take care, however it is conceptually more
      sane to do so.
      7fa49391
    • A
      While the slave is busy, just accumulate master input. · 9ab91b8c
      antirez 提交于
      Processing command from the master while the slave is in busy state is
      not correct, however we cannot, also, just reply -BUSY to the
      replication stream commands from the master. The correct solution is to
      stop processing data from the master, but just accumulate the stream
      into the buffers and resume the processing later.
      
      Related to #5297.
      9ab91b8c
    • A
      Allow scripts to timeout even if from the master instance. · 83af8ef1
      antirez 提交于
      However the master scripts will be impossible to kill.
      
      Related to #5297.
      83af8ef1
    • A
      Allow scripts to timeout on slaves as well. · f5b29c64
      antirez 提交于
      See reasoning in #5297.
      f5b29c64
    • Z
      networking: fix unexpected negative or zero readlen · dce7cefb
      zhaozhao.zz 提交于
      To avoid copying buffers to create a large Redis Object which
      exceeding PROTO_IOBUF_LEN 32KB, we just read the remaining data
      we need, which may less than PROTO_IOBUF_LEN. But the remaining
      len may be zero, if the bulklen+2 equals sdslen(c->querybuf),
      in client pause context.
      
      For example:
      
      Time1:
      
      python
      >>> import os, socket
      >>> server="127.0.0.1"
      >>> port=6379
      >>> data1="*3\r\n$3\r\nset\r\n$1\r\na\r\n$33000\r\n"
      >>> data2="".join("x" for _ in range(33000)) + "\r\n"
      >>> data3="\n\n"
      >>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      >>> s.settimeout(10)
      >>> s.connect((server, port))
      >>> s.send(data1)
      28
      
      Time2:
      
      redis-cli client pause 10000
      
      Time3:
      
      >>> s.send(data2)
      33002
      >>> s.send(data3)
      2
      >>> s.send(data3)
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      socket.error: [Errno 104] Connection reset by peer
      
      To fix that, we should check if remaining is greater than zero.
      dce7cefb
  9. 29 8月, 2018 4 次提交