projects
/
redis.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'unstable'
[redis.git]
/
src
/
db.c
diff --git
a/src/db.c
b/src/db.c
index 7d323924508c7ef8e002842fc956796998ae5891..354f904569b71a47ce693aaa2ea1f4a47949a9c8 100644
(file)
--- a/
src/db.c
+++ b/
src/db.c
@@
-317,7
+317,7
@@
void existsCommand(redisClient *c) {
void selectCommand(redisClient *c) {
int id = atoi(c->argv[1]->ptr);
void selectCommand(redisClient *c) {
int id = atoi(c->argv[1]->ptr);
- if (server.cluster_enabled) {
+ if (server.cluster_enabled
&& id != 0
) {
addReplyError(c,"SELECT is not allowed in cluster mode");
return;
}
addReplyError(c,"SELECT is not allowed in cluster mode");
return;
}
@@
-725,14
+725,18
@@
void SlotToKeyDel(robj *key) {
zslDelete(server.cluster.slots_to_keys,hashslot,key);
}
zslDelete(server.cluster.slots_to_keys,hashslot,key);
}
-
robj *GetKeyInSlot(unsigned int hashslo
t) {
+
unsigned int GetKeysInSlot(unsigned int hashslot, robj **keys, unsigned int coun
t) {
zskiplistNode *n;
zrangespec range;
zskiplistNode *n;
zrangespec range;
+ int j = 0;
range.min = range.max = hashslot;
range.minex = range.maxex = 0;
n = zslFirstInRange(server.cluster.slots_to_keys, range);
range.min = range.max = hashslot;
range.minex = range.maxex = 0;
n = zslFirstInRange(server.cluster.slots_to_keys, range);
- if (!n) return NULL;
- return n->obj;
+ while(n && n->score == hashslot && count--) {
+ keys[j++] = n->obj;
+ n = n->level[0].forward;
+ }
+ return j;
}
}