1. 30 Jun, 2021 4 commits
    • Binbin's avatar
      Add missing pause tcl test to test_helper.tcl (#9158) · 5dddf496
      Binbin authored
      * Add keyname tags to avoid CROSSSLOT errors in external server CI
      * Use new wait_for_blocked_clients_count in pause.tcl
      5dddf496
    • luvine's avatar
      HSETNX can lead coding type change even when skipped due to NX (#4615) · 4278c45c
      luvine authored
      1. Add one key-value pair to myhash, which the length of key and value both less than hash-max-ziplist-value, for example:
      >hset myhash key value
      2. Then execute the following command
      >hsetnx myhash key value1 (the length greater than hash-max-ziplist-value)
      3. This will add nothing, but the code type of "myhash" changed from ziplist to dict even there are only one key-value pair in "myhash", and both of them less than hash-max-ziplist-value.
      4278c45c
    • Binbin's avatar
      Fix timing issue in psync2 test. (#9159) · 1d5aa37d
      Binbin authored
      
      
      *** [err]: PSYNC2: total sum of full synchronizations is exactly 4 intests/integration/psync2.tcl
      Expected 5 == 4 (context: type eval line 8 cmd {assert {$sum == 4}} proc::test)
      
      Sometime the test got an unexpected full sync since a replica switch to master,
      before the new master change propagated the new replid to all replicas,
      a replica attempted to sync with it using a wrong replid and triggered a full resync.
      
      Consider this scenario:
          1 slaveof 4 full resync
          0 slaveof 4 full resync
          2 slaveof 0 full resync
          3 slaveof 1 full resync
      
          1 slaveof no one, replid changed
          3 reconnect 1, did a partial resyn and got the new replid
      
          Before 2 inherits the new replid.
          3 slaveof 2
          3 try to do a partial resyn with 2.
          But their replication ids are inconsistent, so a full resync happens.
      
      :) A special thank you for oran and helping me in this test case.
      Co-authored-by: default avatarOran Agra <oran@redislabs.com>
      1d5aa37d
    • ZhaolongLi's avatar
      Simplify logic in raxSeek, eliminate it->key reassembly on gt and lt (#9115) · cf1d49ad
      ZhaolongLi authored
      
      
      In the original version, the operation of traversing the stack only seems to
      reconstruct the key that does not contain the current node.
      
      But in fact We have got the matched length and splitpos in the key in the
      raxlowwalk, so I think we can simplify the logic of this part.
      Co-authored-by: default avatarlizhaolong.lzl <lizhaolong.lzl@B-54MPMD6R-0221.local>
      cf1d49ad
  2. 29 Jun, 2021 5 commits
  3. 28 Jun, 2021 1 commit
    • Wang Yuan's avatar
      Remove unnecessary replication backlog memory copy (#9157) · 4fa3e230
      Wang Yuan authored
      in the past, the reply list was a list of sds objects, so this didn't have any overhead,
      but now addReplySds just copies the data from the sds and frees it, so there's no
      need to make a copy of the buffer before copying again.
      this reduces an excessive allocation and free and a memcpy.
      4fa3e230
  4. 27 Jun, 2021 1 commit
  5. 26 Jun, 2021 1 commit
  6. 24 Jun, 2021 5 commits
    • Yossi Gottlieb's avatar
      Add bind-source-addr configuration argument. (#9142) · f233c4c5
      Yossi Gottlieb authored
      In the past, the first bind address that was explicitly specified was
      also used to bind outgoing connections. This could result with some
      problems. For example: on some systems using `bind 127.0.0.1` would
      result with outgoing connections also binding to `127.0.0.1` and failing
      to connect to remote addresses.
      
      With the recent change to the way `bind` is handled, this presented
      other issues:
      
      * The default first bind address is '*' which is not a valid address.
      * We make no distinction between user-supplied config that is identical
      to the default, and the default config.
      
      This commit addresses both these issues by introducing an explicit
      configuration parameter to control the bind address on outgoing
      connections.
      f233c4c5
    • Huang Zhw's avatar
      Clean redis-benchmark Throughput output. (#9139) · d1a21e02
      Huang Zhw authored
      some leftovers from print are visible when the new line is printed.
      d1a21e02
    • ZhaolongLi's avatar
      change streamAppendItem to use raxEOF instead of raxNext (#9138) · 89ae3537
      ZhaolongLi authored
      The call to raxNext didn't really progress in the rax, since we were already on the last item.
      instead, all it does is check that it is indeed a valid item, so the new code clearer.
      89ae3537
    • Oran Agra's avatar
      Re-fix daily CI (#9141) · a5bc54f0
      Oran Agra authored
      The freebsd and macos jobs were still broken.
      also add a few more skip jobs options.
      a5bc54f0
    • Oran Agra's avatar
      5ffdbae1
  7. 23 Jun, 2021 2 commits
  8. 22 Jun, 2021 10 commits
    • Oran Agra's avatar
      Add manual triggers for Daily CI (#9119) · b466471a
      Oran Agra authored
      Hopefully now we'll be able to manually trigger extensive tests to PR branches without modifying them.
      b466471a
    • Oran Agra's avatar
      Adjustments to recent RM_StringTruncate fix (#3718) (#9125) · ae418eca
      Oran Agra authored
      - Introduce a new sdssubstr api as a building block for sdsrange.
        The API of sdsrange is many times hard to work with and also has
        corner case that cause bugs. sdsrange is easy to work with and also
        simplifies the implementation of sdsrange.
      - Revert the fix to RM_StringTruncate and just use sdssubstr instead of
        sdsrange.
      - Solve valgrind warnings from the new tests introduced by the previous
        PR.
      ae418eca
    • Yossi Gottlieb's avatar
      a49b7668
    • Yossi Gottlieb's avatar
      Fix typo in test. (#9128) · 8284544a
      Yossi Gottlieb authored
      8284544a
    • Yossi Gottlieb's avatar
      Improve bind and protected-mode config handling. (#9034) · 07b0d144
      Yossi Gottlieb authored
      * Specifying an empty `bind ""` configuration prevents Redis from listening on any TCP port. Before this commit, such configuration was not accepted.
      * Using `CONFIG GET bind` will always return an explicit configuration value. Before this commit, if a bind address was not specified the returned value was empty (which was an anomaly).
      
      Another behavior change is that modifying the `bind` configuration to a non-default value will NO LONGER DISABLE protected-mode implicitly.
      07b0d144
    • Evan's avatar
      modules: Add newlen == 0 handling to RM_StringTruncate (#3717) (#3718) · 1ccf2ca2
      Evan authored
      Previously, passing 0 for newlen would not truncate the string at all.
      This adds handling of this case, freeing the old string and creating a new empty string.
      
      Other changes:
      - Move `src/modules/testmodule.c` to `tests/modules/basics.c`
      - Introduce that basic test into the test suite
      - Add tests to cover StringTruncate
      - Add `test-modules` build target for the main makefile
      - Extend `distclean` build target to clean modules too
      1ccf2ca2
    • Oran Agra's avatar
      solve test timing issues in replication tests (#9121) · d0819d61
      Oran Agra authored
      # replication-3.tcl
      had a test timeout failure with valgrind on daily CI:
      ```
      *** [err]: SLAVE can reload "lua" AUX RDB fields of duplicated scripts in tests/integration/replication-3.tcl
      Replication not started.
      ```
      replication took more than 70 seconds.
      https://github.com/redis/redis/runs/2854037905?check_suite_focus=true
      
      on my machine it takes only about 30, but i can see how 50 seconds isn't enough.
      
      # replication.tcl
      loading was over too quickly in freebsd daily CI:
      ```
      *** [err]: slave fails full sync and diskless load swapdb recovers it in tests/integration/replication.tcl
      Expected '0' to be equal to '1' (context: type eval line 44 cmd {assert_equal [s -1 loading] 1} proc ::start_server)
      ```
      
      # rdb.tcl
      loading was over too quickly.
      increase the time loading takes, and decrease the amount of work we try to achieve in that time.
      d0819d61
    • Binbin's avatar
      Remove extra semicolon (#9117) · bf92000e
      Binbin authored
      Remove extra semicolon.
      bf92000e
    • Wen Hui's avatar
      add tilt mode since in sentinel info (#9000) · 81d5f05b
      Wen Hui authored
      Sentinel shows tilt mode boolean in info, now it'll show an indication of how long ago it started.
      81d5f05b
    • Oran Agra's avatar
      Fix race in client side tracking (#9116) · 9b564b52
      Oran Agra authored
      The `Tracking gets notification of expired keys` test in tracking.tcl
      used to hung in valgrind CI quite a lot.
      
      It turns out the reason is that with valgrind and a busy machine, the
      server cron active expire cycle could easily run in the same event loop
      as the command that created `mykey`, so that when they key got expired,
      there were two change events to broadcast, one that set the key and one
      that expired it, but since we used raxTryInsert, the client that was
      associated with the "last" change was the one that created the key, so
      the NOLOOP filtered that event.
      
      This commit adds a test that reproduces the problem by using lazy expire
      in a multi-exec which makes sure the key expires in the same event loop
      as the one that added it.
      9b564b52
  9. 21 Jun, 2021 2 commits
  10. 20 Jun, 2021 4 commits
  11. 17 Jun, 2021 4 commits
    • gourav's avatar
    • sundb's avatar
      Make readQueryFromClient more aggressive when reading big arg again (Followup for #9003) (#9100) · 1a22445d
      sundb authored
      Due to the change in #9003, a long-standing bug was raised under `valgrind`.
      This bug can cause the master-slave sync to take a very long time, causing the `pendingquerybuf.tcl` test to fail.
      This problem does not only occur in master-slave sync, it is triggered when the big arg is greater than 32k.
      step:
      ```sh
      dd if=/dev/zero of=bigfile bs=1M count=32
      ./src/redis-cli -x hset a a < bigfile
      ```
      
      1) Make room for querybuf in processMultibulkBuffer, now the alloc of querybuf will be more than 32k.
      2) If this happens to trigger the `clientsCronResizeQueryBuffer`, querybuf will be resized to 0.
      3) Finally, in readQueryFromClient, we expand the querybuf non-greedily, from 0 to 32k.
          Old code, make room for querybuf is greedy, so it only needs 11 times to expand to 32M(16k*(2^11)),
          but now we need 2048(32*1024/16) times to reach it, due to the slow allocation under valgrind that exposed the problem.
      
      The fix for the excessive shrinking of the query buf to 0, will be handled in #5013 (that other change on it's own can fix failing test too), but the fix in this PR will also fix the failing test.
      
      The fix in this PR will makes the reading in `readQueryFromClient` more aggressive when working on a big arg (so that it is in par with the same code in `processMultibulkBuffer` (i.e. the two calls to `sdsMakeRoomForNonGreedy` should both use the bulk size).
      In the code before this fix the one in readQueryFromClient always has `readlen = PROTO_IOBUF_LEN`
      1a22445d
    • sundb's avatar
      Fix leak and double free issues in datatype2 module test (#9102) · eae0983d
      sundb authored
      * Add missing call for RedisModule_DictDel in datatype2 test
      * Fix memory leak in datatype2 test
      eae0983d
    • DarrenJiang13's avatar
      Improve objectComputeSize() with allocator fragmentaiton. (#9095) · ada60d80
      DarrenJiang13 authored
      This commit improve MEMORY USAGE command to include internal fragmentation overheads of:
      1. EMBSTR encoded strings
      2. ziplist encoded zsets and hashes
      3. List type nodes
      ada60d80
  12. 16 Jun, 2021 1 commit
    • sundb's avatar
      Fix querybuf test failure (#9091) · b586d5b5
      sundb authored
      Fix test failure which introduced by #9003.
      The following case will occur when querybuf expansion will allocate memory equal to (16*1024)k.
      1) make use ```CFLAGS=-DNO_MALLOC_USABLE_SIZE```.
      2) ```malloc``` will not allocate more under ```alpine```.
      b586d5b5