Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

refactor client tracking, fix atomicity, squashing and multi/exec #2970

Merged
merged 20 commits into from
Jun 3, 2024

Conversation

kostasrim
Copy link
Contributor

@kostasrim kostasrim commented Apr 29, 2024

  • add partial support for CLIENT CACHING TRUE (only to be used with TRACKING OPTIN)
  • add OPTIN to CLIENT TRACKING command
  • refactor client tracking to respect transactional atomicity
  • fixed multi/exec and disabled squashing with client tracking
  • add tests

Resolves #2969, #2971, #2997, #2998

P.s. All tests in rueidis TestSingleClientIntegration pass except pub/sub because we don't yet support it see #3001

@kostasrim kostasrim changed the title feat: client tracking optin feat: client tracking optin argument Apr 29, 2024
@kostasrim kostasrim self-assigned this Apr 29, 2024
@kostasrim kostasrim requested a review from dranikpg April 29, 2024 16:05
src/server/main_service.cc Outdated Show resolved Hide resolved
@kostasrim kostasrim changed the title feat: client tracking optin argument refactor client tracking, fix atomicity, squashing and multi/exec May 2, 2024
@@ -838,13 +838,23 @@ OpStatus Transaction::ScheduleSingleHop(RunnableType cb) {

// Runs in coordinator thread.
void Transaction::Execute(RunnableType cb, bool conclude) {
auto tracking_wrap = [cb, this](Transaction* t, EngineShard* shard) -> RunnableResult {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@dranikpg this with the changes in InvokeCmd seemed to be the most non intrusive way (to comply with the requirements of the state machine)

Copy link
Collaborator

Choose a reason for hiding this comment

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

  1. I would like to understand why tracking requires transaction semantics (an example will be fine)
  2. why cid_ is not enough and we need invoke_cid_ ?

Copy link
Contributor

Choose a reason for hiding this comment

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

It would suggest to do it like we handle blocking commands - once it finished and manually from RunSquashedCb

if (auto* bcontroller = shard->blocking_controller(); bcontroller) {
if (awaked_prerun || was_suspended) {
bcontroller->FinalizeWatched(GetShardArgs(idx), this);

So it becomes if (concluding || (multi && multi_->concluding)) Track(this)

Now you don't need invoke_cid, etc there as well

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I would like to understand why tracking requires transaction semantics (an example will be fine)

Because invalidation messages must be sent before the transaction concludes. Otherwise, we might accidentally skip them. An example would be:

>> CLIENT TRACKING ON
>> GET FOO
>> SET FOO BAR 
>> GET FOO
>> SET FOO BAR
>> GET FOO ---------> might miss Invalidation message

A valid execution would be once we call the first SET we will send an invalidation message as a separate transaction. Now before that even starts/concludes, the GET that follows will get executed first and it will itself issue a separate transaction to send an invalidation message. Now the problem here is, that once we send an invalidation message we remove the key from the tracking map (since we only send invalidation messages once until the key is reread). Then the second invalidation transaction won't work because the key no longer exists in the map and we will never get that second invalidation message.

@@ -119,6 +119,13 @@ void ConnectionContext::ChangeMonitor(bool start) {
EnableMonitoring(start);
}

ConnectionState::ClientTracking& ConnectionContext::ClientTrackingInfo() {
if (parent_cntx_) {
return parent_cntx_->conn_state.tracking_info_;
Copy link
Contributor Author

Choose a reason for hiding this comment

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

That;s for squashing :)

Copy link
Contributor

Choose a reason for hiding this comment

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

If you access conn_state, don't make it a function on conn_cntx

then you can just use conn_state, you can make it mutable or add a new member like conn

if (cntx->conn_state.squashing_info)
cntx = cntx->conn_state.squashing_info->owner;

src/server/conn_context.h Outdated Show resolved Hide resolved
src/server/conn_context.cc Outdated Show resolved Hide resolved
@@ -1206,6 +1186,7 @@ void Service::DispatchCommand(CmdArgList args, facade::ConnectionContext* cntx)
if (stored_cmd.Cid()->IsWriteOnly()) {
dfly_cntx->conn_state.exec_info.is_write = true;
}
dfly_cntx->conn_state.tracking_info_.UpdatePrevAndLastCommand();
Copy link
Collaborator

Choose a reason for hiding this comment

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

why do you need to call it here?

}

void ConnectionState::ClientTracking::UpdatePrevAndLastCommand() {
if (prev_command_ && multi_) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

seems that what you really want is to know if you are in the middle of EXEC execution and not multi.

Copy link
Contributor

Choose a reason for hiding this comment

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

We store so much fragile info that needs to be updated everywhere... seqnums would solve all this

// Enable tracking on the client
void TrackClientCaching();

void UpdatePrevAndLastCommand();
Copy link
Collaborator

Choose a reason for hiding this comment

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

nit: UdatePrevAndLastCommand name describes the implementation of this function. What it does is advancing the state. So I think it's better call it Tick or Advance or Update

// true if the previous command invoked is CLIENT CACHING TRUE
bool prev_command_ = false;
// true if the currently executing command is CLIENT CACHING TRUE
bool executing_command_ = false;
Copy link
Collaborator

Choose a reason for hiding this comment

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

rename: executing_command_ to track_next_cmd_

Copy link
Contributor Author

@kostasrim kostasrim May 2, 2024

Choose a reason for hiding this comment

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

but the track_next_cmd_ seems misleading since it implies it's the next command. executing_command_ is the command we currently execute in InvokeCmd flow and prev_command_ is the command before it. So:

>> GET FOO ----> prev_command
>> GET BAR ----> current_command

bool optin_ = false;
// remember if CLIENT CACHING TRUE was the last command
// true if the previous command invoked is CLIENT CACHING TRUE
bool prev_command_ = false;
Copy link
Collaborator

Choose a reason for hiding this comment

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

rename prev_command_ to track_current_cmd_

Copy link
Contributor

@dranikpg dranikpg left a comment

Choose a reason for hiding this comment

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

It looks somewhat over engineered to me 😅 We have similar semantics in blocking commands - only that we subscribe with specific commands and not with any.

  1. Let's use squashing_info instead of adding a parent field to ConnectionContext or let's use that field for everything - there should be one way of doing things with proper comments, so nobody adds yet a third
  2. I'd still suggest to add numbers to commands, because UpdatePrevAndLastCommand() appears in many places and we update three whole fileds: prev, executing, multi. The track command can just store its number and we don't have to update much more
  3. Track() should be called when we conclude or finish the current multi command, currently we call it for every hop. Not that there are multi-hop read commands, but I think it belongs to all other management code. Invoke-cid should also not be needed with that

src/facade/dragonfly_connection.cc Outdated Show resolved Hide resolved
src/facade/dragonfly_connection.cc Outdated Show resolved Hide resolved
src/facade/dragonfly_connection.cc Show resolved Hide resolved
@@ -838,13 +838,23 @@ OpStatus Transaction::ScheduleSingleHop(RunnableType cb) {

// Runs in coordinator thread.
void Transaction::Execute(RunnableType cb, bool conclude) {
auto tracking_wrap = [cb, this](Transaction* t, EngineShard* shard) -> RunnableResult {
Copy link
Contributor

Choose a reason for hiding this comment

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

It would suggest to do it like we handle blocking commands - once it finished and manually from RunSquashedCb

if (auto* bcontroller = shard->blocking_controller(); bcontroller) {
if (awaked_prerun || was_suspended) {
bcontroller->FinalizeWatched(GetShardArgs(idx), this);

So it becomes if (concluding || (multi && multi_->concluding)) Track(this)

Now you don't need invoke_cid, etc there as well

@@ -119,6 +119,13 @@ void ConnectionContext::ChangeMonitor(bool start) {
EnableMonitoring(start);
}

ConnectionState::ClientTracking& ConnectionContext::ClientTrackingInfo() {
if (parent_cntx_) {
return parent_cntx_->conn_state.tracking_info_;
Copy link
Contributor

Choose a reason for hiding this comment

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

If you access conn_state, don't make it a function on conn_cntx

then you can just use conn_state, you can make it mutable or add a new member like conn

if (cntx->conn_state.squashing_info)
cntx = cntx->conn_state.squashing_info->owner;

}

void ConnectionState::ClientTracking::UpdatePrevAndLastCommand() {
if (prev_command_ && multi_) {
Copy link
Contributor

Choose a reason for hiding this comment

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

We store so much fragile info that needs to be updated everywhere... seqnums would solve all this

Comment on lines 258 to 260
ConnectionContext* parent_cntx_ = nullptr;

ConnectionState::ClientTracking& ClientTrackingInfo();
Copy link
Contributor

Choose a reason for hiding this comment

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

See previous comment on whether we can keep this in conn_state

dranikpg
dranikpg previously approved these changes May 27, 2024
@@ -1119,7 +1118,8 @@ void Connection::HandleMigrateRequest() {
this->Migrate(dest);
}

DCHECK(dispatch_q_.empty());
// This triggers on rueidis SingleIntegrationTest
Copy link
Collaborator

Choose a reason for hiding this comment

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

I think this comment can be improved. Explain how it happens that DCHECK(dispatch_q_.empty()); fails after the migration, "rueidis SingleIntegrationTest" is irrelevant here

return OpStatus::OK;
}

void ConnectionState::ClientTracking::Track(ConnectionContext* cntx, const CommandId* cid) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

this function now is called within the Shard. We have a convention to name it as xxxOnShard to stress it.

Comment on lines 298 to 299
auto& info = cntx->conn_state.tracking_info_;
if ((cid->opt_mask() & CO::READONLY) && cid->IsTransactional() && info.ShouldTrackKeys()) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

I believe the code can be moved to the coordinator thread, i.e. when we prepare the transaction. the result can be kept as a boolean within transaction. Nothing here is relevant to the shard or the transaction state. we have Transaction::coordinator_state_ mask that can be used for this.

Copy link
Collaborator

Choose a reason for hiding this comment

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

actually, see my other comment.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Well, info.ShouldTrackeys() should be called after a command is invoked because that very command might be the client tracking command.

The callback approach is neat for removing the ConnectionContext alltogether from transaction and in fact this is the only change needed (no fancy boolean or coordinator mask) because we just pass a callback which just captures the context :)

@kostasrim kostasrim requested a review from romange May 30, 2024 16:12
@@ -33,14 +33,14 @@ add_library(dfly_transaction db_slice.cc malloc_stats.cc blocking_controller.cc
common.cc journal/journal.cc journal/types.cc journal/journal_slice.cc
server_state.cc table.cc top_keys.cc transaction.cc tx_base.cc
serializer_commons.cc journal/serializer.cc journal/executor.cc journal/streamer.cc
${TX_LINUX_SRCS} acl/acl_log.cc slowlog.cc
${TX_LINUX_SRCS} acl/acl_log.cc slowlog.cc conn_context.cc channel_store.cc
Copy link
Collaborator

Choose a reason for hiding this comment

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

we do not need this move now

@kostasrim kostasrim requested a review from romange June 1, 2024 10:43
Copy link
Collaborator

@romange romange left a comment

Choose a reason for hiding this comment

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

looks good, left final minor comments.

auto* trans = cntx->transaction;
const bool is_read_only = cid->opt_mask() & CO::READONLY;
if (trans) {
trans->SetTrackingCallback({});
Copy link
Collaborator

Choose a reason for hiding this comment

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

why trans->SetTrackingCallback({}); ? can you add a comment please?

trans->SetTrackingCallback({});
if (is_read_only && info.ShouldTrackKeys()) {
auto conn = cntx->conn()->Borrow();
trans->SetTrackingCallback([trans, conn]() {
Copy link
Collaborator

Choose a reason for hiding this comment

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

a better interface for tracking callback would be to accept Transaction* and EngineShard* as its arguments, so the transaction can just call it with these variables instead of capturing them here.

@@ -1332,6 +1341,11 @@ bool Service::InvokeCmd(const CommandId* cid, CmdArgList tail_args, ConnectionCo
return false;
}

auto cid_name = cid->name();
if ((!trans && cid_name != "MULTI") || (trans && !trans->IsMulti())) {
cntx->conn_state.tracking_info_.IncrementSequenceNumber();
Copy link
Collaborator

Choose a reason for hiding this comment

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

can you please add a short comment what/why we do here?

@@ -88,7 +88,7 @@ ConnectionContext::ConnectionContext(::io::Sink* stream, facade::Connection* own
acl_commands = std::vector<uint64_t>(acl::NumberOfFamilies(), acl::ALL_COMMANDS);
}

ConnectionContext::ConnectionContext(const ConnectionContext* owner, Transaction* tx,
ConnectionContext::ConnectionContext(ConnectionContext* owner, Transaction* tx,
Copy link
Collaborator

Choose a reason for hiding this comment

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

do we still need to remove const here?

@kostasrim kostasrim requested a review from romange June 3, 2024 13:40
Copy link
Collaborator

@romange romange left a comment

Choose a reason for hiding this comment

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

!!!

@kostasrim kostasrim merged commit b1063f7 into main Jun 3, 2024
10 checks passed
@kostasrim kostasrim deleted the client_tracking_optin branch June 3, 2024 19:14
adiholden added a commit that referenced this pull request Jun 4, 2024
adiholden added a commit that referenced this pull request Jun 4, 2024
#3122)

Revert "refactor client tracking, fix atomicity, squashing and multi/exec (#2970)"

This reverts commit b1063f7.
szinn pushed a commit to szinn/k8s-homelab that referenced this pull request Jun 5, 2024
…nfly ( v1.18.1 → v1.19.0 ) (#3784)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[docker.dragonflydb.io/dragonflydb/dragonfly](https://togithub.com/dragonflydb/dragonfly)
| minor | `v1.18.1` -> `v1.19.0` |

---

### Release Notes

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

###
[`v1.19.0`](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.19.0)

[Compare
Source](https://togithub.com/dragonflydb/dragonfly/compare/v1.18.1...v1.19.0)

##### Dragonfly v1.19.0

Some prominent changes include:

- SPOP and SRANDMEMBER return truly randomized results
([#&#8203;3022](https://togithub.com/dragonflydb/dragonfly/issues/3022))
- Fix memory blowup in some cases during replication
([#&#8203;3084](https://togithub.com/dragonflydb/dragonfly/issues/3084)
[#&#8203;3103](https://togithub.com/dragonflydb/dragonfly/issues/3103))
- Snapshotting works with data tiering
([#&#8203;3073](https://togithub.com/dragonflydb/dragonfly/issues/3073))
- Fix incompatibility issue of RDB snapshot with Redis 6.x
([#&#8203;3121](https://togithub.com/dragonflydb/dragonfly/issues/3121))
- Memory utilization improvements + better introspection of memory usage
via /metrics

##### What's Changed

- chore: update versions and remove caching code by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3030
- chore: fix macos tiering by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3032
- feat: support subrange expressions in jsonpathv2 by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3036
- fix: reduce delay when stop replica
[#&#8203;3020](https://togithub.com/dragonflydb/dragonfly/issues/3020)
by [@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3028
- fix(set): fix random in SRANDMEMBER and SPOP commands by
[@&#8203;BagritsevichStepan](https://togithub.com/BagritsevichStepan) in
[dragonflydb/dragonfly#3022
- chore: prevent updating gcc on macos by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3037
- chore: add half-range indices by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3041
- chore: update helio together with new mimalloc version by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3040
- fix: header for oom_errors_total by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3043
- chore: reset enable_direct_fd to avoid socket leakage in kernel by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3051
- chore: update deprecated actions by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3052
- chore: remove unneeded check-fails by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3054
- chore: Export replication memory stats by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3062
- <chore>!: Update grafana panel by
[@&#8203;MaoMaoCake](https://togithub.com/MaoMaoCake) in
[dragonflydb/dragonfly#3064
- chore: add replication memory stats to the dashboard by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3065
- chore: bpop prints by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3076
- fix(tiering): wait for IO before test teardown by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3079
- chore: small replayer fixes by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3081
- fix: increase lua stack limit to 8KB by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3080
- chore: minor fixes by [@&#8203;romange](https://togithub.com/romange)
in
[dragonflydb/dragonfly#3082
- fix: fix cluster incorrect keys status by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3083
- fix(acl): return -NOPERM instead of response error by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#3049
- feat(server): Expose serialization bytes via `INFO` and `/metrics` by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3087
- chore(streams): Some refactoring by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3088
- feat(server): remove multi shard sync from replication by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3085
- fix(replication): fullsync phase write to sync on noop by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3084
- fix(tiering): Async delete for small bins by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3068
- fix: prevent crashing if error happened during snapshot moving by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3092
- fix: add timeout for DFLYMIGRATE ACK to prevent deadlock by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3093
- chore: improve Migration() by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#3033
- feat(streams): Stream optimizations by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3091
- feat(tiering): Defragmentation by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3021
- fix: bit shift of kTagMask by
[@&#8203;haodongnj](https://togithub.com/haodongnj) in
[dragonflydb/dragonfly#3099
- feat(cluster_mgr): Allow attaching replicas by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3105
- bug(server): fix replication stuck in full sync by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3103
- fix(server): Sync FLUSH with tiering by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3098
- chore: export pipeline related metrics by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3104
- chore: zset error log (from 1.18 branch) by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3109
- New test for cluster migration: connection issue by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3102
- chore: minor fixes + remove redundant DCHECK by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3115
- fix: fix cluster_fuzzy_migration test by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3116
- feat(server): Pipeline and dispatch on `/metrics` by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3117
- chore: pull helio add test for tls deadlock by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#3111
- feat(cluster_mgr): Improvements to `cluster_mgr.py` by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3118
- refactor client tracking, fix atomicity, squashing and multi/exec by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#2970
- fix(server): fix compatibility with rdb snapshot by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3121
- Revert "refactor client tracking, fix atomicity, squashing and multi/…
by [@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3122
- feat(cluster_mgr): Take over command by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3120
- fix: fix RestoreStreamer to prevent buckets skipping
[#&#8203;2830](https://togithub.com/dragonflydb/dragonfly/issues/2830)
by [@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3119
- feat(cluster_mgr): Fix migration action by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3124
- chore: prevent Dispatch fiber to be launched during migration by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3123
- feat(tiering): Simple snapshotting by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3073
- fix: upload action in version release by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3127

##### New Contributors

- [@&#8203;MaoMaoCake](https://togithub.com/MaoMaoCake) made their first
contribution in
[dragonflydb/dragonfly#3064
- [@&#8203;haodongnj](https://togithub.com/haodongnj) made their first
contribution in
[dragonflydb/dragonfly#3099

##### Huge thanks to all the contributors! ❤️

**Full Changelog**:
dragonflydb/dragonfly@v1.18.0...v1.19.0

</details>

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zOTEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjM5MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19-->

Co-authored-by: repo-jeeves[bot] <106431701+repo-jeeves[bot]@users.noreply.github.com>
kireque pushed a commit to kireque/home-ops that referenced this pull request Jun 6, 2024
…nfly ( v1.18.1 → v1.19.0 ) (#629)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[docker.dragonflydb.io/dragonflydb/dragonfly](https://togithub.com/dragonflydb/dragonfly)
| minor | `v1.18.1` -> `v1.19.0` |

---

### Release Notes

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

###
[`v1.19.0`](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.19.0)

[Compare
Source](https://togithub.com/dragonflydb/dragonfly/compare/v1.18.1...v1.19.0)

##### Dragonfly v1.19.0

Some prominent changes include:

- SPOP and SRANDMEMBER return truly randomized results
([#&#8203;3022](https://togithub.com/dragonflydb/dragonfly/issues/3022))
- Fix memory blowup in some cases during replication
([#&#8203;3084](https://togithub.com/dragonflydb/dragonfly/issues/3084)
[#&#8203;3103](https://togithub.com/dragonflydb/dragonfly/issues/3103))
- Snapshotting works with data tiering
([#&#8203;3073](https://togithub.com/dragonflydb/dragonfly/issues/3073))
- Fix incompatibility issue of RDB snapshot with Redis 6.x
([#&#8203;3121](https://togithub.com/dragonflydb/dragonfly/issues/3121))
- Memory utilization improvements + better introspection of memory usage
via /metrics

##### What's Changed

- chore: update versions and remove caching code by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3030
- chore: fix macos tiering by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3032
- feat: support subrange expressions in jsonpathv2 by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3036
- fix: reduce delay when stop replica
[#&#8203;3020](https://togithub.com/dragonflydb/dragonfly/issues/3020)
by [@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3028
- fix(set): fix random in SRANDMEMBER and SPOP commands by
[@&#8203;BagritsevichStepan](https://togithub.com/BagritsevichStepan) in
[dragonflydb/dragonfly#3022
- chore: prevent updating gcc on macos by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3037
- chore: add half-range indices by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3041
- chore: update helio together with new mimalloc version by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3040
- fix: header for oom_errors_total by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3043
- chore: reset enable_direct_fd to avoid socket leakage in kernel by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3051
- chore: update deprecated actions by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3052
- chore: remove unneeded check-fails by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3054
- chore: Export replication memory stats by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3062
- <chore>!: Update grafana panel by
[@&#8203;MaoMaoCake](https://togithub.com/MaoMaoCake) in
[dragonflydb/dragonfly#3064
- chore: add replication memory stats to the dashboard by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3065
- chore: bpop prints by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3076
- fix(tiering): wait for IO before test teardown by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3079
- chore: small replayer fixes by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3081
- fix: increase lua stack limit to 8KB by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3080
- chore: minor fixes by [@&#8203;romange](https://togithub.com/romange)
in
[dragonflydb/dragonfly#3082
- fix: fix cluster incorrect keys status by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3083
- fix(acl): return -NOPERM instead of response error by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#3049
- feat(server): Expose serialization bytes via `INFO` and `/metrics` by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3087
- chore(streams): Some refactoring by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3088
- feat(server): remove multi shard sync from replication by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3085
- fix(replication): fullsync phase write to sync on noop by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3084
- fix(tiering): Async delete for small bins by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3068
- fix: prevent crashing if error happened during snapshot moving by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3092
- fix: add timeout for DFLYMIGRATE ACK to prevent deadlock by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3093
- chore: improve Migration() by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#3033
- feat(streams): Stream optimizations by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3091
- feat(tiering): Defragmentation by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3021
- fix: bit shift of kTagMask by
[@&#8203;haodongnj](https://togithub.com/haodongnj) in
[dragonflydb/dragonfly#3099
- feat(cluster_mgr): Allow attaching replicas by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3105
- bug(server): fix replication stuck in full sync by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3103
- fix(server): Sync FLUSH with tiering by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3098
- chore: export pipeline related metrics by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3104
- chore: zset error log (from 1.18 branch) by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3109
- New test for cluster migration: connection issue by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3102
- chore: minor fixes + remove redundant DCHECK by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3115
- fix: fix cluster_fuzzy_migration test by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3116
- feat(server): Pipeline and dispatch on `/metrics` by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3117
- chore: pull helio add test for tls deadlock by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#3111
- feat(cluster_mgr): Improvements to `cluster_mgr.py` by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3118
- refactor client tracking, fix atomicity, squashing and multi/exec by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#2970
- fix(server): fix compatibility with rdb snapshot by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3121
- Revert "refactor client tracking, fix atomicity, squashing and multi/…
by [@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3122
- feat(cluster_mgr): Take over command by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3120
- fix: fix RestoreStreamer to prevent buckets skipping
[#&#8203;2830](https://togithub.com/dragonflydb/dragonfly/issues/2830)
by [@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3119
- feat(cluster_mgr): Fix migration action by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3124
- chore: prevent Dispatch fiber to be launched during migration by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3123
- feat(tiering): Simple snapshotting by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3073
- fix: upload action in version release by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3127

##### New Contributors

- [@&#8203;MaoMaoCake](https://togithub.com/MaoMaoCake) made their first
contribution in
[dragonflydb/dragonfly#3064
- [@&#8203;haodongnj](https://togithub.com/haodongnj) made their first
contribution in
[dragonflydb/dragonfly#3099

##### Huge thanks to all the contributors! ❤️

**Full Changelog**:
dragonflydb/dragonfly@v1.18.0...v1.19.0

</details>

---

### Configuration

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

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

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

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

---

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

---

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

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zOTAuMSIsInVwZGF0ZWRJblZlciI6IjM3LjM5MC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19-->

Co-authored-by: kireque-bot[bot] <143391978+kireque-bot[bot]@users.noreply.github.com>
lumiere-bot bot added a commit to coolguy1771/home-ops that referenced this pull request Jun 7, 2024
…19.0 ) (#4821)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[ghcr.io/dragonflydb/dragonfly](https://togithub.com/dragonflydb/dragonfly)
| minor | `v1.18.1` -> `v1.19.0` |

---

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

---

### Release Notes

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

###
[`v1.19.0`](https://togithub.com/dragonflydb/dragonfly/releases/tag/v1.19.0)

[Compare
Source](https://togithub.com/dragonflydb/dragonfly/compare/v1.18.1...v1.19.0)

##### Dragonfly v1.19.0

Some prominent changes include:

- SPOP and SRANDMEMBER return truly randomized results
([#&#8203;3022](https://togithub.com/dragonflydb/dragonfly/issues/3022))
- Fix memory blowup in some cases during replication
([#&#8203;3084](https://togithub.com/dragonflydb/dragonfly/issues/3084)
[#&#8203;3103](https://togithub.com/dragonflydb/dragonfly/issues/3103))
- Snapshotting works with data tiering
([#&#8203;3073](https://togithub.com/dragonflydb/dragonfly/issues/3073))
- Fix incompatibility issue of RDB snapshot with Redis 6.x
([#&#8203;3121](https://togithub.com/dragonflydb/dragonfly/issues/3121))
- Memory utilization improvements + better introspection of memory usage
via /metrics

##### What's Changed

- chore: update versions and remove caching code by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3030
- chore: fix macos tiering by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3032
- feat: support subrange expressions in jsonpathv2 by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3036
- fix: reduce delay when stop replica
[#&#8203;3020](https://togithub.com/dragonflydb/dragonfly/issues/3020)
by [@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3028
- fix(set): fix random in SRANDMEMBER and SPOP commands by
[@&#8203;BagritsevichStepan](https://togithub.com/BagritsevichStepan) in
[dragonflydb/dragonfly#3022
- chore: prevent updating gcc on macos by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3037
- chore: add half-range indices by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3041
- chore: update helio together with new mimalloc version by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3040
- fix: header for oom_errors_total by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3043
- chore: reset enable_direct_fd to avoid socket leakage in kernel by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3051
- chore: update deprecated actions by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3052
- chore: remove unneeded check-fails by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3054
- chore: Export replication memory stats by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3062
- <chore>!: Update grafana panel by
[@&#8203;MaoMaoCake](https://togithub.com/MaoMaoCake) in
[dragonflydb/dragonfly#3064
- chore: add replication memory stats to the dashboard by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3065
- chore: bpop prints by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3076
- fix(tiering): wait for IO before test teardown by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3079
- chore: small replayer fixes by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3081
- fix: increase lua stack limit to 8KB by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3080
- chore: minor fixes by [@&#8203;romange](https://togithub.com/romange)
in
[dragonflydb/dragonfly#3082
- fix: fix cluster incorrect keys status by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3083
- fix(acl): return -NOPERM instead of response error by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#3049
- feat(server): Expose serialization bytes via `INFO` and `/metrics` by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3087
- chore(streams): Some refactoring by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3088
- feat(server): remove multi shard sync from replication by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3085
- fix(replication): fullsync phase write to sync on noop by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3084
- fix(tiering): Async delete for small bins by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3068
- fix: prevent crashing if error happened during snapshot moving by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3092
- fix: add timeout for DFLYMIGRATE ACK to prevent deadlock by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3093
- chore: improve Migration() by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#3033
- feat(streams): Stream optimizations by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3091
- feat(tiering): Defragmentation by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3021
- fix: bit shift of kTagMask by
[@&#8203;haodongnj](https://togithub.com/haodongnj) in
[dragonflydb/dragonfly#3099
- feat(cluster_mgr): Allow attaching replicas by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3105
- bug(server): fix replication stuck in full sync by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3103
- fix(server): Sync FLUSH with tiering by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3098
- chore: export pipeline related metrics by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3104
- chore: zset error log (from 1.18 branch) by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3109
- New test for cluster migration: connection issue by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3102
- chore: minor fixes + remove redundant DCHECK by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3115
- fix: fix cluster_fuzzy_migration test by
[@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3116
- feat(server): Pipeline and dispatch on `/metrics` by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3117
- chore: pull helio add test for tls deadlock by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#3111
- feat(cluster_mgr): Improvements to `cluster_mgr.py` by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3118
- refactor client tracking, fix atomicity, squashing and multi/exec by
[@&#8203;kostasrim](https://togithub.com/kostasrim) in
[dragonflydb/dragonfly#2970
- fix(server): fix compatibility with rdb snapshot by
[@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3121
- Revert "refactor client tracking, fix atomicity, squashing and multi/…
by [@&#8203;adiholden](https://togithub.com/adiholden) in
[dragonflydb/dragonfly#3122
- feat(cluster_mgr): Take over command by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3120
- fix: fix RestoreStreamer to prevent buckets skipping
[#&#8203;2830](https://togithub.com/dragonflydb/dragonfly/issues/2830)
by [@&#8203;BorysTheDev](https://togithub.com/BorysTheDev) in
[dragonflydb/dragonfly#3119
- feat(cluster_mgr): Fix migration action by
[@&#8203;chakaz](https://togithub.com/chakaz) in
[dragonflydb/dragonfly#3124
- chore: prevent Dispatch fiber to be launched during migration by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3123
- feat(tiering): Simple snapshotting by
[@&#8203;dranikpg](https://togithub.com/dranikpg) in
[dragonflydb/dragonfly#3073
- fix: upload action in version release by
[@&#8203;romange](https://togithub.com/romange) in
[dragonflydb/dragonfly#3127

##### New Contributors

- [@&#8203;MaoMaoCake](https://togithub.com/MaoMaoCake) made their first
contribution in
[dragonflydb/dragonfly#3064
- [@&#8203;haodongnj](https://togithub.com/haodongnj) made their first
contribution in
[dragonflydb/dragonfly#3099

##### Huge thanks to all the contributors! ❤️

**Full Changelog**:
dragonflydb/dragonfly@v1.18.0...v1.19.0

</details>

---

### Configuration

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

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

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

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

---

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

---

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

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zOTAuMSIsInVwZGF0ZWRJblZlciI6IjM3LjM5MC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19-->

Co-authored-by: lumiere-bot[bot] <98047013+lumiere-bot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add support for CLIENT OPTIN
3 participants