-
Notifications
You must be signed in to change notification settings - Fork 981
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
Conversation
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 |
src/server/rdb_save.cc
Outdated
@@ -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(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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).
class FetchedItemsRestorer { | ||
public: | ||
using RestoreType = absl::flat_hash_set<CompactObjectView>; | ||
explicit FetchedItemsRestorer(RestoreType* dst) : dst_to_restore_(dst) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
src/server/rdb_save.h
Outdated
// for the dump command - thus it is public function | ||
// Also this function might preempt if flush_fun_ is used |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// 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. |
src/server/rdb_save.h
Outdated
@@ -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(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bool MaybeApplyFlushFunc(); | |
bool FlushIfNeeded(); |
src/server/snapshot.cc
Outdated
@@ -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"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd rename it to be clearer, but also provide a default of 10mb. Any reason to disable this feature be default?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
src/server/snapshot.h
Outdated
@@ -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); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1 for adding an enum but as I explained above I am not a big fan of defaulting this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is defaulting related to bool vs enum?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why 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)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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:
- We can always flush, we don't need the special case of RDB and to pass whether or not it is allowed
- 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?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let me think about this one I will ping
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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?
…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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [#​3255](https://github.com/dragonflydb/dragonfly/issues/3255) by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3309](https://github.com/dragonflydb/dragonfly/pull/3309) - chore(tiering): Fixes by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3348](https://github.com/dragonflydb/dragonfly/pull/3348) - chore: pull helio by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3367](https://github.com/dragonflydb/dragonfly/pull/3367) - chore: Introduce CoolQueue by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3379](https://github.com/dragonflydb/dragonfly/pull/3379) - chore: tiered fixes by [@​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 [@​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 [@​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 [@​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 ([#​3379](https://github.com/dragonflydb/dragonfly/issues/3379))" by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [#​3410](https://github.com/dragonflydb/dragonfly/issues/3410) by [@​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 [@​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 [@​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 [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3420](https://github.com/dragonflydb/dragonfly/pull/3420) - chore: Tiered fixes by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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>
…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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [#​3255](https://github.com/dragonflydb/dragonfly/issues/3255) by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3309](https://github.com/dragonflydb/dragonfly/pull/3309) - chore(tiering): Fixes by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3348](https://github.com/dragonflydb/dragonfly/pull/3348) - chore: pull helio by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3367](https://github.com/dragonflydb/dragonfly/pull/3367) - chore: Introduce CoolQueue by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3379](https://github.com/dragonflydb/dragonfly/pull/3379) - chore: tiered fixes by [@​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 [@​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 [@​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 [@​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 ([#​3379](https://github.com/dragonflydb/dragonfly/issues/3379))" by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [#​3410](https://github.com/dragonflydb/dragonfly/issues/3410) by [@​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 [@​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 [@​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 [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3420](https://github.com/dragonflydb/dragonfly/pull/3420) - chore: Tiered fixes by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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>
#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 ([#​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 [#​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 ([#​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [#​3255](https://github.com/dragonflydb/dragonfly/issues/3255) by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3309](https://github.com/dragonflydb/dragonfly/pull/3309) - chore(tiering): Fixes by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3348](https://github.com/dragonflydb/dragonfly/pull/3348) - chore: pull helio by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3367](https://github.com/dragonflydb/dragonfly/pull/3367) - chore: Introduce CoolQueue by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/3379](https://github.com/dragonflydb/dragonfly/pull/3379) - chore: tiered fixes by [@​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 [@​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 [@​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 [@​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 ([#​3379](https://github.com/dragonflydb/dragonfly/issues/3379))" by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [#​3410](https://github.com/dragonflydb/dragonfly/issues/3410) by [@​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 [@​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 [@​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 [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/3420](https://github.com/dragonflydb/dragonfly/pull/3420) - chore: Tiered fixes by [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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==-->
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>
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>
* 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>
Resolves #3223
There is also a separate issue with
compression
. Previously, we only calledFlushToSink
inSaveEpilogue
and beforeSaveBody
(to flush previous entries). However, with the current changes, we callFlushToSink
when we serialize X number of bytes. This doesn't work with the protocol implemented inrdb_load
because we now split let's say a list in multiple chunks andLoadKeyValue
onRdbLoader
expects to read a string (for the values) but it gets acompressed blob
and fails with unrecognized rdb type. I created this separate issue for that: #3324