Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support CLUSTERX SETSLOT command #463

Merged
merged 8 commits into from
Jan 21, 2022

Conversation

ShooterIT
Copy link
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.

src/redis_cmd.cc Outdated Show resolved Hide resolved
@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