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

feat: add an option to flush serialized entries on threshold limit #3241

Merged
merged 10 commits into from
Jul 18, 2024

Conversation

kostasrim
Copy link
Contributor

@kostasrim kostasrim commented Jun 28, 2024

Resolves #3223

  • serialize big slots in chunks
  • allow preemption on large slots
  • disable big entries serialization for RDB files
  • add test

There is also a separate issue with compression. Previously, we only called FlushToSink in SaveEpilogue and before SaveBody (to flush previous entries). However, with the current changes, we call FlushToSink when we serialize X number of bytes. This doesn't work with the protocol implemented in rdb_load because we now split let's say a list in multiple chunks and LoadKeyValue on RdbLoader expects to read a string (for the values) but it gets a compressed blob and fails with unrecognized rdb type. I created this separate issue for that: #3324

@kostasrim kostasrim self-assigned this Jun 28, 2024
@kostasrim kostasrim changed the base branch from main to yield_on_db_change June 28, 2024 17:18
@romange
Copy link
Collaborator

romange commented Jul 7, 2024

what is the related issue for this PR?

@kostasrim
Copy link
Contributor Author

kostasrim commented Jul 8, 2024

what is the related issue for this PR?

I will edit the description soon, it's still in draft and incomplete. Plz don't review

Base automatically changed from yield_on_db_change to main July 11, 2024 13:55
@kostasrim kostasrim marked this pull request as ready for review July 16, 2024 14:59
@kostasrim kostasrim requested review from chakaz and adiholden July 16, 2024 14:59
@@ -430,6 +432,7 @@ error_code RdbSerializer::SaveListObject(const PrimeValue& pv) {
RETURN_ON_ERR(SaveLzfBlob(Bytes{reinterpret_cast<uint8_t*>(data), compress_len}, node->sz));
} else {
RETURN_ON_ERR(SaveString(node->entry, node->sz));
MaybeApplyFlushFunc();
Copy link
Contributor Author

@kostasrim kostasrim Jul 16, 2024

Choose a reason for hiding this comment

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

This is not complete but enough to reduce the memory footprint of the most use cases. We only serialize our own data structures (Which are the default) but not the Valkey one. Also json serializes to a string blob and it's rather difficult to make it work (unless we provide our own wrapper or something).

@kostasrim kostasrim changed the title feat: add an option to flush serialized entries in SaveEntryChunks feat: add an option to flush serialized entries on threshold limit Jul 16, 2024
class FetchedItemsRestorer {
public:
using RestoreType = absl::flat_hash_set<CompactObjectView>;
explicit FetchedItemsRestorer(RestoreType* dst) : dst_to_restore_(dst) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Is it safe to clear fetched_items_ while we yield? It looks like other parts of the code may use it, like our Find APIs

Copy link
Contributor Author

@kostasrim kostasrim Jul 17, 2024

Choose a reason for hiding this comment

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

fetched_items are cleraed when OnCbFinish gets called which is at the end of a transaction (in fact I think we have a small bug there, I will ping internally). When the fiber preempts we should cache this and when it resumes we need to bring it back. The code above provides this guarantee.

Also if Find is called it will be a part of another transaction which will either conclude and call OnCbFinish or will preempt, cache this value and bring it back when the fiber resumes preserving the correctness

Comment on lines 219 to 220
// for the dump command - thus it is public function
// Also this function might preempt if flush_fun_ is used
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
// for the dump command - thus it is public function
// Also this function might preempt if flush_fun_ is used
// for the dump command - thus it is public function.
// This function might preempt if flush_fun_ is used.

@@ -238,8 +241,12 @@ class RdbSerializer : public SerializerBase {
std::error_code SaveStreamPEL(rax* pel, bool nacks);
std::error_code SaveStreamConsumers(streamCG* cg);

// Might preempt
bool MaybeApplyFlushFunc();
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
bool MaybeApplyFlushFunc();
bool FlushIfNeeded();

@@ -20,6 +21,8 @@
#include "server/tiered_storage.h"
#include "util/fibers/synchronization.h"

ABSL_FLAG(size_t, flush_big_entries_threshold, 0, "Total bytes before flushing big entries");
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
ABSL_FLAG(size_t, flush_big_entries_threshold, 0, "Total bytes before flushing big entries");
ABSL_FLAG(size_t, serialization_max_chunk_size, 10'000'000, "Total bytes before flushing big entries");

Copy link
Collaborator

Choose a reason for hiding this comment

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

I'd rename it to be clearer, but also provide a default of 10mb. Any reason to disable this feature be default?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Cause if we got any issues that we did not forsee it will make DF unstable by default. Furthermore, what we do here is a trade off between memory, latency and throughput. By serializing smaller chunks we reduce the memory footprint and provide a little better latency per packet (since we send them at smaller intervals). However, we reduce throughput because now we yield and we go back and forth. I would not like to have this defaulted. We could if we think it's best to have this on, add it on the release after this release

Copy link
Collaborator

Choose a reason for hiding this comment

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

Cause if we got any issues that we did not forsee it will make DF unstable by default

If it's disabled, we won't know if it's unstable. We should build it the best that we can, and if there are bugs, we'll fix them :)

Furthermore, what we do here is a trade off between memory, latency and throughput

One of the advantages of this feature is that actually Dragonfly will become more responsive to requests coming in while it is serializing. Today, when we serialize a huge entry, the entire thread is blocked, so for the duration of copying it (think 100mb, 1gb, even 10gb) we won't advance in the tx queue, won't even reply to pings coming from connections on this thread.
Latency of serialization is way less critical compared to this.

@@ -67,7 +67,7 @@ class SliceSnapshot {

// Initialize snapshot, start bucket iteration fiber, register listeners.
// In journal streaming mode it needs to be stopped by either Stop or Cancel.
void Start(bool stream_journal, const Cancellation* cll);
void Start(bool stream_journal, const Cancellation* cll, bool allow_flush_fun = false);
Copy link
Collaborator

Choose a reason for hiding this comment

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

I'm not a fan of boolean arguments to functions. They tend to pile up and also they are unreadable at the call site.
I'd add an enum for this (enum class SnapshotFlush { kAllow, kDisallow };).
However, I hope we can simply enable flushing in all modes, and make the RDB reader aware of when chunks end.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

+1 for adding an enum but as I explained above I am not a big fan of defaulting this

Copy link
Collaborator

Choose a reason for hiding this comment

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

Why is defaulting related to bool vs enum?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I meant for defaulting the flag. Sorry my bad here :)

if (flush_threshold != 0 && allow_flush_fun) {
flush_fun = [this, flush_threshold](size_t bytes_serialized) {
if (bytes_serialized > flush_threshold) {
auto serialized = Serialize();
Copy link
Collaborator

Choose a reason for hiding this comment

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

Why not call PushSerializedToChannel() here?
BTW this is another place where if we allowed to flush also in RDB mode, it will make our code simpler (see line 310 below, we can remove delayed_entries_ and its usage)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I think we also found a bug. We can't send delayed entries because it could be that we are in a middle of a chunk (and if we serialize those delayed entries we just interleaved the channel breaking our invariants). The same thing applies for PushSerializedToChannel (and I patched this accordingly now)

Copy link
Collaborator

Choose a reason for hiding this comment

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

Here's a proposal:
Add another bit to DbRecord, say bool record_in_progress;.
Set this to false normally, but when you today call flush function, set it to true.
Now we can apply the following changes, which in my opinion would simplify the code and remove edge cases:

  1. We can always flush, we don't need the special case of RDB and to pass whether or not it is allowed
  2. Only the RDB consumer of the channel will care about this - it will read from the same stream as long as this bit is set, and when it will be unset it will move to the next stream

wdyt?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Let me think about this one I will ping

Copy link
Contributor Author

@kostasrim kostasrim Jul 17, 2024

Choose a reason for hiding this comment

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

I think this might be problematic because we have multiple producers on single consumer channel. So all of these DbRecords that are being serialized by separate shards might end up being interleaved (because all of these shards are not synchronized when pushing to the channel, so it could be the case that k1 from shard 1 sends a DbRecord that contains a half chunk only for shard 2 to send another DbRecord that contains another half chunk of k2) breaking the ordering requirements.

And saying this I think this is also problematic for any flow where we have multiple producers over a single channel which I think applies for df replication when the replica does not have the same amount of shard threads as the master. WDYT?

@kostasrim kostasrim enabled auto-merge (squash) July 18, 2024 09:57
@kostasrim kostasrim disabled auto-merge July 18, 2024 09:57
@kostasrim kostasrim enabled auto-merge (squash) July 18, 2024 10:02
@kostasrim kostasrim merged commit bfa5df5 into main Jul 18, 2024
10 checks passed
@kostasrim kostasrim deleted the chunks branch July 18, 2024 10:15
kireque referenced this pull request in kireque/home-ops Aug 8, 2024
…nfly ( v1.20.1 → v1.21.0 ) (#864)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[docker.dragonflydb.io/dragonflydb/dragonfly](https://github.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://github.com/dragonflydb/dragonfly/releases/tag/v1.21.0)

[Compare
Source](https://github.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
[@&#8203;3260](https://github.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
[@&#8203;adiholden](https://github.com/adiholden) in
[https://github.com/dragonflydb/dragonfly/pull/3289](https://github.com/dragonflydb/dragonfly/pull/3289)
- chore: optimize zpopminmax operations by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3291](https://github.com/dragonflydb/dragonfly/pull/3291)
- fix(json_family): Fix error in JsonFamilyTest.MGet by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3285](https://github.com/dragonflydb/dragonfly/pull/3285)
- fix: define macro WITH_AWS in cmake when flag is ON by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3296](https://github.com/dragonflydb/dragonfly/pull/3296)
- chore: Add 'memory arena show' command by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3298](https://github.com/dragonflydb/dragonfly/pull/3298)
- fix: missing logs on pytest failures
[#&#8203;3255](https://github.com/dragonflydb/dragonfly/issues/3255)
by [@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3272](https://github.com/dragonflydb/dragonfly/pull/3272)
- chore: refactor compact_object and introduce materialize method by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3300](https://github.com/dragonflydb/dragonfly/pull/3300)
- fix(acl): loading interleaved plain and hashed passwords by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3297](https://github.com/dragonflydb/dragonfly/pull/3297)
- chore: Add CompactObj Raw methods by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3303](https://github.com/dragonflydb/dragonfly/pull/3303)
- chore: On invalid TTL, print the TTL first by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3306](https://github.com/dragonflydb/dragonfly/pull/3306)
- chore: moving functions + renaming in tiered storage by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3304](https://github.com/dragonflydb/dragonfly/pull/3304)
- fix(tests): Add missing awaits by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3273](https://github.com/dragonflydb/dragonfly/pull/3273)
- chore: refactoring around tiered storage by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3299](https://github.com/dragonflydb/dragonfly/pull/3299)
- feat: yield when serialization is in progress by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3220](https://github.com/dragonflydb/dragonfly/pull/3220)
- refactor: Use `DbContext`, `OpArgs` and `Transaction` to access
`DbSlice` by [@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3311](https://github.com/dragonflydb/dragonfly/pull/3311)
- chore: Separate tiered serialization format from object values by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3310](https://github.com/dragonflydb/dragonfly/pull/3310)
- chore: add more community links to README by
[@&#8203;Niennienzz](https://github.com/Niennienzz) in
[https://github.com/dragonflydb/dragonfly/pull/3308](https://github.com/dragonflydb/dragonfly/pull/3308)
- fix(cluster): Join on specified attempt id by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3305](https://github.com/dragonflydb/dragonfly/pull/3305)
- chore(acl): add test with requirepass and aclfile by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3312](https://github.com/dragonflydb/dragonfly/pull/3312)
- chore: skip test_cluster_flushall_during_migration by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3316](https://github.com/dragonflydb/dragonfly/pull/3316)
- fix (pytest): generate unique random dbfilename for tests by
[@&#8203;adiholden](https://github.com/adiholden) in
[https://github.com/dragonflydb/dragonfly/pull/3317](https://github.com/dragonflydb/dragonfly/pull/3317)
- chore: bypass decoding/encoding of the data when performing offloading
by [@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3315](https://github.com/dragonflydb/dragonfly/pull/3315)
- refactor: acl helpers and global tables by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3309](https://github.com/dragonflydb/dragonfly/pull/3309)
- chore(tiering): Fixes by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3225](https://github.com/dragonflydb/dragonfly/pull/3225)
- fix(migration): Use transactions! by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3266](https://github.com/dragonflydb/dragonfly/pull/3266)
- fix: forbid DFLYCLUSTER commads set for emulated cluster mode by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3307](https://github.com/dragonflydb/dragonfly/pull/3307)
- feat(namespaces): Initial support for multi-tenant by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3260](https://github.com/dragonflydb/dragonfly/pull/3260)
- chore: improve dfly_bench stats by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3320](https://github.com/dragonflydb/dragonfly/pull/3320)
- chore: remove replace_deleted flag from hnswlib by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3323](https://github.com/dragonflydb/dragonfly/pull/3323)
- feat(test): Improve benchmark workflow by
[@&#8203;adiholden](https://github.com/adiholden) in
[https://github.com/dragonflydb/dragonfly/pull/3330](https://github.com/dragonflydb/dragonfly/pull/3330)
- fix: Proper shutdown sequence with Namespaces by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3333](https://github.com/dragonflydb/dragonfly/pull/3333)
- fix(test): copy logs for failed test during TEARDOWN phase by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3331](https://github.com/dragonflydb/dragonfly/pull/3331)
- fix(json_family): fix JSON.STRAPPEND command for JSON legacy mode by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3264](https://github.com/dragonflydb/dragonfly/pull/3264)
- chore(tiering): add protection against overruning memory budget by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3327](https://github.com/dragonflydb/dragonfly/pull/3327)
- chore: Add coordinated omission mode by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3332](https://github.com/dragonflydb/dragonfly/pull/3332)
- chore: implement sequential pass without the overlapping traffic by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3335](https://github.com/dragonflydb/dragonfly/pull/3335)
- feat: add an option to flush serialized entries on threshold limit by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3241](https://github.com/dragonflydb/dragonfly/pull/3241)
- feat(hset_family): Add NX option to HSETEX by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3295](https://github.com/dragonflydb/dragonfly/pull/3295)
- Fix blocking commands moved error by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3334](https://github.com/dragonflydb/dragonfly/pull/3334)
- fix: ub in RegisterOnChange and regression tests for big values by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3336](https://github.com/dragonflydb/dragonfly/pull/3336)
- fix: Cancel outgoing migration when retrying / closing by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3339](https://github.com/dragonflydb/dragonfly/pull/3339)
- chore: Make KeyIndex iterable by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3326](https://github.com/dragonflydb/dragonfly/pull/3326)
- fix: AllocationTracker::Remove return value was reversed by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3341](https://github.com/dragonflydb/dragonfly/pull/3341)
- chore: remove redundant metrics from memory stats by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3345](https://github.com/dragonflydb/dragonfly/pull/3345)
- fix: corruption in replication stream by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3344](https://github.com/dragonflydb/dragonfly/pull/3344)
- chore: clean up TaskQueue since we do not need multiple fibers for it
by [@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3348](https://github.com/dragonflydb/dragonfly/pull/3348)
- chore: pull helio by [@&#8203;romange](https://github.com/romange)
in
[https://github.com/dragonflydb/dragonfly/pull/3350](https://github.com/dragonflydb/dragonfly/pull/3350)
- chore: Log connection context when issuing dangerous cmds by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3352](https://github.com/dragonflydb/dragonfly/pull/3352)
- chore: small rename and add dcheck on LocalBlockingCounter by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3356](https://github.com/dragonflydb/dragonfly/pull/3356)
- refactor: reduce number of logs for cluster by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3357](https://github.com/dragonflydb/dragonfly/pull/3357)
- chore: fixes to dfly_bench by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3353](https://github.com/dragonflydb/dragonfly/pull/3353)
- chore: fix test_parser_memory_stats flakiness by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3354](https://github.com/dragonflydb/dragonfly/pull/3354)
- chore(server): Introduce StringSetWrapper by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3347](https://github.com/dragonflydb/dragonfly/pull/3347)
- fix: do not upload offload values on a first hit by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3360](https://github.com/dragonflydb/dragonfly/pull/3360)
- chore(tiering): Range functions + small refactoring by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3207](https://github.com/dragonflydb/dragonfly/pull/3207)
- fix: failure in test_cluster_fuzzymigration by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3363](https://github.com/dragonflydb/dragonfly/pull/3363)
- fix(server): Require >=1 args to `GETEX` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3366](https://github.com/dragonflydb/dragonfly/pull/3366)
- fix(transaction): Fix namespace access by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3364](https://github.com/dragonflydb/dragonfly/pull/3364)
- chore: disable compression on big values by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3358](https://github.com/dragonflydb/dragonfly/pull/3358)
- fix: protect OnJournalEntry with ConditionGuard by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3367](https://github.com/dragonflydb/dragonfly/pull/3367)
- chore: Introduce CoolQueue by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3365](https://github.com/dragonflydb/dragonfly/pull/3365)
- chore: small fixes around tiering by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3368](https://github.com/dragonflydb/dragonfly/pull/3368)
- chore: add a test for HeapSize() function by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3349](https://github.com/dragonflydb/dragonfly/pull/3349)
- chore: simplify computation of used_mem_current by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3372](https://github.com/dragonflydb/dragonfly/pull/3372)
- chore: disable cluster_fuzzymigration by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3373](https://github.com/dragonflydb/dragonfly/pull/3373)
- chore(replica): remove unused methods in the Replica class by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3374](https://github.com/dragonflydb/dragonfly/pull/3374)
- fix(transaction): Properly store block cancel status by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3371](https://github.com/dragonflydb/dragonfly/pull/3371)
- chore: Track db_slice table memory instantly by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3375](https://github.com/dragonflydb/dragonfly/pull/3375)
- chore: add mem test for big values and default the flag by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3369](https://github.com/dragonflydb/dragonfly/pull/3369)
- update: replication_acks_interval flag to 1000 by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3378](https://github.com/dragonflydb/dragonfly/pull/3378)
- chore: dfly_bench - print ongoing error counts by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3382](https://github.com/dragonflydb/dragonfly/pull/3382)
- chore: introduce a cool queue that gradually retires cool items by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3377](https://github.com/dragonflydb/dragonfly/pull/3377)
- chore: update cached stats inside PollExecution by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3376](https://github.com/dragonflydb/dragonfly/pull/3376)
- fix: Fix `test_take_over_seeder` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3385](https://github.com/dragonflydb/dragonfly/pull/3385)
- chore: reenable evictions upon insertion to avoid OOM rejections by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3387](https://github.com/dragonflydb/dragonfly/pull/3387)
- fix: remove fiber guard from non atomic section by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3381](https://github.com/dragonflydb/dragonfly/pull/3381)
- chore: do not preempt on db_slice::RegisterOnChange by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3388](https://github.com/dragonflydb/dragonfly/pull/3388)
- fix: disable inline transactions when db_slice has registered
callbacks by [@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3391](https://github.com/dragonflydb/dragonfly/pull/3391)
- fix: test_big_value_serialization_memory_limit shutdown timeout by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3390](https://github.com/dragonflydb/dragonfly/pull/3390)
- chore: set serialization_max_chunk_size to 1 byte by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3379](https://github.com/dragonflydb/dragonfly/pull/3379)
- chore: tiered fixes by [@&#8203;romange](https://github.com/romange)
in
[https://github.com/dragonflydb/dragonfly/pull/3393](https://github.com/dragonflydb/dragonfly/pull/3393)
- fix(acl): remove none from acl categories by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3392](https://github.com/dragonflydb/dragonfly/pull/3392)
- chore: tiering - make Modify work with cool storage by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3395](https://github.com/dragonflydb/dragonfly/pull/3395)
- fix: Fix unsupported object type rejson-rl in RedisInsight by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3384](https://github.com/dragonflydb/dragonfly/pull/3384)
- Revert "chore: set serialization_max_chunk_size to 1 byte
([#&#8203;3379](https://github.com/dragonflydb/dragonfly/issues/3379))"
by [@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3398](https://github.com/dragonflydb/dragonfly/pull/3398)
- chore(tiering): Move cool entry warmup to DbSlice by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3397](https://github.com/dragonflydb/dragonfly/pull/3397)
- fix: reenable macos builds by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3399](https://github.com/dragonflydb/dragonfly/pull/3399)
- chore: Don't print password to log on replica `AUTH` failure by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3403](https://github.com/dragonflydb/dragonfly/pull/3403)
- chore: Support setting the value of `replica-priority` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3400](https://github.com/dragonflydb/dragonfly/pull/3400)
- feat: stabilize non-coordinated omission mode by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3407](https://github.com/dragonflydb/dragonfly/pull/3407)
- chore: cancel slot migrations on shutdown by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3405](https://github.com/dragonflydb/dragonfly/pull/3405)
- chore: add db_slice lock to protect segments from preemptions by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3406](https://github.com/dragonflydb/dragonfly/pull/3406)
- chore: increase timeout of regression tests by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3412](https://github.com/dragonflydb/dragonfly/pull/3412)
- fix: crash with NS in multi/exec
[#&#8203;3410](https://github.com/dragonflydb/dragonfly/issues/3410)
by [@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3415](https://github.com/dragonflydb/dragonfly/pull/3415)
- fix: json.merge exception crash by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3409](https://github.com/dragonflydb/dragonfly/pull/3409)
- fix(connection): Count memchached pipelined commands by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3413](https://github.com/dragonflydb/dragonfly/pull/3413)
- chore: remove verbose printing of tests by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3420](https://github.com/dragonflydb/dragonfly/pull/3420)
- chore: Tiered fixes by [@&#8203;romange](https://github.com/romange)
in
[https://github.com/dragonflydb/dragonfly/pull/3401](https://github.com/dragonflydb/dragonfly/pull/3401)
- feat: Support non-root paths for json.merge by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3419](https://github.com/dragonflydb/dragonfly/pull/3419)
- chore: skip cluster tests if redis-server wasn't found by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3416](https://github.com/dragonflydb/dragonfly/pull/3416)
- chore: expose metric that shows how many task submitters are blocked
by [@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3427](https://github.com/dragonflydb/dragonfly/pull/3427)
- chore: optimize SendStringArrInternal even more by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3425](https://github.com/dragonflydb/dragonfly/pull/3425)
- fix(server): Implement SCRIPT GC command by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3431](https://github.com/dragonflydb/dragonfly/pull/3431)
- chore: retire TEST_EnableHeartBeat by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3435](https://github.com/dragonflydb/dragonfly/pull/3435)
- feat(server): Support `replica-announce-ip`/`port` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3421](https://github.com/dragonflydb/dragonfly/pull/3421)
- test(cluster): Migration replication test by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3417](https://github.com/dragonflydb/dragonfly/pull/3417)
- chore: improve replication locks by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3436](https://github.com/dragonflydb/dragonfly/pull/3436)
- chore: reorganize EngineShard::Heartbeat by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3437](https://github.com/dragonflydb/dragonfly/pull/3437)
- chore: fix memcached pipeline test by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3438](https://github.com/dragonflydb/dragonfly/pull/3438)
- chore: simplify master replication cancelation interface by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3439](https://github.com/dragonflydb/dragonfly/pull/3439)
- chore: reset serialization_max_chunk_size to 0 by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3432](https://github.com/dragonflydb/dragonfly/pull/3432)
- feat: DEBUG REPLICA PAUSE now pauses fullsync by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3441](https://github.com/dragonflydb/dragonfly/pull/3441)
- test: fix test_disconnect_replica by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3442](https://github.com/dragonflydb/dragonfly/pull/3442)
- fix: cluster_mgr.py to use `CLUSTER MYID` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3444](https://github.com/dragonflydb/dragonfly/pull/3444)
- chore: disable serialization_max_chunk_size in regtests by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3445](https://github.com/dragonflydb/dragonfly/pull/3445)
- fix: properly seriailize meta buffer in SendStringArrInternal by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3455](https://github.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://github.com/renovatebot/renovate).

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

Co-authored-by: kireque-bot[bot] <143391978+kireque-bot[bot]@users.noreply.github.com>
lumiere-bot bot referenced this pull request in coolguy1771/home-ops Aug 8, 2024
…21.0 ) (#5180)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[ghcr.io/dragonflydb/dragonfly](https://github.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://github.com/dragonflydb/dragonfly/releases/tag/v1.21.0)

[Compare
Source](https://github.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
[@&#8203;3260](https://github.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
[@&#8203;adiholden](https://github.com/adiholden) in
[https://github.com/dragonflydb/dragonfly/pull/3289](https://github.com/dragonflydb/dragonfly/pull/3289)
- chore: optimize zpopminmax operations by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3291](https://github.com/dragonflydb/dragonfly/pull/3291)
- fix(json_family): Fix error in JsonFamilyTest.MGet by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3285](https://github.com/dragonflydb/dragonfly/pull/3285)
- fix: define macro WITH_AWS in cmake when flag is ON by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3296](https://github.com/dragonflydb/dragonfly/pull/3296)
- chore: Add 'memory arena show' command by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3298](https://github.com/dragonflydb/dragonfly/pull/3298)
- fix: missing logs on pytest failures
[#&#8203;3255](https://github.com/dragonflydb/dragonfly/issues/3255)
by [@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3272](https://github.com/dragonflydb/dragonfly/pull/3272)
- chore: refactor compact_object and introduce materialize method by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3300](https://github.com/dragonflydb/dragonfly/pull/3300)
- fix(acl): loading interleaved plain and hashed passwords by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3297](https://github.com/dragonflydb/dragonfly/pull/3297)
- chore: Add CompactObj Raw methods by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3303](https://github.com/dragonflydb/dragonfly/pull/3303)
- chore: On invalid TTL, print the TTL first by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3306](https://github.com/dragonflydb/dragonfly/pull/3306)
- chore: moving functions + renaming in tiered storage by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3304](https://github.com/dragonflydb/dragonfly/pull/3304)
- fix(tests): Add missing awaits by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3273](https://github.com/dragonflydb/dragonfly/pull/3273)
- chore: refactoring around tiered storage by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3299](https://github.com/dragonflydb/dragonfly/pull/3299)
- feat: yield when serialization is in progress by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3220](https://github.com/dragonflydb/dragonfly/pull/3220)
- refactor: Use `DbContext`, `OpArgs` and `Transaction` to access
`DbSlice` by [@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3311](https://github.com/dragonflydb/dragonfly/pull/3311)
- chore: Separate tiered serialization format from object values by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3310](https://github.com/dragonflydb/dragonfly/pull/3310)
- chore: add more community links to README by
[@&#8203;Niennienzz](https://github.com/Niennienzz) in
[https://github.com/dragonflydb/dragonfly/pull/3308](https://github.com/dragonflydb/dragonfly/pull/3308)
- fix(cluster): Join on specified attempt id by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3305](https://github.com/dragonflydb/dragonfly/pull/3305)
- chore(acl): add test with requirepass and aclfile by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3312](https://github.com/dragonflydb/dragonfly/pull/3312)
- chore: skip test_cluster_flushall_during_migration by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3316](https://github.com/dragonflydb/dragonfly/pull/3316)
- fix (pytest): generate unique random dbfilename for tests by
[@&#8203;adiholden](https://github.com/adiholden) in
[https://github.com/dragonflydb/dragonfly/pull/3317](https://github.com/dragonflydb/dragonfly/pull/3317)
- chore: bypass decoding/encoding of the data when performing offloading
by [@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3315](https://github.com/dragonflydb/dragonfly/pull/3315)
- refactor: acl helpers and global tables by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3309](https://github.com/dragonflydb/dragonfly/pull/3309)
- chore(tiering): Fixes by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3225](https://github.com/dragonflydb/dragonfly/pull/3225)
- fix(migration): Use transactions! by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3266](https://github.com/dragonflydb/dragonfly/pull/3266)
- fix: forbid DFLYCLUSTER commads set for emulated cluster mode by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3307](https://github.com/dragonflydb/dragonfly/pull/3307)
- feat(namespaces): Initial support for multi-tenant by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3260](https://github.com/dragonflydb/dragonfly/pull/3260)
- chore: improve dfly_bench stats by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3320](https://github.com/dragonflydb/dragonfly/pull/3320)
- chore: remove replace_deleted flag from hnswlib by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3323](https://github.com/dragonflydb/dragonfly/pull/3323)
- feat(test): Improve benchmark workflow by
[@&#8203;adiholden](https://github.com/adiholden) in
[https://github.com/dragonflydb/dragonfly/pull/3330](https://github.com/dragonflydb/dragonfly/pull/3330)
- fix: Proper shutdown sequence with Namespaces by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3333](https://github.com/dragonflydb/dragonfly/pull/3333)
- fix(test): copy logs for failed test during TEARDOWN phase by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3331](https://github.com/dragonflydb/dragonfly/pull/3331)
- fix(json_family): fix JSON.STRAPPEND command for JSON legacy mode by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3264](https://github.com/dragonflydb/dragonfly/pull/3264)
- chore(tiering): add protection against overruning memory budget by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3327](https://github.com/dragonflydb/dragonfly/pull/3327)
- chore: Add coordinated omission mode by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3332](https://github.com/dragonflydb/dragonfly/pull/3332)
- chore: implement sequential pass without the overlapping traffic by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3335](https://github.com/dragonflydb/dragonfly/pull/3335)
- feat: add an option to flush serialized entries on threshold limit by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3241](https://github.com/dragonflydb/dragonfly/pull/3241)
- feat(hset_family): Add NX option to HSETEX by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3295](https://github.com/dragonflydb/dragonfly/pull/3295)
- Fix blocking commands moved error by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3334](https://github.com/dragonflydb/dragonfly/pull/3334)
- fix: ub in RegisterOnChange and regression tests for big values by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3336](https://github.com/dragonflydb/dragonfly/pull/3336)
- fix: Cancel outgoing migration when retrying / closing by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3339](https://github.com/dragonflydb/dragonfly/pull/3339)
- chore: Make KeyIndex iterable by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3326](https://github.com/dragonflydb/dragonfly/pull/3326)
- fix: AllocationTracker::Remove return value was reversed by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3341](https://github.com/dragonflydb/dragonfly/pull/3341)
- chore: remove redundant metrics from memory stats by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3345](https://github.com/dragonflydb/dragonfly/pull/3345)
- fix: corruption in replication stream by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3344](https://github.com/dragonflydb/dragonfly/pull/3344)
- chore: clean up TaskQueue since we do not need multiple fibers for it
by [@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3348](https://github.com/dragonflydb/dragonfly/pull/3348)
- chore: pull helio by [@&#8203;romange](https://github.com/romange)
in
[https://github.com/dragonflydb/dragonfly/pull/3350](https://github.com/dragonflydb/dragonfly/pull/3350)
- chore: Log connection context when issuing dangerous cmds by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3352](https://github.com/dragonflydb/dragonfly/pull/3352)
- chore: small rename and add dcheck on LocalBlockingCounter by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3356](https://github.com/dragonflydb/dragonfly/pull/3356)
- refactor: reduce number of logs for cluster by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3357](https://github.com/dragonflydb/dragonfly/pull/3357)
- chore: fixes to dfly_bench by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3353](https://github.com/dragonflydb/dragonfly/pull/3353)
- chore: fix test_parser_memory_stats flakiness by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3354](https://github.com/dragonflydb/dragonfly/pull/3354)
- chore(server): Introduce StringSetWrapper by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3347](https://github.com/dragonflydb/dragonfly/pull/3347)
- fix: do not upload offload values on a first hit by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3360](https://github.com/dragonflydb/dragonfly/pull/3360)
- chore(tiering): Range functions + small refactoring by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3207](https://github.com/dragonflydb/dragonfly/pull/3207)
- fix: failure in test_cluster_fuzzymigration by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3363](https://github.com/dragonflydb/dragonfly/pull/3363)
- fix(server): Require >=1 args to `GETEX` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3366](https://github.com/dragonflydb/dragonfly/pull/3366)
- fix(transaction): Fix namespace access by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3364](https://github.com/dragonflydb/dragonfly/pull/3364)
- chore: disable compression on big values by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3358](https://github.com/dragonflydb/dragonfly/pull/3358)
- fix: protect OnJournalEntry with ConditionGuard by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3367](https://github.com/dragonflydb/dragonfly/pull/3367)
- chore: Introduce CoolQueue by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3365](https://github.com/dragonflydb/dragonfly/pull/3365)
- chore: small fixes around tiering by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3368](https://github.com/dragonflydb/dragonfly/pull/3368)
- chore: add a test for HeapSize() function by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3349](https://github.com/dragonflydb/dragonfly/pull/3349)
- chore: simplify computation of used_mem_current by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3372](https://github.com/dragonflydb/dragonfly/pull/3372)
- chore: disable cluster_fuzzymigration by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3373](https://github.com/dragonflydb/dragonfly/pull/3373)
- chore(replica): remove unused methods in the Replica class by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3374](https://github.com/dragonflydb/dragonfly/pull/3374)
- fix(transaction): Properly store block cancel status by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3371](https://github.com/dragonflydb/dragonfly/pull/3371)
- chore: Track db_slice table memory instantly by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3375](https://github.com/dragonflydb/dragonfly/pull/3375)
- chore: add mem test for big values and default the flag by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3369](https://github.com/dragonflydb/dragonfly/pull/3369)
- update: replication_acks_interval flag to 1000 by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3378](https://github.com/dragonflydb/dragonfly/pull/3378)
- chore: dfly_bench - print ongoing error counts by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3382](https://github.com/dragonflydb/dragonfly/pull/3382)
- chore: introduce a cool queue that gradually retires cool items by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3377](https://github.com/dragonflydb/dragonfly/pull/3377)
- chore: update cached stats inside PollExecution by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3376](https://github.com/dragonflydb/dragonfly/pull/3376)
- fix: Fix `test_take_over_seeder` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3385](https://github.com/dragonflydb/dragonfly/pull/3385)
- chore: reenable evictions upon insertion to avoid OOM rejections by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3387](https://github.com/dragonflydb/dragonfly/pull/3387)
- fix: remove fiber guard from non atomic section by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3381](https://github.com/dragonflydb/dragonfly/pull/3381)
- chore: do not preempt on db_slice::RegisterOnChange by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3388](https://github.com/dragonflydb/dragonfly/pull/3388)
- fix: disable inline transactions when db_slice has registered
callbacks by [@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3391](https://github.com/dragonflydb/dragonfly/pull/3391)
- fix: test_big_value_serialization_memory_limit shutdown timeout by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3390](https://github.com/dragonflydb/dragonfly/pull/3390)
- chore: set serialization_max_chunk_size to 1 byte by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3379](https://github.com/dragonflydb/dragonfly/pull/3379)
- chore: tiered fixes by [@&#8203;romange](https://github.com/romange)
in
[https://github.com/dragonflydb/dragonfly/pull/3393](https://github.com/dragonflydb/dragonfly/pull/3393)
- fix(acl): remove none from acl categories by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3392](https://github.com/dragonflydb/dragonfly/pull/3392)
- chore: tiering - make Modify work with cool storage by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3395](https://github.com/dragonflydb/dragonfly/pull/3395)
- fix: Fix unsupported object type rejson-rl in RedisInsight by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3384](https://github.com/dragonflydb/dragonfly/pull/3384)
- Revert "chore: set serialization_max_chunk_size to 1 byte
([#&#8203;3379](https://github.com/dragonflydb/dragonfly/issues/3379))"
by [@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3398](https://github.com/dragonflydb/dragonfly/pull/3398)
- chore(tiering): Move cool entry warmup to DbSlice by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3397](https://github.com/dragonflydb/dragonfly/pull/3397)
- fix: reenable macos builds by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3399](https://github.com/dragonflydb/dragonfly/pull/3399)
- chore: Don't print password to log on replica `AUTH` failure by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3403](https://github.com/dragonflydb/dragonfly/pull/3403)
- chore: Support setting the value of `replica-priority` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3400](https://github.com/dragonflydb/dragonfly/pull/3400)
- feat: stabilize non-coordinated omission mode by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3407](https://github.com/dragonflydb/dragonfly/pull/3407)
- chore: cancel slot migrations on shutdown by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3405](https://github.com/dragonflydb/dragonfly/pull/3405)
- chore: add db_slice lock to protect segments from preemptions by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3406](https://github.com/dragonflydb/dragonfly/pull/3406)
- chore: increase timeout of regression tests by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3412](https://github.com/dragonflydb/dragonfly/pull/3412)
- fix: crash with NS in multi/exec
[#&#8203;3410](https://github.com/dragonflydb/dragonfly/issues/3410)
by [@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3415](https://github.com/dragonflydb/dragonfly/pull/3415)
- fix: json.merge exception crash by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3409](https://github.com/dragonflydb/dragonfly/pull/3409)
- fix(connection): Count memchached pipelined commands by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3413](https://github.com/dragonflydb/dragonfly/pull/3413)
- chore: remove verbose printing of tests by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3420](https://github.com/dragonflydb/dragonfly/pull/3420)
- chore: Tiered fixes by [@&#8203;romange](https://github.com/romange)
in
[https://github.com/dragonflydb/dragonfly/pull/3401](https://github.com/dragonflydb/dragonfly/pull/3401)
- feat: Support non-root paths for json.merge by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3419](https://github.com/dragonflydb/dragonfly/pull/3419)
- chore: skip cluster tests if redis-server wasn't found by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3416](https://github.com/dragonflydb/dragonfly/pull/3416)
- chore: expose metric that shows how many task submitters are blocked
by [@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3427](https://github.com/dragonflydb/dragonfly/pull/3427)
- chore: optimize SendStringArrInternal even more by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3425](https://github.com/dragonflydb/dragonfly/pull/3425)
- fix(server): Implement SCRIPT GC command by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3431](https://github.com/dragonflydb/dragonfly/pull/3431)
- chore: retire TEST_EnableHeartBeat by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3435](https://github.com/dragonflydb/dragonfly/pull/3435)
- feat(server): Support `replica-announce-ip`/`port` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3421](https://github.com/dragonflydb/dragonfly/pull/3421)
- test(cluster): Migration replication test by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3417](https://github.com/dragonflydb/dragonfly/pull/3417)
- chore: improve replication locks by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3436](https://github.com/dragonflydb/dragonfly/pull/3436)
- chore: reorganize EngineShard::Heartbeat by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3437](https://github.com/dragonflydb/dragonfly/pull/3437)
- chore: fix memcached pipeline test by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3438](https://github.com/dragonflydb/dragonfly/pull/3438)
- chore: simplify master replication cancelation interface by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3439](https://github.com/dragonflydb/dragonfly/pull/3439)
- chore: reset serialization_max_chunk_size to 0 by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3432](https://github.com/dragonflydb/dragonfly/pull/3432)
- feat: DEBUG REPLICA PAUSE now pauses fullsync by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3441](https://github.com/dragonflydb/dragonfly/pull/3441)
- test: fix test_disconnect_replica by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3442](https://github.com/dragonflydb/dragonfly/pull/3442)
- fix: cluster_mgr.py to use `CLUSTER MYID` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3444](https://github.com/dragonflydb/dragonfly/pull/3444)
- chore: disable serialization_max_chunk_size in regtests by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3445](https://github.com/dragonflydb/dragonfly/pull/3445)
- fix: properly seriailize meta buffer in SendStringArrInternal by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3455](https://github.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://github.com/renovatebot/renovate).

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

Co-authored-by: lumiere-bot[bot] <98047013+lumiere-bot[bot]@users.noreply.github.com>
spiceratops referenced this pull request in spiceratops/k8s-gitops Aug 20, 2024
#894)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[ghcr.io/dragonflydb/dragonfly](https://github.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://github.com/dragonflydb/dragonfly/releases/tag/v1.21.2)

[Compare
Source](https://github.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
([#&#8203;3521](https://github.com/dragonflydb/dragonfly/issues/3521))

This follows up on **[Dragonfly
v1.21.0](https://github.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
[#&#8203;3260](https://github.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://github.com/dragonflydb/dragonfly/releases/tag/v1.21.1)

[Compare
Source](https://github.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
([#&#8203;3473](https://github.com/dragonflydb/dragonfly/issues/3473))

This follows up on **[Dragonfly
v1.21.0](https://github.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
[@&#8203;3260](https://github.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://github.com/dragonflydb/dragonfly/releases/tag/v1.21.0)

[Compare
Source](https://github.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
[@&#8203;3260](https://github.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
[@&#8203;adiholden](https://github.com/adiholden) in
[https://github.com/dragonflydb/dragonfly/pull/3289](https://github.com/dragonflydb/dragonfly/pull/3289)
- chore: optimize zpopminmax operations by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3291](https://github.com/dragonflydb/dragonfly/pull/3291)
- fix(json_family): Fix error in JsonFamilyTest.MGet by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3285](https://github.com/dragonflydb/dragonfly/pull/3285)
- fix: define macro WITH_AWS in cmake when flag is ON by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3296](https://github.com/dragonflydb/dragonfly/pull/3296)
- chore: Add 'memory arena show' command by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3298](https://github.com/dragonflydb/dragonfly/pull/3298)
- fix: missing logs on pytest failures
[#&#8203;3255](https://github.com/dragonflydb/dragonfly/issues/3255)
by [@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3272](https://github.com/dragonflydb/dragonfly/pull/3272)
- chore: refactor compact_object and introduce materialize method by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3300](https://github.com/dragonflydb/dragonfly/pull/3300)
- fix(acl): loading interleaved plain and hashed passwords by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3297](https://github.com/dragonflydb/dragonfly/pull/3297)
- chore: Add CompactObj Raw methods by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3303](https://github.com/dragonflydb/dragonfly/pull/3303)
- chore: On invalid TTL, print the TTL first by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3306](https://github.com/dragonflydb/dragonfly/pull/3306)
- chore: moving functions + renaming in tiered storage by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3304](https://github.com/dragonflydb/dragonfly/pull/3304)
- fix(tests): Add missing awaits by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3273](https://github.com/dragonflydb/dragonfly/pull/3273)
- chore: refactoring around tiered storage by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3299](https://github.com/dragonflydb/dragonfly/pull/3299)
- feat: yield when serialization is in progress by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3220](https://github.com/dragonflydb/dragonfly/pull/3220)
- refactor: Use `DbContext`, `OpArgs` and `Transaction` to access
`DbSlice` by [@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3311](https://github.com/dragonflydb/dragonfly/pull/3311)
- chore: Separate tiered serialization format from object values by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3310](https://github.com/dragonflydb/dragonfly/pull/3310)
- chore: add more community links to README by
[@&#8203;Niennienzz](https://github.com/Niennienzz) in
[https://github.com/dragonflydb/dragonfly/pull/3308](https://github.com/dragonflydb/dragonfly/pull/3308)
- fix(cluster): Join on specified attempt id by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3305](https://github.com/dragonflydb/dragonfly/pull/3305)
- chore(acl): add test with requirepass and aclfile by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3312](https://github.com/dragonflydb/dragonfly/pull/3312)
- chore: skip test_cluster_flushall_during_migration by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3316](https://github.com/dragonflydb/dragonfly/pull/3316)
- fix (pytest): generate unique random dbfilename for tests by
[@&#8203;adiholden](https://github.com/adiholden) in
[https://github.com/dragonflydb/dragonfly/pull/3317](https://github.com/dragonflydb/dragonfly/pull/3317)
- chore: bypass decoding/encoding of the data when performing offloading
by [@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3315](https://github.com/dragonflydb/dragonfly/pull/3315)
- refactor: acl helpers and global tables by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3309](https://github.com/dragonflydb/dragonfly/pull/3309)
- chore(tiering): Fixes by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3225](https://github.com/dragonflydb/dragonfly/pull/3225)
- fix(migration): Use transactions! by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3266](https://github.com/dragonflydb/dragonfly/pull/3266)
- fix: forbid DFLYCLUSTER commads set for emulated cluster mode by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3307](https://github.com/dragonflydb/dragonfly/pull/3307)
- feat(namespaces): Initial support for multi-tenant by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3260](https://github.com/dragonflydb/dragonfly/pull/3260)
- chore: improve dfly_bench stats by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3320](https://github.com/dragonflydb/dragonfly/pull/3320)
- chore: remove replace_deleted flag from hnswlib by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3323](https://github.com/dragonflydb/dragonfly/pull/3323)
- feat(test): Improve benchmark workflow by
[@&#8203;adiholden](https://github.com/adiholden) in
[https://github.com/dragonflydb/dragonfly/pull/3330](https://github.com/dragonflydb/dragonfly/pull/3330)
- fix: Proper shutdown sequence with Namespaces by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3333](https://github.com/dragonflydb/dragonfly/pull/3333)
- fix(test): copy logs for failed test during TEARDOWN phase by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3331](https://github.com/dragonflydb/dragonfly/pull/3331)
- fix(json_family): fix JSON.STRAPPEND command for JSON legacy mode by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3264](https://github.com/dragonflydb/dragonfly/pull/3264)
- chore(tiering): add protection against overruning memory budget by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3327](https://github.com/dragonflydb/dragonfly/pull/3327)
- chore: Add coordinated omission mode by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3332](https://github.com/dragonflydb/dragonfly/pull/3332)
- chore: implement sequential pass without the overlapping traffic by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3335](https://github.com/dragonflydb/dragonfly/pull/3335)
- feat: add an option to flush serialized entries on threshold limit by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3241](https://github.com/dragonflydb/dragonfly/pull/3241)
- feat(hset_family): Add NX option to HSETEX by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3295](https://github.com/dragonflydb/dragonfly/pull/3295)
- Fix blocking commands moved error by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3334](https://github.com/dragonflydb/dragonfly/pull/3334)
- fix: ub in RegisterOnChange and regression tests for big values by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3336](https://github.com/dragonflydb/dragonfly/pull/3336)
- fix: Cancel outgoing migration when retrying / closing by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3339](https://github.com/dragonflydb/dragonfly/pull/3339)
- chore: Make KeyIndex iterable by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3326](https://github.com/dragonflydb/dragonfly/pull/3326)
- fix: AllocationTracker::Remove return value was reversed by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3341](https://github.com/dragonflydb/dragonfly/pull/3341)
- chore: remove redundant metrics from memory stats by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3345](https://github.com/dragonflydb/dragonfly/pull/3345)
- fix: corruption in replication stream by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3344](https://github.com/dragonflydb/dragonfly/pull/3344)
- chore: clean up TaskQueue since we do not need multiple fibers for it
by [@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3348](https://github.com/dragonflydb/dragonfly/pull/3348)
- chore: pull helio by [@&#8203;romange](https://github.com/romange)
in
[https://github.com/dragonflydb/dragonfly/pull/3350](https://github.com/dragonflydb/dragonfly/pull/3350)
- chore: Log connection context when issuing dangerous cmds by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3352](https://github.com/dragonflydb/dragonfly/pull/3352)
- chore: small rename and add dcheck on LocalBlockingCounter by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3356](https://github.com/dragonflydb/dragonfly/pull/3356)
- refactor: reduce number of logs for cluster by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3357](https://github.com/dragonflydb/dragonfly/pull/3357)
- chore: fixes to dfly_bench by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3353](https://github.com/dragonflydb/dragonfly/pull/3353)
- chore: fix test_parser_memory_stats flakiness by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3354](https://github.com/dragonflydb/dragonfly/pull/3354)
- chore(server): Introduce StringSetWrapper by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3347](https://github.com/dragonflydb/dragonfly/pull/3347)
- fix: do not upload offload values on a first hit by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3360](https://github.com/dragonflydb/dragonfly/pull/3360)
- chore(tiering): Range functions + small refactoring by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3207](https://github.com/dragonflydb/dragonfly/pull/3207)
- fix: failure in test_cluster_fuzzymigration by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3363](https://github.com/dragonflydb/dragonfly/pull/3363)
- fix(server): Require >=1 args to `GETEX` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3366](https://github.com/dragonflydb/dragonfly/pull/3366)
- fix(transaction): Fix namespace access by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3364](https://github.com/dragonflydb/dragonfly/pull/3364)
- chore: disable compression on big values by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3358](https://github.com/dragonflydb/dragonfly/pull/3358)
- fix: protect OnJournalEntry with ConditionGuard by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3367](https://github.com/dragonflydb/dragonfly/pull/3367)
- chore: Introduce CoolQueue by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3365](https://github.com/dragonflydb/dragonfly/pull/3365)
- chore: small fixes around tiering by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3368](https://github.com/dragonflydb/dragonfly/pull/3368)
- chore: add a test for HeapSize() function by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3349](https://github.com/dragonflydb/dragonfly/pull/3349)
- chore: simplify computation of used_mem_current by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3372](https://github.com/dragonflydb/dragonfly/pull/3372)
- chore: disable cluster_fuzzymigration by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3373](https://github.com/dragonflydb/dragonfly/pull/3373)
- chore(replica): remove unused methods in the Replica class by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3374](https://github.com/dragonflydb/dragonfly/pull/3374)
- fix(transaction): Properly store block cancel status by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3371](https://github.com/dragonflydb/dragonfly/pull/3371)
- chore: Track db_slice table memory instantly by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3375](https://github.com/dragonflydb/dragonfly/pull/3375)
- chore: add mem test for big values and default the flag by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3369](https://github.com/dragonflydb/dragonfly/pull/3369)
- update: replication_acks_interval flag to 1000 by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3378](https://github.com/dragonflydb/dragonfly/pull/3378)
- chore: dfly_bench - print ongoing error counts by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3382](https://github.com/dragonflydb/dragonfly/pull/3382)
- chore: introduce a cool queue that gradually retires cool items by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3377](https://github.com/dragonflydb/dragonfly/pull/3377)
- chore: update cached stats inside PollExecution by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3376](https://github.com/dragonflydb/dragonfly/pull/3376)
- fix: Fix `test_take_over_seeder` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3385](https://github.com/dragonflydb/dragonfly/pull/3385)
- chore: reenable evictions upon insertion to avoid OOM rejections by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3387](https://github.com/dragonflydb/dragonfly/pull/3387)
- fix: remove fiber guard from non atomic section by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3381](https://github.com/dragonflydb/dragonfly/pull/3381)
- chore: do not preempt on db_slice::RegisterOnChange by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3388](https://github.com/dragonflydb/dragonfly/pull/3388)
- fix: disable inline transactions when db_slice has registered
callbacks by [@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3391](https://github.com/dragonflydb/dragonfly/pull/3391)
- fix: test_big_value_serialization_memory_limit shutdown timeout by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3390](https://github.com/dragonflydb/dragonfly/pull/3390)
- chore: set serialization_max_chunk_size to 1 byte by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3379](https://github.com/dragonflydb/dragonfly/pull/3379)
- chore: tiered fixes by [@&#8203;romange](https://github.com/romange)
in
[https://github.com/dragonflydb/dragonfly/pull/3393](https://github.com/dragonflydb/dragonfly/pull/3393)
- fix(acl): remove none from acl categories by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3392](https://github.com/dragonflydb/dragonfly/pull/3392)
- chore: tiering - make Modify work with cool storage by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3395](https://github.com/dragonflydb/dragonfly/pull/3395)
- fix: Fix unsupported object type rejson-rl in RedisInsight by
[@&#8203;BagritsevichStepan](https://github.com/BagritsevichStepan) in
[https://github.com/dragonflydb/dragonfly/pull/3384](https://github.com/dragonflydb/dragonfly/pull/3384)
- Revert "chore: set serialization_max_chunk_size to 1 byte
([#&#8203;3379](https://github.com/dragonflydb/dragonfly/issues/3379))"
by [@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3398](https://github.com/dragonflydb/dragonfly/pull/3398)
- chore(tiering): Move cool entry warmup to DbSlice by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3397](https://github.com/dragonflydb/dragonfly/pull/3397)
- fix: reenable macos builds by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3399](https://github.com/dragonflydb/dragonfly/pull/3399)
- chore: Don't print password to log on replica `AUTH` failure by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3403](https://github.com/dragonflydb/dragonfly/pull/3403)
- chore: Support setting the value of `replica-priority` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3400](https://github.com/dragonflydb/dragonfly/pull/3400)
- feat: stabilize non-coordinated omission mode by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3407](https://github.com/dragonflydb/dragonfly/pull/3407)
- chore: cancel slot migrations on shutdown by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3405](https://github.com/dragonflydb/dragonfly/pull/3405)
- chore: add db_slice lock to protect segments from preemptions by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3406](https://github.com/dragonflydb/dragonfly/pull/3406)
- chore: increase timeout of regression tests by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3412](https://github.com/dragonflydb/dragonfly/pull/3412)
- fix: crash with NS in multi/exec
[#&#8203;3410](https://github.com/dragonflydb/dragonfly/issues/3410)
by [@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3415](https://github.com/dragonflydb/dragonfly/pull/3415)
- fix: json.merge exception crash by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3409](https://github.com/dragonflydb/dragonfly/pull/3409)
- fix(connection): Count memchached pipelined commands by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3413](https://github.com/dragonflydb/dragonfly/pull/3413)
- chore: remove verbose printing of tests by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3420](https://github.com/dragonflydb/dragonfly/pull/3420)
- chore: Tiered fixes by [@&#8203;romange](https://github.com/romange)
in
[https://github.com/dragonflydb/dragonfly/pull/3401](https://github.com/dragonflydb/dragonfly/pull/3401)
- feat: Support non-root paths for json.merge by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3419](https://github.com/dragonflydb/dragonfly/pull/3419)
- chore: skip cluster tests if redis-server wasn't found by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3416](https://github.com/dragonflydb/dragonfly/pull/3416)
- chore: expose metric that shows how many task submitters are blocked
by [@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3427](https://github.com/dragonflydb/dragonfly/pull/3427)
- chore: optimize SendStringArrInternal even more by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3425](https://github.com/dragonflydb/dragonfly/pull/3425)
- fix(server): Implement SCRIPT GC command by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3431](https://github.com/dragonflydb/dragonfly/pull/3431)
- chore: retire TEST_EnableHeartBeat by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3435](https://github.com/dragonflydb/dragonfly/pull/3435)
- feat(server): Support `replica-announce-ip`/`port` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3421](https://github.com/dragonflydb/dragonfly/pull/3421)
- test(cluster): Migration replication test by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3417](https://github.com/dragonflydb/dragonfly/pull/3417)
- chore: improve replication locks by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3436](https://github.com/dragonflydb/dragonfly/pull/3436)
- chore: reorganize EngineShard::Heartbeat by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3437](https://github.com/dragonflydb/dragonfly/pull/3437)
- chore: fix memcached pipeline test by
[@&#8203;dranikpg](https://github.com/dranikpg) in
[https://github.com/dragonflydb/dragonfly/pull/3438](https://github.com/dragonflydb/dragonfly/pull/3438)
- chore: simplify master replication cancelation interface by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3439](https://github.com/dragonflydb/dragonfly/pull/3439)
- chore: reset serialization_max_chunk_size to 0 by
[@&#8203;kostasrim](https://github.com/kostasrim) in
[https://github.com/dragonflydb/dragonfly/pull/3432](https://github.com/dragonflydb/dragonfly/pull/3432)
- feat: DEBUG REPLICA PAUSE now pauses fullsync by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3441](https://github.com/dragonflydb/dragonfly/pull/3441)
- test: fix test_disconnect_replica by
[@&#8203;BorysTheDev](https://github.com/BorysTheDev) in
[https://github.com/dragonflydb/dragonfly/pull/3442](https://github.com/dragonflydb/dragonfly/pull/3442)
- fix: cluster_mgr.py to use `CLUSTER MYID` by
[@&#8203;chakaz](https://github.com/chakaz) in
[https://github.com/dragonflydb/dragonfly/pull/3444](https://github.com/dragonflydb/dragonfly/pull/3444)
- chore: disable serialization_max_chunk_size in regtests by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3445](https://github.com/dragonflydb/dragonfly/pull/3445)
- fix: properly seriailize meta buffer in SendStringArrInternal by
[@&#8203;romange](https://github.com/romange) in
[https://github.com/dragonflydb/dragonfly/pull/3455](https://github.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://github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yMS4wIiwidXBkYXRlZEluVmVyIjoiMzguMzcuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvY29udGFpbmVyIiwidHlwZS9taW5vciJdfQ==-->
romange added a commit that referenced this pull request Nov 9, 2024
This pr #2474 introduced iterator protection by
tracking which keys where bumped up during the transaction operation.
This was done by managing keys view set. However, this can be simplified
using fingerprints. Also, fingerprints do not require that the original keys exist.

In addition, this #3241 PR introduces FetchedItemsRestorer that tracks bumped set and
saves it to protect against fiber context switch. My claim is that it's redundant.
Since we only keep the auto-laundering iterators, when a fiber preempts these iterators recognize it
(see IteratorT::LaunderIfNeeded) and refresh themselves anyway.

To summarize: fetched_items_ protect us from iterator invalidation during atomic scenarios,
and auto-laundering protects us from everything else, so fetched_items_ can be cleared in that case.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
romange added a commit that referenced this pull request Nov 13, 2024
This pr #2474 introduced iterator protection by
tracking which keys where bumped up during the transaction operation.
This was done by managing keys view set. However, this can be simplified
using fingerprints. Also, fingerprints do not require that the original keys exist.

In addition, this #3241 PR introduces FetchedItemsRestorer that tracks bumped set and
saves it to protect against fiber context switch. My claim is that it's redundant.
Since we only keep the auto-laundering iterators, when a fiber preempts these iterators recognize it
(see IteratorT::LaunderIfNeeded) and refresh themselves anyway.

To summarize: fetched_items_ protect us from iterator invalidation during atomic scenarios,
and auto-laundering protects us from everything else, so fetched_items_ can be cleared in that case.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
romange added a commit that referenced this pull request Nov 13, 2024
* chore: simplify BumpUps deduplication

This pr #2474 introduced iterator protection by
tracking which keys where bumped up during the transaction operation.
This was done by managing keys view set. However, this can be simplified
using fingerprints. Also, fingerprints do not require that the original keys exist.

In addition, this #3241 PR introduces FetchedItemsRestorer that tracks bumped set and
saves it to protect against fiber context switch. My claim is that it's redundant.
Since we only keep the auto-laundering iterators, when a fiber preempts these iterators recognize it
(see IteratorT::LaunderIfNeeded) and refresh themselves anyway.

To summarize: fetched_items_ protect us from iterator invalidation during atomic scenarios,
and auto-laundering protects us from everything else, so fetched_items_ can be cleared in that case.
---------

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
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.

Serialize bucket in chunks and allow preemption
3 participants