You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kvrocks.apache.org by ti...@apache.org on 2022/10/17 09:49:14 UTC
[incubator-kvrocks] branch unstable updated: test: migrate part of slotmigrate tests (#1004)
This is an automated email from the ASF dual-hosted git repository.
tison pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/incubator-kvrocks.git
The following commit(s) were added to refs/heads/unstable by this push:
new 1333da7c test: migrate part of slotmigrate tests (#1004)
1333da7c is described below
commit 1333da7cf45bffbaa1975bfe38c0dba3fb4e8adc
Author: tison <wa...@gmail.com>
AuthorDate: Mon Oct 17 17:49:09 2022 +0800
test: migrate part of slotmigrate tests (#1004)
Signed-off-by: tison <wa...@gmail.com>
Co-authored-by: hulk <hu...@gmail.com>
---
.../integration/slotmigrate/slotmigrate_test.go | 108 +++++++++++++++++++++
tests/tcl/tests/integration/slotmigrate.tcl | 80 ---------------
2 files changed, 108 insertions(+), 80 deletions(-)
diff --git a/tests/gocase/integration/slotmigrate/slotmigrate_test.go b/tests/gocase/integration/slotmigrate/slotmigrate_test.go
new file mode 100644
index 00000000..67309d5e
--- /dev/null
+++ b/tests/gocase/integration/slotmigrate/slotmigrate_test.go
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package slotmigrate
+
+import (
+ "context"
+ "fmt"
+ "testing"
+ "time"
+
+ "github.com/apache/incubator-kvrocks/tests/gocase/util"
+ "github.com/stretchr/testify/require"
+)
+
+func TestSlotMigrateFromSlave(t *testing.T) {
+ ctx := context.Background()
+
+ master := util.StartServer(t, map[string]string{"cluster-enabled": "yes"})
+ defer func() { master.Close() }()
+ masterClient := master.NewClient()
+ defer func() { require.NoError(t, masterClient.Close()) }()
+ masterID := "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00"
+ require.NoError(t, masterClient.Do(ctx, "clusterx", "SETNODEID", masterID).Err())
+
+ slave := util.StartServer(t, map[string]string{"cluster-enabled": "yes"})
+ defer func() { slave.Close() }()
+ slaveClient := slave.NewClient()
+ defer func() { require.NoError(t, slaveClient.Close()) }()
+ slaveID := "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01"
+ require.NoError(t, slaveClient.Do(ctx, "clusterx", "SETNODEID", slaveID).Err())
+
+ clusterNodes := fmt.Sprintf("%s %s %d master - 0-100\n", masterID, master.Host(), master.Port())
+ clusterNodes += fmt.Sprintf("%s %s %d slave %s", slaveID, slave.Host(), slave.Port(), masterID)
+ require.NoError(t, masterClient.Do(ctx, "clusterx", "SETNODES", clusterNodes, "1").Err())
+ require.NoError(t, slaveClient.Do(ctx, "clusterx", "SETNODES", clusterNodes, "1").Err())
+
+ t.Run("MIGRATE - Slave cannot migrate slot", func(t *testing.T) {
+ require.ErrorContains(t, slaveClient.Do(ctx, "clusterx", "migrate", "1", masterID).Err(), "Can't migrate slot")
+ })
+
+ t.Run("MIGRATE - Cannot migrate slot to a slave", func(t *testing.T) {
+ require.ErrorContains(t, masterClient.Do(ctx, "clusterx", "migrate", "1", slaveID).Err(), "Can't migrate slot to a slave")
+ })
+}
+
+func TestSlotMigrateServerFailed(t *testing.T) {
+ ctx := context.Background()
+
+ srv0 := util.StartServer(t, map[string]string{"cluster-enabled": "yes"})
+ defer func() { srv0.Close() }()
+ rdb0 := srv0.NewClient()
+ defer func() { require.NoError(t, rdb0.Close()) }()
+ id0 := "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00"
+ require.NoError(t, rdb0.Do(ctx, "clusterx", "SETNODEID", id0).Err())
+
+ srv1 := util.StartServer(t, map[string]string{"cluster-enabled": "yes"})
+ srv1Alive := true
+ defer func() {
+ if srv1Alive {
+ srv1.Close()
+ }
+ }()
+ rdb1 := srv1.NewClient()
+ defer func() { require.NoError(t, rdb1.Close()) }()
+ id1 := "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01"
+ require.NoError(t, rdb1.Do(ctx, "clusterx", "SETNODEID", id1).Err())
+
+ clusterNodes := fmt.Sprintf("%s %s %d master - 0-10000\n", id0, srv0.Host(), srv0.Port())
+ clusterNodes += fmt.Sprintf("%s %s %d master - 10001-16383", id1, srv1.Host(), srv1.Port())
+ require.NoError(t, rdb0.Do(ctx, "clusterx", "SETNODES", clusterNodes, "1").Err())
+ require.NoError(t, rdb1.Do(ctx, "clusterx", "SETNODES", clusterNodes, "1").Err())
+
+ t.Run("MIGRATE - Slot is out of range", func(t *testing.T) {
+ require.ErrorContains(t, rdb0.Do(ctx, "clusterx", "migrate", "-1", id1).Err(), "Slot is out of range")
+ require.ErrorContains(t, rdb0.Do(ctx, "clusterx", "migrate", "16384", id1).Err(), "Slot is out of range")
+ })
+
+ t.Run("MIGRATE - Cannot migrate slot to itself", func(t *testing.T) {
+ require.ErrorContains(t, rdb0.Do(ctx, "clusterx", "migrate", "1", id0).Err(), "Can't migrate slot to myself")
+ })
+
+ t.Run("MIGRATE - Fail to migrate slot if destination server is not running", func(t *testing.T) {
+ srv1.Close()
+ srv1Alive = false
+ require.NoError(t, rdb0.Do(ctx, "clusterx", "migrate", "1", id1).Err())
+ time.Sleep(50 * time.Millisecond)
+ i := rdb0.ClusterInfo(ctx).Val()
+ require.Contains(t, i, "migrating_slot: 1")
+ require.Contains(t, i, "migrating_state: fail")
+ })
+}
diff --git a/tests/tcl/tests/integration/slotmigrate.tcl b/tests/tcl/tests/integration/slotmigrate.tcl
index 4d36fb66..7dd56346 100644
--- a/tests/tcl/tests/integration/slotmigrate.tcl
+++ b/tests/tcl/tests/integration/slotmigrate.tcl
@@ -18,86 +18,6 @@
# Import crc16 table
source "tests/helpers/crc16_slottable.tcl"
-start_server {tags {"Migrate from slave server"} overrides {cluster-enabled yes}} {
- # M is master, S is slave
- set M [srv 0 client]
- set M_host [srv 0 host]
- set M_port [srv 0 port]
- set masterid "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00"
- $M clusterx SETNODEID $masterid
- start_server {overrides {cluster-enabled yes}} {
- set S [srv 0 client]
- set S_host [srv 0 host]
- set S_port [srv 0 port]
- set slaveid "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01"
- $S clusterx SETNODEID $slaveid
-
- set cluster_nodes "$masterid $M_host $M_port master - 0-100"
- set cluster_nodes "$cluster_nodes\n$slaveid $S_host $S_port slave $masterid"
- $M clusterx SETNODES $cluster_nodes 1
- $S clusterx SETNODES $cluster_nodes 1
-
- test {MIGRATE - Slave cannot migrate slot} {
- catch {$S clusterx migrate 1 $masterid} e
- assert_match {*Can't migrate slot*} $e
- }
-
- test {MIGRATE - Cannot migrate slot to a slave} {
- catch {$M clusterx migrate 0 $slaveid} e
- assert_match {*Can't migrate slot to a slave*} $e
- }
- }
-}
-
-start_server {tags {"Src migration server"} overrides {cluster-enabled yes}} {
- set r0 [srv 0 client]
- set node0_host [srv 0 host]
- set node0_port [srv 0 port]
- set node0_id "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00"
- $r0 clusterx setnodeid $node0_id
- start_server {tags {"Src migration server"} overrides {cluster-enabled yes}} {
- set r1 [srv 0 client]
- set node1_host [srv 0 host]
- set node1_port [srv 0 port]
- set node1_pid [srv 0 pid]
- set node1_id "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01"
- $r1 clusterx setnodeid $node1_id
-
- set cluster_nodes "$node0_id $node0_host $node0_port master - 0-10000"
- set cluster_nodes "$cluster_nodes\n$node1_id $node1_host $node1_port master - 10001-16383"
- $r0 clusterx setnodes $cluster_nodes 1
- $r1 clusterx setnodes $cluster_nodes 1
-
- test {MIGRATE - Slot is out of range} {
- # Migrate slot -1
- catch {$r0 clusterx migrate -1 $node1_id} e
- assert_match {*Slot is out of range*} $e
-
- # Migrate slot 16384
- catch {$r0 clusterx migrate 16384 $node1_id} e
- assert_match {*Slot is out of range*} $e
- }
-
- test {MIGRATE - Cannot migrate slot to itself} {
- catch {$r0 clusterx migrate 1 $node0_id} e
- assert_match {*Can't migrate slot to myself*} $e
- }
-
- test {MIGRATE - Fail to migrate slot if destination server is not running} {
- # Kill node1
- exec kill -9 $node1_pid
- after 50
- # Try migrating slot to node1
- set ret [$r0 clusterx migrate 1 $node1_id]
- assert {$ret == "OK"}
- after 50
- # Migrating failed
- catch {[$r0 cluster info]} e
- assert_match {*1*fail*} $e
- }
- }
-}
-
start_server {tags {"Src migration server"} overrides {cluster-enabled yes}} {
set r0 [srv 0 client]
set node0_host [srv 0 host]