summaryrefslogtreecommitdiff
path: root/src/db.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2013-02-22 10:15:32 +0100
committerantirez <antirez@gmail.com>2013-02-22 10:15:32 +0100
commitd04770988d5cbbf5134935245ea720d176a11fd4 (patch)
tree00dee201666db5b790392eaf1aed41cbe5ae513b /src/db.c
parentefe51dfff51caf81c4731ea41cb14bfc55b411f2 (diff)
downloadredis-d04770988d5cbbf5134935245ea720d176a11fd4.tar.gz
Cluster: empty the internal sorted set mapping keys to slots on FLUSHDB/ALL.
Diffstat (limited to 'src/db.c')
-rw-r--r--src/db.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/db.c b/src/db.c
index f1a70dfe6..f432d7cff 100644
--- a/src/db.c
+++ b/src/db.c
@@ -34,6 +34,7 @@
void SlotToKeyAdd(robj *key);
void SlotToKeyDel(robj *key);
+void SlotToKeyFlush(void);
/*-----------------------------------------------------------------------------
* C-level DB API
@@ -213,12 +214,14 @@ void flushdbCommand(redisClient *c) {
signalFlushedDb(c->db->id);
dictEmpty(c->db->dict);
dictEmpty(c->db->expires);
+ if (server.cluster_enabled) SlotToKeyFlush();
addReply(c,shared.ok);
}
void flushallCommand(redisClient *c) {
signalFlushedDb(-1);
server.dirty += emptyDb();
+ if (server.cluster_enabled) SlotToKeyFlush();
addReply(c,shared.ok);
if (server.rdb_child_pid != -1) {
kill(server.rdb_child_pid,SIGUSR1);
@@ -755,6 +758,11 @@ void SlotToKeyDel(robj *key) {
zslDelete(server.cluster->slots_to_keys,hashslot,key);
}
+void SlotToKeyFlush(void) {
+ zslFree(server.cluster->slots_to_keys);
+ server.cluster->slots_to_keys = zslCreate();
+}
+
unsigned int GetKeysInSlot(unsigned int hashslot, robj **keys, unsigned int count) {
zskiplistNode *n;
zrangespec range;