Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: reduce pipelining latency by reusing existing shard fibers #3494

Merged
merged 2 commits into from
Aug 14, 2024
Merged

Conversation

romange
Copy link
Collaborator

@romange romange commented Aug 10, 2024

To prove the benefits, run ./dfly_bench --pipeline=50 -n 20000 --ratio 0:1 --qps=0 --key_maximum=1
Before: the average pipelining latency was 10ms
After: the average pipelining latency is 5ms.
Avg latency: pipelined_latency_usec / total_pipelined_squashed_commands

dranikpg
dranikpg previously approved these changes Aug 11, 2024
Comment on lines 214 to 227
fb2::BlockingCounter bc(num_shards);

auto cb = [this, tx, bc]() mutable {
this->SquashedHopCb(tx, EngineShard::tlocal());
bc->Dec();
};

for (unsigned i = 0; i < sharded_.size(); ++i) {
if (!sharded_[i].cmds.empty())
shard_set->Add(i, cb);
}
bc->Wait();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Damn, yes, that's wasteful. nit: we have AwaitRunningOnShardQueue (though without predicate filter)

@RafalBielickiIM
Copy link

This one actually is something I wanted to report.

Also I saw that running many evalsha in pipeline causes huge spikes occasionally - p999 are getting close to 500ms.
Disabling LUA atomicity & setting multi_exec_mode=3 reduces the issue but not completely.

Seems like this would fix the issue? Or should I create a ticket?

We are running latest 1.21.1.

To prove the benefits, run `./dfly_bench --pipeline=50   -n 20000  --ratio 0:1  --qps=0  --key_maximum=1`
Before: the average pipelining latency was 10ms
After: the average pipelining latency is 5ms.
Avg latency: pipelined_latency_usec / total_pipelined_squashed_commands

Also, improved counting of squashed commands - to count actual squashed ones.

Finally, remove global non-atomic mode: it has bugs with blocking commands and we used it only for tests anyways.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
@romange
Copy link
Collaborator Author

romange commented Aug 14, 2024

@RafalBielickiIM could you post an sample lua script here? do you use hashtags in your database?

@romange romange requested a review from dranikpg August 14, 2024 09:09
shard_set->AddL2(i, cb);
}
bc->Wait();
#else
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I kept it to keep debugging why there is a memory blow up with RunBlockingInParallel

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah but you still have to rebuild it, so copy paste replace would've done it 😛

@RafalBielickiIM
Copy link

@RafalBielickiIM could you post an sample lua script here? do you use hashtags in your database?
Those are flags in DF we are using

  • --unixsocket=/hostdf/dragonfly_0.sock
  • --unixsocketperm=660
  • --lua_resp2_legacy_float=true
  • --default_lua_flags=disable-atomicity
  • --multi_exec_mode=3
  • --lua_auto_async=true
  • --hz=400
  • --enable_direct_fd=true
  • --proactor_threads=2
  • --conn_io_threads=2
  • --interpreter_per_thread=50

We have 2 CPU + 8GB requests on those pods. (LIMIT is 3CPU & 12GB)

Looking at traces we see spikes when running 10+ EVALSHA in pipeline.
We have many LUA scripts running on those instances, frequently in pipelines.
While in other services where simpler ops are performed DF is way better, here it play out slower and way less stable than Redis (and this is with atomicity disabled & multiexec mode = 3).

Example LUAs run in there

-- KEYS = {}
-- ARGV = {}

local key = KEYS[1]
local key_prev = KEYS[2]
local key_1 = KEYS[3]
local key_1_next = KEYS[4]
local key_2 = KEYS[5]
local key_2_next = KEYS[6]

local some_id_key = KEYS[7]
local some_id_key_next = KEYS[8]

local some_key =  KEYS[9]
local some_key_prev = KEYS[10]

local some_id = ARGV[1]
local value = ARGV[2]
local exp = tonumber(ARGV[3])

local window_weight = tonumber(ARGV[4])

local size_1 = redis.call('SCARD', key_1) or 0
local size_2 = redis.call('SCARD', key_2) or 0
local size_1_next = redis.call('SCARD', key_1_next) or 0
local size_2_next = redis.call('SCARD', key_2_next) or 0

local some_value_size = redis.call('SCARD', some_id_key) or 0
local some_value_next_size = redis.call('SCARD', some_id_key_next) or 0

local this_counts = redis.call('INCR', key)
local prev_counts = tonumber(redis.call('GET', key_prev) or 0)

local this_some_count = redis.call('INCR', some_key)
local prev_some_count = tonumber(redis.call('GET', some_key_prev) or 0)

local counts = this_counts + prev_counts * window_weight
local some_count = this_some_count + prev_some_count * window_weight

if size_1 < 100 then
    redis.call('SADD', key_1, some_id)
end

if size_2 < 100 then
    redis.call('SADD', key_2, value)
end

if some_value_size < 100 then
    redis.call('SADD', some_id_key, value)
end

if some_value_next_size < 100 then
    redis.call('SADD', some_id_key_next, value)
end

if size_1_next < 100 then
    redis.call('SADD', key_1_next, some_id)
end

if size_2_next < 100 then
    redis.call('SADD', key_2_next, value)
end

if this_counts == 1 then
    local half_ttl = math.floor(exp / 2) + 10
    redis.call('EXPIRE', key_1_next, exp)
    redis.call('EXPIRE', key_2_next, exp)
    redis.call('EXPIRE', key_1, half_ttl)
    redis.call('EXPIRE', key_2, half_ttl)
    redis.call('EXPIRE', key, exp)
end

return {counts, size_1, size_2, some_value_size, some_count}

OR

local d = redis.call('mget', unpack(KEYS))

local last_count = tonumber(d[1]) or 0
local current_count = (tonumber(d[2]) or 0)
local current_time = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local limit = tonumber(ARGV[3])
local current_rate = last_count * ((window - (current_time % window)) / window) + current_count + 1
if current_rate > limit then
    return math.floor(limit - current_rate)
end
redis.call('incr', KEYS[2])
redis.call('expire', KEYS[2], 2*window)
return math.floor(limit - current_rate)

@romange Maybe you have a suggestion for different config?
Overall in this case lower thread count equals with better AVG, but increasing thread count is getting us more stable p99 & p999.

Copy link
Contributor

@dranikpg dranikpg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏻

@romange
Copy link
Collaborator Author

romange commented Aug 14, 2024

@RafalBielickiIM it probably belongs to Discussions section and not to this PR. The short answer is that this PR won't help you with your use-case., sorry.

@romange romange merged commit 93f6773 into main Aug 14, 2024
10 checks passed
@romange romange deleted the Pr2 branch August 14, 2024 11:45
@dranikpg
Copy link
Contributor

dranikpg commented Aug 14, 2024

@RafalBielickiIM

  1. multiexec mode is for MULTI/EXEC, pipelines are not affected by this setting
  2. I see you found --lua_auto_async=true. We currently have it disabled for non-atomic modes even when requested with this flag. Insider tip: you can use redis.apcall if you want to execute a bulk of write-only commands. It only makes sense to use it you have at least ~5 commands per thread. This will trigger the optimization that is modified in this PR.

You can try swapping apcall with call, my total time drops significantly. Please note that apcall is all experimental with DF. The more clients you have, the less will be the impact of this optimization currently

import redis
import time

s = """
redis.pcall('GET', 'NEX')
for i = 1, 20 do
    redis.apcall('PEXPIRE', 'key' .. i, 0)
end
"""

r = redis.Redis()
sha = r.script_load(s)

for _ in range(10):
    p = r.pipeline(transaction=False)
    for _ in range(50):
        p.evalsha(sha, 0)
    s = time.time()
    p.execute()
    print(1000 * (time.time() - s))

@romange
Copy link
Collaborator Author

romange commented Aug 14, 2024

But I think the latency is caused by the fact the script touches multiple shards so it has tail latency which can not be avoided.
The only way to fight it is to group all the variables under the same slot using the emulated cluster mode but I am guessing you can not do it and probably use Dragonfly to avoid cluster mode.

@dranikpg
Copy link
Contributor

But I think the latency is caused by the fact the script touches multiple shards so it has tail latency which can not be avoided

So the last write commands can be squashed with apcall. But with 10 tail writes and 2-3 shards it's effect is questionable

@romange
Copy link
Collaborator Author

romange commented Aug 14, 2024

And for the rate limiting script consider using https://www.dragonflydb.io/docs/command-reference/strings/cl.throttle#can-clthrottle-be-used-for-non-api-related-rate-limiting though it's mostly stateless unlike your approach

lumiere-bot bot added a commit to coolguy1771/home-ops that referenced this pull request Sep 3, 2024
…22.0 ) (#5336)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[ghcr.io/dragonflydb/dragonfly](https://redirect.github.com/dragonflydb/dragonfly)
| minor | `v1.21.4` -> `v1.22.0` |

---

### Release Notes

<details>
<summary>dragonflydb/dragonfly (ghcr.io/dragonflydb/dragonfly)</summary>

###
[`v1.22.0`](https://redirect.github.com/dragonflydb/dragonfly/releases/tag/v1.22.0)

[Compare
Source](https://redirect.github.com/dragonflydb/dragonfly/compare/v1.21.4...v1.22.0)

##### Dragonfly v1.22.0

Some prominent changes include:

-   Lots of stability fixes around JSON and Search APIS:

[#&#8203;3459](https://redirect.github.com/dragonflydb/dragonfly/issues/3459),
[#&#8203;3284](https://redirect.github.com/dragonflydb/dragonfly/issues/3284),
[#&#8203;3537](https://redirect.github.com/dragonflydb/dragonfly/issues/3537),
[#&#8203;3544](https://redirect.github.com/dragonflydb/dragonfly/issues/3544),[#&#8203;3580](https://redirect.github.com/dragonflydb/dragonfly/issues/3580),
[#&#8203;3582](https://redirect.github.com/dragonflydb/dragonfly/issues/3582),
[#&#8203;3578](https://redirect.github.com/dragonflydb/dragonfly/issues/3578),
[#&#8203;3591](https://redirect.github.com/dragonflydb/dragonfly/issues/3591),
[#&#8203;3597](https://redirect.github.com/dragonflydb/dragonfly/issues/3597),
[#&#8203;3539](https://redirect.github.com/dragonflydb/dragonfly/issues/3539)
- Support `HELLO AUTH` handshake:
[#&#8203;3486](https://redirect.github.com/dragonflydb/dragonfly/issues/3486)
- Implement FT.TAGVALS:
[#&#8203;3493](https://redirect.github.com/dragonflydb/dragonfly/issues/3493)
- Introduce Dragonfly specific lua pragmas:
[#&#8203;3517](https://redirect.github.com/dragonflydb/dragonfly/issues/3517)
- Memcache now replicates flags correctly:
[#&#8203;3538](https://redirect.github.com/dragonflydb/dragonfly/issues/3538)
- Memcache API now supports absolute timestamps as well:
[#&#8203;3607](https://redirect.github.com/dragonflydb/dragonfly/issues/3607)
- PEXPIRETIME and EXPIRETIME are implemented by
[@&#8203;Eunoia1729](https://redirect.github.com/Eunoia1729) - thank
you!
- Last but not least, a significant contribution by
[@&#8203;cunla](https://redirect.github.com/cunla): a massive test
suite, likely the largest in Dragonfly's history, with 12K lines of
code. This contribution has sparked further efforts to enhance
Dragonfly's compatibility and stability. The initial results are
included in this release.

##### What's Changed

- fix: missing logs on ci timeout by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3452
- fix: JSON.MSET command by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3459
- chore: integrate quicklist changes from valkey by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3440
- feat(json_family): Add support of the JSON legacy mode by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3284
- fix: pytest teardown exception in os.remove(LAST_LOGS) by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3463
- chore: change how we track memory_budget during evictions by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3457
- chore: add timeout to replication sockets by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3434
- chore(server): Remove old blocking debug by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3460
- chore: SinkReplyBuilder2 with vec batching by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3454
- feat: Allow pre-declaring Lua SHAs to run with undeclared keys by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3465
- chore(server): Use parser more in list_family by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3461
- fix: Make replica's `REPLCONF IP-ADDRESS` optional by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3473
- chore: make tiered_test more reliable by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3477
- chore(facade): Update SinkReplyBuilder2 by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3474
- refactor: set info_replication_valkey_compatible=true by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3467
- chore: relax the version check in test_replicate_old_master by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3478
- chore: Download Dragonfly versions only when needed by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3479
- fix: division by zero bug by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3482
- test: fix test_scripts by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3485
- chore(facade): RedisReplyBuilder2 base by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3475
- chore(facade): MCReplyBuilder2 by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3480
- chore(facade): RedisReplyBuilder2 (extensions) by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3481
- fix: big value serialization corner cases by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3430
- fix: HELLO AUTH with non default user by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3486
- fix: flake in teardown of test_unknown_dfly_env by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3487
- fix: test_replicate_old_master missing serialization_max_chunk_size by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3498
- chore: add logs to debug tiered memory failures by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3499
- feat: implement FT.TAGVALS by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3493
- test: fix test_acl_deluser by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3488
- fix: sanitizers post failure on google chat by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3496
- chore(generic_family): Fix bad data format error in the RESTORE
command by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3501
- fix: sanitizers false positives by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3495
- feat: Expose replica_reconnect_count for Prometheus metrics by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3370
- fix: pytest warnings by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3497
- fix: missing virtual destructors in ReplyBuilder2 by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3506
- chore: split engine_shard file from engine_shard_set by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3507
- chore: introduce a secondary TaskQueue for shards by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3508
- fix: clang warnings by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3509
- chore: reduce pipelining latency by reusing existing shard fibers by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3494
- fix: bugs around the growth of a tiered file by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3516
- chore: Change Lua embedded flags syntax by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3517
- feat(cluster): Allow appending RDB to existing store by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3505
- fix: disable ThreadLocalMutex when big value ser is off by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3521
- chore(io): Introduce (carefully) new io with use_new_io flag by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3513
- chore(io): Optimize repeated ReservePiece calls by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3525
- fix: disable sanitizers false positive by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3522
- chore(config): make pipeline_squash configurable by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3529
- chore(traffic loger): use pipelining and print/analyze commands by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3527
- fix: skip empty objects on load and replication by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3514
- fix: deadlock in Heartbeat() by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3530
- fix(search_family): Add error on creating indexes from non-zero
databases by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3537
- fix: macos build by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3536
- fix: MC flags size and serialization
[#&#8203;3134](https://redirect.github.com/dragonflydb/dragonfly/issues/3134)
by [@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3538
- fix(transaction): Don't set continuation for blocking by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3540
- fix: named volume permissions in docker by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3518
- fix(jsonpath): Add JsonPath grammar for the child identifier in
brackets by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3533
- fix: build errors in sanitizers daily workflow by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3542
- test: tests using fakeredis to check compatibility by
[@&#8203;cunla](https://redirect.github.com/cunla) in
[dragonflydb/dragonfly#3534
- chore: fix search replication by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3547
- chore: add deallocation logs in the allocation tracker by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3549
- fix: fakeredis tests support python 3.10 by
[@&#8203;cunla](https://redirect.github.com/cunla) in
[dragonflydb/dragonfly#3550
- feat(server_family): Add backup/restore Prometheus metrics by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3520
- docs: Fakeredis tests README by
[@&#8203;cunla](https://redirect.github.com/cunla) in
[dragonflydb/dragonfly#3552
- fix: zinterstore correctly finds weights by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3554
- fix(search_family): Fix query parsing for the integer tags in OR
expression by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3544
- chore(server): Fix watch by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3557
- chore(search): fix numeric index query in rev order by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3555
- chore: allow limiting pipelining queue by length by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3551
- fix: add unsupported_server_types to fakeredis tests by
[@&#8203;cunla](https://redirect.github.com/cunla) in
[dragonflydb/dragonfly#3560
- fix: string compatibility issues by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3564
- fix(server): Fix ZRANGEBYLEX limit params by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3562
- fix: compatibility around list and string commands by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3565
- chore(server): Unify zset arg parsing by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3563
- fix: compatibility around list,string and sort commands by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3568
- chore(server): Sort correctly in ZINTER by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3566
- chore(server): Unify zset boolean operations into single function by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3567
- chore(transaction): More blocking tests by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3546
- fix: delete empty dense sets in HGetGeneric by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3543
- chore(search): Silence query parser error by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3570
- chore: improve compatibility of set and ping commands by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3569
- fix: disable failing test_cron_snapshot_failed_saving by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3571
- fix: disable test_cluster_flushall_during_migration by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3573
- chore: add -Wthread-analysis and annotate (part 1/2) by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3502
- feat(generic_family): Implement EXPIRETIME and PEXPIRETIME commands by
[@&#8203;Eunoia1729](https://redirect.github.com/Eunoia1729) in
[dragonflydb/dragonfly#3524
- chore: allow running dragonfly pytests in repeat by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3577
- fix(json_family): Fix json get crash due to an invalid json path by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3580
- fix(json_family): Fix JSON.GET crash for the multiple legacy mode
paths by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3582
- fix: return an error when invalid number of arguments is passed. by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3584
- feat: add oom_deny_ratio to mutable config by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3585
- fix: warning as error on sanitizers build by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3587
- feat: add escaping symbols for tag search by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3578
- fix: skip test_replica_reconnections_after_network_disconnect by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3589
- docs(readme): Fix data mistake by
[@&#8203;DerickIT](https://redirect.github.com/DerickIT) in
[dragonflydb/dragonfly#3590
- chore: remove DflyVersion::VER0 by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3593
- refactor: remove double conversion from str to number to str in search
by [@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3591
- chore(deps): bump aiohttp from 3.8.4 to 3.10.2 in /tests/dragonfly by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[dragonflydb/dragonfly#3600
- refactor: remove toUpper() from cmd_arg_parser by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3599
- fix: JSON.STRAPPEND by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3597
- chore(deps): bump golang.org/x/net from 0.7.0 to 0.23.0 in
/contrib/charts/dragonfly by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[dragonflydb/dragonfly#3601
- chore(deps): bump gopkg.in/yaml.v3 from
3.0.0-20210107192922-496545a6307b to 3.0.0 in /tools/replay by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[dragonflydb/dragonfly#3603
- chore(deps): bump google.golang.org/protobuf from 1.26.0 to 1.33.0 in
/contrib/charts/dragonfly by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[dragonflydb/dragonfly#3604
- fix: xreadgroup replies as a map for RESP3 by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3576
- chore: enable experimental_new_io by default. by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3605
- fix(server_family): Remove search indexes during the FLUSHALL command
by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3539
- feat(acl): add pub/sub by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3574
- chore: enable -Werror=thread-safety and add missing annotations (part
2/2) by [@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3595
- feat: add slave_repl_offset to the replication section. by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3596
- fix(json_family): Fix JsonFromString method by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3602
- fix(grafana): Fix grafana dragonfly dashboard datasource by
[@&#8203;applike-ss](https://redirect.github.com/applike-ss) in
[dragonflydb/dragonfly#3608
- fix: debug crash inside parsing of ZRANGE by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3611
- chore: run fakeredis flow with the debug build by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3612
- chore: Split `--cluster_announce_ip` and `--replica_announce_ip` by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3615
- fix: fix expiration processing for set command by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3607
- fix pytest: use generic random dbfilename in tests by
[@&#8203;adiholden](https://redirect.github.com/adiholden) in
[dragonflydb/dragonfly#3617
- fix(bug): zinter command should run on replica by
[@&#8203;adiholden](https://redirect.github.com/adiholden) in
[dragonflydb/dragonfly#3620
- fix(test_auth_resp3\_bug): release build failing by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3621
- chore: improve debug logs in dragonfly_connection by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3624
- fix: edge cases around mismatched path in json code by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3609
- test: fix search tests by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3625
- refactor: remove extra code from CmdArgParser by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3619
- fix: limit parsing in zrange commands by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3626
- chore: disable big value ser on reg tests by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3629
- fix: crash when passing empty arguments by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3627
- fix: 'renamenx foo foo' should return 0 if foo exists by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3630
- fix: debug help printed layout by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3635
- fix: crash during SORT DESC call by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3637

##### New Contributors

- [@&#8203;cunla](https://redirect.github.com/cunla) made their first
contribution in
[dragonflydb/dragonfly#3534
- [@&#8203;Eunoia1729](https://redirect.github.com/Eunoia1729) made
their first contribution in
[dragonflydb/dragonfly#3524
- [@&#8203;DerickIT](https://redirect.github.com/DerickIT) made their
first contribution in
[dragonflydb/dragonfly#3590
- [@&#8203;applike-ss](https://redirect.github.com/applike-ss) made
their first contribution in
[dragonflydb/dragonfly#3608

**Full Changelog**:
dragonflydb/dragonfly@v1.21.0...v1.22.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC42NC4yIiwidXBkYXRlZEluVmVyIjoiMzguNjQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvY29udGFpbmVyIiwidHlwZS9taW5vciJdfQ==-->

Co-authored-by: lumiere-bot[bot] <98047013+lumiere-bot[bot]@users.noreply.github.com>
spiceratops added a commit to spiceratops/k8s-gitops that referenced this pull request Sep 6, 2024
#945)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[ghcr.io/dragonflydb/dragonfly](https://redirect.github.com/dragonflydb/dragonfly)
| minor | `v1.21.4` -> `v1.22.0` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>dragonflydb/dragonfly (ghcr.io/dragonflydb/dragonfly)</summary>

###
[`v1.22.0`](https://redirect.github.com/dragonflydb/dragonfly/releases/tag/v1.22.0)

[Compare
Source](https://redirect.github.com/dragonflydb/dragonfly/compare/v1.21.4...v1.22.0)

##### Dragonfly v1.22.0

Some prominent changes include:

-   Lots of stability fixes around JSON and Search APIS:

[#&#8203;3459](https://redirect.github.com/dragonflydb/dragonfly/issues/3459),
[#&#8203;3284](https://redirect.github.com/dragonflydb/dragonfly/issues/3284),
[#&#8203;3537](https://redirect.github.com/dragonflydb/dragonfly/issues/3537),
[#&#8203;3544](https://redirect.github.com/dragonflydb/dragonfly/issues/3544),[#&#8203;3580](https://redirect.github.com/dragonflydb/dragonfly/issues/3580),
[#&#8203;3582](https://redirect.github.com/dragonflydb/dragonfly/issues/3582),
[#&#8203;3578](https://redirect.github.com/dragonflydb/dragonfly/issues/3578),
[#&#8203;3591](https://redirect.github.com/dragonflydb/dragonfly/issues/3591),
[#&#8203;3597](https://redirect.github.com/dragonflydb/dragonfly/issues/3597),
[#&#8203;3539](https://redirect.github.com/dragonflydb/dragonfly/issues/3539)
- Support `HELLO AUTH` handshake:
[#&#8203;3486](https://redirect.github.com/dragonflydb/dragonfly/issues/3486)
- Implement FT.TAGVALS:
[#&#8203;3493](https://redirect.github.com/dragonflydb/dragonfly/issues/3493)
- Introduce Dragonfly specific lua pragmas:
[#&#8203;3517](https://redirect.github.com/dragonflydb/dragonfly/issues/3517)
- Memcache now replicates flags correctly:
[#&#8203;3538](https://redirect.github.com/dragonflydb/dragonfly/issues/3538)
- Memcache API now supports absolute timestamps as well:
[#&#8203;3607](https://redirect.github.com/dragonflydb/dragonfly/issues/3607)
- PEXPIRETIME and EXPIRETIME are implemented by
[@&#8203;Eunoia1729](https://redirect.github.com/Eunoia1729) - thank
you!
- Last but not least, a significant contribution by
[@&#8203;cunla](https://redirect.github.com/cunla): a massive test
suite, likely the largest in Dragonfly's history, with 12K lines of
code. This contribution has sparked further efforts to enhance
Dragonfly's compatibility and stability. The initial results are
included in this release.

##### What's Changed

- fix: missing logs on ci timeout by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3452
- fix: JSON.MSET command by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3459
- chore: integrate quicklist changes from valkey by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3440
- feat(json_family): Add support of the JSON legacy mode by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3284
- fix: pytest teardown exception in os.remove(LAST_LOGS) by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3463
- chore: change how we track memory_budget during evictions by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3457
- chore: add timeout to replication sockets by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3434
- chore(server): Remove old blocking debug by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3460
- chore: SinkReplyBuilder2 with vec batching by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3454
- feat: Allow pre-declaring Lua SHAs to run with undeclared keys by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3465
- chore(server): Use parser more in list_family by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3461
- fix: Make replica's `REPLCONF IP-ADDRESS` optional by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3473
- chore: make tiered_test more reliable by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3477
- chore(facade): Update SinkReplyBuilder2 by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3474
- refactor: set info_replication_valkey_compatible=true by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3467
- chore: relax the version check in test_replicate_old_master by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3478
- chore: Download Dragonfly versions only when needed by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3479
- fix: division by zero bug by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3482
- test: fix test_scripts by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3485
- chore(facade): RedisReplyBuilder2 base by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3475
- chore(facade): MCReplyBuilder2 by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3480
- chore(facade): RedisReplyBuilder2 (extensions) by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3481
- fix: big value serialization corner cases by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3430
- fix: HELLO AUTH with non default user by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3486
- fix: flake in teardown of test_unknown_dfly_env by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3487
- fix: test_replicate_old_master missing serialization_max_chunk_size by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3498
- chore: add logs to debug tiered memory failures by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3499
- feat: implement FT.TAGVALS by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3493
- test: fix test_acl_deluser by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3488
- fix: sanitizers post failure on google chat by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3496
- chore(generic_family): Fix bad data format error in the RESTORE
command by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3501
- fix: sanitizers false positives by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3495
- feat: Expose replica_reconnect_count for Prometheus metrics by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3370
- fix: pytest warnings by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3497
- fix: missing virtual destructors in ReplyBuilder2 by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3506
- chore: split engine_shard file from engine_shard_set by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3507
- chore: introduce a secondary TaskQueue for shards by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3508
- fix: clang warnings by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3509
- chore: reduce pipelining latency by reusing existing shard fibers by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3494
- fix: bugs around the growth of a tiered file by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3516
- chore: Change Lua embedded flags syntax by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3517
- feat(cluster): Allow appending RDB to existing store by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3505
- fix: disable ThreadLocalMutex when big value ser is off by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3521
- chore(io): Introduce (carefully) new io with use_new_io flag by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3513
- chore(io): Optimize repeated ReservePiece calls by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3525
- fix: disable sanitizers false positive by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3522
- chore(config): make pipeline_squash configurable by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3529
- chore(traffic loger): use pipelining and print/analyze commands by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3527
- fix: skip empty objects on load and replication by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3514
- fix: deadlock in Heartbeat() by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3530
- fix(search_family): Add error on creating indexes from non-zero
databases by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3537
- fix: macos build by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3536
- fix: MC flags size and serialization
[#&#8203;3134](https://redirect.github.com/dragonflydb/dragonfly/issues/3134)
by [@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3538
- fix(transaction): Don't set continuation for blocking by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3540
- fix: named volume permissions in docker by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3518
- fix(jsonpath): Add JsonPath grammar for the child identifier in
brackets by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3533
- fix: build errors in sanitizers daily workflow by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3542
- test: tests using fakeredis to check compatibility by
[@&#8203;cunla](https://redirect.github.com/cunla) in
[dragonflydb/dragonfly#3534
- chore: fix search replication by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3547
- chore: add deallocation logs in the allocation tracker by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3549
- fix: fakeredis tests support python 3.10 by
[@&#8203;cunla](https://redirect.github.com/cunla) in
[dragonflydb/dragonfly#3550
- feat(server_family): Add backup/restore Prometheus metrics by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3520
- docs: Fakeredis tests README by
[@&#8203;cunla](https://redirect.github.com/cunla) in
[dragonflydb/dragonfly#3552
- fix: zinterstore correctly finds weights by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3554
- fix(search_family): Fix query parsing for the integer tags in OR
expression by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3544
- chore(server): Fix watch by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3557
- chore(search): fix numeric index query in rev order by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3555
- chore: allow limiting pipelining queue by length by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3551
- fix: add unsupported_server_types to fakeredis tests by
[@&#8203;cunla](https://redirect.github.com/cunla) in
[dragonflydb/dragonfly#3560
- fix: string compatibility issues by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3564
- fix(server): Fix ZRANGEBYLEX limit params by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3562
- fix: compatibility around list and string commands by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3565
- chore(server): Unify zset arg parsing by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3563
- fix: compatibility around list,string and sort commands by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3568
- chore(server): Sort correctly in ZINTER by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3566
- chore(server): Unify zset boolean operations into single function by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3567
- chore(transaction): More blocking tests by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3546
- fix: delete empty dense sets in HGetGeneric by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3543
- chore(search): Silence query parser error by
[@&#8203;dranikpg](https://redirect.github.com/dranikpg) in
[dragonflydb/dragonfly#3570
- chore: improve compatibility of set and ping commands by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3569
- fix: disable failing test_cron_snapshot_failed_saving by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3571
- fix: disable test_cluster_flushall_during_migration by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3573
- chore: add -Wthread-analysis and annotate (part 1/2) by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3502
- feat(generic_family): Implement EXPIRETIME and PEXPIRETIME commands by
[@&#8203;Eunoia1729](https://redirect.github.com/Eunoia1729) in
[dragonflydb/dragonfly#3524
- chore: allow running dragonfly pytests in repeat by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3577
- fix(json_family): Fix json get crash due to an invalid json path by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3580
- fix(json_family): Fix JSON.GET crash for the multiple legacy mode
paths by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3582
- fix: return an error when invalid number of arguments is passed. by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3584
- feat: add oom_deny_ratio to mutable config by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3585
- fix: warning as error on sanitizers build by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3587
- feat: add escaping symbols for tag search by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3578
- fix: skip test_replica_reconnections_after_network_disconnect by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3589
- docs(readme): Fix data mistake by
[@&#8203;DerickIT](https://redirect.github.com/DerickIT) in
[dragonflydb/dragonfly#3590
- chore: remove DflyVersion::VER0 by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3593
- refactor: remove double conversion from str to number to str in search
by [@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3591
- chore(deps): bump aiohttp from 3.8.4 to 3.10.2 in /tests/dragonfly by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[dragonflydb/dragonfly#3600
- refactor: remove toUpper() from cmd_arg_parser by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3599
- fix: JSON.STRAPPEND by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3597
- chore(deps): bump golang.org/x/net from 0.7.0 to 0.23.0 in
/contrib/charts/dragonfly by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[dragonflydb/dragonfly#3601
- chore(deps): bump gopkg.in/yaml.v3 from
3.0.0-20210107192922-496545a6307b to 3.0.0 in /tools/replay by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[dragonflydb/dragonfly#3603
- chore(deps): bump google.golang.org/protobuf from 1.26.0 to 1.33.0 in
/contrib/charts/dragonfly by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[dragonflydb/dragonfly#3604
- fix: xreadgroup replies as a map for RESP3 by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3576
- chore: enable experimental_new_io by default. by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3605
- fix(server_family): Remove search indexes during the FLUSHALL command
by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3539
- feat(acl): add pub/sub by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3574
- chore: enable -Werror=thread-safety and add missing annotations (part
2/2) by [@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3595
- feat: add slave_repl_offset to the replication section. by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3596
- fix(json_family): Fix JsonFromString method by
[@&#8203;BagritsevichStepan](https://redirect.github.com/BagritsevichStepan)
in
[dragonflydb/dragonfly#3602
- fix(grafana): Fix grafana dragonfly dashboard datasource by
[@&#8203;applike-ss](https://redirect.github.com/applike-ss) in
[dragonflydb/dragonfly#3608
- fix: debug crash inside parsing of ZRANGE by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3611
- chore: run fakeredis flow with the debug build by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3612
- chore: Split `--cluster_announce_ip` and `--replica_announce_ip` by
[@&#8203;chakaz](https://redirect.github.com/chakaz) in
[dragonflydb/dragonfly#3615
- fix: fix expiration processing for set command by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3607
- fix pytest: use generic random dbfilename in tests by
[@&#8203;adiholden](https://redirect.github.com/adiholden) in
[dragonflydb/dragonfly#3617
- fix(bug): zinter command should run on replica by
[@&#8203;adiholden](https://redirect.github.com/adiholden) in
[dragonflydb/dragonfly#3620
- fix(test_auth_resp3\_bug): release build failing by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3621
- chore: improve debug logs in dragonfly_connection by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3624
- fix: edge cases around mismatched path in json code by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3609
- test: fix search tests by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3625
- refactor: remove extra code from CmdArgParser by
[@&#8203;BorysTheDev](https://redirect.github.com/BorysTheDev) in
[dragonflydb/dragonfly#3619
- fix: limit parsing in zrange commands by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3626
- chore: disable big value ser on reg tests by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3629
- fix: crash when passing empty arguments by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3627
- fix: 'renamenx foo foo' should return 0 if foo exists by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3630
- fix: debug help printed layout by
[@&#8203;kostasrim](https://redirect.github.com/kostasrim) in
[dragonflydb/dragonfly#3635
- fix: crash during SORT DESC call by
[@&#8203;romange](https://redirect.github.com/romange) in
[dragonflydb/dragonfly#3637

##### New Contributors

- [@&#8203;cunla](https://redirect.github.com/cunla) made their first
contribution in
[dragonflydb/dragonfly#3534
- [@&#8203;Eunoia1729](https://redirect.github.com/Eunoia1729) made
their first contribution in
[dragonflydb/dragonfly#3524
- [@&#8203;DerickIT](https://redirect.github.com/DerickIT) made their
first contribution in
[dragonflydb/dragonfly#3590
- [@&#8203;applike-ss](https://redirect.github.com/applike-ss) made
their first contribution in
[dragonflydb/dragonfly#3608

**Full Changelog**:
dragonflydb/dragonfly@v1.21.0...v1.22.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC42NC4yIiwidXBkYXRlZEluVmVyIjoiMzguNjQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvY29udGFpbmVyIiwidHlwZS9taW5vciJdfQ==-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants