close
Skip to content

Support CLUSTERX SETSLOT command#463

Merged
ShooterIT merged 8 commits into
apache:unstablefrom
ShooterIT:cluster-setslot
Jan 21, 2022
Merged

Support CLUSTERX SETSLOT command#463
ShooterIT merged 8 commits into
apache:unstablefrom
ShooterIT:cluster-setslot

Conversation

@ShooterIT
Copy link
Copy Markdown
Member

@ShooterIT ShooterIT commented Jan 19, 2022

Command formart

CLUSTERX SETSLOT $slot_id NODE $node_id $new_version

assign the slot to the node if new version is current version+1.

Parameters

$slot_id: the slot which we want to assign
$node_id: the node which we want to assign the slot into
NODE: keep the same with redis CLUSTER SETSLOT command, maybe we want to expand this command in the future
$new_version: the new version MUST be +1 of current version so that kvrocks could execute this command, this is to guarantee this change is based on a special cluster topology

Purpose

  • users can use this command to set slot distribution
  • slot migration needs this command to update slot distribution

New version constraint
The reason why the new version MUST be +1 of current version is that, the command changes topology based on specific topology (also means specific version), we must guarantee current topology is exactly expected, otherwise this update may make topology corrupt, so base topology version is very important. This is different with CLUSTERX SETNODES commands because it uses new version topology to cover current version, it allows kvrocks nodes lost some topology updates since of network failure, it is state instead of operation.

@ShooterIT ShooterIT requested a review from Alfejik January 19, 2022 06:53
Comment thread src/redis_cmd.cc Outdated
Comment thread src/cluster.cc
Comment thread src/cluster.cc
@ShooterIT ShooterIT merged commit bc1ebc8 into apache:unstable Jan 21, 2022
@ShooterIT ShooterIT deleted the cluster-setslot branch January 21, 2022 11:05
ShooterIT added a commit to ShooterIT/kvrocks that referenced this pull request Jan 27, 2022
CLUSTERX SETSLOT $slot_id NODE $node_id $new_version

- Description
assign the slot to the node if new version is current version+1.

- Parameters
$slot_id: the slot which we want to assign
$node_id: the node which we want to assign the slot into
NODE: keep the same with redis CLUSTER SETSLOT command, maybe we want to expand
this command in the future
$new_version: the new version MUST be +1 of current version so that kvrocks could
execute this command, this is to guarantee this change is based on a special
cluster topology

- Purpose
users can use this command to set slot distribution
slot migration needs this command to update slot distribution
New version constraint
The reason why the new version MUST be +1 of current version is that,
the command changes topology based on specific topology (also means specific
version), we must guarantee current topology is exactly expected, otherwise
this update may make topology corrupt, so base topology version is very important.
This is different with CLUSTERX SETNODES commands because it uses new version
topology to cover current version, it allows kvrocks nodes lost some topology
updates since of network failure, it is state instead of operation.
@ShooterIT ShooterIT mentioned this pull request Jan 27, 2022
ShooterIT added a commit to ShooterIT/kvrocks that referenced this pull request Jan 28, 2022
CLUSTERX SETSLOT $slot_id NODE $node_id $new_version

- Description
assign the slot to the node if new version is current version+1.

- Parameters
$slot_id: the slot which we want to assign
$node_id: the node which we want to assign the slot into
NODE: keep the same with redis CLUSTER SETSLOT command, maybe we want to expand
this command in the future
$new_version: the new version MUST be +1 of current version so that kvrocks could
execute this command, this is to guarantee this change is based on a special
cluster topology

- Purpose
users can use this command to set slot distribution
slot migration needs this command to update slot distribution
New version constraint
The reason why the new version MUST be +1 of current version is that,
the command changes topology based on specific topology (also means specific
version), we must guarantee current topology is exactly expected, otherwise
this update may make topology corrupt, so base topology version is very important.
This is different with CLUSTERX SETNODES commands because it uses new version
topology to cover current version, it allows kvrocks nodes lost some topology
updates since of network failure, it is state instead of operation.
ShooterIT added a commit that referenced this pull request Jan 28, 2022
CLUSTERX SETSLOT $slot_id NODE $node_id $new_version

- Description
assign the slot to the node if new version is current version+1.

- Parameters
$slot_id: the slot which we want to assign
$node_id: the node which we want to assign the slot into
NODE: keep the same with redis CLUSTER SETSLOT command, maybe we want to expand
this command in the future
$new_version: the new version MUST be +1 of current version so that kvrocks could
execute this command, this is to guarantee this change is based on a special
cluster topology

- Purpose
users can use this command to set slot distribution
slot migration needs this command to update slot distribution
New version constraint
The reason why the new version MUST be +1 of current version is that,
the command changes topology based on specific topology (also means specific
version), we must guarantee current topology is exactly expected, otherwise
this update may make topology corrupt, so base topology version is very important.
This is different with CLUSTERX SETNODES commands because it uses new version
topology to cover current version, it allows kvrocks nodes lost some topology
updates since of network failure, it is state instead of operation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants