-
Notifications
You must be signed in to change notification settings - Fork 968
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
fix(cluster): Join on specified attempt id #3305
Conversation
**The Bug** Before this fix, source nodes would send `FIN` entries to target nodes (in all thread flows), and would then send a `DFLYMIGRATE ACK` command to verify that all flows received the `FIN` in time. If they didn't, the source node would retry this logic in a loop, until successful. The problem is that, in some rear cases, one or more of the flows would indeed be in a `FIN` state, _but of a previous `FIN` that is already outdated_. If that's indeed the case, all data between that `FIN` and the next `FIN`(s) will be lost. **The Fix** We already have an attempt id that we send in the `DFLYMIGRATE ACK` command, and return it in the response. This fix utilizes the same attempt id to be sent to all flows, and then when joined, we make sure we join on the correct (latest) attempt id. Unfortunately, we can't use `FIN` opcode now, because the protocol does not send any additional metadata for this opcode. I chose to use LSN because it has exactly the fields that we need, and one could possibly think of Log Sequence Number as an attempt id, but I could change that if it's unclear or too hacky. **Testing** To reproduce this, one needs to lower `--slot_migration_connection_timeout_ms` significantly, say to 500ms. This would fail, on my laptop, every ~2 runs. With this fix, it runs hundreds of times and never reproduces.
VLOG(2) << "Attempt to finalize flow " << source_shard_id_; | ||
while (tx_data->opcode == journal::Op::LSN) { | ||
VLOG(2) << "Attempt to finalize flow " << source_shard_id_ << " attempt " << tx_data->lsn; | ||
last_attempt_.store(tx_data->lsn); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In cases that FIN opcode was sent and than source node retries to finalize it will continue sending more data and therefore tx_reader.NextTxData in the next line will return nullopt?
if so why didnt we get it when you reproduced the bug? is it due to timeout on socket?
do we still need this logic of calling tx_reader.NextTxData in the next line with your fix?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also I am kind of confused with the logic of the blocking counter now as we wait on it in the join but we might decrease it but it could be that we returned in line 63 but its actually not the attempt that we are currently waiting on
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if so why didnt we get it when you reproduced the bug? is it due to timeout on socket?
Yes, it will continue sending data. But there is a short period of time after Dec()
and before Add()
that it is able to "catch" those earlier FIN
s.
This is why you must set a pretty aggressive timeout, for this to happen a lot.
do we still need this logic of calling tx_reader.NextTxData in the next line with your fix?
Yes, we still need it, otherwise we won't be able to continue after a timeout. The overall protocol/design is ok, we just need to confirm that we're waiting on the right attempt on both source and target.
also I am kind of confused with the logic of the blocking counter now as we wait on it in the join but we might decrease it but it could be that we returned in line 63 but its actually not the attempt that we are currently waiting on
If we return in line 63 it means that the socket was closed, so either the source node decided to finalize, or there's something wrong, but anyway there is no way to continue with the loop because there's nothing to read from
const absl::Duration timeout = | ||
absl::Milliseconds(absl::GetFlag(FLAGS_slot_migration_connection_timeout_ms)); | ||
|
||
while (true) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do we have a while loop here? why not just return if
std::all_of(shard_flows_.begin(), shard_flows_.end(),
[&](const auto& flow) { return flow->GetLastAttempt() == attempt; }))
is false?
We will call this join function on each DFLYMIGRATE ACK command sent, how does this works?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We are given a timeout
here, let's say 2s (default).
So we should be returning if (a) we reached the correct join state, or (b) if 2s have passed.
This loop is here to "protect" us from returning earlier than 2s but without (a), in case we were able to join all on an earlier FIN
(now LSN
).
So for example if attempt == 4, but one of more of the flows are currently stopped on attempt 3, we will try again, with a timeout equals to the remainder of the time.
I hope this makes sense. If you could phrase some comment to explain that, I'm more than happy to add it!
…nfly ( v1.20.1 → v1.21.0 ) (#864) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [docker.dragonflydb.io/dragonflydb/dragonfly](https://togithub.com/dragonflydb/dragonfly) | minor | `v1.20.1` -> `v1.21.0` | --- ### Release Notes <details> <summary>dragonflydb/dragonfly (docker.dragonflydb.io/dragonflydb/dragonfly)</summary> ### [`v1.21.0`](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.21.0) [Compare Source](https://togithub.com/dragonflydb/dragonfly/compare/v1.20.1...v1.21.0) ##### Dragonfly v1.21.0 Some prominent changes include: - Alpha release of SSD Data tiering - enabled with flag `--prefix some/path/basename` - Very basic support of multi-tenancy [@​3260](https://togithub.com/3260) - HSETEX now supports NX option, see [our docs](https://www.dragonflydb.io/docs/command-reference/hashes/hsetex). - Added support for JSON.MERGE and for JSON.MSET. - valkey's replica-announce-ip and --cluster--announc--ip are consolidated via `--announce-ip` flag. ##### What's Changed - feat(server): master stop sending exec opcode to replica by [@​adiholden](https://togithub.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/3289](https://togithub.com/dragonflydb/dragonfly/pull/3289) - chore: optimize zpopminmax operations by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3291](https://togithub.com/dragonflydb/dragonfly/pull/3291) - fix(json_family): Fix error in JsonFamilyTest.MGet by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3285](https://togithub.com/dragonflydb/dragonfly/pull/3285) - fix: define macro WITH_AWS in cmake when flag is ON by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3296](https://togithub.com/dragonflydb/dragonfly/pull/3296) - chore: Add 'memory arena show' command by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3298](https://togithub.com/dragonflydb/dragonfly/pull/3298) - fix: missing logs on pytest failures [#​3255](https://togithub.com/dragonflydb/dragonfly/issues/3255) by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3272](https://togithub.com/dragonflydb/dragonfly/pull/3272) - chore: refactor compact_object and introduce materialize method by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3300](https://togithub.com/dragonflydb/dragonfly/pull/3300) - fix(acl): loading interleaved plain and hashed passwords by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3297](https://togithub.com/dragonflydb/dragonfly/pull/3297) - chore: Add CompactObj Raw methods by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3303](https://togithub.com/dragonflydb/dragonfly/pull/3303) - chore: On invalid TTL, print the TTL first by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3306](https://togithub.com/dragonflydb/dragonfly/pull/3306) - chore: moving functions + renaming in tiered storage by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3304](https://togithub.com/dragonflydb/dragonfly/pull/3304) - fix(tests): Add missing awaits by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3273](https://togithub.com/dragonflydb/dragonfly/pull/3273) - chore: refactoring around tiered storage by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3299](https://togithub.com/dragonflydb/dragonfly/pull/3299) - feat: yield when serialization is in progress by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3220](https://togithub.com/dragonflydb/dragonfly/pull/3220) - refactor: Use `DbContext`, `OpArgs` and `Transaction` to access `DbSlice` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3311](https://togithub.com/dragonflydb/dragonfly/pull/3311) - chore: Separate tiered serialization format from object values by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3310](https://togithub.com/dragonflydb/dragonfly/pull/3310) - chore: add more community links to README by [@​Niennienzz](https://togithub.com/Niennienzz) in [https://github.com/dragonflydb/dragonfly/pull/3308](https://togithub.com/dragonflydb/dragonfly/pull/3308) - fix(cluster): Join on specified attempt id by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3305](https://togithub.com/dragonflydb/dragonfly/pull/3305) - chore(acl): add test with requirepass and aclfile by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3312](https://togithub.com/dragonflydb/dragonfly/pull/3312) - chore: skip test_cluster_flushall_during_migration by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3316](https://togithub.com/dragonflydb/dragonfly/pull/3316) - fix (pytest): generate unique random dbfilename for tests by [@​adiholden](https://togithub.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/3317](https://togithub.com/dragonflydb/dragonfly/pull/3317) - chore: bypass decoding/encoding of the data when performing offloading by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3315](https://togithub.com/dragonflydb/dragonfly/pull/3315) - refactor: acl helpers and global tables by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3309](https://togithub.com/dragonflydb/dragonfly/pull/3309) - chore(tiering): Fixes by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3225](https://togithub.com/dragonflydb/dragonfly/pull/3225) - fix(migration): Use transactions! by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3266](https://togithub.com/dragonflydb/dragonfly/pull/3266) - fix: forbid DFLYCLUSTER commads set for emulated cluster mode by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3307](https://togithub.com/dragonflydb/dragonfly/pull/3307) - feat(namespaces): Initial support for multi-tenant by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3260](https://togithub.com/dragonflydb/dragonfly/pull/3260) - chore: improve dfly_bench stats by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3320](https://togithub.com/dragonflydb/dragonfly/pull/3320) - chore: remove replace_deleted flag from hnswlib by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3323](https://togithub.com/dragonflydb/dragonfly/pull/3323) - feat(test): Improve benchmark workflow by [@​adiholden](https://togithub.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/3330](https://togithub.com/dragonflydb/dragonfly/pull/3330) - fix: Proper shutdown sequence with Namespaces by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3333](https://togithub.com/dragonflydb/dragonfly/pull/3333) - fix(test): copy logs for failed test during TEARDOWN phase by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3331](https://togithub.com/dragonflydb/dragonfly/pull/3331) - fix(json_family): fix JSON.STRAPPEND command for JSON legacy mode by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3264](https://togithub.com/dragonflydb/dragonfly/pull/3264) - chore(tiering): add protection against overruning memory budget by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3327](https://togithub.com/dragonflydb/dragonfly/pull/3327) - chore: Add coordinated omission mode by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3332](https://togithub.com/dragonflydb/dragonfly/pull/3332) - chore: implement sequential pass without the overlapping traffic by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3335](https://togithub.com/dragonflydb/dragonfly/pull/3335) - feat: add an option to flush serialized entries on threshold limit by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3241](https://togithub.com/dragonflydb/dragonfly/pull/3241) - feat(hset_family): Add NX option to HSETEX by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3295](https://togithub.com/dragonflydb/dragonfly/pull/3295) - Fix blocking commands moved error by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3334](https://togithub.com/dragonflydb/dragonfly/pull/3334) - fix: ub in RegisterOnChange and regression tests for big values by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3336](https://togithub.com/dragonflydb/dragonfly/pull/3336) - fix: Cancel outgoing migration when retrying / closing by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3339](https://togithub.com/dragonflydb/dragonfly/pull/3339) - chore: Make KeyIndex iterable by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3326](https://togithub.com/dragonflydb/dragonfly/pull/3326) - fix: AllocationTracker::Remove return value was reversed by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3341](https://togithub.com/dragonflydb/dragonfly/pull/3341) - chore: remove redundant metrics from memory stats by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3345](https://togithub.com/dragonflydb/dragonfly/pull/3345) - fix: corruption in replication stream by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3344](https://togithub.com/dragonflydb/dragonfly/pull/3344) - chore: clean up TaskQueue since we do not need multiple fibers for it by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3348](https://togithub.com/dragonflydb/dragonfly/pull/3348) - chore: pull helio by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3350](https://togithub.com/dragonflydb/dragonfly/pull/3350) - chore: Log connection context when issuing dangerous cmds by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3352](https://togithub.com/dragonflydb/dragonfly/pull/3352) - chore: small rename and add dcheck on LocalBlockingCounter by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3356](https://togithub.com/dragonflydb/dragonfly/pull/3356) - refactor: reduce number of logs for cluster by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3357](https://togithub.com/dragonflydb/dragonfly/pull/3357) - chore: fixes to dfly_bench by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3353](https://togithub.com/dragonflydb/dragonfly/pull/3353) - chore: fix test_parser_memory_stats flakiness by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3354](https://togithub.com/dragonflydb/dragonfly/pull/3354) - chore(server): Introduce StringSetWrapper by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3347](https://togithub.com/dragonflydb/dragonfly/pull/3347) - fix: do not upload offload values on a first hit by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3360](https://togithub.com/dragonflydb/dragonfly/pull/3360) - chore(tiering): Range functions + small refactoring by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3207](https://togithub.com/dragonflydb/dragonfly/pull/3207) - fix: failure in test_cluster_fuzzymigration by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3363](https://togithub.com/dragonflydb/dragonfly/pull/3363) - fix(server): Require >=1 args to `GETEX` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3366](https://togithub.com/dragonflydb/dragonfly/pull/3366) - fix(transaction): Fix namespace access by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3364](https://togithub.com/dragonflydb/dragonfly/pull/3364) - chore: disable compression on big values by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3358](https://togithub.com/dragonflydb/dragonfly/pull/3358) - fix: protect OnJournalEntry with ConditionGuard by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3367](https://togithub.com/dragonflydb/dragonfly/pull/3367) - chore: Introduce CoolQueue by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3365](https://togithub.com/dragonflydb/dragonfly/pull/3365) - chore: small fixes around tiering by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3368](https://togithub.com/dragonflydb/dragonfly/pull/3368) - chore: add a test for HeapSize() function by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3349](https://togithub.com/dragonflydb/dragonfly/pull/3349) - chore: simplify computation of used_mem_current by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3372](https://togithub.com/dragonflydb/dragonfly/pull/3372) - chore: disable cluster_fuzzymigration by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3373](https://togithub.com/dragonflydb/dragonfly/pull/3373) - chore(replica): remove unused methods in the Replica class by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3374](https://togithub.com/dragonflydb/dragonfly/pull/3374) - fix(transaction): Properly store block cancel status by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3371](https://togithub.com/dragonflydb/dragonfly/pull/3371) - chore: Track db_slice table memory instantly by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3375](https://togithub.com/dragonflydb/dragonfly/pull/3375) - chore: add mem test for big values and default the flag by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3369](https://togithub.com/dragonflydb/dragonfly/pull/3369) - update: replication_acks_interval flag to 1000 by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3378](https://togithub.com/dragonflydb/dragonfly/pull/3378) - chore: dfly_bench - print ongoing error counts by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3382](https://togithub.com/dragonflydb/dragonfly/pull/3382) - chore: introduce a cool queue that gradually retires cool items by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3377](https://togithub.com/dragonflydb/dragonfly/pull/3377) - chore: update cached stats inside PollExecution by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3376](https://togithub.com/dragonflydb/dragonfly/pull/3376) - fix: Fix `test_take_over_seeder` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3385](https://togithub.com/dragonflydb/dragonfly/pull/3385) - chore: reenable evictions upon insertion to avoid OOM rejections by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3387](https://togithub.com/dragonflydb/dragonfly/pull/3387) - fix: remove fiber guard from non atomic section by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3381](https://togithub.com/dragonflydb/dragonfly/pull/3381) - chore: do not preempt on db_slice::RegisterOnChange by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3388](https://togithub.com/dragonflydb/dragonfly/pull/3388) - fix: disable inline transactions when db_slice has registered callbacks by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3391](https://togithub.com/dragonflydb/dragonfly/pull/3391) - fix: test_big_value_serialization_memory_limit shutdown timeout by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3390](https://togithub.com/dragonflydb/dragonfly/pull/3390) - chore: set serialization_max_chunk_size to 1 byte by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3379](https://togithub.com/dragonflydb/dragonfly/pull/3379) - chore: tiered fixes by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3393](https://togithub.com/dragonflydb/dragonfly/pull/3393) - fix(acl): remove none from acl categories by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3392](https://togithub.com/dragonflydb/dragonfly/pull/3392) - chore: tiering - make Modify work with cool storage by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3395](https://togithub.com/dragonflydb/dragonfly/pull/3395) - fix: Fix unsupported object type rejson-rl in RedisInsight by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3384](https://togithub.com/dragonflydb/dragonfly/pull/3384) - Revert "chore: set serialization_max_chunk_size to 1 byte ([#​3379](https://togithub.com/dragonflydb/dragonfly/issues/3379))" by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3398](https://togithub.com/dragonflydb/dragonfly/pull/3398) - chore(tiering): Move cool entry warmup to DbSlice by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3397](https://togithub.com/dragonflydb/dragonfly/pull/3397) - fix: reenable macos builds by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3399](https://togithub.com/dragonflydb/dragonfly/pull/3399) - chore: Don't print password to log on replica `AUTH` failure by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3403](https://togithub.com/dragonflydb/dragonfly/pull/3403) - chore: Support setting the value of `replica-priority` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3400](https://togithub.com/dragonflydb/dragonfly/pull/3400) - feat: stabilize non-coordinated omission mode by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3407](https://togithub.com/dragonflydb/dragonfly/pull/3407) - chore: cancel slot migrations on shutdown by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3405](https://togithub.com/dragonflydb/dragonfly/pull/3405) - chore: add db_slice lock to protect segments from preemptions by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3406](https://togithub.com/dragonflydb/dragonfly/pull/3406) - chore: increase timeout of regression tests by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3412](https://togithub.com/dragonflydb/dragonfly/pull/3412) - fix: crash with NS in multi/exec [#​3410](https://togithub.com/dragonflydb/dragonfly/issues/3410) by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3415](https://togithub.com/dragonflydb/dragonfly/pull/3415) - fix: json.merge exception crash by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3409](https://togithub.com/dragonflydb/dragonfly/pull/3409) - fix(connection): Count memchached pipelined commands by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3413](https://togithub.com/dragonflydb/dragonfly/pull/3413) - chore: remove verbose printing of tests by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3420](https://togithub.com/dragonflydb/dragonfly/pull/3420) - chore: Tiered fixes by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3401](https://togithub.com/dragonflydb/dragonfly/pull/3401) - feat: Support non-root paths for json.merge by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3419](https://togithub.com/dragonflydb/dragonfly/pull/3419) - chore: skip cluster tests if redis-server wasn't found by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3416](https://togithub.com/dragonflydb/dragonfly/pull/3416) - chore: expose metric that shows how many task submitters are blocked by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3427](https://togithub.com/dragonflydb/dragonfly/pull/3427) - chore: optimize SendStringArrInternal even more by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3425](https://togithub.com/dragonflydb/dragonfly/pull/3425) - fix(server): Implement SCRIPT GC command by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3431](https://togithub.com/dragonflydb/dragonfly/pull/3431) - chore: retire TEST_EnableHeartBeat by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3435](https://togithub.com/dragonflydb/dragonfly/pull/3435) - feat(server): Support `replica-announce-ip`/`port` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3421](https://togithub.com/dragonflydb/dragonfly/pull/3421) - test(cluster): Migration replication test by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3417](https://togithub.com/dragonflydb/dragonfly/pull/3417) - chore: improve replication locks by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3436](https://togithub.com/dragonflydb/dragonfly/pull/3436) - chore: reorganize EngineShard::Heartbeat by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3437](https://togithub.com/dragonflydb/dragonfly/pull/3437) - chore: fix memcached pipeline test by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3438](https://togithub.com/dragonflydb/dragonfly/pull/3438) - chore: simplify master replication cancelation interface by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3439](https://togithub.com/dragonflydb/dragonfly/pull/3439) - chore: reset serialization_max_chunk_size to 0 by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3432](https://togithub.com/dragonflydb/dragonfly/pull/3432) - feat: DEBUG REPLICA PAUSE now pauses fullsync by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3441](https://togithub.com/dragonflydb/dragonfly/pull/3441) - test: fix test_disconnect_replica by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3442](https://togithub.com/dragonflydb/dragonfly/pull/3442) - fix: cluster_mgr.py to use `CLUSTER MYID` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3444](https://togithub.com/dragonflydb/dragonfly/pull/3444) - chore: disable serialization_max_chunk_size in regtests by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3445](https://togithub.com/dragonflydb/dragonfly/pull/3445) - fix: properly seriailize meta buffer in SendStringArrInternal by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3455](https://togithub.com/dragonflydb/dragonfly/pull/3455) **Full Changelog**: dragonflydb/dragonfly@v1.20.0...v1.21.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://togithub.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yMS4wIiwidXBkYXRlZEluVmVyIjoiMzguMjEuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvY29udGFpbmVyIiwidHlwZS9taW5vciJdfQ==--> Co-authored-by: kireque-bot[bot] <143391978+kireque-bot[bot]@users.noreply.github.com>
…21.0 ) (#5180) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/dragonflydb/dragonfly](https://togithub.com/dragonflydb/dragonfly) | minor | `v1.20.1` -> `v1.21.0` | --- ### Release Notes <details> <summary>dragonflydb/dragonfly (ghcr.io/dragonflydb/dragonfly)</summary> ### [`v1.21.0`](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.21.0) [Compare Source](https://togithub.com/dragonflydb/dragonfly/compare/v1.20.1...v1.21.0) ##### Dragonfly v1.21.0 Some prominent changes include: - Alpha release of SSD Data tiering - enabled with flag `--prefix some/path/basename` - Very basic support of multi-tenancy [@​3260](https://togithub.com/3260) - HSETEX now supports NX option, see [our docs](https://www.dragonflydb.io/docs/command-reference/hashes/hsetex). - Added support for JSON.MERGE and for JSON.MSET. - valkey's replica-announce-ip and --cluster--announc--ip are consolidated via `--announce-ip` flag. ##### What's Changed - feat(server): master stop sending exec opcode to replica by [@​adiholden](https://togithub.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/3289](https://togithub.com/dragonflydb/dragonfly/pull/3289) - chore: optimize zpopminmax operations by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3291](https://togithub.com/dragonflydb/dragonfly/pull/3291) - fix(json_family): Fix error in JsonFamilyTest.MGet by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3285](https://togithub.com/dragonflydb/dragonfly/pull/3285) - fix: define macro WITH_AWS in cmake when flag is ON by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3296](https://togithub.com/dragonflydb/dragonfly/pull/3296) - chore: Add 'memory arena show' command by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3298](https://togithub.com/dragonflydb/dragonfly/pull/3298) - fix: missing logs on pytest failures [#​3255](https://togithub.com/dragonflydb/dragonfly/issues/3255) by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3272](https://togithub.com/dragonflydb/dragonfly/pull/3272) - chore: refactor compact_object and introduce materialize method by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3300](https://togithub.com/dragonflydb/dragonfly/pull/3300) - fix(acl): loading interleaved plain and hashed passwords by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3297](https://togithub.com/dragonflydb/dragonfly/pull/3297) - chore: Add CompactObj Raw methods by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3303](https://togithub.com/dragonflydb/dragonfly/pull/3303) - chore: On invalid TTL, print the TTL first by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3306](https://togithub.com/dragonflydb/dragonfly/pull/3306) - chore: moving functions + renaming in tiered storage by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3304](https://togithub.com/dragonflydb/dragonfly/pull/3304) - fix(tests): Add missing awaits by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3273](https://togithub.com/dragonflydb/dragonfly/pull/3273) - chore: refactoring around tiered storage by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3299](https://togithub.com/dragonflydb/dragonfly/pull/3299) - feat: yield when serialization is in progress by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3220](https://togithub.com/dragonflydb/dragonfly/pull/3220) - refactor: Use `DbContext`, `OpArgs` and `Transaction` to access `DbSlice` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3311](https://togithub.com/dragonflydb/dragonfly/pull/3311) - chore: Separate tiered serialization format from object values by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3310](https://togithub.com/dragonflydb/dragonfly/pull/3310) - chore: add more community links to README by [@​Niennienzz](https://togithub.com/Niennienzz) in [https://github.com/dragonflydb/dragonfly/pull/3308](https://togithub.com/dragonflydb/dragonfly/pull/3308) - fix(cluster): Join on specified attempt id by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3305](https://togithub.com/dragonflydb/dragonfly/pull/3305) - chore(acl): add test with requirepass and aclfile by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3312](https://togithub.com/dragonflydb/dragonfly/pull/3312) - chore: skip test_cluster_flushall_during_migration by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3316](https://togithub.com/dragonflydb/dragonfly/pull/3316) - fix (pytest): generate unique random dbfilename for tests by [@​adiholden](https://togithub.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/3317](https://togithub.com/dragonflydb/dragonfly/pull/3317) - chore: bypass decoding/encoding of the data when performing offloading by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3315](https://togithub.com/dragonflydb/dragonfly/pull/3315) - refactor: acl helpers and global tables by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3309](https://togithub.com/dragonflydb/dragonfly/pull/3309) - chore(tiering): Fixes by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3225](https://togithub.com/dragonflydb/dragonfly/pull/3225) - fix(migration): Use transactions! by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3266](https://togithub.com/dragonflydb/dragonfly/pull/3266) - fix: forbid DFLYCLUSTER commads set for emulated cluster mode by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3307](https://togithub.com/dragonflydb/dragonfly/pull/3307) - feat(namespaces): Initial support for multi-tenant by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3260](https://togithub.com/dragonflydb/dragonfly/pull/3260) - chore: improve dfly_bench stats by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3320](https://togithub.com/dragonflydb/dragonfly/pull/3320) - chore: remove replace_deleted flag from hnswlib by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3323](https://togithub.com/dragonflydb/dragonfly/pull/3323) - feat(test): Improve benchmark workflow by [@​adiholden](https://togithub.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/3330](https://togithub.com/dragonflydb/dragonfly/pull/3330) - fix: Proper shutdown sequence with Namespaces by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3333](https://togithub.com/dragonflydb/dragonfly/pull/3333) - fix(test): copy logs for failed test during TEARDOWN phase by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3331](https://togithub.com/dragonflydb/dragonfly/pull/3331) - fix(json_family): fix JSON.STRAPPEND command for JSON legacy mode by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3264](https://togithub.com/dragonflydb/dragonfly/pull/3264) - chore(tiering): add protection against overruning memory budget by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3327](https://togithub.com/dragonflydb/dragonfly/pull/3327) - chore: Add coordinated omission mode by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3332](https://togithub.com/dragonflydb/dragonfly/pull/3332) - chore: implement sequential pass without the overlapping traffic by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3335](https://togithub.com/dragonflydb/dragonfly/pull/3335) - feat: add an option to flush serialized entries on threshold limit by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3241](https://togithub.com/dragonflydb/dragonfly/pull/3241) - feat(hset_family): Add NX option to HSETEX by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3295](https://togithub.com/dragonflydb/dragonfly/pull/3295) - Fix blocking commands moved error by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3334](https://togithub.com/dragonflydb/dragonfly/pull/3334) - fix: ub in RegisterOnChange and regression tests for big values by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3336](https://togithub.com/dragonflydb/dragonfly/pull/3336) - fix: Cancel outgoing migration when retrying / closing by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3339](https://togithub.com/dragonflydb/dragonfly/pull/3339) - chore: Make KeyIndex iterable by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3326](https://togithub.com/dragonflydb/dragonfly/pull/3326) - fix: AllocationTracker::Remove return value was reversed by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3341](https://togithub.com/dragonflydb/dragonfly/pull/3341) - chore: remove redundant metrics from memory stats by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3345](https://togithub.com/dragonflydb/dragonfly/pull/3345) - fix: corruption in replication stream by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3344](https://togithub.com/dragonflydb/dragonfly/pull/3344) - chore: clean up TaskQueue since we do not need multiple fibers for it by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3348](https://togithub.com/dragonflydb/dragonfly/pull/3348) - chore: pull helio by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3350](https://togithub.com/dragonflydb/dragonfly/pull/3350) - chore: Log connection context when issuing dangerous cmds by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3352](https://togithub.com/dragonflydb/dragonfly/pull/3352) - chore: small rename and add dcheck on LocalBlockingCounter by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3356](https://togithub.com/dragonflydb/dragonfly/pull/3356) - refactor: reduce number of logs for cluster by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3357](https://togithub.com/dragonflydb/dragonfly/pull/3357) - chore: fixes to dfly_bench by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3353](https://togithub.com/dragonflydb/dragonfly/pull/3353) - chore: fix test_parser_memory_stats flakiness by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3354](https://togithub.com/dragonflydb/dragonfly/pull/3354) - chore(server): Introduce StringSetWrapper by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3347](https://togithub.com/dragonflydb/dragonfly/pull/3347) - fix: do not upload offload values on a first hit by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3360](https://togithub.com/dragonflydb/dragonfly/pull/3360) - chore(tiering): Range functions + small refactoring by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3207](https://togithub.com/dragonflydb/dragonfly/pull/3207) - fix: failure in test_cluster_fuzzymigration by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3363](https://togithub.com/dragonflydb/dragonfly/pull/3363) - fix(server): Require >=1 args to `GETEX` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3366](https://togithub.com/dragonflydb/dragonfly/pull/3366) - fix(transaction): Fix namespace access by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3364](https://togithub.com/dragonflydb/dragonfly/pull/3364) - chore: disable compression on big values by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3358](https://togithub.com/dragonflydb/dragonfly/pull/3358) - fix: protect OnJournalEntry with ConditionGuard by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3367](https://togithub.com/dragonflydb/dragonfly/pull/3367) - chore: Introduce CoolQueue by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3365](https://togithub.com/dragonflydb/dragonfly/pull/3365) - chore: small fixes around tiering by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3368](https://togithub.com/dragonflydb/dragonfly/pull/3368) - chore: add a test for HeapSize() function by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3349](https://togithub.com/dragonflydb/dragonfly/pull/3349) - chore: simplify computation of used_mem_current by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3372](https://togithub.com/dragonflydb/dragonfly/pull/3372) - chore: disable cluster_fuzzymigration by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3373](https://togithub.com/dragonflydb/dragonfly/pull/3373) - chore(replica): remove unused methods in the Replica class by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3374](https://togithub.com/dragonflydb/dragonfly/pull/3374) - fix(transaction): Properly store block cancel status by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3371](https://togithub.com/dragonflydb/dragonfly/pull/3371) - chore: Track db_slice table memory instantly by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3375](https://togithub.com/dragonflydb/dragonfly/pull/3375) - chore: add mem test for big values and default the flag by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3369](https://togithub.com/dragonflydb/dragonfly/pull/3369) - update: replication_acks_interval flag to 1000 by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3378](https://togithub.com/dragonflydb/dragonfly/pull/3378) - chore: dfly_bench - print ongoing error counts by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3382](https://togithub.com/dragonflydb/dragonfly/pull/3382) - chore: introduce a cool queue that gradually retires cool items by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3377](https://togithub.com/dragonflydb/dragonfly/pull/3377) - chore: update cached stats inside PollExecution by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3376](https://togithub.com/dragonflydb/dragonfly/pull/3376) - fix: Fix `test_take_over_seeder` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3385](https://togithub.com/dragonflydb/dragonfly/pull/3385) - chore: reenable evictions upon insertion to avoid OOM rejections by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3387](https://togithub.com/dragonflydb/dragonfly/pull/3387) - fix: remove fiber guard from non atomic section by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3381](https://togithub.com/dragonflydb/dragonfly/pull/3381) - chore: do not preempt on db_slice::RegisterOnChange by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3388](https://togithub.com/dragonflydb/dragonfly/pull/3388) - fix: disable inline transactions when db_slice has registered callbacks by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3391](https://togithub.com/dragonflydb/dragonfly/pull/3391) - fix: test_big_value_serialization_memory_limit shutdown timeout by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3390](https://togithub.com/dragonflydb/dragonfly/pull/3390) - chore: set serialization_max_chunk_size to 1 byte by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3379](https://togithub.com/dragonflydb/dragonfly/pull/3379) - chore: tiered fixes by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3393](https://togithub.com/dragonflydb/dragonfly/pull/3393) - fix(acl): remove none from acl categories by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3392](https://togithub.com/dragonflydb/dragonfly/pull/3392) - chore: tiering - make Modify work with cool storage by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3395](https://togithub.com/dragonflydb/dragonfly/pull/3395) - fix: Fix unsupported object type rejson-rl in RedisInsight by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3384](https://togithub.com/dragonflydb/dragonfly/pull/3384) - Revert "chore: set serialization_max_chunk_size to 1 byte ([#​3379](https://togithub.com/dragonflydb/dragonfly/issues/3379))" by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3398](https://togithub.com/dragonflydb/dragonfly/pull/3398) - chore(tiering): Move cool entry warmup to DbSlice by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3397](https://togithub.com/dragonflydb/dragonfly/pull/3397) - fix: reenable macos builds by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3399](https://togithub.com/dragonflydb/dragonfly/pull/3399) - chore: Don't print password to log on replica `AUTH` failure by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3403](https://togithub.com/dragonflydb/dragonfly/pull/3403) - chore: Support setting the value of `replica-priority` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3400](https://togithub.com/dragonflydb/dragonfly/pull/3400) - feat: stabilize non-coordinated omission mode by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3407](https://togithub.com/dragonflydb/dragonfly/pull/3407) - chore: cancel slot migrations on shutdown by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3405](https://togithub.com/dragonflydb/dragonfly/pull/3405) - chore: add db_slice lock to protect segments from preemptions by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3406](https://togithub.com/dragonflydb/dragonfly/pull/3406) - chore: increase timeout of regression tests by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3412](https://togithub.com/dragonflydb/dragonfly/pull/3412) - fix: crash with NS in multi/exec [#​3410](https://togithub.com/dragonflydb/dragonfly/issues/3410) by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3415](https://togithub.com/dragonflydb/dragonfly/pull/3415) - fix: json.merge exception crash by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3409](https://togithub.com/dragonflydb/dragonfly/pull/3409) - fix(connection): Count memchached pipelined commands by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3413](https://togithub.com/dragonflydb/dragonfly/pull/3413) - chore: remove verbose printing of tests by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3420](https://togithub.com/dragonflydb/dragonfly/pull/3420) - chore: Tiered fixes by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3401](https://togithub.com/dragonflydb/dragonfly/pull/3401) - feat: Support non-root paths for json.merge by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3419](https://togithub.com/dragonflydb/dragonfly/pull/3419) - chore: skip cluster tests if redis-server wasn't found by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3416](https://togithub.com/dragonflydb/dragonfly/pull/3416) - chore: expose metric that shows how many task submitters are blocked by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3427](https://togithub.com/dragonflydb/dragonfly/pull/3427) - chore: optimize SendStringArrInternal even more by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3425](https://togithub.com/dragonflydb/dragonfly/pull/3425) - fix(server): Implement SCRIPT GC command by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3431](https://togithub.com/dragonflydb/dragonfly/pull/3431) - chore: retire TEST_EnableHeartBeat by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3435](https://togithub.com/dragonflydb/dragonfly/pull/3435) - feat(server): Support `replica-announce-ip`/`port` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3421](https://togithub.com/dragonflydb/dragonfly/pull/3421) - test(cluster): Migration replication test by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3417](https://togithub.com/dragonflydb/dragonfly/pull/3417) - chore: improve replication locks by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3436](https://togithub.com/dragonflydb/dragonfly/pull/3436) - chore: reorganize EngineShard::Heartbeat by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3437](https://togithub.com/dragonflydb/dragonfly/pull/3437) - chore: fix memcached pipeline test by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3438](https://togithub.com/dragonflydb/dragonfly/pull/3438) - chore: simplify master replication cancelation interface by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3439](https://togithub.com/dragonflydb/dragonfly/pull/3439) - chore: reset serialization_max_chunk_size to 0 by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3432](https://togithub.com/dragonflydb/dragonfly/pull/3432) - feat: DEBUG REPLICA PAUSE now pauses fullsync by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3441](https://togithub.com/dragonflydb/dragonfly/pull/3441) - test: fix test_disconnect_replica by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3442](https://togithub.com/dragonflydb/dragonfly/pull/3442) - fix: cluster_mgr.py to use `CLUSTER MYID` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3444](https://togithub.com/dragonflydb/dragonfly/pull/3444) - chore: disable serialization_max_chunk_size in regtests by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3445](https://togithub.com/dragonflydb/dragonfly/pull/3445) - fix: properly seriailize meta buffer in SendStringArrInternal by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3455](https://togithub.com/dragonflydb/dragonfly/pull/3455) **Full Changelog**: dragonflydb/dragonfly@v1.20.0...v1.21.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://togithub.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yMS4wIiwidXBkYXRlZEluVmVyIjoiMzguMjEuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvY29udGFpbmVyIiwidHlwZS9taW5vciJdfQ==--> Co-authored-by: lumiere-bot[bot] <98047013+lumiere-bot[bot]@users.noreply.github.com>
#894) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/dragonflydb/dragonfly](https://togithub.com/dragonflydb/dragonfly) | minor | `v1.20.1` -> `v1.21.2` | --- > [!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.21.2`](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.21.2) [Compare Source](https://togithub.com/dragonflydb/dragonfly/compare/v1.21.1...v1.21.2) ##### Dragonfly v1.21.2 This is a patch release. fix: disable code that can cause potential deadlocks during the replication ([#​3521](https://togithub.com/dragonflydb/dragonfly/issues/3521)) This follows up on **[Dragonfly v1.21.0](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.21.0)** release, that includes the following prominent features: - Alpha release of SSD Data tiering - enabled with flag `--tiered_prefix some/path/basename` - Very basic support of multi-tenancy [#​3260](https://togithub.com/dragonflydb/dragonfly/issues/3260) - HSETEX now supports NX option, see [our docs](https://www.dragonflydb.io/docs/command-reference/hashes/hsetex). - Added support for JSON.MERGE and for JSON.MSET. - valkey's replica-announce-ip and --cluster--announc--ip are consolidated via `--announce-ip` flag. **Full Changelog**: dragonflydb/dragonfly@v1.21.1...v1.21.2 ### [`v1.21.1`](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.21.1) [Compare Source](https://togithub.com/dragonflydb/dragonfly/compare/v1.21.0...v1.21.1) ##### Dragonfly v1.21.1 This is a patch release. fix: the replication from older masters to newer versions ([#​3473](https://togithub.com/dragonflydb/dragonfly/issues/3473)) This follows up on **[Dragonfly v1.21.0](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.21.0)** release, that includes the following prominent features: - Alpha release of SSD Data tiering - enabled with flag `--tiered_prefix some/path/basename` - Very basic support of multi-tenancy [@​3260](https://togithub.com/3260) - HSETEX now supports NX option, see [our docs](https://www.dragonflydb.io/docs/command-reference/hashes/hsetex). - Added support for JSON.MERGE and for JSON.MSET. - valkey's replica-announce-ip and --cluster--announc--ip are consolidated via `--announce-ip` flag. ### [`v1.21.0`](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.21.0) [Compare Source](https://togithub.com/dragonflydb/dragonfly/compare/v1.20.1...v1.21.0) ##### Dragonfly v1.21.0 Some prominent changes include: - Alpha release of SSD Data tiering - enabled with flag `--prefix some/path/basename` - Very basic support of multi-tenancy [@​3260](https://togithub.com/3260) - HSETEX now supports NX option, see [our docs](https://www.dragonflydb.io/docs/command-reference/hashes/hsetex). - Added support for JSON.MERGE and for JSON.MSET. - valkey's replica-announce-ip and --cluster--announc--ip are consolidated via `--announce-ip` flag. ##### What's Changed - feat(server): master stop sending exec opcode to replica by [@​adiholden](https://togithub.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/3289](https://togithub.com/dragonflydb/dragonfly/pull/3289) - chore: optimize zpopminmax operations by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3291](https://togithub.com/dragonflydb/dragonfly/pull/3291) - fix(json_family): Fix error in JsonFamilyTest.MGet by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3285](https://togithub.com/dragonflydb/dragonfly/pull/3285) - fix: define macro WITH_AWS in cmake when flag is ON by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3296](https://togithub.com/dragonflydb/dragonfly/pull/3296) - chore: Add 'memory arena show' command by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3298](https://togithub.com/dragonflydb/dragonfly/pull/3298) - fix: missing logs on pytest failures [#​3255](https://togithub.com/dragonflydb/dragonfly/issues/3255) by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3272](https://togithub.com/dragonflydb/dragonfly/pull/3272) - chore: refactor compact_object and introduce materialize method by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3300](https://togithub.com/dragonflydb/dragonfly/pull/3300) - fix(acl): loading interleaved plain and hashed passwords by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3297](https://togithub.com/dragonflydb/dragonfly/pull/3297) - chore: Add CompactObj Raw methods by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3303](https://togithub.com/dragonflydb/dragonfly/pull/3303) - chore: On invalid TTL, print the TTL first by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3306](https://togithub.com/dragonflydb/dragonfly/pull/3306) - chore: moving functions + renaming in tiered storage by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3304](https://togithub.com/dragonflydb/dragonfly/pull/3304) - fix(tests): Add missing awaits by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3273](https://togithub.com/dragonflydb/dragonfly/pull/3273) - chore: refactoring around tiered storage by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3299](https://togithub.com/dragonflydb/dragonfly/pull/3299) - feat: yield when serialization is in progress by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3220](https://togithub.com/dragonflydb/dragonfly/pull/3220) - refactor: Use `DbContext`, `OpArgs` and `Transaction` to access `DbSlice` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3311](https://togithub.com/dragonflydb/dragonfly/pull/3311) - chore: Separate tiered serialization format from object values by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3310](https://togithub.com/dragonflydb/dragonfly/pull/3310) - chore: add more community links to README by [@​Niennienzz](https://togithub.com/Niennienzz) in [https://github.com/dragonflydb/dragonfly/pull/3308](https://togithub.com/dragonflydb/dragonfly/pull/3308) - fix(cluster): Join on specified attempt id by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3305](https://togithub.com/dragonflydb/dragonfly/pull/3305) - chore(acl): add test with requirepass and aclfile by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3312](https://togithub.com/dragonflydb/dragonfly/pull/3312) - chore: skip test_cluster_flushall_during_migration by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3316](https://togithub.com/dragonflydb/dragonfly/pull/3316) - fix (pytest): generate unique random dbfilename for tests by [@​adiholden](https://togithub.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/3317](https://togithub.com/dragonflydb/dragonfly/pull/3317) - chore: bypass decoding/encoding of the data when performing offloading by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3315](https://togithub.com/dragonflydb/dragonfly/pull/3315) - refactor: acl helpers and global tables by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3309](https://togithub.com/dragonflydb/dragonfly/pull/3309) - chore(tiering): Fixes by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3225](https://togithub.com/dragonflydb/dragonfly/pull/3225) - fix(migration): Use transactions! by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3266](https://togithub.com/dragonflydb/dragonfly/pull/3266) - fix: forbid DFLYCLUSTER commads set for emulated cluster mode by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3307](https://togithub.com/dragonflydb/dragonfly/pull/3307) - feat(namespaces): Initial support for multi-tenant by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3260](https://togithub.com/dragonflydb/dragonfly/pull/3260) - chore: improve dfly_bench stats by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3320](https://togithub.com/dragonflydb/dragonfly/pull/3320) - chore: remove replace_deleted flag from hnswlib by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3323](https://togithub.com/dragonflydb/dragonfly/pull/3323) - feat(test): Improve benchmark workflow by [@​adiholden](https://togithub.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/3330](https://togithub.com/dragonflydb/dragonfly/pull/3330) - fix: Proper shutdown sequence with Namespaces by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3333](https://togithub.com/dragonflydb/dragonfly/pull/3333) - fix(test): copy logs for failed test during TEARDOWN phase by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3331](https://togithub.com/dragonflydb/dragonfly/pull/3331) - fix(json_family): fix JSON.STRAPPEND command for JSON legacy mode by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3264](https://togithub.com/dragonflydb/dragonfly/pull/3264) - chore(tiering): add protection against overruning memory budget by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3327](https://togithub.com/dragonflydb/dragonfly/pull/3327) - chore: Add coordinated omission mode by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3332](https://togithub.com/dragonflydb/dragonfly/pull/3332) - chore: implement sequential pass without the overlapping traffic by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3335](https://togithub.com/dragonflydb/dragonfly/pull/3335) - feat: add an option to flush serialized entries on threshold limit by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3241](https://togithub.com/dragonflydb/dragonfly/pull/3241) - feat(hset_family): Add NX option to HSETEX by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3295](https://togithub.com/dragonflydb/dragonfly/pull/3295) - Fix blocking commands moved error by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3334](https://togithub.com/dragonflydb/dragonfly/pull/3334) - fix: ub in RegisterOnChange and regression tests for big values by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3336](https://togithub.com/dragonflydb/dragonfly/pull/3336) - fix: Cancel outgoing migration when retrying / closing by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3339](https://togithub.com/dragonflydb/dragonfly/pull/3339) - chore: Make KeyIndex iterable by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3326](https://togithub.com/dragonflydb/dragonfly/pull/3326) - fix: AllocationTracker::Remove return value was reversed by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3341](https://togithub.com/dragonflydb/dragonfly/pull/3341) - chore: remove redundant metrics from memory stats by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3345](https://togithub.com/dragonflydb/dragonfly/pull/3345) - fix: corruption in replication stream by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3344](https://togithub.com/dragonflydb/dragonfly/pull/3344) - chore: clean up TaskQueue since we do not need multiple fibers for it by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3348](https://togithub.com/dragonflydb/dragonfly/pull/3348) - chore: pull helio by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3350](https://togithub.com/dragonflydb/dragonfly/pull/3350) - chore: Log connection context when issuing dangerous cmds by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3352](https://togithub.com/dragonflydb/dragonfly/pull/3352) - chore: small rename and add dcheck on LocalBlockingCounter by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3356](https://togithub.com/dragonflydb/dragonfly/pull/3356) - refactor: reduce number of logs for cluster by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3357](https://togithub.com/dragonflydb/dragonfly/pull/3357) - chore: fixes to dfly_bench by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3353](https://togithub.com/dragonflydb/dragonfly/pull/3353) - chore: fix test_parser_memory_stats flakiness by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3354](https://togithub.com/dragonflydb/dragonfly/pull/3354) - chore(server): Introduce StringSetWrapper by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3347](https://togithub.com/dragonflydb/dragonfly/pull/3347) - fix: do not upload offload values on a first hit by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3360](https://togithub.com/dragonflydb/dragonfly/pull/3360) - chore(tiering): Range functions + small refactoring by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3207](https://togithub.com/dragonflydb/dragonfly/pull/3207) - fix: failure in test_cluster_fuzzymigration by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3363](https://togithub.com/dragonflydb/dragonfly/pull/3363) - fix(server): Require >=1 args to `GETEX` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3366](https://togithub.com/dragonflydb/dragonfly/pull/3366) - fix(transaction): Fix namespace access by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3364](https://togithub.com/dragonflydb/dragonfly/pull/3364) - chore: disable compression on big values by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3358](https://togithub.com/dragonflydb/dragonfly/pull/3358) - fix: protect OnJournalEntry with ConditionGuard by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3367](https://togithub.com/dragonflydb/dragonfly/pull/3367) - chore: Introduce CoolQueue by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3365](https://togithub.com/dragonflydb/dragonfly/pull/3365) - chore: small fixes around tiering by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3368](https://togithub.com/dragonflydb/dragonfly/pull/3368) - chore: add a test for HeapSize() function by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3349](https://togithub.com/dragonflydb/dragonfly/pull/3349) - chore: simplify computation of used_mem_current by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3372](https://togithub.com/dragonflydb/dragonfly/pull/3372) - chore: disable cluster_fuzzymigration by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3373](https://togithub.com/dragonflydb/dragonfly/pull/3373) - chore(replica): remove unused methods in the Replica class by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3374](https://togithub.com/dragonflydb/dragonfly/pull/3374) - fix(transaction): Properly store block cancel status by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3371](https://togithub.com/dragonflydb/dragonfly/pull/3371) - chore: Track db_slice table memory instantly by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3375](https://togithub.com/dragonflydb/dragonfly/pull/3375) - chore: add mem test for big values and default the flag by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3369](https://togithub.com/dragonflydb/dragonfly/pull/3369) - update: replication_acks_interval flag to 1000 by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3378](https://togithub.com/dragonflydb/dragonfly/pull/3378) - chore: dfly_bench - print ongoing error counts by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3382](https://togithub.com/dragonflydb/dragonfly/pull/3382) - chore: introduce a cool queue that gradually retires cool items by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3377](https://togithub.com/dragonflydb/dragonfly/pull/3377) - chore: update cached stats inside PollExecution by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3376](https://togithub.com/dragonflydb/dragonfly/pull/3376) - fix: Fix `test_take_over_seeder` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3385](https://togithub.com/dragonflydb/dragonfly/pull/3385) - chore: reenable evictions upon insertion to avoid OOM rejections by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3387](https://togithub.com/dragonflydb/dragonfly/pull/3387) - fix: remove fiber guard from non atomic section by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3381](https://togithub.com/dragonflydb/dragonfly/pull/3381) - chore: do not preempt on db_slice::RegisterOnChange by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3388](https://togithub.com/dragonflydb/dragonfly/pull/3388) - fix: disable inline transactions when db_slice has registered callbacks by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3391](https://togithub.com/dragonflydb/dragonfly/pull/3391) - fix: test_big_value_serialization_memory_limit shutdown timeout by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3390](https://togithub.com/dragonflydb/dragonfly/pull/3390) - chore: set serialization_max_chunk_size to 1 byte by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3379](https://togithub.com/dragonflydb/dragonfly/pull/3379) - chore: tiered fixes by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3393](https://togithub.com/dragonflydb/dragonfly/pull/3393) - fix(acl): remove none from acl categories by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3392](https://togithub.com/dragonflydb/dragonfly/pull/3392) - chore: tiering - make Modify work with cool storage by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3395](https://togithub.com/dragonflydb/dragonfly/pull/3395) - fix: Fix unsupported object type rejson-rl in RedisInsight by [@​BagritsevichStepan](https://togithub.com/BagritsevichStepan) in [https://github.com/dragonflydb/dragonfly/pull/3384](https://togithub.com/dragonflydb/dragonfly/pull/3384) - Revert "chore: set serialization_max_chunk_size to 1 byte ([#​3379](https://togithub.com/dragonflydb/dragonfly/issues/3379))" by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3398](https://togithub.com/dragonflydb/dragonfly/pull/3398) - chore(tiering): Move cool entry warmup to DbSlice by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3397](https://togithub.com/dragonflydb/dragonfly/pull/3397) - fix: reenable macos builds by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3399](https://togithub.com/dragonflydb/dragonfly/pull/3399) - chore: Don't print password to log on replica `AUTH` failure by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3403](https://togithub.com/dragonflydb/dragonfly/pull/3403) - chore: Support setting the value of `replica-priority` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3400](https://togithub.com/dragonflydb/dragonfly/pull/3400) - feat: stabilize non-coordinated omission mode by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3407](https://togithub.com/dragonflydb/dragonfly/pull/3407) - chore: cancel slot migrations on shutdown by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3405](https://togithub.com/dragonflydb/dragonfly/pull/3405) - chore: add db_slice lock to protect segments from preemptions by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3406](https://togithub.com/dragonflydb/dragonfly/pull/3406) - chore: increase timeout of regression tests by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3412](https://togithub.com/dragonflydb/dragonfly/pull/3412) - fix: crash with NS in multi/exec [#​3410](https://togithub.com/dragonflydb/dragonfly/issues/3410) by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3415](https://togithub.com/dragonflydb/dragonfly/pull/3415) - fix: json.merge exception crash by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3409](https://togithub.com/dragonflydb/dragonfly/pull/3409) - fix(connection): Count memchached pipelined commands by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3413](https://togithub.com/dragonflydb/dragonfly/pull/3413) - chore: remove verbose printing of tests by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3420](https://togithub.com/dragonflydb/dragonfly/pull/3420) - chore: Tiered fixes by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3401](https://togithub.com/dragonflydb/dragonfly/pull/3401) - feat: Support non-root paths for json.merge by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3419](https://togithub.com/dragonflydb/dragonfly/pull/3419) - chore: skip cluster tests if redis-server wasn't found by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3416](https://togithub.com/dragonflydb/dragonfly/pull/3416) - chore: expose metric that shows how many task submitters are blocked by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3427](https://togithub.com/dragonflydb/dragonfly/pull/3427) - chore: optimize SendStringArrInternal even more by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3425](https://togithub.com/dragonflydb/dragonfly/pull/3425) - fix(server): Implement SCRIPT GC command by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3431](https://togithub.com/dragonflydb/dragonfly/pull/3431) - chore: retire TEST_EnableHeartBeat by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3435](https://togithub.com/dragonflydb/dragonfly/pull/3435) - feat(server): Support `replica-announce-ip`/`port` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3421](https://togithub.com/dragonflydb/dragonfly/pull/3421) - test(cluster): Migration replication test by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3417](https://togithub.com/dragonflydb/dragonfly/pull/3417) - chore: improve replication locks by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3436](https://togithub.com/dragonflydb/dragonfly/pull/3436) - chore: reorganize EngineShard::Heartbeat by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3437](https://togithub.com/dragonflydb/dragonfly/pull/3437) - chore: fix memcached pipeline test by [@​dranikpg](https://togithub.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/3438](https://togithub.com/dragonflydb/dragonfly/pull/3438) - chore: simplify master replication cancelation interface by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3439](https://togithub.com/dragonflydb/dragonfly/pull/3439) - chore: reset serialization_max_chunk_size to 0 by [@​kostasrim](https://togithub.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3432](https://togithub.com/dragonflydb/dragonfly/pull/3432) - feat: DEBUG REPLICA PAUSE now pauses fullsync by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3441](https://togithub.com/dragonflydb/dragonfly/pull/3441) - test: fix test_disconnect_replica by [@​BorysTheDev](https://togithub.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/3442](https://togithub.com/dragonflydb/dragonfly/pull/3442) - fix: cluster_mgr.py to use `CLUSTER MYID` by [@​chakaz](https://togithub.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/3444](https://togithub.com/dragonflydb/dragonfly/pull/3444) - chore: disable serialization_max_chunk_size in regtests by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3445](https://togithub.com/dragonflydb/dragonfly/pull/3445) - fix: properly seriailize meta buffer in SendStringArrInternal by [@​romange](https://togithub.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3455](https://togithub.com/dragonflydb/dragonfly/pull/3455) **Full Changelog**: dragonflydb/dragonfly@v1.20.0...v1.21.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://togithub.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yMS4wIiwidXBkYXRlZEluVmVyIjoiMzguMzcuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvY29udGFpbmVyIiwidHlwZS9taW5vciJdfQ==-->
The Bug
Before this fix, source nodes would send
FIN
entries to target nodes (in all thread flows), and would then send aDFLYMIGRATE ACK
command to verify that all flows received theFIN
in time.If they didn't, the source node would retry this logic in a loop, until successful.
The problem is that, in some rear cases, one or more of the flows would indeed be in a
FIN
state, but of a previousFIN
that is already outdated. If that's indeed the case, all data between thatFIN
and the nextFIN
(s) will be lost.The Fix
We already have an attempt id that we send in the
DFLYMIGRATE ACK
command, and return it in the response. This fix utilizes the same attempt id to be sent to all flows, and then when joined, we make sure we join on the correct (latest) attempt id.Unfortunately, we can't use
FIN
opcode now, because the protocol does not send any additional metadata for this opcode. I chose to useLSN
instead because it has exactly the fields that we need, and one could possibly think of Log Sequence Number as an attempt id, but I could change that if it's unclear or too hacky.Testing
To reproduce this, one needs to lower
--slot_migration_connection_timeout_ms
significantly, say to 500ms. This would fail, on my laptop, every ~2 runs.With this fix, it runs hundreds of times and never reproduces.
Fixes #3257