@@ -12,18 +12,19 @@ import (
1212 "sigs.k8s.io/controller-runtime/pkg/log"
1313)
1414
15- // ReshardRedisCluster transfer the slots from the last node to the first node.
15+ // ReshardRedisCluster transfer the slots from the last node to the provided transfer node.
1616//
17- // NOTE: when all slot been transferred, the node become slave of the first master node.
18- func ReshardRedisCluster (ctx context.Context , client kubernetes.Interface , cr * rcvb2.RedisCluster , shardIdx int32 , remove bool ) {
19- redisClient := configureRedisClient (ctx , client , cr , cr .ObjectMeta .Name + "-leader-0" )
17+ // NOTE: when all slot been transferred, the node become slave of the transfer node.
18+ func ReshardRedisCluster (ctx context.Context , client kubernetes.Interface , cr * rcvb2.RedisCluster , shardIdx int32 , transferNodeIdx int32 , remove bool ) {
19+ transferNodeName := fmt .Sprintf ("%s-leader-%d" , cr .ObjectMeta .Name , transferNodeIdx )
20+ redisClient := configureRedisClient (ctx , client , cr , transferNodeName )
2021 defer redisClient .Close ()
2122
2223 var cmd []string
2324
2425 // Transfer Pod details
2526 transferPOD := RedisDetails {
26- PodName : cr . ObjectMeta . Name + "-leader-0" ,
27+ PodName : transferNodeName ,
2728 Namespace : cr .Namespace ,
2829 }
2930 // Remove POD details
@@ -42,13 +43,14 @@ func ReshardRedisCluster(ctx context.Context, client kubernetes.Interface, cr *r
4243 if cr .Spec .KubernetesConfig .ExistingPasswordSecret != nil {
4344 pass , err := getRedisPassword (ctx , client , cr .Namespace , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Name , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Key )
4445 if err != nil {
45- log .FromContext (ctx ).Error (err , "Error in getting redis password" )
46+ log .FromContext (ctx ).Error (err , "error in getting redis password" )
47+ return
4648 }
4749 cmd = append (cmd , "-a" )
4850 cmd = append (cmd , pass )
4951 }
5052
51- cmd = append (cmd , getRedisTLSArgs (cr .Spec .TLS , cr . ObjectMeta . Name + "-leader-0" )... )
53+ cmd = append (cmd , getRedisTLSArgs (cr .Spec .TLS , transferNodeName )... )
5254
5355 //--cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes
5456
@@ -63,19 +65,20 @@ func ReshardRedisCluster(ctx context.Context, client kubernetes.Interface, cr *r
6365 cmd = append (cmd , transferNodeID )
6466
6567 // Cluster Slots
66- slot := getRedisClusterSlots (ctx , redisClient , removeNodeID )
68+ slots := getRedisClusterSlots (ctx , redisClient , removeNodeID )
69+ if slots == "0" || slots == "" {
70+ log .FromContext (ctx ).Info ("skipping the execution cmd because no slots found" , "Cmd" , cmd )
71+ return
72+ }
6773 cmd = append (cmd , "--cluster-slots" )
68- cmd = append (cmd , slot )
74+ cmd = append (cmd , slots )
6975
7076 cmd = append (cmd , "--cluster-yes" )
7177
72- log .FromContext (ctx ).V (1 ).Info ("Redis cluster reshard command is" , "Command" , cmd )
73-
74- if slot == "0" {
75- log .FromContext (ctx ).V (1 ).Info ("Skipped the execution of" , "Cmd" , cmd )
76- return
77- }
78- executeCommand (ctx , client , cr , cmd , cr .ObjectMeta .Name + "-leader-0" )
78+ log .FromContext (ctx ).V (1 ).Info ("redis cluster reshard command is" , "Command" , cmd )
79+ log .FromContext (ctx ).Info (fmt .Sprintf ("transferring %s slots from shard %d to shard %d" , slots , shardIdx , transferNodeIdx ))
80+ executeCommand (ctx , client , cr , cmd , transferNodeName )
81+ log .FromContext (ctx ).Info (fmt .Sprintf ("transferring %s slots from shard %d to shard %d completed" , slots , shardIdx , transferNodeIdx ))
7982
8083 if remove {
8184 RemoveRedisNodeFromCluster (ctx , client , cr , removePOD )
@@ -87,7 +90,7 @@ func getRedisClusterSlots(ctx context.Context, redisClient *redis.Client, nodeID
8790
8891 redisSlots , err := redisClient .ClusterSlots (ctx ).Result ()
8992 if err != nil {
90- log .FromContext (ctx ).Error (err , "Failed to Get Cluster Slots " )
93+ log .FromContext (ctx ).Error (err , "failed to get cluster slots " )
9194 return ""
9295 }
9396 for _ , slot := range redisSlots {
@@ -100,7 +103,6 @@ func getRedisClusterSlots(ctx context.Context, redisClient *redis.Client, nodeID
100103 }
101104 }
102105
103- log .FromContext (ctx ).V (1 ).Info ("Total cluster slots to be transferred from" , "node" , nodeID , "is" , totalSlots )
104106 return strconv .Itoa (totalSlots )
105107}
106108
0 commit comments