mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 16:18:28 -05:00
Allow MIGRATE to always be called on local keys for open slots.
Extend the MIGRATE extra freedom to be able to be called in the context of the local slot, anytime there is a slot open in one or the other direction (importing or migrating). This is useful for redis-trib to fix the cluster when it has in an odd state. Thix fix allows "redis-trib fix" to make its work in certain cases where previously an error was reported.
This commit is contained in:
parent
36704d653b
commit
e15e518a67
@ -4989,14 +4989,15 @@ clusterNode *getNodeByQuery(client *c, struct redisCommand *cmd, robj **argv, in
|
||||
/* Return the hashslot by reference. */
|
||||
if (hashslot) *hashslot = slot;
|
||||
|
||||
/* This request is about a slot we are migrating into another instance?
|
||||
* Then if we have all the keys. */
|
||||
/* MIGRATE always works in the context of the local node if the slot
|
||||
* is open (migrating or importing state). We need to be able to freely
|
||||
* move keys among instances in this case. */
|
||||
if ((migrating_slot || importing_slot) && cmd->proc == migrateCommand)
|
||||
return myself;
|
||||
|
||||
/* If we don't have all the keys and we are migrating the slot, send
|
||||
* an ASK redirection. With the exception of the MIGRATE command, that
|
||||
* should just ignore non existing keys when moving keys from a node
|
||||
* to another. */
|
||||
if (migrating_slot && missing_keys && cmd->proc != migrateCommand) {
|
||||
* an ASK redirection. */
|
||||
if (migrating_slot && missing_keys) {
|
||||
if (error_code) *error_code = CLUSTER_REDIR_ASK;
|
||||
return server.cluster->migrating_slots_to[slot];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user