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]