1. 10 Jul, 2020 5 commits
    • Oran Agra's avatar
      RESTORE ABSTTL won't store expired keys into the db (#7472) · 5977a948
      Oran Agra authored
      Similarly to EXPIREAT with TTL in the past, which implicitly deletes the
      key and return success, RESTORE should not store key that are already
      expired into the db.
      When used together with REPLACE it should emit a DEL to keyspace
      notification and replication stream.
      5977a948
    • huangzhw's avatar
      defrag.c activeDefragSdsListAndDict when defrag sdsele, We can't use (#7492) · d6180c8c
      huangzhw authored
      it to calculate hash, we should use newsds.
      d6180c8c
    • Oran Agra's avatar
      tests/valgrind: don't use debug restart (#7404) · 69ade873
      Oran Agra authored
      * tests/valgrind: don't use debug restart
      
      DEBUG REATART causes two issues:
      1. it uses execve which replaces the original process and valgrind doesn't
         have a chance to check for errors, so leaks go unreported.
      2. valgrind report invalid calls to close() which we're unable to resolve.
      
      So now the tests use restart_server mechanism in the tests, that terminates
      the old server and starts a new one, new PID, but same stdout, stderr.
      
      since the stderr can contain two or more valgrind report, it is not enough
      to just check for the absence of leaks, we also need to check for some known
      errors, we do both, and fail if we either find an error, or can't find a
      report saying there are no leaks.
      
      other changes:
      - when killing a server that was already terminated we check for leaks too.
      - adding DEBUG LEAK which was used to test it.
      - adding --trace-children to valgrind, although no longer needed.
      - since the stdout contains two or more runs, we need slightly different way
        of checking if the new process is up (explicitly looking for the new PID)
      - move the code that handles --wait-server to happen earlier (before
        watching the startup message in the log), and serve the restarted server too.
      
      * squashme - CR fixes
      69ade873
    • Oran Agra's avatar
      9bbf768d
    • zhaozhao.zz's avatar
      BITOP: propagate only when it really SET or DEL targetkey (#5783) · 1978f996
      zhaozhao.zz authored
      For example:
          BITOP not targetkey sourcekey
      
      If targetkey and sourcekey doesn't exist, BITOP has no effect,
      we do not propagate it, thus can save aof and replica flow.
      1978f996
  2. 25 Jun, 2020 1 commit
  3. 24 Jun, 2020 1 commit
  4. 23 Jun, 2020 1 commit
    • Oran Agra's avatar
      EXEC always fails with EXECABORT and multi-state is cleared · 65a3307b
      Oran Agra authored
      In order to support the use of multi-exec in pipeline, it is important that
      MULTI and EXEC are never rejected and it is easy for the client to know if the
      connection is still in multi state.
      
      It was easy to make sure MULTI and DISCARD never fail (done by previous
      commits) since these only change the client state and don't do any actual
      change in the server, but EXEC is a different story.
      
      Since in the past, it was possible for clients to handle some EXEC errors and
      retry the EXEC, we now can't affort to return any error on EXEC other than
      EXECABORT, which now carries with it the real reason for the abort too.
      
      Other fixes in this commit:
      - Some checks that where performed at the time of queuing need to be re-
        validated when EXEC runs, for instance if the transaction contains writes
        commands, it needs to be aborted. there was one check that was already done
        in execCommand (-READONLY), but other checks where missing: -OOM, -MISCONF,
        -NOREPLICAS, -MASTERDOWN
      - When a command is rejected by processCommand it was rejected with addReply,
        which was not recognized as an error in case the bad command came from the
        master. this will enable to count or MONITOR these errors in the future.
      - make it easier for tests to create additional (non deferred) clients.
      - add tests for the fixes of this commit.
      65a3307b
  5. 22 Jun, 2020 4 commits
  6. 18 Jun, 2020 1 commit
  7. 17 Jun, 2020 1 commit
  8. 16 Jun, 2020 3 commits
  9. 15 Jun, 2020 1 commit
  10. 14 Jun, 2020 1 commit
    • meir@redislabs.com's avatar
      Fix RM_ScanKey module api not to return int encoded strings · a89bf734
      meir@redislabs.com authored
      The scan key module API provides the scan callback with the current
      field name and value (if it exists). Those arguments are RedisModuleString*
      which means it supposes to point to robj which is encoded as a string.
      Using createStringObjectFromLongLong function might return robj that
      points to an integer and so break a module that tries for example to
      use RedisModule_StringPtrLen on the given field/value.
      
      The PR introduces a fix that uses the createObject function and sdsfromlonglong function.
      Using those function promise that the field and value pass to the to the
      scan callback will be Strings.
      
      The PR also changes the Scan test module to use RedisModule_StringPtrLen
      to catch the issue. without this, the issue is hidden because
      RedisModule_ReplyWithString knows to handle integer encoding of the
      given robj (RedisModuleString).
      
      The PR also introduces a new test to verify the issue is solved.
      a89bf734
  11. 12 Jun, 2020 2 commits
  12. 11 Jun, 2020 3 commits
  13. 10 Jun, 2020 2 commits
  14. 09 Jun, 2020 2 commits
  15. 08 Jun, 2020 3 commits
    • Oran Agra's avatar
      fix disconnectSlaves, to try to free each slave. · 12504105
      Oran Agra authored
      the recent change in that loop (iteration rather than waiting for it to
      be empty) was intended to avoid an endless loop in case some slave would
      refuse to be freed.
      
      but the lookup of the first client remained, which would have caused it
      to try the first one again and again instead of moving on.
      12504105
    • Oran Agra's avatar
      2bb297b1
    • Oran Agra's avatar
      Avoid rejecting WATCH / UNWATCH, like MULTI/EXEC/DISCARD · 2fa077b0
      Oran Agra authored
      Much like MULTI/EXEC/DISCARD, the WATCH and UNWATCH are not actually
      operating on the database or server state, but instead operate on the
      client state. the client may send them all in one long pipeline and check
      all the responses only at the end, so failing them may lead to a
      mismatch between the client state on the server and the one on the
      client end, and execute the wrong commands (ones that were meant to be
      discarded)
      
      the watched keys are not actually stored in the client struct, but they
      are in fact part of the client state. for instance, they're not cleared
      or moved in SWAPDB or FLUSHDB.
      2fa077b0
  16. 07 Jun, 2020 1 commit
  17. 06 Jun, 2020 2 commits
  18. 03 Jun, 2020 1 commit
  19. 02 Jun, 2020 1 commit
  20. 29 May, 2020 1 commit
    • antirez's avatar
      Fix handling of special chars in ACL LOAD. · 1f8ea99b
      antirez authored
      Now it is also possible for ACL SETUSER to accept empty strings
      as valid operations (doing nothing), so for instance
      
          ACL SETUSER myuser ""
      
      Will have just the effect of creating a user in the default state.
      
      This should fix #7329.
      1f8ea99b
  21. 28 May, 2020 1 commit
  22. 27 May, 2020 2 commits