2015-07-27 14:55:45 +02:00
|
|
|
#ifndef __CLUSTER_H
|
|
|
|
#define __CLUSTER_H
|
2013-10-09 15:37:20 +02:00
|
|
|
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
|
|
* Redis cluster data structures, defines, exported API.
|
|
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
|
2015-07-27 14:55:45 +02:00
|
|
|
#define CLUSTER_SLOTS 16384
|
2021-10-19 01:28:27 -04:00
|
|
|
#define CLUSTER_OK 0 /* Everything looks ok */
|
|
|
|
#define CLUSTER_FAIL 1 /* The cluster can't work */
|
|
|
|
#define CLUSTER_NAMELEN 40 /* sha1 hex length */
|
2015-07-27 14:55:45 +02:00
|
|
|
#define CLUSTER_PORT_INCR 10000 /* Cluster port = baseport + PORT_INCR */
|
2013-10-09 15:37:20 +02:00
|
|
|
|
2014-07-31 14:51:05 -04:00
|
|
|
/* The following defines are amount of time, sometimes expressed as
|
2013-10-09 15:37:20 +02:00
|
|
|
* multiplicators of the node timeout value (when ending with MULT). */
|
2015-07-27 14:55:45 +02:00
|
|
|
#define CLUSTER_FAIL_REPORT_VALIDITY_MULT 2 /* Fail report validity. */
|
|
|
|
#define CLUSTER_FAIL_UNDO_TIME_MULT 2 /* Undo fail if master is back. */
|
|
|
|
#define CLUSTER_MF_TIMEOUT 5000 /* Milliseconds to do a manual failover. */
|
|
|
|
#define CLUSTER_MF_PAUSE_MULT 2 /* Master pause manual failover mult. */
|
2015-12-11 09:19:06 +01:00
|
|
|
#define CLUSTER_SLAVE_MIGRATION_DELAY 5000 /* Delay for slave migration. */
|
2013-10-09 15:37:20 +02:00
|
|
|
|
2014-03-07 13:19:09 +01:00
|
|
|
/* Redirection errors returned by getNodeByQuery(). */
|
2015-07-27 14:55:45 +02:00
|
|
|
#define CLUSTER_REDIR_NONE 0 /* Node can serve the request. */
|
|
|
|
#define CLUSTER_REDIR_CROSS_SLOT 1 /* -CROSSSLOT request. */
|
|
|
|
#define CLUSTER_REDIR_UNSTABLE 2 /* -TRYAGAIN redirection required */
|
|
|
|
#define CLUSTER_REDIR_ASK 3 /* -ASK redirection required. */
|
|
|
|
#define CLUSTER_REDIR_MOVED 4 /* -MOVED redirection required. */
|
|
|
|
#define CLUSTER_REDIR_DOWN_STATE 5 /* -CLUSTERDOWN, global state. */
|
|
|
|
#define CLUSTER_REDIR_DOWN_UNBOUND 6 /* -CLUSTERDOWN, unbound slot. */
|
2019-10-30 00:11:17 -07:00
|
|
|
#define CLUSTER_REDIR_DOWN_RO_STATE 7 /* -CLUSTERDOWN, allow reads. */
|
2014-03-07 13:19:09 +01:00
|
|
|
|
2013-10-09 15:37:20 +02:00
|
|
|
struct clusterNode;
|
|
|
|
|
|
|
|
/* clusterLink encapsulates everything needed to talk with a remote node. */
|
|
|
|
typedef struct clusterLink {
|
2013-10-09 16:18:33 +02:00
|
|
|
mstime_t ctime; /* Link creation time */
|
2019-09-12 10:56:54 +03:00
|
|
|
connection *conn; /* Connection to remote node */
|
2022-11-01 22:26:44 -04:00
|
|
|
list *send_msg_queue; /* List of messages to be sent */
|
|
|
|
size_t head_msg_send_offset; /* Number of bytes already sent of message at head of queue */
|
|
|
|
unsigned long long send_msg_queue_mem; /* Memory in bytes used by message queue */
|
2020-10-27 16:36:00 +02:00
|
|
|
char *rcvbuf; /* Packet reception buffer */
|
|
|
|
size_t rcvbuf_len; /* Used size of rcvbuf */
|
2020-12-16 16:19:12 -05:00
|
|
|
size_t rcvbuf_alloc; /* Allocated size of rcvbuf */
|
2021-12-16 21:56:59 -08:00
|
|
|
struct clusterNode *node; /* Node related to this link. Initialized to NULL when unknown */
|
|
|
|
int inbound; /* 1 if this link is an inbound link accepted from the related node */
|
2013-10-09 15:37:20 +02:00
|
|
|
} clusterLink;
|
|
|
|
|
2014-01-29 12:17:16 +01:00
|
|
|
/* Cluster node flags and macros. */
|
2015-07-27 14:55:45 +02:00
|
|
|
#define CLUSTER_NODE_MASTER 1 /* The node is a master */
|
|
|
|
#define CLUSTER_NODE_SLAVE 2 /* The node is a slave */
|
|
|
|
#define CLUSTER_NODE_PFAIL 4 /* Failure? Need acknowledge */
|
|
|
|
#define CLUSTER_NODE_FAIL 8 /* The node is believed to be malfunctioning */
|
|
|
|
#define CLUSTER_NODE_MYSELF 16 /* This node is myself */
|
|
|
|
#define CLUSTER_NODE_HANDSHAKE 32 /* We have still to exchange the first ping */
|
|
|
|
#define CLUSTER_NODE_NOADDR 64 /* We don't know the address of this node */
|
|
|
|
#define CLUSTER_NODE_MEET 128 /* Send a MEET message to this node */
|
Squash merging 125 typo/grammar/comment/doc PRs (#7773)
List of squashed commits or PRs
===============================
commit 66801ea
Author: hwware <wen.hui.ware@gmail.com>
Date: Mon Jan 13 00:54:31 2020 -0500
typo fix in acl.c
commit 46f55db
Author: Itamar Haber <itamar@redislabs.com>
Date: Sun Sep 6 18:24:11 2020 +0300
Updates a couple of comments
Specifically:
* RM_AutoMemory completed instead of pointing to docs
* Updated link to custom type doc
commit 61a2aa0
Author: xindoo <xindoo@qq.com>
Date: Tue Sep 1 19:24:59 2020 +0800
Correct errors in code comments
commit a5871d1
Author: yz1509 <pro-756@qq.com>
Date: Tue Sep 1 18:36:06 2020 +0800
fix typos in module.c
commit 41eede7
Author: bookug <bookug@qq.com>
Date: Sat Aug 15 01:11:33 2020 +0800
docs: fix typos in comments
commit c303c84
Author: lazy-snail <ws.niu@outlook.com>
Date: Fri Aug 7 11:15:44 2020 +0800
fix spelling in redis.conf
commit 1eb76bf
Author: zhujian <zhujianxyz@gmail.com>
Date: Thu Aug 6 15:22:10 2020 +0800
add a missing 'n' in comment
commit 1530ec2
Author: Daniel Dai <764122422@qq.com>
Date: Mon Jul 27 00:46:35 2020 -0400
fix spelling in tracking.c
commit e517b31
Author: Hunter-Chen <huntcool001@gmail.com>
Date: Fri Jul 17 22:33:32 2020 +0800
Update redis.conf
Co-authored-by: Itamar Haber <itamar@redislabs.com>
commit c300eff
Author: Hunter-Chen <huntcool001@gmail.com>
Date: Fri Jul 17 22:33:23 2020 +0800
Update redis.conf
Co-authored-by: Itamar Haber <itamar@redislabs.com>
commit 4c058a8
Author: 陈浩鹏 <chenhaopeng@heytea.com>
Date: Thu Jun 25 19:00:56 2020 +0800
Grammar fix and clarification
commit 5fcaa81
Author: bodong.ybd <bodong.ybd@alibaba-inc.com>
Date: Fri Jun 19 10:09:00 2020 +0800
Fix typos
commit 4caca9a
Author: Pruthvi P <pruthvi@ixigo.com>
Date: Fri May 22 00:33:22 2020 +0530
Fix typo eviciton => eviction
commit b2a25f6
Author: Brad Dunbar <dunbarb2@gmail.com>
Date: Sun May 17 12:39:59 2020 -0400
Fix a typo.
commit 12842ae
Author: hwware <wen.hui.ware@gmail.com>
Date: Sun May 3 17:16:59 2020 -0400
fix spelling in redis conf
commit ddba07c
Author: Chris Lamb <chris@chris-lamb.co.uk>
Date: Sat May 2 23:25:34 2020 +0100
Correct a "conflicts" spelling error.
commit 8fc7bf2
Author: Nao YONASHIRO <yonashiro@r.recruit.co.jp>
Date: Thu Apr 30 10:25:27 2020 +0900
docs: fix EXPIRE_FAST_CYCLE_DURATION to ACTIVE_EXPIRE_CYCLE_FAST_DURATION
commit 9b2b67a
Author: Brad Dunbar <dunbarb2@gmail.com>
Date: Fri Apr 24 11:46:22 2020 -0400
Fix a typo.
commit 0746f10
Author: devilinrust <63737265+devilinrust@users.noreply.github.com>
Date: Thu Apr 16 00:17:53 2020 +0200
Fix typos in server.c
commit 92b588d
Author: benjessop12 <56115861+benjessop12@users.noreply.github.com>
Date: Mon Apr 13 13:43:55 2020 +0100
Fix spelling mistake in lazyfree.c
commit 1da37aa
Merge: 2d4ba28 af347a8
Author: hwware <wen.hui.ware@gmail.com>
Date: Thu Mar 5 22:41:31 2020 -0500
Merge remote-tracking branch 'upstream/unstable' into expiretypofix
commit 2d4ba28
Author: hwware <wen.hui.ware@gmail.com>
Date: Mon Mar 2 00:09:40 2020 -0500
fix typo in expire.c
commit 1a746f7
Author: SennoYuki <minakami1yuki@gmail.com>
Date: Thu Feb 27 16:54:32 2020 +0800
fix typo
commit 8599b1a
Author: dongheejeong <donghee950403@gmail.com>
Date: Sun Feb 16 20:31:43 2020 +0000
Fix typo in server.c
commit f38d4e8
Author: hwware <wen.hui.ware@gmail.com>
Date: Sun Feb 2 22:58:38 2020 -0500
fix typo in evict.c
commit fe143fc
Author: Leo Murillo <leonardo.murillo@gmail.com>
Date: Sun Feb 2 01:57:22 2020 -0600
Fix a few typos in redis.conf
commit 1ab4d21
Author: viraja1 <anchan.viraj@gmail.com>
Date: Fri Dec 27 17:15:58 2019 +0530
Fix typo in Latency API docstring
commit ca1f70e
Author: gosth <danxuedexing@qq.com>
Date: Wed Dec 18 15:18:02 2019 +0800
fix typo in sort.c
commit a57c06b
Author: ZYunH <zyunhjob@163.com>
Date: Mon Dec 16 22:28:46 2019 +0800
fix-zset-typo
commit b8c92b5
Author: git-hulk <hulk.website@gmail.com>
Date: Mon Dec 16 15:51:42 2019 +0800
FIX: typo in cluster.c, onformation->information
commit 9dd981c
Author: wujm2007 <jim.wujm@gmail.com>
Date: Mon Dec 16 09:37:52 2019 +0800
Fix typo
commit e132d7a
Author: Sebastien Williams-Wynn <s.williamswynn.mail@gmail.com>
Date: Fri Nov 15 00:14:07 2019 +0000
Minor typo change
commit 47f44d5
Author: happynote3966 <01ssrmikururudevice01@gmail.com>
Date: Mon Nov 11 22:08:48 2019 +0900
fix comment typo in redis-cli.c
commit b8bdb0d
Author: fulei <fulei@kuaishou.com>
Date: Wed Oct 16 18:00:17 2019 +0800
Fix a spelling mistake of comments in defragDictBucketCallback
commit 0def46a
Author: fulei <fulei@kuaishou.com>
Date: Wed Oct 16 13:09:27 2019 +0800
fix some spelling mistakes of comments in defrag.c
commit f3596fd
Author: Phil Rajchgot <tophil@outlook.com>
Date: Sun Oct 13 02:02:32 2019 -0400
Typo and grammar fixes
Redis and its documentation are great -- just wanted to submit a few corrections in the spirit of Hacktoberfest. Thanks for all your work on this project. I use it all the time and it works beautifully.
commit 2b928cd
Author: KangZhiDong <worldkzd@gmail.com>
Date: Sun Sep 1 07:03:11 2019 +0800
fix typos
commit 33aea14
Author: Axlgrep <axlgrep@gmail.com>
Date: Tue Aug 27 11:02:18 2019 +0800
Fixed eviction spelling issues
commit e282a80
Author: Simen Flatby <simen@oms.no>
Date: Tue Aug 20 15:25:51 2019 +0200
Update comments to reflect prop name
In the comments the prop is referenced as replica-validity-factor,
but it is really named cluster-replica-validity-factor.
commit 74d1f9a
Author: Jim Green <jimgreen2013@qq.com>
Date: Tue Aug 20 20:00:31 2019 +0800
fix comment error, the code is ok
commit eea1407
Author: Liao Tonglang <liaotonglang@gmail.com>
Date: Fri May 31 10:16:18 2019 +0800
typo fix
fix cna't to can't
commit 0da553c
Author: KAWACHI Takashi <tkawachi@gmail.com>
Date: Wed Jul 17 00:38:16 2019 +0900
Fix typo
commit 7fc8fb6
Author: Michael Prokop <mika@grml.org>
Date: Tue May 28 17:58:42 2019 +0200
Typo fixes
s/familar/familiar/
s/compatiblity/compatibility/
s/ ot / to /
s/itsef/itself/
commit 5f46c9d
Author: zhumoing <34539422+zhumoing@users.noreply.github.com>
Date: Tue May 21 21:16:50 2019 +0800
typo-fixes
typo-fixes
commit 321dfe1
Author: wxisme <850885154@qq.com>
Date: Sat Mar 16 15:10:55 2019 +0800
typo fix
commit b4fb131
Merge: 267e0e6 3df1eb8
Author: Nikitas Bastas <nikitasbst@gmail.com>
Date: Fri Feb 8 22:55:45 2019 +0200
Merge branch 'unstable' of antirez/redis into unstable
commit 267e0e6
Author: Nikitas Bastas <nikitasbst@gmail.com>
Date: Wed Jan 30 21:26:04 2019 +0200
Minor typo fix
commit 30544e7
Author: inshal96 <39904558+inshal96@users.noreply.github.com>
Date: Fri Jan 4 16:54:50 2019 +0500
remove an extra 'a' in the comments
commit 337969d
Author: BrotherGao <yangdongheng11@gmail.com>
Date: Sat Dec 29 12:37:29 2018 +0800
fix typo in redis.conf
commit 9f4b121
Merge: 423a030 e504583
Author: BrotherGao <yangdongheng@xiaomi.com>
Date: Sat Dec 29 11:41:12 2018 +0800
Merge branch 'unstable' of antirez/redis into unstable
commit 423a030
Merge: 42b02b7 46a51cd
Author: 杨东衡 <yangdongheng@xiaomi.com>
Date: Tue Dec 4 23:56:11 2018 +0800
Merge branch 'unstable' of antirez/redis into unstable
commit 42b02b7
Merge: 68c0e6e b8febe6
Author: Dongheng Yang <yangdongheng11@gmail.com>
Date: Sun Oct 28 15:54:23 2018 +0800
Merge pull request #1 from antirez/unstable
update local data
commit 714b589
Author: Christian <crifei93@gmail.com>
Date: Fri Dec 28 01:17:26 2018 +0100
fix typo "resulution"
commit e23259d
Author: garenchan <1412950785@qq.com>
Date: Wed Dec 26 09:58:35 2018 +0800
fix typo: segfauls -> segfault
commit a9359f8
Author: xjp <jianping_xie@aliyun.com>
Date: Tue Dec 18 17:31:44 2018 +0800
Fixed REDISMODULE_H spell bug
commit a12c3e4
Author: jdiaz <jrd.palacios@gmail.com>
Date: Sat Dec 15 23:39:52 2018 -0600
Fixes hyperloglog hash function comment block description
commit 770eb11
Author: 林上耀 <1210tom@163.com>
Date: Sun Nov 25 17:16:10 2018 +0800
fix typo
commit fd97fbb
Author: Chris Lamb <chris@chris-lamb.co.uk>
Date: Fri Nov 23 17:14:01 2018 +0100
Correct "unsupported" typo.
commit a85522d
Author: Jungnam Lee <jungnam.lee@oracle.com>
Date: Thu Nov 8 23:01:29 2018 +0900
fix typo in test comments
commit ade8007
Author: Arun Kumar <palerdot@users.noreply.github.com>
Date: Tue Oct 23 16:56:35 2018 +0530
Fixed grammatical typo
Fixed typo for word 'dictionary'
commit 869ee39
Author: Hamid Alaei <hamid.a85@gmail.com>
Date: Sun Aug 12 16:40:02 2018 +0430
fix documentations: (ThreadSafeContextStart/Stop -> ThreadSafeContextLock/Unlock), minor typo
commit f89d158
Author: Mayank Jain <mayankjain255@gmail.com>
Date: Tue Jul 31 23:01:21 2018 +0530
Updated README.md with some spelling corrections.
Made correction in spelling of some misspelled words.
commit 892198e
Author: dsomeshwar <someshwar.dhayalan@gmail.com>
Date: Sat Jul 21 23:23:04 2018 +0530
typo fix
commit 8a4d780
Author: Itamar Haber <itamar@redislabs.com>
Date: Mon Apr 30 02:06:52 2018 +0300
Fixes some typos
commit e3acef6
Author: Noah Rosamilia <ivoahivoah@gmail.com>
Date: Sat Mar 3 23:41:21 2018 -0500
Fix typo in /deps/README.md
commit 04442fb
Author: WuYunlong <xzsyeb@126.com>
Date: Sat Mar 3 10:32:42 2018 +0800
Fix typo in readSyncBulkPayload() comment.
commit 9f36880
Author: WuYunlong <xzsyeb@126.com>
Date: Sat Mar 3 10:20:37 2018 +0800
replication.c comment: run_id -> replid.
commit f866b4a
Author: Francesco 'makevoid' Canessa <makevoid@gmail.com>
Date: Thu Feb 22 22:01:56 2018 +0000
fix comment typo in server.c
commit 0ebc69b
Author: 줍 <jubee0124@gmail.com>
Date: Mon Feb 12 16:38:48 2018 +0900
Fix typo in redis.conf
Fix `five behaviors` to `eight behaviors` in [this sentence ](antirez/redis@unstable/redis.conf#L564)
commit b50a620
Author: martinbroadhurst <martinbroadhurst@users.noreply.github.com>
Date: Thu Dec 28 12:07:30 2017 +0000
Fix typo in valgrind.sup
commit 7d8f349
Author: Peter Boughton <peter@sorcerersisle.com>
Date: Mon Nov 27 19:52:19 2017 +0000
Update CONTRIBUTING; refer doc updates to redis-doc repo.
commit 02dec7e
Author: Klauswk <klauswk1@hotmail.com>
Date: Tue Oct 24 16:18:38 2017 -0200
Fix typo in comment
commit e1efbc8
Author: chenshi <baiwfg2@gmail.com>
Date: Tue Oct 3 18:26:30 2017 +0800
Correct two spelling errors of comments
commit 93327d8
Author: spacewander <spacewanderlzx@gmail.com>
Date: Wed Sep 13 16:47:24 2017 +0800
Update the comment for OBJ_ENCODING_EMBSTR_SIZE_LIMIT's value
The value of OBJ_ENCODING_EMBSTR_SIZE_LIMIT is 44 now instead of 39.
commit 63d361f
Author: spacewander <spacewanderlzx@gmail.com>
Date: Tue Sep 12 15:06:42 2017 +0800
Fix <prevlen> related doc in ziplist.c
According to the definition of ZIP_BIG_PREVLEN and other related code,
the guard of single byte <prevlen> should be 254 instead of 255.
commit ebe228d
Author: hanael80 <hanael80@gmail.com>
Date: Tue Aug 15 09:09:40 2017 +0900
Fix typo
commit 6b696e6
Author: Matt Robenolt <matt@ydekproductions.com>
Date: Mon Aug 14 14:50:47 2017 -0700
Fix typo in LATENCY DOCTOR output
commit a2ec6ae
Author: caosiyang <caosiyang@qiyi.com>
Date: Tue Aug 15 14:15:16 2017 +0800
Fix a typo: form => from
commit 3ab7699
Author: caosiyang <caosiyang@qiyi.com>
Date: Thu Aug 10 18:40:33 2017 +0800
Fix a typo: replicationFeedSlavesFromMaster() => replicationFeedSlavesFromMasterStream()
commit 72d43ef
Author: caosiyang <caosiyang@qiyi.com>
Date: Tue Aug 8 15:57:25 2017 +0800
fix a typo: servewr => server
commit 707c958
Author: Bo Cai <charpty@gmail.com>
Date: Wed Jul 26 21:49:42 2017 +0800
redis-cli.c typo: conut -> count.
Signed-off-by: Bo Cai <charpty@gmail.com>
commit b9385b2
Author: JackDrogon <jack.xsuperman@gmail.com>
Date: Fri Jun 30 14:22:31 2017 +0800
Fix some spell problems
commit 20d9230
Author: akosel <aaronjkosel@gmail.com>
Date: Sun Jun 4 19:35:13 2017 -0500
Fix typo
commit b167bfc
Author: Krzysiek Witkowicz <krzysiekwitkowicz@gmail.com>
Date: Mon May 22 21:32:27 2017 +0100
Fix #4008 small typo in comment
commit 2b78ac8
Author: Jake Clarkson <jacobwclarkson@gmail.com>
Date: Wed Apr 26 15:49:50 2017 +0100
Correct typo in tests/unit/hyperloglog.tcl
commit b0f1cdb
Author: Qi Luo <qiluo-msft@users.noreply.github.com>
Date: Wed Apr 19 14:25:18 2017 -0700
Fix typo
commit a90b0f9
Author: charsyam <charsyam@naver.com>
Date: Thu Mar 16 18:19:53 2017 +0900
fix typos
fix typos
fix typos
commit 8430a79
Author: Richard Hart <richardhart92@gmail.com>
Date: Mon Mar 13 22:17:41 2017 -0400
Fixed log message typo in listenToPort.
commit 481a1c2
Author: Vinod Kumar <kumar003vinod@gmail.com>
Date: Sun Jan 15 23:04:51 2017 +0530
src/db.c: Correct "save" -> "safe" typo
commit 586b4d3
Author: wangshaonan <wshn13@gmail.com>
Date: Wed Dec 21 20:28:27 2016 +0800
Fix typo they->the in helloworld.c
commit c1c4b5e
Author: Jenner <hypxm@qq.com>
Date: Mon Dec 19 16:39:46 2016 +0800
typo error
commit 1ee1a3f
Author: tielei <43289893@qq.com>
Date: Mon Jul 18 13:52:25 2016 +0800
fix some comments
commit 11a41fb
Author: Otto Kekäläinen <otto@seravo.fi>
Date: Sun Jul 3 10:23:55 2016 +0100
Fix spelling in documentation and comments
commit 5fb5d82
Author: francischan <f1ancis621@gmail.com>
Date: Tue Jun 28 00:19:33 2016 +0800
Fix outdated comments about redis.c file.
It should now refer to server.c file.
commit 6b254bc
Author: lmatt-bit <lmatt123n@gmail.com>
Date: Thu Apr 21 21:45:58 2016 +0800
Refine the comment of dictRehashMilliseconds func
SLAVECONF->REPLCONF in comment - by andyli029
commit ee9869f
Author: clark.kang <charsyam@naver.com>
Date: Tue Mar 22 11:09:51 2016 +0900
fix typos
commit f7b3b11
Author: Harisankar H <harisankarh@gmail.com>
Date: Wed Mar 9 11:49:42 2016 +0530
Typo correction: "faield" --> "failed"
Typo correction: "faield" --> "failed"
commit 3fd40fc
Author: Itamar Haber <itamar@redislabs.com>
Date: Thu Feb 25 10:31:51 2016 +0200
Fixes a typo in comments
commit 621c160
Author: Prayag Verma <prayag.verma@gmail.com>
Date: Mon Feb 1 12:36:20 2016 +0530
Fix typo in Readme.md
Spelling mistakes -
`eviciton` > `eviction`
`familar` > `familiar`
commit d7d07d6
Author: WonCheol Lee <toctoc21c@gmail.com>
Date: Wed Dec 30 15:11:34 2015 +0900
Typo fixed
commit a4dade7
Author: Felix Bünemann <buenemann@louis.info>
Date: Mon Dec 28 11:02:55 2015 +0100
[ci skip] Improve supervised upstart config docs
This mentions that "expect stop" is required for supervised upstart
to work correctly. See http://upstart.ubuntu.com/cookbook/#expect-stop
for an explanation.
commit d9caba9
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:30:03 2015 +1100
README: Remove trailing whitespace
commit 72d42e5
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:29:32 2015 +1100
README: Fix typo. th => the
commit dd6e957
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:29:20 2015 +1100
README: Fix typo. familar => familiar
commit 3a12b23
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:28:54 2015 +1100
README: Fix typo. eviciton => eviction
commit 2d1d03b
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:21:45 2015 +1100
README: Fix typo. sever => server
commit 3973b06
Author: Itamar Haber <itamar@garantiadata.com>
Date: Sat Dec 19 17:01:20 2015 +0200
Typo fix
commit 4f2e460
Author: Steve Gao <fu@2token.com>
Date: Fri Dec 4 10:22:05 2015 +0800
Update README - fix typos
commit b21667c
Author: binyan <binbin.yan@nokia.com>
Date: Wed Dec 2 22:48:37 2015 +0800
delete redundancy color judge in sdscatcolor
commit 88894c7
Author: binyan <binbin.yan@nokia.com>
Date: Wed Dec 2 22:14:42 2015 +0800
the example output shoule be HelloWorld
commit 2763470
Author: binyan <binbin.yan@nokia.com>
Date: Wed Dec 2 17:41:39 2015 +0800
modify error word keyevente
Signed-off-by: binyan <binbin.yan@nokia.com>
commit 0847b3d
Author: Bruno Martins <bscmartins@gmail.com>
Date: Wed Nov 4 11:37:01 2015 +0000
typo
commit bbb9e9e
Author: dawedawe <dawedawe@gmx.de>
Date: Fri Mar 27 00:46:41 2015 +0100
typo: zimap -> zipmap
commit 5ed297e
Author: Axel Advento <badwolf.bloodseeker.rev@gmail.com>
Date: Tue Mar 3 15:58:29 2015 +0800
Fix 'salve' typos to 'slave'
commit edec9d6
Author: LudwikJaniuk <ludvig.janiuk@gmail.com>
Date: Wed Jun 12 14:12:47 2019 +0200
Update README.md
Co-Authored-By: Qix <Qix-@users.noreply.github.com>
commit 692a7af
Author: LudwikJaniuk <ludvig.janiuk@gmail.com>
Date: Tue May 28 14:32:04 2019 +0200
grammar
commit d962b0a
Author: Nick Frost <nickfrostatx@gmail.com>
Date: Wed Jul 20 15:17:12 2016 -0700
Minor grammar fix
commit 24fff01aaccaf5956973ada8c50ceb1462e211c6 (typos)
Author: Chad Miller <chadm@squareup.com>
Date: Tue Sep 8 13:46:11 2020 -0400
Fix faulty comment about operation of unlink()
commit 3cd5c1f3326c52aa552ada7ec797c6bb16452355
Author: Kevin <kevin.xgr@gmail.com>
Date: Wed Nov 20 00:13:50 2019 +0800
Fix typo in server.c.
From a83af59 Mon Sep 17 00:00:00 2001
From: wuwo <wuwo@wacai.com>
Date: Fri, 17 Mar 2017 20:37:45 +0800
Subject: [PATCH] falure to failure
From c961896 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B7=A6=E6=87=B6?= <veficos@gmail.com>
Date: Sat, 27 May 2017 15:33:04 +0800
Subject: [PATCH] fix typo
From e600ef2 Mon Sep 17 00:00:00 2001
From: "rui.zou" <rui.zou@yunify.com>
Date: Sat, 30 Sep 2017 12:38:15 +0800
Subject: [PATCH] fix a typo
From c7d07fa Mon Sep 17 00:00:00 2001
From: Alexandre Perrin <alex@kaworu.ch>
Date: Thu, 16 Aug 2018 10:35:31 +0200
Subject: [PATCH] deps README.md typo
From b25cb67 Mon Sep 17 00:00:00 2001
From: Guy Korland <gkorland@gmail.com>
Date: Wed, 26 Sep 2018 10:55:37 +0300
Subject: [PATCH 1/2] fix typos in header
From ad28ca6 Mon Sep 17 00:00:00 2001
From: Guy Korland <gkorland@gmail.com>
Date: Wed, 26 Sep 2018 11:02:36 +0300
Subject: [PATCH 2/2] fix typos
commit 34924cdedd8552466fc22c1168d49236cb7ee915
Author: Adrian Lynch <adi_ady_ade@hotmail.com>
Date: Sat Apr 4 21:59:15 2015 +0100
Typos fixed
commit fd2a1e7
Author: Jan <jsteemann@users.noreply.github.com>
Date: Sat Oct 27 19:13:01 2018 +0200
Fix typos
Fix typos
commit e14e47c1a234b53b0e103c5f6a1c61481cbcbb02
Author: Andy Lester <andy@petdance.com>
Date: Fri Aug 2 22:30:07 2019 -0500
Fix multiple misspellings of "following"
commit 79b948ce2dac6b453fe80995abbcaac04c213d5a
Author: Andy Lester <andy@petdance.com>
Date: Fri Aug 2 22:24:28 2019 -0500
Fix misspelling of create-cluster
commit 1fffde52666dc99ab35efbd31071a4c008cb5a71
Author: Andy Lester <andy@petdance.com>
Date: Wed Jul 31 17:57:56 2019 -0500
Fix typos
commit 204c9ba9651e9e05fd73936b452b9a30be456cfe
Author: Xiaobo Zhu <xiaobo.zhu@shopee.com>
Date: Tue Aug 13 22:19:25 2019 +0800
fix typos
Squashed commit of the following:
commit 1d9aaf8
Author: danmedani <danmedani@gmail.com>
Date: Sun Aug 2 11:40:26 2015 -0700
README typo fix.
Squashed commit of the following:
commit 32bfa7c
Author: Erik Dubbelboer <erik@dubbelboer.com>
Date: Mon Jul 6 21:15:08 2015 +0200
Fixed grammer
Squashed commit of the following:
commit b24f69c
Author: Sisir Koppaka <sisir.koppaka@gmail.com>
Date: Mon Mar 2 22:38:45 2015 -0500
utils/hashtable/rehashing.c: Fix typos
Squashed commit of the following:
commit 4e04082
Author: Erik Dubbelboer <erik@dubbelboer.com>
Date: Mon Mar 23 08:22:21 2015 +0000
Small config file documentation improvements
Squashed commit of the following:
commit acb8773
Author: ctd1500 <ctd1500@gmail.com>
Date: Fri May 8 01:52:48 2015 -0700
Typo and grammar fixes in readme
commit 2eb75b6
Author: ctd1500 <ctd1500@gmail.com>
Date: Fri May 8 01:36:18 2015 -0700
fixed redis.conf comment
Squashed commit of the following:
commit a8249a2
Author: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Fri Dec 11 11:39:52 2015 +0530
Revise correction of typos.
Squashed commit of the following:
commit 3c02028
Author: zhaojun11 <zhaojun11@jd.com>
Date: Wed Jan 17 19:05:28 2018 +0800
Fix typos include two code typos in cluster.c and latency.c
Squashed commit of the following:
commit 9dba47c
Author: q191201771 <191201771@qq.com>
Date: Sat Jan 4 11:31:04 2020 +0800
fix function listCreate comment in adlist.c
Update src/server.c
commit 2c7c2cb536e78dd211b1ac6f7bda00f0f54faaeb
Author: charpty <charpty@gmail.com>
Date: Tue May 1 23:16:59 2018 +0800
server.c typo: modules system dictionary type comment
Signed-off-by: charpty <charpty@gmail.com>
commit a8395323fb63cb59cb3591cb0f0c8edb7c29a680
Author: Itamar Haber <itamar@redislabs.com>
Date: Sun May 6 00:25:18 2018 +0300
Updates test_helper.tcl's help with undocumented options
Specifically:
* Host
* Port
* Client
commit bde6f9ced15755cd6407b4af7d601b030f36d60b
Author: wxisme <850885154@qq.com>
Date: Wed Aug 8 15:19:19 2018 +0800
fix comments in deps files
commit 3172474ba991532ab799ee1873439f3402412331
Author: wxisme <850885154@qq.com>
Date: Wed Aug 8 14:33:49 2018 +0800
fix some comments
commit 01b6f2b6858b5cf2ce4ad5092d2c746e755f53f0
Author: Thor Juhasz <thor@juhasz.pro>
Date: Sun Nov 18 14:37:41 2018 +0100
Minor fixes to comments
Found some parts a little unclear on a first read, which prompted me to have a better look at the file and fix some minor things I noticed.
Fixing minor typos and grammar. There are no changes to configuration options.
These changes are only meant to help the user better understand the explanations to the various configuration options
2020-09-10 13:43:38 +03:00
|
|
|
#define CLUSTER_NODE_MIGRATE_TO 256 /* Master eligible for replica migration. */
|
|
|
|
#define CLUSTER_NODE_NOFAILOVER 512 /* Slave will not try to failover. */
|
2015-07-27 14:55:45 +02:00
|
|
|
#define CLUSTER_NODE_NULL_NAME "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
2013-10-09 15:37:20 +02:00
|
|
|
|
2015-07-27 14:55:45 +02:00
|
|
|
#define nodeIsMaster(n) ((n)->flags & CLUSTER_NODE_MASTER)
|
|
|
|
#define nodeIsSlave(n) ((n)->flags & CLUSTER_NODE_SLAVE)
|
|
|
|
#define nodeInHandshake(n) ((n)->flags & CLUSTER_NODE_HANDSHAKE)
|
|
|
|
#define nodeHasAddr(n) (!((n)->flags & CLUSTER_NODE_NOADDR))
|
|
|
|
#define nodeWithoutAddr(n) ((n)->flags & CLUSTER_NODE_NOADDR)
|
|
|
|
#define nodeTimedOut(n) ((n)->flags & CLUSTER_NODE_PFAIL)
|
|
|
|
#define nodeFailed(n) ((n)->flags & CLUSTER_NODE_FAIL)
|
2018-03-14 13:46:36 +01:00
|
|
|
#define nodeCantFailover(n) ((n)->flags & CLUSTER_NODE_NOFAILOVER)
|
2014-01-29 12:17:16 +01:00
|
|
|
|
2014-10-07 09:51:55 +02:00
|
|
|
/* Reasons why a slave is not able to failover. */
|
2015-07-27 14:55:45 +02:00
|
|
|
#define CLUSTER_CANT_FAILOVER_NONE 0
|
|
|
|
#define CLUSTER_CANT_FAILOVER_DATA_AGE 1
|
|
|
|
#define CLUSTER_CANT_FAILOVER_WAITING_DELAY 2
|
|
|
|
#define CLUSTER_CANT_FAILOVER_EXPIRED 3
|
|
|
|
#define CLUSTER_CANT_FAILOVER_WAITING_VOTES 4
|
2023-01-11 16:42:23 -08:00
|
|
|
#define CLUSTER_CANT_FAILOVER_RELOG_PERIOD (10) /* seconds. */
|
2014-10-07 09:51:55 +02:00
|
|
|
|
2017-04-13 19:22:35 +02:00
|
|
|
/* clusterState todo_before_sleep flags. */
|
|
|
|
#define CLUSTER_TODO_HANDLE_FAILOVER (1<<0)
|
|
|
|
#define CLUSTER_TODO_UPDATE_STATE (1<<1)
|
|
|
|
#define CLUSTER_TODO_SAVE_CONFIG (1<<2)
|
|
|
|
#define CLUSTER_TODO_FSYNC_CONFIG (1<<3)
|
2020-10-27 14:13:59 +08:00
|
|
|
#define CLUSTER_TODO_HANDLE_MANUALFAILOVER (1<<4)
|
2017-04-13 19:22:35 +02:00
|
|
|
|
|
|
|
/* Message types.
|
|
|
|
*
|
|
|
|
* Note that the PING, PONG and MEET messages are actually the same exact
|
|
|
|
* kind of packet. PONG is the reply to ping, in the exact format as a PING,
|
|
|
|
* while MEET is a special PING that forces the receiver to add the sender
|
|
|
|
* as a node (if it is not already in the list). */
|
|
|
|
#define CLUSTERMSG_TYPE_PING 0 /* Ping */
|
|
|
|
#define CLUSTERMSG_TYPE_PONG 1 /* Pong (reply to Ping) */
|
|
|
|
#define CLUSTERMSG_TYPE_MEET 2 /* Meet "let's join" message */
|
|
|
|
#define CLUSTERMSG_TYPE_FAIL 3 /* Mark node xxx as failing */
|
|
|
|
#define CLUSTERMSG_TYPE_PUBLISH 4 /* Pub/Sub Publish propagation */
|
|
|
|
#define CLUSTERMSG_TYPE_FAILOVER_AUTH_REQUEST 5 /* May I failover? */
|
|
|
|
#define CLUSTERMSG_TYPE_FAILOVER_AUTH_ACK 6 /* Yes, you have my vote */
|
|
|
|
#define CLUSTERMSG_TYPE_UPDATE 7 /* Another node slots configuration */
|
|
|
|
#define CLUSTERMSG_TYPE_MFSTART 8 /* Pause clients for manual failover */
|
2018-03-29 15:13:31 +02:00
|
|
|
#define CLUSTERMSG_TYPE_MODULE 9 /* Module cluster API message. */
|
2022-02-20 13:11:20 +08:00
|
|
|
#define CLUSTERMSG_TYPE_PUBLISHSHARD 10 /* Pub/Sub Publish shard propagation */
|
|
|
|
#define CLUSTERMSG_TYPE_COUNT 11 /* Total number of message types. */
|
2017-04-13 19:22:35 +02:00
|
|
|
|
2018-09-19 11:20:52 +02:00
|
|
|
/* Flags that a module can set in order to prevent certain Redis Cluster
|
|
|
|
* features to be enabled. Useful when implementing a different distributed
|
|
|
|
* system on top of Redis Cluster message bus, using modules. */
|
2018-09-19 11:31:22 +02:00
|
|
|
#define CLUSTER_MODULE_FLAG_NONE 0
|
|
|
|
#define CLUSTER_MODULE_FLAG_NO_FAILOVER (1<<1)
|
|
|
|
#define CLUSTER_MODULE_FLAG_NO_REDIRECTION (1<<2)
|
2018-09-19 11:20:52 +02:00
|
|
|
|
2013-10-09 15:37:20 +02:00
|
|
|
/* This structure represent elements of node->fail_reports. */
|
2014-08-25 10:42:18 +02:00
|
|
|
typedef struct clusterNodeFailReport {
|
2013-10-09 15:37:20 +02:00
|
|
|
struct clusterNode *node; /* Node reporting the failure condition. */
|
2013-10-09 16:18:33 +02:00
|
|
|
mstime_t time; /* Time of the last report from this node. */
|
2014-08-25 10:42:18 +02:00
|
|
|
} clusterNodeFailReport;
|
2013-10-09 15:37:20 +02:00
|
|
|
|
2014-08-25 10:42:18 +02:00
|
|
|
typedef struct clusterNode {
|
2013-10-09 16:18:33 +02:00
|
|
|
mstime_t ctime; /* Node object creation time. */
|
2015-07-27 14:55:45 +02:00
|
|
|
char name[CLUSTER_NAMELEN]; /* Node name, hex string, sha1-size */
|
2022-11-16 19:24:18 -08:00
|
|
|
char shard_id[CLUSTER_NAMELEN]; /* shard id, hex string, sha1-size */
|
2015-07-27 14:55:45 +02:00
|
|
|
int flags; /* CLUSTER_NODE_... */
|
2013-10-09 15:37:20 +02:00
|
|
|
uint64_t configEpoch; /* Last configEpoch observed for this node */
|
2015-07-27 14:55:45 +02:00
|
|
|
unsigned char slots[CLUSTER_SLOTS/8]; /* slots handled by this node */
|
2022-03-29 10:05:06 +03:00
|
|
|
uint16_t *slot_info_pairs; /* Slots info represented as (start/end) pair (consecutive index). */
|
|
|
|
int slot_info_pairs_count; /* Used number of slots in slot_info_pairs */
|
2013-10-09 15:37:20 +02:00
|
|
|
int numslots; /* Number of slots handled by this node */
|
|
|
|
int numslaves; /* Number of slave nodes, if this is a master */
|
|
|
|
struct clusterNode **slaves; /* pointers to slave nodes */
|
2016-01-14 11:58:31 +01:00
|
|
|
struct clusterNode *slaveof; /* pointer to the master node. Note that it
|
|
|
|
may be NULL even if the node is a slave
|
|
|
|
if we don't have the master node in our
|
|
|
|
tables. */
|
2022-06-21 12:02:22 +08:00
|
|
|
unsigned long long last_in_ping_gossip; /* The number of the last carried in the ping gossip section */
|
2014-01-28 16:28:07 +01:00
|
|
|
mstime_t ping_sent; /* Unix time we sent latest ping */
|
|
|
|
mstime_t pong_received; /* Unix time we received the pong */
|
2020-05-08 11:38:07 +02:00
|
|
|
mstime_t data_received; /* Unix time we received any data */
|
2014-01-28 16:28:07 +01:00
|
|
|
mstime_t fail_time; /* Unix time when FAIL flag was set */
|
|
|
|
mstime_t voted_time; /* Last time we voted for a slave of this master */
|
|
|
|
mstime_t repl_offset_time; /* Unix time we received offset for this node */
|
2015-12-11 09:19:06 +01:00
|
|
|
mstime_t orphaned_time; /* Starting time of orphaned master condition */
|
2014-01-28 16:28:07 +01:00
|
|
|
long long repl_offset; /* Last known repl offset for this node. */
|
2022-02-16 13:35:49 -08:00
|
|
|
char ip[NET_IP_STR_LEN]; /* Latest known IP address of this node */
|
|
|
|
sds hostname; /* The known hostname for this node */
|
2023-06-18 12:16:51 +08:00
|
|
|
sds human_nodename; /* The known human readable nodename for this node */
|
Support TLS service when "tls-cluster" is not enabled and persist both plain and TLS port in nodes.conf (#12233)
Originally, when "tls-cluster" is enabled, `port` is set to TLS port. In order to support non-TLS clients, `pport` is used to propagate TCP port across cluster nodes. However when "tls-cluster" is disabled, `port` is set to TCP port, and `pport` is not used, which means the cluster cannot provide TLS service unless "tls-cluster" is on.
```
typedef struct {
// ...
uint16_t port; /* Latest known clients port (TLS or plain). */
uint16_t pport; /* Latest known clients plaintext port. Only used if the main clients port is for TLS. */
// ...
} clusterNode;
```
```
typedef struct {
// ...
uint16_t port; /* TCP base port number. */
uint16_t pport; /* Sender TCP plaintext port, if base port is TLS */
// ...
} clusterMsg;
```
This PR renames `port` and `pport` in `clusterNode` to `tcp_port` and `tls_port`, to record both ports no matter "tls-cluster" is enabled or disabled.
This allows to provide TLS service to clients when "tls-cluster" is disabled: when displaying cluster topology, or giving `MOVED` error, server can provide TLS or TCP port according to client's connection type, no matter what type of connection cluster bus is using.
For backwards compatibility, `port` and `pport` in `clusterMsg` are preserved, when "tls-cluster" is enabled, `port` is set to TLS port and `pport` is set to TCP port, when "tls-cluster" is disabled, `port` is set to TCP port and `pport` is set to TLS port (instead of 0).
Also, in the nodes.conf file, a new aux field displaying an extra port is added to complete the persisted info. We may have `tls_port=xxxxx` or `tcp_port=xxxxx` in the aux field, to complete the cluster topology, while the other port is stored in the normal `<ip>:<port>` field. The format is shown below.
```
<node-id> <ip>:<tcp_port>@<cport>,<hostname>,shard-id=...,tls-port=6379 myself,master - 0 0 0 connected 0-1000
```
Or we can switch the position of two ports, both can be correctly resolved.
```
<node-id> <ip>:<tls_port>@<cport>,<hostname>,shard-id=...,tcp-port=6379 myself,master - 0 0 0 connected 0-1000
```
2023-06-26 22:43:38 +08:00
|
|
|
int tcp_port; /* Latest known clients TCP port. */
|
|
|
|
int tls_port; /* Latest known clients TLS port */
|
2016-01-21 16:57:35 +01:00
|
|
|
int cport; /* Latest known cluster port of this node. */
|
2021-12-16 21:56:59 -08:00
|
|
|
clusterLink *link; /* TCP/IP link established toward this node */
|
|
|
|
clusterLink *inbound_link; /* TCP/IP link accepted from this node */
|
2013-10-09 15:37:20 +02:00
|
|
|
list *fail_reports; /* List of nodes signaling this as failing */
|
2014-08-25 10:42:18 +02:00
|
|
|
} clusterNode;
|
2013-10-09 15:37:20 +02:00
|
|
|
|
Replica keep serving data during repl-diskless-load=swapdb for better availability (#9323)
For diskless replication in swapdb mode, considering we already spend replica memory
having a backup of current db to restore in case of failure, we can have the following benefits
by instead swapping database only in case we succeeded in transferring db from master:
- Avoid `LOADING` response during failed and successful synchronization for cases where the
replica is already up and running with data.
- Faster total time of diskless replication, because now we're moving from Transfer + Flush + Load
time to Transfer + Load only. Flushing the tempDb is done asynchronously after swapping.
- This could be implemented also for disk replication with similar benefits if consumers are willing
to spend the extra memory usage.
General notes:
- The concept of `backupDb` becomes `tempDb` for clarity.
- Async loading mode will only kick in if the replica is syncing from a master that has the same
repl-id the one it had before. i.e. the data it's getting belongs to a different time of the same timeline.
- New property in INFO: `async_loading` to differentiate from the blocking loading
- Slot to Key mapping is now a field of `redisDb` as it's more natural to access it from both server.db
and the tempDb that is passed around.
- Because this is affecting replicas only, we assume that if they are not readonly and write commands
during replication, they are lost after SYNC same way as before, but we're still denying CONFIG SET
here anyways to avoid complications.
Considerations for review:
- We have many cases where server.loading flag is used and even though I tried my best, there may
be cases where async_loading should be checked as well and cases where it shouldn't (would require
very good understanding of whole code)
- Several places that had different behavior depending on the loading flag where actually meant to just
handle commands coming from the AOF client differently than ones coming from real clients, changed
to check CLIENT_ID_AOF instead.
**Additional for Release Notes**
- Bugfix - server.dirty was not incremented for any kind of diskless replication, as effect it wouldn't
contribute on triggering next database SAVE
- New flag for RM_GetContextFlags module API: REDISMODULE_CTX_FLAGS_ASYNC_LOADING
- Deprecated RedisModuleEvent_ReplBackup. Starting from Redis 7.0, we don't fire this event.
Instead, we have the new RedisModuleEvent_ReplAsyncLoad holding 3 sub-events: STARTED,
ABORTED and COMPLETED.
- New module flag REDISMODULE_OPTIONS_HANDLE_REPL_ASYNC_LOAD for RedisModule_SetModuleOptions
to allow modules to declare they support the diskless replication with async loading (when absent, we fall
back to disk-based loading).
Co-authored-by: Eduardo Semprebon <edus@saxobank.com>
Co-authored-by: Oran Agra <oran@redislabs.com>
2021-11-04 09:46:50 +01:00
|
|
|
/* Slot to keys for a single slot. The keys in the same slot are linked together
|
|
|
|
* using dictEntry metadata. */
|
|
|
|
typedef struct slotToKeys {
|
2021-08-31 08:25:36 +02:00
|
|
|
uint64_t count; /* Number of keys in the slot. */
|
|
|
|
dictEntry *head; /* The first key-value entry in the slot. */
|
Replica keep serving data during repl-diskless-load=swapdb for better availability (#9323)
For diskless replication in swapdb mode, considering we already spend replica memory
having a backup of current db to restore in case of failure, we can have the following benefits
by instead swapping database only in case we succeeded in transferring db from master:
- Avoid `LOADING` response during failed and successful synchronization for cases where the
replica is already up and running with data.
- Faster total time of diskless replication, because now we're moving from Transfer + Flush + Load
time to Transfer + Load only. Flushing the tempDb is done asynchronously after swapping.
- This could be implemented also for disk replication with similar benefits if consumers are willing
to spend the extra memory usage.
General notes:
- The concept of `backupDb` becomes `tempDb` for clarity.
- Async loading mode will only kick in if the replica is syncing from a master that has the same
repl-id the one it had before. i.e. the data it's getting belongs to a different time of the same timeline.
- New property in INFO: `async_loading` to differentiate from the blocking loading
- Slot to Key mapping is now a field of `redisDb` as it's more natural to access it from both server.db
and the tempDb that is passed around.
- Because this is affecting replicas only, we assume that if they are not readonly and write commands
during replication, they are lost after SYNC same way as before, but we're still denying CONFIG SET
here anyways to avoid complications.
Considerations for review:
- We have many cases where server.loading flag is used and even though I tried my best, there may
be cases where async_loading should be checked as well and cases where it shouldn't (would require
very good understanding of whole code)
- Several places that had different behavior depending on the loading flag where actually meant to just
handle commands coming from the AOF client differently than ones coming from real clients, changed
to check CLIENT_ID_AOF instead.
**Additional for Release Notes**
- Bugfix - server.dirty was not incremented for any kind of diskless replication, as effect it wouldn't
contribute on triggering next database SAVE
- New flag for RM_GetContextFlags module API: REDISMODULE_CTX_FLAGS_ASYNC_LOADING
- Deprecated RedisModuleEvent_ReplBackup. Starting from Redis 7.0, we don't fire this event.
Instead, we have the new RedisModuleEvent_ReplAsyncLoad holding 3 sub-events: STARTED,
ABORTED and COMPLETED.
- New module flag REDISMODULE_OPTIONS_HANDLE_REPL_ASYNC_LOAD for RedisModule_SetModuleOptions
to allow modules to declare they support the diskless replication with async loading (when absent, we fall
back to disk-based loading).
Co-authored-by: Eduardo Semprebon <edus@saxobank.com>
Co-authored-by: Oran Agra <oran@redislabs.com>
2021-11-04 09:46:50 +01:00
|
|
|
} slotToKeys;
|
|
|
|
|
|
|
|
/* Slot to keys mapping for all slots, opaque outside this file. */
|
|
|
|
struct clusterSlotToKeyMapping {
|
|
|
|
slotToKeys by_slot[CLUSTER_SLOTS];
|
2021-08-31 08:25:36 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Dict entry metadata for cluster mode, used for the Slot to Key API to form a
|
|
|
|
* linked list of the entries belonging to the same slot. */
|
|
|
|
typedef struct clusterDictEntryMetadata {
|
|
|
|
dictEntry *prev; /* Prev entry with key in the same slot */
|
|
|
|
dictEntry *next; /* Next entry with key in the same slot */
|
|
|
|
} clusterDictEntryMetadata;
|
|
|
|
|
2022-11-20 23:23:54 +01:00
|
|
|
typedef struct {
|
|
|
|
redisDb *db; /* A link back to the db this dict belongs to */
|
|
|
|
} clusterDictMetadata;
|
2021-08-31 08:25:36 +02:00
|
|
|
|
2013-10-09 15:37:20 +02:00
|
|
|
typedef struct clusterState {
|
|
|
|
clusterNode *myself; /* This node */
|
|
|
|
uint64_t currentEpoch;
|
2015-07-27 14:55:45 +02:00
|
|
|
int state; /* CLUSTER_OK, CLUSTER_FAIL, ... */
|
2013-10-09 15:37:20 +02:00
|
|
|
int size; /* Num of master nodes with at least one slot */
|
|
|
|
dict *nodes; /* Hash table of name -> clusterNode structures */
|
2022-11-16 19:24:18 -08:00
|
|
|
dict *shards; /* Hash table of shard_id -> list (of nodes) structures */
|
2013-11-29 17:37:06 +01:00
|
|
|
dict *nodes_black_list; /* Nodes we don't re-add for a few seconds. */
|
2015-07-27 14:55:45 +02:00
|
|
|
clusterNode *migrating_slots_to[CLUSTER_SLOTS];
|
|
|
|
clusterNode *importing_slots_from[CLUSTER_SLOTS];
|
|
|
|
clusterNode *slots[CLUSTER_SLOTS];
|
2022-01-03 01:54:47 +01:00
|
|
|
rax *slots_to_channels;
|
2013-10-09 15:37:20 +02:00
|
|
|
/* The following fields are used to take the slave state on elections. */
|
2013-11-29 16:17:05 +01:00
|
|
|
mstime_t failover_auth_time; /* Time of previous or next election. */
|
2013-10-09 15:37:20 +02:00
|
|
|
int failover_auth_count; /* Number of votes received so far. */
|
|
|
|
int failover_auth_sent; /* True if we already asked for votes. */
|
2014-01-29 16:51:11 +01:00
|
|
|
int failover_auth_rank; /* This slave rank for current auth request. */
|
2013-10-09 15:37:20 +02:00
|
|
|
uint64_t failover_auth_epoch; /* Epoch of the current election. */
|
2014-10-07 09:51:55 +02:00
|
|
|
int cant_failover_reason; /* Why a slave is currently not able to
|
|
|
|
failover. See the CANT_FAILOVER_* macros. */
|
2014-02-05 13:01:24 +01:00
|
|
|
/* Manual failover state in common. */
|
|
|
|
mstime_t mf_end; /* Manual failover time limit (ms unixtime).
|
|
|
|
It is zero if there is no MF in progress. */
|
|
|
|
/* Manual failover state of master. */
|
|
|
|
clusterNode *mf_slave; /* Slave performing the manual failover. */
|
|
|
|
/* Manual failover state of slave. */
|
|
|
|
long long mf_master_offset; /* Master offset the slave needs to start MF
|
2021-03-23 11:00:33 +08:00
|
|
|
or -1 if still not received. */
|
2014-02-05 13:01:24 +01:00
|
|
|
int mf_can_start; /* If non-zero signal that the manual failover
|
|
|
|
can start requesting masters vote. */
|
Squash merging 125 typo/grammar/comment/doc PRs (#7773)
List of squashed commits or PRs
===============================
commit 66801ea
Author: hwware <wen.hui.ware@gmail.com>
Date: Mon Jan 13 00:54:31 2020 -0500
typo fix in acl.c
commit 46f55db
Author: Itamar Haber <itamar@redislabs.com>
Date: Sun Sep 6 18:24:11 2020 +0300
Updates a couple of comments
Specifically:
* RM_AutoMemory completed instead of pointing to docs
* Updated link to custom type doc
commit 61a2aa0
Author: xindoo <xindoo@qq.com>
Date: Tue Sep 1 19:24:59 2020 +0800
Correct errors in code comments
commit a5871d1
Author: yz1509 <pro-756@qq.com>
Date: Tue Sep 1 18:36:06 2020 +0800
fix typos in module.c
commit 41eede7
Author: bookug <bookug@qq.com>
Date: Sat Aug 15 01:11:33 2020 +0800
docs: fix typos in comments
commit c303c84
Author: lazy-snail <ws.niu@outlook.com>
Date: Fri Aug 7 11:15:44 2020 +0800
fix spelling in redis.conf
commit 1eb76bf
Author: zhujian <zhujianxyz@gmail.com>
Date: Thu Aug 6 15:22:10 2020 +0800
add a missing 'n' in comment
commit 1530ec2
Author: Daniel Dai <764122422@qq.com>
Date: Mon Jul 27 00:46:35 2020 -0400
fix spelling in tracking.c
commit e517b31
Author: Hunter-Chen <huntcool001@gmail.com>
Date: Fri Jul 17 22:33:32 2020 +0800
Update redis.conf
Co-authored-by: Itamar Haber <itamar@redislabs.com>
commit c300eff
Author: Hunter-Chen <huntcool001@gmail.com>
Date: Fri Jul 17 22:33:23 2020 +0800
Update redis.conf
Co-authored-by: Itamar Haber <itamar@redislabs.com>
commit 4c058a8
Author: 陈浩鹏 <chenhaopeng@heytea.com>
Date: Thu Jun 25 19:00:56 2020 +0800
Grammar fix and clarification
commit 5fcaa81
Author: bodong.ybd <bodong.ybd@alibaba-inc.com>
Date: Fri Jun 19 10:09:00 2020 +0800
Fix typos
commit 4caca9a
Author: Pruthvi P <pruthvi@ixigo.com>
Date: Fri May 22 00:33:22 2020 +0530
Fix typo eviciton => eviction
commit b2a25f6
Author: Brad Dunbar <dunbarb2@gmail.com>
Date: Sun May 17 12:39:59 2020 -0400
Fix a typo.
commit 12842ae
Author: hwware <wen.hui.ware@gmail.com>
Date: Sun May 3 17:16:59 2020 -0400
fix spelling in redis conf
commit ddba07c
Author: Chris Lamb <chris@chris-lamb.co.uk>
Date: Sat May 2 23:25:34 2020 +0100
Correct a "conflicts" spelling error.
commit 8fc7bf2
Author: Nao YONASHIRO <yonashiro@r.recruit.co.jp>
Date: Thu Apr 30 10:25:27 2020 +0900
docs: fix EXPIRE_FAST_CYCLE_DURATION to ACTIVE_EXPIRE_CYCLE_FAST_DURATION
commit 9b2b67a
Author: Brad Dunbar <dunbarb2@gmail.com>
Date: Fri Apr 24 11:46:22 2020 -0400
Fix a typo.
commit 0746f10
Author: devilinrust <63737265+devilinrust@users.noreply.github.com>
Date: Thu Apr 16 00:17:53 2020 +0200
Fix typos in server.c
commit 92b588d
Author: benjessop12 <56115861+benjessop12@users.noreply.github.com>
Date: Mon Apr 13 13:43:55 2020 +0100
Fix spelling mistake in lazyfree.c
commit 1da37aa
Merge: 2d4ba28 af347a8
Author: hwware <wen.hui.ware@gmail.com>
Date: Thu Mar 5 22:41:31 2020 -0500
Merge remote-tracking branch 'upstream/unstable' into expiretypofix
commit 2d4ba28
Author: hwware <wen.hui.ware@gmail.com>
Date: Mon Mar 2 00:09:40 2020 -0500
fix typo in expire.c
commit 1a746f7
Author: SennoYuki <minakami1yuki@gmail.com>
Date: Thu Feb 27 16:54:32 2020 +0800
fix typo
commit 8599b1a
Author: dongheejeong <donghee950403@gmail.com>
Date: Sun Feb 16 20:31:43 2020 +0000
Fix typo in server.c
commit f38d4e8
Author: hwware <wen.hui.ware@gmail.com>
Date: Sun Feb 2 22:58:38 2020 -0500
fix typo in evict.c
commit fe143fc
Author: Leo Murillo <leonardo.murillo@gmail.com>
Date: Sun Feb 2 01:57:22 2020 -0600
Fix a few typos in redis.conf
commit 1ab4d21
Author: viraja1 <anchan.viraj@gmail.com>
Date: Fri Dec 27 17:15:58 2019 +0530
Fix typo in Latency API docstring
commit ca1f70e
Author: gosth <danxuedexing@qq.com>
Date: Wed Dec 18 15:18:02 2019 +0800
fix typo in sort.c
commit a57c06b
Author: ZYunH <zyunhjob@163.com>
Date: Mon Dec 16 22:28:46 2019 +0800
fix-zset-typo
commit b8c92b5
Author: git-hulk <hulk.website@gmail.com>
Date: Mon Dec 16 15:51:42 2019 +0800
FIX: typo in cluster.c, onformation->information
commit 9dd981c
Author: wujm2007 <jim.wujm@gmail.com>
Date: Mon Dec 16 09:37:52 2019 +0800
Fix typo
commit e132d7a
Author: Sebastien Williams-Wynn <s.williamswynn.mail@gmail.com>
Date: Fri Nov 15 00:14:07 2019 +0000
Minor typo change
commit 47f44d5
Author: happynote3966 <01ssrmikururudevice01@gmail.com>
Date: Mon Nov 11 22:08:48 2019 +0900
fix comment typo in redis-cli.c
commit b8bdb0d
Author: fulei <fulei@kuaishou.com>
Date: Wed Oct 16 18:00:17 2019 +0800
Fix a spelling mistake of comments in defragDictBucketCallback
commit 0def46a
Author: fulei <fulei@kuaishou.com>
Date: Wed Oct 16 13:09:27 2019 +0800
fix some spelling mistakes of comments in defrag.c
commit f3596fd
Author: Phil Rajchgot <tophil@outlook.com>
Date: Sun Oct 13 02:02:32 2019 -0400
Typo and grammar fixes
Redis and its documentation are great -- just wanted to submit a few corrections in the spirit of Hacktoberfest. Thanks for all your work on this project. I use it all the time and it works beautifully.
commit 2b928cd
Author: KangZhiDong <worldkzd@gmail.com>
Date: Sun Sep 1 07:03:11 2019 +0800
fix typos
commit 33aea14
Author: Axlgrep <axlgrep@gmail.com>
Date: Tue Aug 27 11:02:18 2019 +0800
Fixed eviction spelling issues
commit e282a80
Author: Simen Flatby <simen@oms.no>
Date: Tue Aug 20 15:25:51 2019 +0200
Update comments to reflect prop name
In the comments the prop is referenced as replica-validity-factor,
but it is really named cluster-replica-validity-factor.
commit 74d1f9a
Author: Jim Green <jimgreen2013@qq.com>
Date: Tue Aug 20 20:00:31 2019 +0800
fix comment error, the code is ok
commit eea1407
Author: Liao Tonglang <liaotonglang@gmail.com>
Date: Fri May 31 10:16:18 2019 +0800
typo fix
fix cna't to can't
commit 0da553c
Author: KAWACHI Takashi <tkawachi@gmail.com>
Date: Wed Jul 17 00:38:16 2019 +0900
Fix typo
commit 7fc8fb6
Author: Michael Prokop <mika@grml.org>
Date: Tue May 28 17:58:42 2019 +0200
Typo fixes
s/familar/familiar/
s/compatiblity/compatibility/
s/ ot / to /
s/itsef/itself/
commit 5f46c9d
Author: zhumoing <34539422+zhumoing@users.noreply.github.com>
Date: Tue May 21 21:16:50 2019 +0800
typo-fixes
typo-fixes
commit 321dfe1
Author: wxisme <850885154@qq.com>
Date: Sat Mar 16 15:10:55 2019 +0800
typo fix
commit b4fb131
Merge: 267e0e6 3df1eb8
Author: Nikitas Bastas <nikitasbst@gmail.com>
Date: Fri Feb 8 22:55:45 2019 +0200
Merge branch 'unstable' of antirez/redis into unstable
commit 267e0e6
Author: Nikitas Bastas <nikitasbst@gmail.com>
Date: Wed Jan 30 21:26:04 2019 +0200
Minor typo fix
commit 30544e7
Author: inshal96 <39904558+inshal96@users.noreply.github.com>
Date: Fri Jan 4 16:54:50 2019 +0500
remove an extra 'a' in the comments
commit 337969d
Author: BrotherGao <yangdongheng11@gmail.com>
Date: Sat Dec 29 12:37:29 2018 +0800
fix typo in redis.conf
commit 9f4b121
Merge: 423a030 e504583
Author: BrotherGao <yangdongheng@xiaomi.com>
Date: Sat Dec 29 11:41:12 2018 +0800
Merge branch 'unstable' of antirez/redis into unstable
commit 423a030
Merge: 42b02b7 46a51cd
Author: 杨东衡 <yangdongheng@xiaomi.com>
Date: Tue Dec 4 23:56:11 2018 +0800
Merge branch 'unstable' of antirez/redis into unstable
commit 42b02b7
Merge: 68c0e6e b8febe6
Author: Dongheng Yang <yangdongheng11@gmail.com>
Date: Sun Oct 28 15:54:23 2018 +0800
Merge pull request #1 from antirez/unstable
update local data
commit 714b589
Author: Christian <crifei93@gmail.com>
Date: Fri Dec 28 01:17:26 2018 +0100
fix typo "resulution"
commit e23259d
Author: garenchan <1412950785@qq.com>
Date: Wed Dec 26 09:58:35 2018 +0800
fix typo: segfauls -> segfault
commit a9359f8
Author: xjp <jianping_xie@aliyun.com>
Date: Tue Dec 18 17:31:44 2018 +0800
Fixed REDISMODULE_H spell bug
commit a12c3e4
Author: jdiaz <jrd.palacios@gmail.com>
Date: Sat Dec 15 23:39:52 2018 -0600
Fixes hyperloglog hash function comment block description
commit 770eb11
Author: 林上耀 <1210tom@163.com>
Date: Sun Nov 25 17:16:10 2018 +0800
fix typo
commit fd97fbb
Author: Chris Lamb <chris@chris-lamb.co.uk>
Date: Fri Nov 23 17:14:01 2018 +0100
Correct "unsupported" typo.
commit a85522d
Author: Jungnam Lee <jungnam.lee@oracle.com>
Date: Thu Nov 8 23:01:29 2018 +0900
fix typo in test comments
commit ade8007
Author: Arun Kumar <palerdot@users.noreply.github.com>
Date: Tue Oct 23 16:56:35 2018 +0530
Fixed grammatical typo
Fixed typo for word 'dictionary'
commit 869ee39
Author: Hamid Alaei <hamid.a85@gmail.com>
Date: Sun Aug 12 16:40:02 2018 +0430
fix documentations: (ThreadSafeContextStart/Stop -> ThreadSafeContextLock/Unlock), minor typo
commit f89d158
Author: Mayank Jain <mayankjain255@gmail.com>
Date: Tue Jul 31 23:01:21 2018 +0530
Updated README.md with some spelling corrections.
Made correction in spelling of some misspelled words.
commit 892198e
Author: dsomeshwar <someshwar.dhayalan@gmail.com>
Date: Sat Jul 21 23:23:04 2018 +0530
typo fix
commit 8a4d780
Author: Itamar Haber <itamar@redislabs.com>
Date: Mon Apr 30 02:06:52 2018 +0300
Fixes some typos
commit e3acef6
Author: Noah Rosamilia <ivoahivoah@gmail.com>
Date: Sat Mar 3 23:41:21 2018 -0500
Fix typo in /deps/README.md
commit 04442fb
Author: WuYunlong <xzsyeb@126.com>
Date: Sat Mar 3 10:32:42 2018 +0800
Fix typo in readSyncBulkPayload() comment.
commit 9f36880
Author: WuYunlong <xzsyeb@126.com>
Date: Sat Mar 3 10:20:37 2018 +0800
replication.c comment: run_id -> replid.
commit f866b4a
Author: Francesco 'makevoid' Canessa <makevoid@gmail.com>
Date: Thu Feb 22 22:01:56 2018 +0000
fix comment typo in server.c
commit 0ebc69b
Author: 줍 <jubee0124@gmail.com>
Date: Mon Feb 12 16:38:48 2018 +0900
Fix typo in redis.conf
Fix `five behaviors` to `eight behaviors` in [this sentence ](antirez/redis@unstable/redis.conf#L564)
commit b50a620
Author: martinbroadhurst <martinbroadhurst@users.noreply.github.com>
Date: Thu Dec 28 12:07:30 2017 +0000
Fix typo in valgrind.sup
commit 7d8f349
Author: Peter Boughton <peter@sorcerersisle.com>
Date: Mon Nov 27 19:52:19 2017 +0000
Update CONTRIBUTING; refer doc updates to redis-doc repo.
commit 02dec7e
Author: Klauswk <klauswk1@hotmail.com>
Date: Tue Oct 24 16:18:38 2017 -0200
Fix typo in comment
commit e1efbc8
Author: chenshi <baiwfg2@gmail.com>
Date: Tue Oct 3 18:26:30 2017 +0800
Correct two spelling errors of comments
commit 93327d8
Author: spacewander <spacewanderlzx@gmail.com>
Date: Wed Sep 13 16:47:24 2017 +0800
Update the comment for OBJ_ENCODING_EMBSTR_SIZE_LIMIT's value
The value of OBJ_ENCODING_EMBSTR_SIZE_LIMIT is 44 now instead of 39.
commit 63d361f
Author: spacewander <spacewanderlzx@gmail.com>
Date: Tue Sep 12 15:06:42 2017 +0800
Fix <prevlen> related doc in ziplist.c
According to the definition of ZIP_BIG_PREVLEN and other related code,
the guard of single byte <prevlen> should be 254 instead of 255.
commit ebe228d
Author: hanael80 <hanael80@gmail.com>
Date: Tue Aug 15 09:09:40 2017 +0900
Fix typo
commit 6b696e6
Author: Matt Robenolt <matt@ydekproductions.com>
Date: Mon Aug 14 14:50:47 2017 -0700
Fix typo in LATENCY DOCTOR output
commit a2ec6ae
Author: caosiyang <caosiyang@qiyi.com>
Date: Tue Aug 15 14:15:16 2017 +0800
Fix a typo: form => from
commit 3ab7699
Author: caosiyang <caosiyang@qiyi.com>
Date: Thu Aug 10 18:40:33 2017 +0800
Fix a typo: replicationFeedSlavesFromMaster() => replicationFeedSlavesFromMasterStream()
commit 72d43ef
Author: caosiyang <caosiyang@qiyi.com>
Date: Tue Aug 8 15:57:25 2017 +0800
fix a typo: servewr => server
commit 707c958
Author: Bo Cai <charpty@gmail.com>
Date: Wed Jul 26 21:49:42 2017 +0800
redis-cli.c typo: conut -> count.
Signed-off-by: Bo Cai <charpty@gmail.com>
commit b9385b2
Author: JackDrogon <jack.xsuperman@gmail.com>
Date: Fri Jun 30 14:22:31 2017 +0800
Fix some spell problems
commit 20d9230
Author: akosel <aaronjkosel@gmail.com>
Date: Sun Jun 4 19:35:13 2017 -0500
Fix typo
commit b167bfc
Author: Krzysiek Witkowicz <krzysiekwitkowicz@gmail.com>
Date: Mon May 22 21:32:27 2017 +0100
Fix #4008 small typo in comment
commit 2b78ac8
Author: Jake Clarkson <jacobwclarkson@gmail.com>
Date: Wed Apr 26 15:49:50 2017 +0100
Correct typo in tests/unit/hyperloglog.tcl
commit b0f1cdb
Author: Qi Luo <qiluo-msft@users.noreply.github.com>
Date: Wed Apr 19 14:25:18 2017 -0700
Fix typo
commit a90b0f9
Author: charsyam <charsyam@naver.com>
Date: Thu Mar 16 18:19:53 2017 +0900
fix typos
fix typos
fix typos
commit 8430a79
Author: Richard Hart <richardhart92@gmail.com>
Date: Mon Mar 13 22:17:41 2017 -0400
Fixed log message typo in listenToPort.
commit 481a1c2
Author: Vinod Kumar <kumar003vinod@gmail.com>
Date: Sun Jan 15 23:04:51 2017 +0530
src/db.c: Correct "save" -> "safe" typo
commit 586b4d3
Author: wangshaonan <wshn13@gmail.com>
Date: Wed Dec 21 20:28:27 2016 +0800
Fix typo they->the in helloworld.c
commit c1c4b5e
Author: Jenner <hypxm@qq.com>
Date: Mon Dec 19 16:39:46 2016 +0800
typo error
commit 1ee1a3f
Author: tielei <43289893@qq.com>
Date: Mon Jul 18 13:52:25 2016 +0800
fix some comments
commit 11a41fb
Author: Otto Kekäläinen <otto@seravo.fi>
Date: Sun Jul 3 10:23:55 2016 +0100
Fix spelling in documentation and comments
commit 5fb5d82
Author: francischan <f1ancis621@gmail.com>
Date: Tue Jun 28 00:19:33 2016 +0800
Fix outdated comments about redis.c file.
It should now refer to server.c file.
commit 6b254bc
Author: lmatt-bit <lmatt123n@gmail.com>
Date: Thu Apr 21 21:45:58 2016 +0800
Refine the comment of dictRehashMilliseconds func
SLAVECONF->REPLCONF in comment - by andyli029
commit ee9869f
Author: clark.kang <charsyam@naver.com>
Date: Tue Mar 22 11:09:51 2016 +0900
fix typos
commit f7b3b11
Author: Harisankar H <harisankarh@gmail.com>
Date: Wed Mar 9 11:49:42 2016 +0530
Typo correction: "faield" --> "failed"
Typo correction: "faield" --> "failed"
commit 3fd40fc
Author: Itamar Haber <itamar@redislabs.com>
Date: Thu Feb 25 10:31:51 2016 +0200
Fixes a typo in comments
commit 621c160
Author: Prayag Verma <prayag.verma@gmail.com>
Date: Mon Feb 1 12:36:20 2016 +0530
Fix typo in Readme.md
Spelling mistakes -
`eviciton` > `eviction`
`familar` > `familiar`
commit d7d07d6
Author: WonCheol Lee <toctoc21c@gmail.com>
Date: Wed Dec 30 15:11:34 2015 +0900
Typo fixed
commit a4dade7
Author: Felix Bünemann <buenemann@louis.info>
Date: Mon Dec 28 11:02:55 2015 +0100
[ci skip] Improve supervised upstart config docs
This mentions that "expect stop" is required for supervised upstart
to work correctly. See http://upstart.ubuntu.com/cookbook/#expect-stop
for an explanation.
commit d9caba9
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:30:03 2015 +1100
README: Remove trailing whitespace
commit 72d42e5
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:29:32 2015 +1100
README: Fix typo. th => the
commit dd6e957
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:29:20 2015 +1100
README: Fix typo. familar => familiar
commit 3a12b23
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:28:54 2015 +1100
README: Fix typo. eviciton => eviction
commit 2d1d03b
Author: daurnimator <quae@daurnimator.com>
Date: Mon Dec 21 18:21:45 2015 +1100
README: Fix typo. sever => server
commit 3973b06
Author: Itamar Haber <itamar@garantiadata.com>
Date: Sat Dec 19 17:01:20 2015 +0200
Typo fix
commit 4f2e460
Author: Steve Gao <fu@2token.com>
Date: Fri Dec 4 10:22:05 2015 +0800
Update README - fix typos
commit b21667c
Author: binyan <binbin.yan@nokia.com>
Date: Wed Dec 2 22:48:37 2015 +0800
delete redundancy color judge in sdscatcolor
commit 88894c7
Author: binyan <binbin.yan@nokia.com>
Date: Wed Dec 2 22:14:42 2015 +0800
the example output shoule be HelloWorld
commit 2763470
Author: binyan <binbin.yan@nokia.com>
Date: Wed Dec 2 17:41:39 2015 +0800
modify error word keyevente
Signed-off-by: binyan <binbin.yan@nokia.com>
commit 0847b3d
Author: Bruno Martins <bscmartins@gmail.com>
Date: Wed Nov 4 11:37:01 2015 +0000
typo
commit bbb9e9e
Author: dawedawe <dawedawe@gmx.de>
Date: Fri Mar 27 00:46:41 2015 +0100
typo: zimap -> zipmap
commit 5ed297e
Author: Axel Advento <badwolf.bloodseeker.rev@gmail.com>
Date: Tue Mar 3 15:58:29 2015 +0800
Fix 'salve' typos to 'slave'
commit edec9d6
Author: LudwikJaniuk <ludvig.janiuk@gmail.com>
Date: Wed Jun 12 14:12:47 2019 +0200
Update README.md
Co-Authored-By: Qix <Qix-@users.noreply.github.com>
commit 692a7af
Author: LudwikJaniuk <ludvig.janiuk@gmail.com>
Date: Tue May 28 14:32:04 2019 +0200
grammar
commit d962b0a
Author: Nick Frost <nickfrostatx@gmail.com>
Date: Wed Jul 20 15:17:12 2016 -0700
Minor grammar fix
commit 24fff01aaccaf5956973ada8c50ceb1462e211c6 (typos)
Author: Chad Miller <chadm@squareup.com>
Date: Tue Sep 8 13:46:11 2020 -0400
Fix faulty comment about operation of unlink()
commit 3cd5c1f3326c52aa552ada7ec797c6bb16452355
Author: Kevin <kevin.xgr@gmail.com>
Date: Wed Nov 20 00:13:50 2019 +0800
Fix typo in server.c.
From a83af59 Mon Sep 17 00:00:00 2001
From: wuwo <wuwo@wacai.com>
Date: Fri, 17 Mar 2017 20:37:45 +0800
Subject: [PATCH] falure to failure
From c961896 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B7=A6=E6=87=B6?= <veficos@gmail.com>
Date: Sat, 27 May 2017 15:33:04 +0800
Subject: [PATCH] fix typo
From e600ef2 Mon Sep 17 00:00:00 2001
From: "rui.zou" <rui.zou@yunify.com>
Date: Sat, 30 Sep 2017 12:38:15 +0800
Subject: [PATCH] fix a typo
From c7d07fa Mon Sep 17 00:00:00 2001
From: Alexandre Perrin <alex@kaworu.ch>
Date: Thu, 16 Aug 2018 10:35:31 +0200
Subject: [PATCH] deps README.md typo
From b25cb67 Mon Sep 17 00:00:00 2001
From: Guy Korland <gkorland@gmail.com>
Date: Wed, 26 Sep 2018 10:55:37 +0300
Subject: [PATCH 1/2] fix typos in header
From ad28ca6 Mon Sep 17 00:00:00 2001
From: Guy Korland <gkorland@gmail.com>
Date: Wed, 26 Sep 2018 11:02:36 +0300
Subject: [PATCH 2/2] fix typos
commit 34924cdedd8552466fc22c1168d49236cb7ee915
Author: Adrian Lynch <adi_ady_ade@hotmail.com>
Date: Sat Apr 4 21:59:15 2015 +0100
Typos fixed
commit fd2a1e7
Author: Jan <jsteemann@users.noreply.github.com>
Date: Sat Oct 27 19:13:01 2018 +0200
Fix typos
Fix typos
commit e14e47c1a234b53b0e103c5f6a1c61481cbcbb02
Author: Andy Lester <andy@petdance.com>
Date: Fri Aug 2 22:30:07 2019 -0500
Fix multiple misspellings of "following"
commit 79b948ce2dac6b453fe80995abbcaac04c213d5a
Author: Andy Lester <andy@petdance.com>
Date: Fri Aug 2 22:24:28 2019 -0500
Fix misspelling of create-cluster
commit 1fffde52666dc99ab35efbd31071a4c008cb5a71
Author: Andy Lester <andy@petdance.com>
Date: Wed Jul 31 17:57:56 2019 -0500
Fix typos
commit 204c9ba9651e9e05fd73936b452b9a30be456cfe
Author: Xiaobo Zhu <xiaobo.zhu@shopee.com>
Date: Tue Aug 13 22:19:25 2019 +0800
fix typos
Squashed commit of the following:
commit 1d9aaf8
Author: danmedani <danmedani@gmail.com>
Date: Sun Aug 2 11:40:26 2015 -0700
README typo fix.
Squashed commit of the following:
commit 32bfa7c
Author: Erik Dubbelboer <erik@dubbelboer.com>
Date: Mon Jul 6 21:15:08 2015 +0200
Fixed grammer
Squashed commit of the following:
commit b24f69c
Author: Sisir Koppaka <sisir.koppaka@gmail.com>
Date: Mon Mar 2 22:38:45 2015 -0500
utils/hashtable/rehashing.c: Fix typos
Squashed commit of the following:
commit 4e04082
Author: Erik Dubbelboer <erik@dubbelboer.com>
Date: Mon Mar 23 08:22:21 2015 +0000
Small config file documentation improvements
Squashed commit of the following:
commit acb8773
Author: ctd1500 <ctd1500@gmail.com>
Date: Fri May 8 01:52:48 2015 -0700
Typo and grammar fixes in readme
commit 2eb75b6
Author: ctd1500 <ctd1500@gmail.com>
Date: Fri May 8 01:36:18 2015 -0700
fixed redis.conf comment
Squashed commit of the following:
commit a8249a2
Author: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Fri Dec 11 11:39:52 2015 +0530
Revise correction of typos.
Squashed commit of the following:
commit 3c02028
Author: zhaojun11 <zhaojun11@jd.com>
Date: Wed Jan 17 19:05:28 2018 +0800
Fix typos include two code typos in cluster.c and latency.c
Squashed commit of the following:
commit 9dba47c
Author: q191201771 <191201771@qq.com>
Date: Sat Jan 4 11:31:04 2020 +0800
fix function listCreate comment in adlist.c
Update src/server.c
commit 2c7c2cb536e78dd211b1ac6f7bda00f0f54faaeb
Author: charpty <charpty@gmail.com>
Date: Tue May 1 23:16:59 2018 +0800
server.c typo: modules system dictionary type comment
Signed-off-by: charpty <charpty@gmail.com>
commit a8395323fb63cb59cb3591cb0f0c8edb7c29a680
Author: Itamar Haber <itamar@redislabs.com>
Date: Sun May 6 00:25:18 2018 +0300
Updates test_helper.tcl's help with undocumented options
Specifically:
* Host
* Port
* Client
commit bde6f9ced15755cd6407b4af7d601b030f36d60b
Author: wxisme <850885154@qq.com>
Date: Wed Aug 8 15:19:19 2018 +0800
fix comments in deps files
commit 3172474ba991532ab799ee1873439f3402412331
Author: wxisme <850885154@qq.com>
Date: Wed Aug 8 14:33:49 2018 +0800
fix some comments
commit 01b6f2b6858b5cf2ce4ad5092d2c746e755f53f0
Author: Thor Juhasz <thor@juhasz.pro>
Date: Sun Nov 18 14:37:41 2018 +0100
Minor fixes to comments
Found some parts a little unclear on a first read, which prompted me to have a better look at the file and fix some minor things I noticed.
Fixing minor typos and grammar. There are no changes to configuration options.
These changes are only meant to help the user better understand the explanations to the various configuration options
2020-09-10 13:43:38 +03:00
|
|
|
/* The following fields are used by masters to take state on elections. */
|
2014-03-27 15:01:24 +01:00
|
|
|
uint64_t lastVoteEpoch; /* Epoch of the last vote granted. */
|
2013-10-09 15:37:20 +02:00
|
|
|
int todo_before_sleep; /* Things to do in clusterBeforeSleep(). */
|
2021-12-16 21:56:59 -08:00
|
|
|
/* Stats */
|
2017-04-13 19:22:35 +02:00
|
|
|
/* Messages received and sent by type. */
|
|
|
|
long long stats_bus_messages_sent[CLUSTERMSG_TYPE_COUNT];
|
|
|
|
long long stats_bus_messages_received[CLUSTERMSG_TYPE_COUNT];
|
2017-04-14 13:39:49 +02:00
|
|
|
long long stats_pfail_nodes; /* Number of nodes in PFAIL status,
|
|
|
|
excluding nodes without address. */
|
2021-12-16 21:56:59 -08:00
|
|
|
unsigned long long stat_cluster_links_buffer_limit_exceeded; /* Total number of cluster links freed due to exceeding buffer limit */
|
2023-07-05 17:46:23 -07:00
|
|
|
|
|
|
|
/* Bit map for slots that are no longer claimed by the owner in cluster PING
|
|
|
|
* messages. During slot migration, the owner will stop claiming the slot after
|
|
|
|
* the ownership transfer. Set the bit corresponding to the slot when a node
|
|
|
|
* stops claiming the slot. This prevents spreading incorrect information (that
|
|
|
|
* source still owns the slot) using UPDATE messages. */
|
|
|
|
unsigned char owner_not_claiming_slot[CLUSTER_SLOTS / 8];
|
2013-10-09 15:37:20 +02:00
|
|
|
} clusterState;
|
|
|
|
|
|
|
|
/* Redis cluster messages header */
|
|
|
|
|
|
|
|
/* Initially we don't know our "name", but we'll find it once we connect
|
|
|
|
* to the first node, using the getsockname() function. Then we'll use this
|
|
|
|
* address for all the next messages. */
|
|
|
|
typedef struct {
|
2015-07-27 14:55:45 +02:00
|
|
|
char nodename[CLUSTER_NAMELEN];
|
2013-10-09 15:37:20 +02:00
|
|
|
uint32_t ping_sent;
|
|
|
|
uint32_t pong_received;
|
2015-07-27 09:41:48 +02:00
|
|
|
char ip[NET_IP_STR_LEN]; /* IP address last time it was seen */
|
Support TLS service when "tls-cluster" is not enabled and persist both plain and TLS port in nodes.conf (#12233)
Originally, when "tls-cluster" is enabled, `port` is set to TLS port. In order to support non-TLS clients, `pport` is used to propagate TCP port across cluster nodes. However when "tls-cluster" is disabled, `port` is set to TCP port, and `pport` is not used, which means the cluster cannot provide TLS service unless "tls-cluster" is on.
```
typedef struct {
// ...
uint16_t port; /* Latest known clients port (TLS or plain). */
uint16_t pport; /* Latest known clients plaintext port. Only used if the main clients port is for TLS. */
// ...
} clusterNode;
```
```
typedef struct {
// ...
uint16_t port; /* TCP base port number. */
uint16_t pport; /* Sender TCP plaintext port, if base port is TLS */
// ...
} clusterMsg;
```
This PR renames `port` and `pport` in `clusterNode` to `tcp_port` and `tls_port`, to record both ports no matter "tls-cluster" is enabled or disabled.
This allows to provide TLS service to clients when "tls-cluster" is disabled: when displaying cluster topology, or giving `MOVED` error, server can provide TLS or TCP port according to client's connection type, no matter what type of connection cluster bus is using.
For backwards compatibility, `port` and `pport` in `clusterMsg` are preserved, when "tls-cluster" is enabled, `port` is set to TLS port and `pport` is set to TCP port, when "tls-cluster" is disabled, `port` is set to TCP port and `pport` is set to TLS port (instead of 0).
Also, in the nodes.conf file, a new aux field displaying an extra port is added to complete the persisted info. We may have `tls_port=xxxxx` or `tcp_port=xxxxx` in the aux field, to complete the cluster topology, while the other port is stored in the normal `<ip>:<port>` field. The format is shown below.
```
<node-id> <ip>:<tcp_port>@<cport>,<hostname>,shard-id=...,tls-port=6379 myself,master - 0 0 0 connected 0-1000
```
Or we can switch the position of two ports, both can be correctly resolved.
```
<node-id> <ip>:<tls_port>@<cport>,<hostname>,shard-id=...,tcp-port=6379 myself,master - 0 0 0 connected 0-1000
```
2023-06-26 22:43:38 +08:00
|
|
|
uint16_t port; /* primary port last time it was seen */
|
2016-01-21 16:57:35 +01:00
|
|
|
uint16_t cport; /* cluster port last time it was seen */
|
2015-01-13 10:20:49 +01:00
|
|
|
uint16_t flags; /* node->flags copy */
|
Support TLS service when "tls-cluster" is not enabled and persist both plain and TLS port in nodes.conf (#12233)
Originally, when "tls-cluster" is enabled, `port` is set to TLS port. In order to support non-TLS clients, `pport` is used to propagate TCP port across cluster nodes. However when "tls-cluster" is disabled, `port` is set to TCP port, and `pport` is not used, which means the cluster cannot provide TLS service unless "tls-cluster" is on.
```
typedef struct {
// ...
uint16_t port; /* Latest known clients port (TLS or plain). */
uint16_t pport; /* Latest known clients plaintext port. Only used if the main clients port is for TLS. */
// ...
} clusterNode;
```
```
typedef struct {
// ...
uint16_t port; /* TCP base port number. */
uint16_t pport; /* Sender TCP plaintext port, if base port is TLS */
// ...
} clusterMsg;
```
This PR renames `port` and `pport` in `clusterNode` to `tcp_port` and `tls_port`, to record both ports no matter "tls-cluster" is enabled or disabled.
This allows to provide TLS service to clients when "tls-cluster" is disabled: when displaying cluster topology, or giving `MOVED` error, server can provide TLS or TCP port according to client's connection type, no matter what type of connection cluster bus is using.
For backwards compatibility, `port` and `pport` in `clusterMsg` are preserved, when "tls-cluster" is enabled, `port` is set to TLS port and `pport` is set to TCP port, when "tls-cluster" is disabled, `port` is set to TCP port and `pport` is set to TLS port (instead of 0).
Also, in the nodes.conf file, a new aux field displaying an extra port is added to complete the persisted info. We may have `tls_port=xxxxx` or `tcp_port=xxxxx` in the aux field, to complete the cluster topology, while the other port is stored in the normal `<ip>:<port>` field. The format is shown below.
```
<node-id> <ip>:<tcp_port>@<cport>,<hostname>,shard-id=...,tls-port=6379 myself,master - 0 0 0 connected 0-1000
```
Or we can switch the position of two ports, both can be correctly resolved.
```
<node-id> <ip>:<tls_port>@<cport>,<hostname>,shard-id=...,tcp-port=6379 myself,master - 0 0 0 connected 0-1000
```
2023-06-26 22:43:38 +08:00
|
|
|
uint16_t pport; /* secondary port last time it was seen */
|
2021-03-30 22:11:32 +02:00
|
|
|
uint16_t notused1;
|
2013-10-09 15:37:20 +02:00
|
|
|
} clusterMsgDataGossip;
|
|
|
|
|
|
|
|
typedef struct {
|
2015-07-27 14:55:45 +02:00
|
|
|
char nodename[CLUSTER_NAMELEN];
|
2013-10-09 15:37:20 +02:00
|
|
|
} clusterMsgDataFail;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
uint32_t channel_len;
|
|
|
|
uint32_t message_len;
|
2018-03-29 15:13:31 +02:00
|
|
|
unsigned char bulk_data[8]; /* 8 bytes just as placeholder. */
|
2013-10-09 15:37:20 +02:00
|
|
|
} clusterMsgDataPublish;
|
|
|
|
|
2013-11-08 16:26:50 +01:00
|
|
|
typedef struct {
|
|
|
|
uint64_t configEpoch; /* Config epoch of the specified instance. */
|
2015-07-27 14:55:45 +02:00
|
|
|
char nodename[CLUSTER_NAMELEN]; /* Name of the slots owner. */
|
|
|
|
unsigned char slots[CLUSTER_SLOTS/8]; /* Slots bitmap. */
|
2013-11-08 16:26:50 +01:00
|
|
|
} clusterMsgDataUpdate;
|
|
|
|
|
2018-03-29 15:13:31 +02:00
|
|
|
typedef struct {
|
|
|
|
uint64_t module_id; /* ID of the sender module. */
|
|
|
|
uint32_t len; /* ID of the sender module. */
|
|
|
|
uint8_t type; /* Type from 0 to 255. */
|
|
|
|
unsigned char bulk_data[3]; /* 3 bytes just as placeholder. */
|
|
|
|
} clusterMsgModule;
|
|
|
|
|
2022-01-02 19:48:29 -08:00
|
|
|
/* The cluster supports optional extension messages that can be sent
|
|
|
|
* along with ping/pong/meet messages to give additional info in a
|
|
|
|
* consistent manner. */
|
|
|
|
typedef enum {
|
|
|
|
CLUSTERMSG_EXT_TYPE_HOSTNAME,
|
2023-06-18 12:16:51 +08:00
|
|
|
CLUSTERMSG_EXT_TYPE_HUMAN_NODENAME,
|
2022-07-26 09:28:13 +02:00
|
|
|
CLUSTERMSG_EXT_TYPE_FORGOTTEN_NODE,
|
2022-11-16 19:24:18 -08:00
|
|
|
CLUSTERMSG_EXT_TYPE_SHARDID,
|
2022-01-02 19:48:29 -08:00
|
|
|
} clusterMsgPingtypes;
|
|
|
|
|
|
|
|
/* Helper function for making sure extensions are eight byte aligned. */
|
|
|
|
#define EIGHT_BYTE_ALIGN(size) ((((size) + 7) / 8) * 8)
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
char hostname[1]; /* The announced hostname, ends with \0. */
|
|
|
|
} clusterMsgPingExtHostname;
|
|
|
|
|
2023-06-18 12:16:51 +08:00
|
|
|
typedef struct {
|
|
|
|
char human_nodename[1]; /* The announced nodename, ends with \0. */
|
|
|
|
} clusterMsgPingExtHumanNodename;
|
|
|
|
|
2022-07-26 09:28:13 +02:00
|
|
|
typedef struct {
|
|
|
|
char name[CLUSTER_NAMELEN]; /* Node name. */
|
|
|
|
uint64_t ttl; /* Remaining time to blacklist the node, in seconds. */
|
|
|
|
} clusterMsgPingExtForgottenNode;
|
|
|
|
|
|
|
|
static_assert(sizeof(clusterMsgPingExtForgottenNode) % 8 == 0, "");
|
|
|
|
|
2022-11-16 19:24:18 -08:00
|
|
|
typedef struct {
|
|
|
|
char shard_id[CLUSTER_NAMELEN]; /* The shard_id, 40 bytes fixed. */
|
|
|
|
} clusterMsgPingExtShardId;
|
|
|
|
|
2022-01-02 19:48:29 -08:00
|
|
|
typedef struct {
|
|
|
|
uint32_t length; /* Total length of this extension message (including this header) */
|
|
|
|
uint16_t type; /* Type of this extension message (see clusterMsgPingExtTypes) */
|
|
|
|
uint16_t unused; /* 16 bits of padding to make this structure 8 byte aligned. */
|
|
|
|
union {
|
|
|
|
clusterMsgPingExtHostname hostname;
|
2023-06-18 12:16:51 +08:00
|
|
|
clusterMsgPingExtHumanNodename human_nodename;
|
2022-07-26 09:28:13 +02:00
|
|
|
clusterMsgPingExtForgottenNode forgotten_node;
|
2022-11-16 19:24:18 -08:00
|
|
|
clusterMsgPingExtShardId shard_id;
|
2022-01-02 19:48:29 -08:00
|
|
|
} ext[]; /* Actual extension information, formatted so that the data is 8
|
|
|
|
* byte aligned, regardless of its content. */
|
|
|
|
} clusterMsgPingExt;
|
|
|
|
|
2013-10-09 15:37:20 +02:00
|
|
|
union clusterMsgData {
|
|
|
|
/* PING, MEET and PONG */
|
|
|
|
struct {
|
|
|
|
/* Array of N clusterMsgDataGossip structures */
|
|
|
|
clusterMsgDataGossip gossip[1];
|
2022-01-02 19:48:29 -08:00
|
|
|
/* Extension data that can optionally be sent for ping/meet/pong
|
|
|
|
* messages. We can't explicitly define them here though, since
|
|
|
|
* the gossip array isn't the real length of the gossip data. */
|
2013-10-09 15:37:20 +02:00
|
|
|
} ping;
|
|
|
|
|
|
|
|
/* FAIL */
|
|
|
|
struct {
|
|
|
|
clusterMsgDataFail about;
|
|
|
|
} fail;
|
|
|
|
|
|
|
|
/* PUBLISH */
|
|
|
|
struct {
|
|
|
|
clusterMsgDataPublish msg;
|
|
|
|
} publish;
|
2013-11-08 16:26:50 +01:00
|
|
|
|
|
|
|
/* UPDATE */
|
|
|
|
struct {
|
|
|
|
clusterMsgDataUpdate nodecfg;
|
|
|
|
} update;
|
2018-03-29 15:13:31 +02:00
|
|
|
|
|
|
|
/* MODULE */
|
|
|
|
struct {
|
|
|
|
clusterMsgModule msg;
|
|
|
|
} module;
|
2013-10-09 15:37:20 +02:00
|
|
|
};
|
|
|
|
|
2016-01-19 13:17:20 +01:00
|
|
|
#define CLUSTER_PROTO_VER 1 /* Cluster bus protocol version. */
|
2014-02-05 13:01:24 +01:00
|
|
|
|
2013-10-09 15:37:20 +02:00
|
|
|
typedef struct {
|
2018-07-01 13:24:50 +08:00
|
|
|
char sig[4]; /* Signature "RCmb" (Redis Cluster message bus). */
|
2014-02-10 16:27:33 +01:00
|
|
|
uint32_t totlen; /* Total length of this message */
|
2017-06-04 15:09:05 +01:00
|
|
|
uint16_t ver; /* Protocol version, currently set to 1. */
|
Support TLS service when "tls-cluster" is not enabled and persist both plain and TLS port in nodes.conf (#12233)
Originally, when "tls-cluster" is enabled, `port` is set to TLS port. In order to support non-TLS clients, `pport` is used to propagate TCP port across cluster nodes. However when "tls-cluster" is disabled, `port` is set to TCP port, and `pport` is not used, which means the cluster cannot provide TLS service unless "tls-cluster" is on.
```
typedef struct {
// ...
uint16_t port; /* Latest known clients port (TLS or plain). */
uint16_t pport; /* Latest known clients plaintext port. Only used if the main clients port is for TLS. */
// ...
} clusterNode;
```
```
typedef struct {
// ...
uint16_t port; /* TCP base port number. */
uint16_t pport; /* Sender TCP plaintext port, if base port is TLS */
// ...
} clusterMsg;
```
This PR renames `port` and `pport` in `clusterNode` to `tcp_port` and `tls_port`, to record both ports no matter "tls-cluster" is enabled or disabled.
This allows to provide TLS service to clients when "tls-cluster" is disabled: when displaying cluster topology, or giving `MOVED` error, server can provide TLS or TCP port according to client's connection type, no matter what type of connection cluster bus is using.
For backwards compatibility, `port` and `pport` in `clusterMsg` are preserved, when "tls-cluster" is enabled, `port` is set to TLS port and `pport` is set to TCP port, when "tls-cluster" is disabled, `port` is set to TCP port and `pport` is set to TLS port (instead of 0).
Also, in the nodes.conf file, a new aux field displaying an extra port is added to complete the persisted info. We may have `tls_port=xxxxx` or `tcp_port=xxxxx` in the aux field, to complete the cluster topology, while the other port is stored in the normal `<ip>:<port>` field. The format is shown below.
```
<node-id> <ip>:<tcp_port>@<cport>,<hostname>,shard-id=...,tls-port=6379 myself,master - 0 0 0 connected 0-1000
```
Or we can switch the position of two ports, both can be correctly resolved.
```
<node-id> <ip>:<tls_port>@<cport>,<hostname>,shard-id=...,tcp-port=6379 myself,master - 0 0 0 connected 0-1000
```
2023-06-26 22:43:38 +08:00
|
|
|
uint16_t port; /* Primary port number (TCP or TLS). */
|
2013-10-09 15:37:20 +02:00
|
|
|
uint16_t type; /* Message type */
|
|
|
|
uint16_t count; /* Only used for some kind of messages. */
|
|
|
|
uint64_t currentEpoch; /* The epoch accordingly to the sending node. */
|
2014-01-28 16:34:23 +01:00
|
|
|
uint64_t configEpoch; /* The config epoch if it's a master, or the last
|
|
|
|
epoch advertised by its master if it is a
|
|
|
|
slave. */
|
2014-01-28 16:51:50 +01:00
|
|
|
uint64_t offset; /* Master replication offset if node is a master or
|
|
|
|
processed replication offset if node is a slave. */
|
2015-07-27 14:55:45 +02:00
|
|
|
char sender[CLUSTER_NAMELEN]; /* Name of the sender node */
|
|
|
|
unsigned char myslots[CLUSTER_SLOTS/8];
|
|
|
|
char slaveof[CLUSTER_NAMELEN];
|
2016-01-19 13:17:20 +01:00
|
|
|
char myip[NET_IP_STR_LEN]; /* Sender IP, if not all zeroed. */
|
2022-01-02 19:48:29 -08:00
|
|
|
uint16_t extensions; /* Number of extensions sent along with this packet. */
|
2022-01-30 09:43:37 -08:00
|
|
|
char notused1[30]; /* 30 bytes reserved for future usage. */
|
Support TLS service when "tls-cluster" is not enabled and persist both plain and TLS port in nodes.conf (#12233)
Originally, when "tls-cluster" is enabled, `port` is set to TLS port. In order to support non-TLS clients, `pport` is used to propagate TCP port across cluster nodes. However when "tls-cluster" is disabled, `port` is set to TCP port, and `pport` is not used, which means the cluster cannot provide TLS service unless "tls-cluster" is on.
```
typedef struct {
// ...
uint16_t port; /* Latest known clients port (TLS or plain). */
uint16_t pport; /* Latest known clients plaintext port. Only used if the main clients port is for TLS. */
// ...
} clusterNode;
```
```
typedef struct {
// ...
uint16_t port; /* TCP base port number. */
uint16_t pport; /* Sender TCP plaintext port, if base port is TLS */
// ...
} clusterMsg;
```
This PR renames `port` and `pport` in `clusterNode` to `tcp_port` and `tls_port`, to record both ports no matter "tls-cluster" is enabled or disabled.
This allows to provide TLS service to clients when "tls-cluster" is disabled: when displaying cluster topology, or giving `MOVED` error, server can provide TLS or TCP port according to client's connection type, no matter what type of connection cluster bus is using.
For backwards compatibility, `port` and `pport` in `clusterMsg` are preserved, when "tls-cluster" is enabled, `port` is set to TLS port and `pport` is set to TCP port, when "tls-cluster" is disabled, `port` is set to TCP port and `pport` is set to TLS port (instead of 0).
Also, in the nodes.conf file, a new aux field displaying an extra port is added to complete the persisted info. We may have `tls_port=xxxxx` or `tcp_port=xxxxx` in the aux field, to complete the cluster topology, while the other port is stored in the normal `<ip>:<port>` field. The format is shown below.
```
<node-id> <ip>:<tcp_port>@<cport>,<hostname>,shard-id=...,tls-port=6379 myself,master - 0 0 0 connected 0-1000
```
Or we can switch the position of two ports, both can be correctly resolved.
```
<node-id> <ip>:<tls_port>@<cport>,<hostname>,shard-id=...,tcp-port=6379 myself,master - 0 0 0 connected 0-1000
```
2023-06-26 22:43:38 +08:00
|
|
|
uint16_t pport; /* Secondary port number: if primary port is TCP port, this is
|
|
|
|
TLS port, and if primary port is TLS port, this is TCP port.*/
|
2016-01-21 16:57:35 +01:00
|
|
|
uint16_t cport; /* Sender TCP cluster bus port */
|
|
|
|
uint16_t flags; /* Sender node flags */
|
2013-10-09 15:37:20 +02:00
|
|
|
unsigned char state; /* Cluster state from the POV of the sender */
|
2014-02-05 13:01:24 +01:00
|
|
|
unsigned char mflags[3]; /* Message flags: CLUSTERMSG_FLAG[012]_... */
|
2013-10-09 15:37:20 +02:00
|
|
|
union clusterMsgData data;
|
|
|
|
} clusterMsg;
|
|
|
|
|
2022-01-30 09:43:37 -08:00
|
|
|
/* clusterMsg defines the gossip wire protocol exchanged among Redis cluster
|
|
|
|
* members, which can be running different versions of redis-server bits,
|
|
|
|
* especially during cluster rolling upgrades.
|
|
|
|
*
|
|
|
|
* Therefore, fields in this struct should remain at the same offset from
|
|
|
|
* release to release. The static asserts below ensures that incompatible
|
|
|
|
* changes in clusterMsg be caught at compile time.
|
|
|
|
*/
|
|
|
|
|
|
|
|
static_assert(offsetof(clusterMsg, sig) == 0, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, totlen) == 4, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, ver) == 8, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, port) == 10, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, type) == 12, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, count) == 14, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, currentEpoch) == 16, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, configEpoch) == 24, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, offset) == 32, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, sender) == 40, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, myslots) == 80, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, slaveof) == 2128, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, myip) == 2168, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, extensions) == 2214, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, notused1) == 2216, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, pport) == 2246, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, cport) == 2248, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, flags) == 2250, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, state) == 2252, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, mflags) == 2253, "unexpected field offset");
|
|
|
|
static_assert(offsetof(clusterMsg, data) == 2256, "unexpected field offset");
|
|
|
|
|
2013-10-09 15:37:20 +02:00
|
|
|
#define CLUSTERMSG_MIN_LEN (sizeof(clusterMsg)-sizeof(union clusterMsgData))
|
|
|
|
|
2014-02-05 13:01:24 +01:00
|
|
|
/* Message flags better specify the packet content or are used to
|
|
|
|
* provide some information about the node state. */
|
|
|
|
#define CLUSTERMSG_FLAG0_PAUSED (1<<0) /* Master paused for manual failover. */
|
2014-02-05 13:10:03 +01:00
|
|
|
#define CLUSTERMSG_FLAG0_FORCEACK (1<<1) /* Give ACK to AUTH_REQUEST even if
|
|
|
|
master is up. */
|
2022-01-02 19:48:29 -08:00
|
|
|
#define CLUSTERMSG_FLAG0_EXT_DATA (1<<2) /* Message contains extension data */
|
2014-02-05 13:01:24 +01:00
|
|
|
|
2014-01-28 16:34:23 +01:00
|
|
|
/* ---------------------- API exported outside cluster.c -------------------- */
|
2021-06-16 06:35:13 +03:00
|
|
|
void clusterInit(void);
|
2022-10-12 13:09:51 +03:00
|
|
|
void clusterInitListeners(void);
|
2021-06-16 06:35:13 +03:00
|
|
|
void clusterCron(void);
|
|
|
|
void clusterBeforeSleep(void);
|
2015-07-26 15:20:46 +02:00
|
|
|
clusterNode *getNodeByQuery(client *c, struct redisCommand *cmd, robj **argv, int argc, int *hashslot, int *ask);
|
2022-04-05 13:51:51 +08:00
|
|
|
int verifyClusterNodeId(const char *name, int length);
|
|
|
|
clusterNode *clusterLookupNode(const char *name, int length);
|
2015-07-26 15:20:46 +02:00
|
|
|
int clusterRedirectBlockedClientIfNeeded(client *c);
|
|
|
|
void clusterRedirectClient(client *c, clusterNode *n, int hashslot, int error_code);
|
2021-06-16 06:35:13 +03:00
|
|
|
void migrateCloseTimedoutSockets(void);
|
|
|
|
int verifyClusterConfigWithData(void);
|
2020-06-16 11:45:03 +02:00
|
|
|
unsigned long getClusterConnectionsCount(void);
|
2022-01-18 21:55:20 +08:00
|
|
|
int clusterSendModuleMessageToTarget(const char *target, uint64_t module_id, uint8_t type, const char *payload, uint32_t len);
|
2022-04-17 14:43:22 +02:00
|
|
|
void clusterPropagatePublish(robj *channel, robj *message, int sharded);
|
2021-06-16 06:35:13 +03:00
|
|
|
unsigned int keyHashSlot(char *key, int keylen);
|
Replica keep serving data during repl-diskless-load=swapdb for better availability (#9323)
For diskless replication in swapdb mode, considering we already spend replica memory
having a backup of current db to restore in case of failure, we can have the following benefits
by instead swapping database only in case we succeeded in transferring db from master:
- Avoid `LOADING` response during failed and successful synchronization for cases where the
replica is already up and running with data.
- Faster total time of diskless replication, because now we're moving from Transfer + Flush + Load
time to Transfer + Load only. Flushing the tempDb is done asynchronously after swapping.
- This could be implemented also for disk replication with similar benefits if consumers are willing
to spend the extra memory usage.
General notes:
- The concept of `backupDb` becomes `tempDb` for clarity.
- Async loading mode will only kick in if the replica is syncing from a master that has the same
repl-id the one it had before. i.e. the data it's getting belongs to a different time of the same timeline.
- New property in INFO: `async_loading` to differentiate from the blocking loading
- Slot to Key mapping is now a field of `redisDb` as it's more natural to access it from both server.db
and the tempDb that is passed around.
- Because this is affecting replicas only, we assume that if they are not readonly and write commands
during replication, they are lost after SYNC same way as before, but we're still denying CONFIG SET
here anyways to avoid complications.
Considerations for review:
- We have many cases where server.loading flag is used and even though I tried my best, there may
be cases where async_loading should be checked as well and cases where it shouldn't (would require
very good understanding of whole code)
- Several places that had different behavior depending on the loading flag where actually meant to just
handle commands coming from the AOF client differently than ones coming from real clients, changed
to check CLIENT_ID_AOF instead.
**Additional for Release Notes**
- Bugfix - server.dirty was not incremented for any kind of diskless replication, as effect it wouldn't
contribute on triggering next database SAVE
- New flag for RM_GetContextFlags module API: REDISMODULE_CTX_FLAGS_ASYNC_LOADING
- Deprecated RedisModuleEvent_ReplBackup. Starting from Redis 7.0, we don't fire this event.
Instead, we have the new RedisModuleEvent_ReplAsyncLoad holding 3 sub-events: STARTED,
ABORTED and COMPLETED.
- New module flag REDISMODULE_OPTIONS_HANDLE_REPL_ASYNC_LOAD for RedisModule_SetModuleOptions
to allow modules to declare they support the diskless replication with async loading (when absent, we fall
back to disk-based loading).
Co-authored-by: Eduardo Semprebon <edus@saxobank.com>
Co-authored-by: Oran Agra <oran@redislabs.com>
2021-11-04 09:46:50 +01:00
|
|
|
void slotToKeyAddEntry(dictEntry *entry, redisDb *db);
|
|
|
|
void slotToKeyDelEntry(dictEntry *entry, redisDb *db);
|
2022-11-20 23:23:54 +01:00
|
|
|
void slotToKeyReplaceEntry(dict *d, dictEntry *entry);
|
Replica keep serving data during repl-diskless-load=swapdb for better availability (#9323)
For diskless replication in swapdb mode, considering we already spend replica memory
having a backup of current db to restore in case of failure, we can have the following benefits
by instead swapping database only in case we succeeded in transferring db from master:
- Avoid `LOADING` response during failed and successful synchronization for cases where the
replica is already up and running with data.
- Faster total time of diskless replication, because now we're moving from Transfer + Flush + Load
time to Transfer + Load only. Flushing the tempDb is done asynchronously after swapping.
- This could be implemented also for disk replication with similar benefits if consumers are willing
to spend the extra memory usage.
General notes:
- The concept of `backupDb` becomes `tempDb` for clarity.
- Async loading mode will only kick in if the replica is syncing from a master that has the same
repl-id the one it had before. i.e. the data it's getting belongs to a different time of the same timeline.
- New property in INFO: `async_loading` to differentiate from the blocking loading
- Slot to Key mapping is now a field of `redisDb` as it's more natural to access it from both server.db
and the tempDb that is passed around.
- Because this is affecting replicas only, we assume that if they are not readonly and write commands
during replication, they are lost after SYNC same way as before, but we're still denying CONFIG SET
here anyways to avoid complications.
Considerations for review:
- We have many cases where server.loading flag is used and even though I tried my best, there may
be cases where async_loading should be checked as well and cases where it shouldn't (would require
very good understanding of whole code)
- Several places that had different behavior depending on the loading flag where actually meant to just
handle commands coming from the AOF client differently than ones coming from real clients, changed
to check CLIENT_ID_AOF instead.
**Additional for Release Notes**
- Bugfix - server.dirty was not incremented for any kind of diskless replication, as effect it wouldn't
contribute on triggering next database SAVE
- New flag for RM_GetContextFlags module API: REDISMODULE_CTX_FLAGS_ASYNC_LOADING
- Deprecated RedisModuleEvent_ReplBackup. Starting from Redis 7.0, we don't fire this event.
Instead, we have the new RedisModuleEvent_ReplAsyncLoad holding 3 sub-events: STARTED,
ABORTED and COMPLETED.
- New module flag REDISMODULE_OPTIONS_HANDLE_REPL_ASYNC_LOAD for RedisModule_SetModuleOptions
to allow modules to declare they support the diskless replication with async loading (when absent, we fall
back to disk-based loading).
Co-authored-by: Eduardo Semprebon <edus@saxobank.com>
Co-authored-by: Oran Agra <oran@redislabs.com>
2021-11-04 09:46:50 +01:00
|
|
|
void slotToKeyInit(redisDb *db);
|
|
|
|
void slotToKeyFlush(redisDb *db);
|
|
|
|
void slotToKeyDestroy(redisDb *db);
|
2021-11-08 10:56:03 +08:00
|
|
|
void clusterUpdateMyselfFlags(void);
|
|
|
|
void clusterUpdateMyselfIp(void);
|
2022-01-03 01:54:47 +01:00
|
|
|
void slotToChannelAdd(sds channel);
|
|
|
|
void slotToChannelDel(sds channel);
|
2022-01-02 19:48:29 -08:00
|
|
|
void clusterUpdateMyselfHostname(void);
|
2022-11-26 10:01:01 +08:00
|
|
|
void clusterUpdateMyselfAnnouncedPorts(void);
|
Support TLS service when "tls-cluster" is not enabled and persist both plain and TLS port in nodes.conf (#12233)
Originally, when "tls-cluster" is enabled, `port` is set to TLS port. In order to support non-TLS clients, `pport` is used to propagate TCP port across cluster nodes. However when "tls-cluster" is disabled, `port` is set to TCP port, and `pport` is not used, which means the cluster cannot provide TLS service unless "tls-cluster" is on.
```
typedef struct {
// ...
uint16_t port; /* Latest known clients port (TLS or plain). */
uint16_t pport; /* Latest known clients plaintext port. Only used if the main clients port is for TLS. */
// ...
} clusterNode;
```
```
typedef struct {
// ...
uint16_t port; /* TCP base port number. */
uint16_t pport; /* Sender TCP plaintext port, if base port is TLS */
// ...
} clusterMsg;
```
This PR renames `port` and `pport` in `clusterNode` to `tcp_port` and `tls_port`, to record both ports no matter "tls-cluster" is enabled or disabled.
This allows to provide TLS service to clients when "tls-cluster" is disabled: when displaying cluster topology, or giving `MOVED` error, server can provide TLS or TCP port according to client's connection type, no matter what type of connection cluster bus is using.
For backwards compatibility, `port` and `pport` in `clusterMsg` are preserved, when "tls-cluster" is enabled, `port` is set to TLS port and `pport` is set to TCP port, when "tls-cluster" is disabled, `port` is set to TCP port and `pport` is set to TLS port (instead of 0).
Also, in the nodes.conf file, a new aux field displaying an extra port is added to complete the persisted info. We may have `tls_port=xxxxx` or `tcp_port=xxxxx` in the aux field, to complete the cluster topology, while the other port is stored in the normal `<ip>:<port>` field. The format is shown below.
```
<node-id> <ip>:<tcp_port>@<cport>,<hostname>,shard-id=...,tls-port=6379 myself,master - 0 0 0 connected 0-1000
```
Or we can switch the position of two ports, both can be correctly resolved.
```
<node-id> <ip>:<tls_port>@<cport>,<hostname>,shard-id=...,tcp-port=6379 myself,master - 0 0 0 connected 0-1000
```
2023-06-26 22:43:38 +08:00
|
|
|
sds clusterGenNodesDescription(client *c, int filter, int tls_primary);
|
2023-05-02 17:31:32 -07:00
|
|
|
sds genClusterInfoString(void);
|
2023-02-02 09:06:24 -08:00
|
|
|
void freeClusterLink(clusterLink *link);
|
2023-06-18 12:16:51 +08:00
|
|
|
void clusterUpdateMyselfHumanNodename(void);
|
|
|
|
int isValidAuxString(char *s, unsigned int length);
|
Support TLS service when "tls-cluster" is not enabled and persist both plain and TLS port in nodes.conf (#12233)
Originally, when "tls-cluster" is enabled, `port` is set to TLS port. In order to support non-TLS clients, `pport` is used to propagate TCP port across cluster nodes. However when "tls-cluster" is disabled, `port` is set to TCP port, and `pport` is not used, which means the cluster cannot provide TLS service unless "tls-cluster" is on.
```
typedef struct {
// ...
uint16_t port; /* Latest known clients port (TLS or plain). */
uint16_t pport; /* Latest known clients plaintext port. Only used if the main clients port is for TLS. */
// ...
} clusterNode;
```
```
typedef struct {
// ...
uint16_t port; /* TCP base port number. */
uint16_t pport; /* Sender TCP plaintext port, if base port is TLS */
// ...
} clusterMsg;
```
This PR renames `port` and `pport` in `clusterNode` to `tcp_port` and `tls_port`, to record both ports no matter "tls-cluster" is enabled or disabled.
This allows to provide TLS service to clients when "tls-cluster" is disabled: when displaying cluster topology, or giving `MOVED` error, server can provide TLS or TCP port according to client's connection type, no matter what type of connection cluster bus is using.
For backwards compatibility, `port` and `pport` in `clusterMsg` are preserved, when "tls-cluster" is enabled, `port` is set to TLS port and `pport` is set to TCP port, when "tls-cluster" is disabled, `port` is set to TCP port and `pport` is set to TLS port (instead of 0).
Also, in the nodes.conf file, a new aux field displaying an extra port is added to complete the persisted info. We may have `tls_port=xxxxx` or `tcp_port=xxxxx` in the aux field, to complete the cluster topology, while the other port is stored in the normal `<ip>:<port>` field. The format is shown below.
```
<node-id> <ip>:<tcp_port>@<cport>,<hostname>,shard-id=...,tls-port=6379 myself,master - 0 0 0 connected 0-1000
```
Or we can switch the position of two ports, both can be correctly resolved.
```
<node-id> <ip>:<tls_port>@<cport>,<hostname>,shard-id=...,tcp-port=6379 myself,master - 0 0 0 connected 0-1000
```
2023-06-26 22:43:38 +08:00
|
|
|
int getNodeDefaultClientPort(clusterNode *n);
|
|
|
|
|
2015-07-27 14:55:45 +02:00
|
|
|
#endif /* __CLUSTER_H */
|