-
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(cluster): Add --cluster_id
flag
#2695
Conversation
I think cluster id could be perceivded as an id of the cluster and that's not it. I suggest changing to "node_id" because nodes are usually the correct terms when talking about cluster architecture. |
How about |
src/server/cluster/cluster_family.cc
Outdated
@@ -25,6 +25,9 @@ | |||
#include "server/server_state.h" | |||
|
|||
ABSL_FLAG(std::string, cluster_announce_ip, "", "ip that cluster commands announce to the client"); | |||
ABSL_FLAG(std::string, cluster_id, "", |
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.
Did you check if in redis is the node id the same as the cluster node id?
Lets add it to feature tests of cluster i.e
we should have a test for cluster running with replicas and sending data via seeder (if not we need to add), in this test one of the configurations to run is with this flag
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.
and also is there a reason not to set this id for the master_replid_ but have different ids
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.
suppose we always master_replid_
to constant cluster_node_id
, then in case a master restarts, it will still have the same id and the replica will happily replicate empty data from it. that's what we are trying to prevent, right?
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.
Did you check if in redis is the node id the same as the cluster node id?
No, it's not the same ID. Here's a log from a local redis cluster I set:
177592:M 07 Mar 2024 13:01:29.548 * No cluster configuration found, I'm 09a6bad961e78159056f8ad3865a3e2d47d74045
177592:M 07 Mar 2024 13:01:29.560 * Server initialized
[...]
177592:M 07 Mar 2024 13:02:15.440 * Replica 127.0.0.1:6379 asks for synchronization
177592:M 07 Mar 2024 13:02:15.440 * Full resync requested by replica 127.0.0.1:6379
177592:M 07 Mar 2024 13:02:15.440 * Replication backlog created, my new replication IDs are '67e4e538e2e0a76da7a1454615c5ce64954c4800' and '0000000000000000000000000000000000000000'
So it's not using the same ID.
Lets add it to feature tests of cluster i.e we should have a test for cluster running with replicas and sending data via seeder (if not we need to add), in this test one of the configurations to run is with this flag
Done.
@@ -2385,7 +2385,7 @@ void ServerFamily::ReplConf(CmdArgList args, ConnectionContext* cntx) { | |||
// The response for 'capa dragonfly' is: <masterid> <syncid> <numthreads> <version> | |||
auto* rb = static_cast<RedisReplyBuilder*>(cntx->reply_builder()); | |||
rb->StartArray(4); | |||
rb->SendSimpleString(master_id_); | |||
rb->SendSimpleString(master_replid_); |
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 dont understand how this is the same as cluster node id ..
master_replid_ is set in this line
master_replid_ = GetRandomHex(eng, CONFIG_RUN_ID_SIZE);
I dont see where you that you overide it with cluster node id
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 PR splits the IDs into 2 separate ones, if --cluster_node_id
is set.
I.e. the ID used for master_replid_
is always random and can't be overridden, while the ID for cluster has a default value of master_replid_
but can be overridden if set as an argument.
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.
Ok sorry I miss understood your response on the other thread. So if this is not the same id it as the master_replid_ we should say that we do not support this flag for emulated cluster because in emulated cluster we reply the replica / master etl.remote_client_id_ which is the master_replid_ generated
tests/dragonfly/cluster_test.py
Outdated
@dfly_args({"proactor_threads": 4, "cluster_mode": "yes"}) | ||
async def test_cluster_replica_sets_non_owned_keys(df_local_factory): | ||
async def test_cluster_replica_sets_non_owned_keys( | ||
df_local_factory: DflyInstanceFactory, set_cluster_node_id: bool |
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.
you dont use this param in the test
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.
Sorry, leftovers. I decided to use the test below instead (test_cluster_native_client
)
@@ -570,14 +584,20 @@ async def test_cluster_blocking_command(df_server): | |||
await close_clients(c_master, c_master_admin) | |||
|
|||
|
|||
@pytest.mark.parametrize("set_cluster_node_id", [True, False]) | |||
@dfly_args({"proactor_threads": 4, "cluster_mode": "yes"}) | |||
async def test_cluster_native_client( |
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.
where do we run replicaof in this test? I cant find it..
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.
good catch! :)
I added it, even though it doesn't really matter too much, because we never reach out to the replicas.. should we?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have this in the test.. I guess it is not connecting to the replica as we thought, as the test would have failed before because we did not really replicated
# Make sure that getting a value from a replica works as well.
replica_response = await client.execute_command(
"get", "key0", target_nodes=aioredis.RedisCluster.REPLICAS
)
assert "value" in replica_response.values()
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.
again, very nice catch!
The reason why it worked before is that it followed MOVED
error replies to the relevant master, and got the response from it.
Now I use the connections directly, which does not follow MOVED
(I checked and it fails if I comment out the replicaof
flag), and now the test works.
@@ -46,12 +46,8 @@ async def wait_available_async(client: aioredis.Redis, timeout=10): | |||
start = time.time() | |||
while (time.time() - start) < timeout: | |||
try: | |||
await client.get("key") | |||
await client.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.
why did you change this?
we want here to make sure that server exits loading stage
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.
First, PING
does make sure that the server exits loading stage. We reply with an error if we don't:
$ redis-cli ping
(error) LOADING Dragonfly is loading the dataset in memory
This is by design: https://github.com/dragonflydb/dragonfly/blob/cluster-id/src/server/generic_family.cc#L1602
As for why: It's somewhat subtle.
We can't use GET
before we push a cluster config, as that would return an error. On the other hand, we can't push a config before replica finishes loading. So we simply can't use GET
for this scenario.
On the positive side, now we don't have the special handling of MOVED
error in this area :)
* feat(cluster): Add `--cluster_id` flag This flag sets the unique ID of a node in a cluster. It is UB (and bad) to set the same IDs to multiple nodes in the same cluster. If unset (default), the `master_replid` (previously known as `master_id`) is used. Fixes #2643 Related to #2636 * gh comments * oops - revert line removal * fix * replica * disallow cluster_node_id in emulated mode * fix replica test
…nfly ( v1.15.1 → v1.16.0 ) (#3354) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [docker.dragonflydb.io/dragonflydb/dragonfly](https://github.com/dragonflydb/dragonfly) | minor | `v1.15.1` -> `v1.16.0` | --- ### Release Notes <details> <summary>dragonflydb/dragonfly (docker.dragonflydb.io/dragonflydb/dragonfly)</summary> ### [`v1.16.0`](https://github.com/dragonflydb/dragonfly/releases/tag/v1.16.0) [Compare Source](https://github.com/dragonflydb/dragonfly/compare/v1.15.1...v1.16.0) ##### Dragonfly v1.16.0 Our spring release. We are getting closer to 2.0 with some very exciting features ahead. Stay tuned! Some prominent changes include: - Improved memory accounting of client connections ([#​2710](https://github.com/dragonflydb/dragonfly/issues/2710) [#​2755](https://github.com/dragonflydb/dragonfly/issues/2755) and [#​2692](https://github.com/dragonflydb/dragonfly/issues/2692) ) - FT.AGGREGATE call ([#​2413](https://github.com/dragonflydb/dragonfly/issues/2413)) - Properly handle and replicate Memcache flags ([#​2787](https://github.com/dragonflydb/dragonfly/issues/2787) [#​2807](https://github.com/dragonflydb/dragonfly/issues/2807)) - Intoduce BF.AGGREGATE BD.(M)ADD and BF.(M)EXISTS methods ([#​2801](https://github.com/dragonflydb/dragonfly/issues/2801)). Note, that it does not work with snapshots and replication yet. - Dragonfly builds natively on MacOS. We would love some help with extending the release pipeline to create a proper macos binary. - Following the requests from the Edge developers community, we added a basic HTTP API support! Try running Dragonfly with: `--expose_http_api` flag and then call `curl -X POST -d '["ping"]' localhost:6379/api`. We will follow up with more extensive docs later this month. - Lots of stability fixes, especially around Sidekiq and BullMQ workloads. ##### What's Changed - chore: make usan asan optional and enable them on CI by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2631](https://github.com/dragonflydb/dragonfly/pull/2631) - fix: missing manual trigger for daily sanitizers by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2682](https://github.com/dragonflydb/dragonfly/pull/2682) - bug(tiering): fix overflow in page offset calculation and wrong hash offset calculation by [@​theyueli](https://github.com/theyueli) in [https://github.com/dragonflydb/dragonfly/pull/2683](https://github.com/dragonflydb/dragonfly/pull/2683) - Chore: Fixed Docker Health Check by [@​manojks1999](https://github.com/manojks1999) in [https://github.com/dragonflydb/dragonfly/pull/2659](https://github.com/dragonflydb/dragonfly/pull/2659) - chore: Increase disk space in the coverage runs by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2684](https://github.com/dragonflydb/dragonfly/pull/2684) - fix(flushall): Decommit memory after releasing tables. by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2691](https://github.com/dragonflydb/dragonfly/pull/2691) - feat(server): Account for serializer's temporary buffer size by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2689](https://github.com/dragonflydb/dragonfly/pull/2689) - refactor: remove FULL-SYNC-CUT cmd [#​2687](https://github.com/dragonflydb/dragonfly/issues/2687) by [@​BorysTheDev](https://github.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/2688](https://github.com/dragonflydb/dragonfly/pull/2688) - chore: add malloc-based stats and decommit by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2692](https://github.com/dragonflydb/dragonfly/pull/2692) - feat(cluster): automatic slot migration finalization [#​2697](https://github.com/dragonflydb/dragonfly/issues/2697) by [@​BorysTheDev](https://github.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/2698](https://github.com/dragonflydb/dragonfly/pull/2698) - Basic FT.AGGREGATE by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2413](https://github.com/dragonflydb/dragonfly/pull/2413) - chore: little transaction cleanup by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2608](https://github.com/dragonflydb/dragonfly/pull/2608) - fix(channel store): add acquire/release pair in fast update path by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2704](https://github.com/dragonflydb/dragonfly/pull/2704) - chore: add ubuntu22 devcontainer by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2700](https://github.com/dragonflydb/dragonfly/pull/2700) - feat(cluster): Add `--cluster_id` flag by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2695](https://github.com/dragonflydb/dragonfly/pull/2695) - feat(server): Use mimalloc in SSL calls by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2710](https://github.com/dragonflydb/dragonfly/pull/2710) - chore: Pull helio with new BlockingCounter by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2711](https://github.com/dragonflydb/dragonfly/pull/2711) - chore(transaction): Simplify PollExecution by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2712](https://github.com/dragonflydb/dragonfly/pull/2712) - chore(transaction): Don't call GetLocalMask from blocking controller by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2715](https://github.com/dragonflydb/dragonfly/pull/2715) - chore: improve compatibility of EXPIRE functions with Redis by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2696](https://github.com/dragonflydb/dragonfly/pull/2696) - chore: disable flaky fuzzy migration test by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2716](https://github.com/dragonflydb/dragonfly/pull/2716) - chore: update sanitizers workflow by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2686](https://github.com/dragonflydb/dragonfly/pull/2686) - chore: Use c-ares for resolving hosts in `ProtocolClient` by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2719](https://github.com/dragonflydb/dragonfly/pull/2719) - Remove check-fail in ExpireIfNeeded and introduce DFLY LOAD by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2699](https://github.com/dragonflydb/dragonfly/pull/2699) - chore: Record cmd stat from invoke by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2720](https://github.com/dragonflydb/dragonfly/pull/2720) - fix(transaction): nullptr access on non transactional commands by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2724](https://github.com/dragonflydb/dragonfly/pull/2724) - fix(BgSave): async from sync by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2702](https://github.com/dragonflydb/dragonfly/pull/2702) - chore: remove core/fibers by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2723](https://github.com/dragonflydb/dragonfly/pull/2723) - fix(transaction): Replace with armed sync point by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2708](https://github.com/dragonflydb/dragonfly/pull/2708) - feat(json): Deserialize ReJSON format by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2725](https://github.com/dragonflydb/dragonfly/pull/2725) - feat: add flag masteruser by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2693](https://github.com/dragonflydb/dragonfly/pull/2693) - refactor: block list refactoring [#​2580](https://github.com/dragonflydb/dragonfly/issues/2580) by [@​BorysTheDev](https://github.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/2732](https://github.com/dragonflydb/dragonfly/pull/2732) - chore: fix DeduceExecMode by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2733](https://github.com/dragonflydb/dragonfly/pull/2733) - fix(cluster): Reply with correct `\n` / `\r\n` from `CLUSTER` sub cmd by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2731](https://github.com/dragonflydb/dragonfly/pull/2731) - chore: Introduce fiber stack allocator by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2730](https://github.com/dragonflydb/dragonfly/pull/2730) - fix(cluster): Save replica ID per replica by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2735](https://github.com/dragonflydb/dragonfly/pull/2735) - fix(ssl): Proper cleanup by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2742](https://github.com/dragonflydb/dragonfly/pull/2742) - chore: add skeleton files for flat_dfs code by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2738](https://github.com/dragonflydb/dragonfly/pull/2738) - chore: better error reporting when connecting to tls with plain socket by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2740](https://github.com/dragonflydb/dragonfly/pull/2740) - chore: Support json paths without root selector by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2747](https://github.com/dragonflydb/dragonfly/pull/2747) - chore: journal cleanup by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2749](https://github.com/dragonflydb/dragonfly/pull/2749) - refactor: remove start-slot-migration cmd [#​2727](https://github.com/dragonflydb/dragonfly/issues/2727) by [@​BorysTheDev](https://github.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/2728](https://github.com/dragonflydb/dragonfly/pull/2728) - feat(server): Add TLS usage to /metrics and `INFO MEMORY` by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2755](https://github.com/dragonflydb/dragonfly/pull/2755) - chore: preparations for adding flat json support by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2752](https://github.com/dragonflydb/dragonfly/pull/2752) - chore(transaction): Introduce RunCallback by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2760](https://github.com/dragonflydb/dragonfly/pull/2760) - feat(replication): Do not auto replicate different master by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2753](https://github.com/dragonflydb/dragonfly/pull/2753) - Improve Helm chart to be rendered locally and on machines where is not the application target by [@​fafg](https://github.com/fafg) in [https://github.com/dragonflydb/dragonfly/pull/2706](https://github.com/dragonflydb/dragonfly/pull/2706) - chore: preparation for basic http api by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2764](https://github.com/dragonflydb/dragonfly/pull/2764) - feat(server): Add metric for RDB save duration. by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2768](https://github.com/dragonflydb/dragonfly/pull/2768) - chore: fix flat_dfs read tests. by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2772](https://github.com/dragonflydb/dragonfly/pull/2772) - fix(ci): do not overwrite last_log_file among tests by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2759](https://github.com/dragonflydb/dragonfly/pull/2759) - feat(server): support cluster replication by [@​adiholden](https://github.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/2748](https://github.com/dragonflydb/dragonfly/pull/2748) - fix: fiber preempts on read path and OnCbFinish() clears fetched_items\_ by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2763](https://github.com/dragonflydb/dragonfly/pull/2763) - chore(ci): open last_log_file in append mode by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2776](https://github.com/dragonflydb/dragonfly/pull/2776) - doc(README): fix outdated expiry ranges description by [@​enjoy-binbin](https://github.com/enjoy-binbin) in [https://github.com/dragonflydb/dragonfly/pull/2779](https://github.com/dragonflydb/dragonfly/pull/2779) - Benchmark runner by [@​adiholden](https://github.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/2780](https://github.com/dragonflydb/dragonfly/pull/2780) - chore(replication-tests): add cache_mode on test replication all by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2685](https://github.com/dragonflydb/dragonfly/pull/2685) - feat(tiering): DiskStorage by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2770](https://github.com/dragonflydb/dragonfly/pull/2770) - chore: add a boilerplate for bloom filter family by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2782](https://github.com/dragonflydb/dragonfly/pull/2782) - chore: introduce conversion routines between JsonType and FlatJson by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2785](https://github.com/dragonflydb/dragonfly/pull/2785) - chore: Fix memcached flags not updated by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2787](https://github.com/dragonflydb/dragonfly/pull/2787) - chore: remove duplicate code from dash and simplify by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2765](https://github.com/dragonflydb/dragonfly/pull/2765) - chore: disable test_cluster_slot_migration by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2788](https://github.com/dragonflydb/dragonfly/pull/2788) - fix: new\[] delete\[] missmatch in disk_storage by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2792](https://github.com/dragonflydb/dragonfly/pull/2792) - fix: sanitizers clang build and clean up some warnings by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2793](https://github.com/dragonflydb/dragonfly/pull/2793) - chore: add bloom filter class by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2791](https://github.com/dragonflydb/dragonfly/pull/2791) - chore: add SBF data structure by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2795](https://github.com/dragonflydb/dragonfly/pull/2795) - chore(tiering): Disable compilation for MacOs by [@​dranikpg](https://github.com/dranikpg) in [https://github.com/dragonflydb/dragonfly/pull/2799](https://github.com/dragonflydb/dragonfly/pull/2799) - chore: fix daily build by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2798](https://github.com/dragonflydb/dragonfly/pull/2798) - chore: expose SBF via compact_object by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2797](https://github.com/dragonflydb/dragonfly/pull/2797) - fix(ci): malloc trim on sanitizers workflow by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2794](https://github.com/dragonflydb/dragonfly/pull/2794) - fix(cluster): Don't miss updates in FLUSHSLOTS by [@​chakaz](https://github.com/chakaz) in [https://github.com/dragonflydb/dragonfly/pull/2783](https://github.com/dragonflydb/dragonfly/pull/2783) - feat: add bf.(m)add and bf.(m)exists commands by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2801](https://github.com/dragonflydb/dragonfly/pull/2801) - fix: SBF memory leaks by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2803](https://github.com/dragonflydb/dragonfly/pull/2803) - chore: refactor StringFamily::Set to use CmdArgParser by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2800](https://github.com/dragonflydb/dragonfly/pull/2800) - fix: propagate memcached flags to replica by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2807](https://github.com/dragonflydb/dragonfly/pull/2807) - DFLYMIGRATE ACK refactoring by [@​BorysTheDev](https://github.com/BorysTheDev) in [https://github.com/dragonflydb/dragonfly/pull/2790](https://github.com/dragonflydb/dragonfly/pull/2790) - feat: add master lsn and journal_executed dcheck in replica via ping by [@​kostasrim](https://github.com/kostasrim) in [https://github.com/dragonflydb/dragonfly/pull/2778](https://github.com/dragonflydb/dragonfly/pull/2778) - fix: correct json response for errors by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2813](https://github.com/dragonflydb/dragonfly/pull/2813) - chore: bloom test - cover corner cases by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2806](https://github.com/dragonflydb/dragonfly/pull/2806) - bug(server): do not write lsn opcode to journal by [@​adiholden](https://github.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/2814](https://github.com/dragonflydb/dragonfly/pull/2814) - chore: Fix build by disabling the tests. by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2821](https://github.com/dragonflydb/dragonfly/pull/2821) - fix(replication): replication with multi shard sync enabled lagging by [@​adiholden](https://github.com/adiholden) in [https://github.com/dragonflydb/dragonfly/pull/2823](https://github.com/dragonflydb/dragonfly/pull/2823) - fix: io_uring/fibers bug in DnsResolve by [@​romange](https://github.com/romange) in [https://github.com/dragonflydb/dragonfly/pull/2825](https://github.com/dragonflydb/dragonfly/pull/2825) ##### New Contributors - [@​manojks1999](https://github.com/manojks1999) made their first contribution in [https://github.com/dragonflydb/dragonfly/pull/2659](https://github.com/dragonflydb/dragonfly/pull/2659) - [@​fafg](https://github.com/fafg) made their first contribution in [https://github.com/dragonflydb/dragonfly/pull/2706](https://github.com/dragonflydb/dragonfly/pull/2706) - [@​enjoy-binbin](https://github.com/enjoy-binbin) made their first contribution in [https://github.com/dragonflydb/dragonfly/pull/2779](https://github.com/dragonflydb/dragonfly/pull/2779) ##### Huge thanks to all the contributors! ❤️ 🇮🇱 🇺🇦 **Full Changelog**: dragonflydb/dragonfly@v1.15.0...v1.16.0 </details> <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNzkuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI3OS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19--> Co-authored-by: repo-jeeves[bot] <106431701+repo-jeeves[bot]@users.noreply.github.com>
This flag sets the unique ID of a node in a cluster.
It is UB (and bad) to set the same ID to multiple nodes in a cluster.
If unset (default), the
master_replid
(previously known asmaster_id
) is used.Fixes #2643
Related to #2636