Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
742c6750
Commit
742c6750
authored
Jan 19, 2023
by
Vitaly Arbuzov
Browse files
Add comments for db iterator functions
parent
a4b155fd
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/cluster.h
View file @
742c6750
...
...
@@ -5,8 +5,8 @@
* Redis cluster data structures, defines, exported API.
*----------------------------------------------------------------------------*/
#define CLUSTER_SLOT_MASK_BITS 14
/* Number of bits used for slot id.*/
#define CLUSTER_SLOTS (1<<CLUSTER_SLOT_MASK_BITS)
/* Total number of slots in cluster mode. */
#define CLUSTER_SLOT_MASK_BITS 14
/* Number of bits used for slot id.
*/
#define CLUSTER_SLOTS (1<<CLUSTER_SLOT_MASK_BITS)
/* Total number of slots in cluster mode
, which is 16384
. */
#define CLUSTER_SLOT_MASK ((unsigned long long)(CLUSTER_SLOTS - 1))
/* Bit mask for slot id stored in LSB. */
#define CLUSTER_OK 0
/* Everything looks ok */
#define CLUSTER_FAIL 1
/* The cluster can't work */
...
...
src/db.c
View file @
742c6750
...
...
@@ -48,6 +48,7 @@
int expireIfNeeded(redisDb *db, robj *key, int flags);
int keyIsExpired(redisDb *db, robj *key);
/* Returns next dictionary from the iterator, or NULL if iteration is complete. */
dict *dbNextDict(dbIterator *iter) {
while (iter->index < iter->db->dict_count - 1) {
iter->index++;
...
...
@@ -59,11 +60,7 @@ dict *dbNextDict(dbIterator *iter) {
return NULL;
}
dbIterator
*
dbGetIterator
(
redisDb
*
db
)
{
return
dbGetIteratorAt
(
db
,
0
);
}
dbIterator
*
dbGetIteratorAt
(
redisDb
*
db
,
int
slot
)
{
void dbInitIteratorAt(dbIterator *dbit, redisDb *db, int slot) {
serverAssert(slot == 0 || server.cluster_enabled);
dbIterator *iter = zmalloc(sizeof(*iter));
iter->db = db;
...
...
@@ -71,6 +68,14 @@ dbIterator *dbGetIteratorAt(redisDb *db, int slot) {
return iter;
}
/* Returns DB iterator that can be used to iterate through sub-dictionaries.
* Primary database contains only one dictionary when node runs without cluster mode,
* or 16k dictionaries (one per slot) when node runs with cluster mode enabled. */
void dbInitIterator(dbIterator *dbit, redisDb *db) {
dbInitIteratorAt(dbit, db, 0);
}
/* Returns next dictionary strictly after provided slot and updates slot id in the supplied reference. */
dict *dbGetNextUnvisitedSlot(redisDb *db, int *slot) {
if (*slot < db->dict_count - 1) {
dbIterator *dbit = dbGetIteratorAt(db, *slot + 1); /* Scan on the current slot has already returned 0, find next non-empty dict. */
...
...
@@ -1121,6 +1126,7 @@ cleanup:
}
void addSlotIdToCursor(int slot, unsigned long long int *cursor) {
/* Slot id can be -1 if there are no more slots to visit. */
if (slot >= 0) {
*cursor = (*cursor << CLUSTER_SLOT_MASK_BITS) | slot;
}
...
...
src/server.h
View file @
742c6750
...
...
@@ -2361,12 +2361,10 @@ typedef struct dbIterator {
int
index
;
}
dbIterator
;
/* dbIterator specific functions */
dict
*
dbNextDict
(
dbIterator
*
iter
);
dbIterator
*
dbGetIterator
(
redisDb
*
db
);
dbIterator
*
dbGetIteratorAt
(
redisDb
*
db
,
int
slot
);
/* DB iterator specific functions */
void
dbInitIterator
(
dbIterator
*
dbit
,
redisDb
*
db
);
dict
*
dbNextDict
(
dbIterator
*
dbit
);
dict
*
dbGetNextUnvisitedSlot
(
redisDb
*
db
,
int
*
slot
);
void
dbReleaseIterator
(
dbIterator
*
iter
);
/* SCAN specific commands for easy cursor manipulation, shared between main code and modules. */
int
getAndClearSlotIdFromCursor
(
unsigned
long
long
int
*
cursor
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment