diff --git a/pkg/member/member.go b/pkg/member/member.go index bbf46d8f167..d99eee5451b 100644 --- a/pkg/member/member.go +++ b/pkg/member/member.go @@ -43,10 +43,11 @@ const ( // The timeout to wait transfer etcd leader to complete. moveLeaderTimeout = 5 * time.Second dcLocationConfigEtcdPrefix = "dc-location" - // If the campaign times is more than this value in `campaignTimesRecordTimeout`, the PD will resign and campaign again. - campaignLeaderFrequencyTimes = 3 ) +// If the campaign times is more than this value in `campaignTimesRecordTimeout`, the PD will resign and campaign again. +var campaignLeaderFrequencyTimes = 3 + // EmbeddedEtcdMember is used for the election related logic. It implements Member interface. type EmbeddedEtcdMember struct { leadership *election.Leadership @@ -554,3 +555,12 @@ func (m *EmbeddedEtcdMember) SetMemberGitHash(id uint64, gitHash string) error { func (m *EmbeddedEtcdMember) Close() { m.Etcd().Close() } + +// ChangeFrequencyTimes changes the frequency check times of campaign leader. +// ONLY used for test to make the test more stable. +// PLEASE flash back this value after using. +func ChangeFrequencyTimes(times int) int { + before := campaignLeaderFrequencyTimes + campaignLeaderFrequencyTimes = times + return before +} diff --git a/tests/integrations/client/client_test.go b/tests/integrations/client/client_test.go index 2e51c7080e9..df61ce4a827 100644 --- a/tests/integrations/client/client_test.go +++ b/tests/integrations/client/client_test.go @@ -45,6 +45,7 @@ import ( "github.com/tikv/pd/pkg/core" "github.com/tikv/pd/pkg/errs" "github.com/tikv/pd/pkg/mcs/utils" + "github.com/tikv/pd/pkg/member" "github.com/tikv/pd/pkg/mock/mockid" "github.com/tikv/pd/pkg/storage/endpoint" "github.com/tikv/pd/pkg/tso" @@ -165,6 +166,10 @@ func TestClientLeaderChange(t *testing.T) { } func TestLeaderTransferAndMoveCluster(t *testing.T) { + beforeTimes := member.ChangeFrequencyTimes(10) + defer func() { + member.ChangeFrequencyTimes(beforeTimes) + }() re := require.New(t) ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/tests/integrations/mcs/scheduling/server_test.go b/tests/integrations/mcs/scheduling/server_test.go index 3234c5cd1e6..e671a446666 100644 --- a/tests/integrations/mcs/scheduling/server_test.go +++ b/tests/integrations/mcs/scheduling/server_test.go @@ -30,6 +30,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/tikv/pd/pkg/core/storelimit" mcs "github.com/tikv/pd/pkg/mcs/utils" + "github.com/tikv/pd/pkg/member" "github.com/tikv/pd/pkg/schedule/operator" "github.com/tikv/pd/pkg/schedule/schedulers" "github.com/tikv/pd/pkg/utils/testutil" @@ -651,6 +652,10 @@ func (suite *multipleServerTestSuite) TearDownSuite() { } func (suite *multipleServerTestSuite) TestReElectLeader() { + beforeTimes := member.ChangeFrequencyTimes(10) + defer func() { + member.ChangeFrequencyTimes(beforeTimes) + }() re := suite.Require() tc, err := tests.NewTestSchedulingCluster(suite.ctx, 1, suite.backendEndpoints) re.NoError(err) diff --git a/tests/server/cluster/cluster_test.go b/tests/server/cluster/cluster_test.go index dc972988b6b..d7ee024652a 100644 --- a/tests/server/cluster/cluster_test.go +++ b/tests/server/cluster/cluster_test.go @@ -34,6 +34,7 @@ import ( "github.com/tikv/pd/pkg/core/storelimit" "github.com/tikv/pd/pkg/dashboard" "github.com/tikv/pd/pkg/id" + "github.com/tikv/pd/pkg/member" "github.com/tikv/pd/pkg/mock/mockid" sc "github.com/tikv/pd/pkg/schedule/config" "github.com/tikv/pd/pkg/schedule/operator" @@ -183,6 +184,10 @@ func TestDamagedRegion(t *testing.T) { } func TestRegionStatistics(t *testing.T) { + beforeTimes := member.ChangeFrequencyTimes(10) + defer func() { + member.ChangeFrequencyTimes(beforeTimes) + }() re := require.New(t) ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -238,7 +243,7 @@ func TestRegionStatistics(t *testing.T) { re.Len(regions, 1) leaderServer.ResignLeader() - re.NotEqual(tc.WaitLeader(), leaderName) + re.NotEqual(leaderName, tc.WaitLeader()) leaderServer = tc.GetLeaderServer() leaderName = leaderServer.GetServer().Name() rc = leaderServer.GetRaftCluster() @@ -255,11 +260,11 @@ func TestRegionStatistics(t *testing.T) { re.False(r.LoadedFromStorage() && r.LoadedFromSync()) leaderServer.ResignLeader() - re.NotEqual(tc.WaitLeader(), leaderName) + re.NotEqual(leaderName, tc.WaitLeader()) leaderServer = tc.GetLeaderServer() leaderName = leaderServer.GetServer().Name() leaderServer.ResignLeader() - re.NotEqual(tc.WaitLeader(), leaderName) + re.NotEqual(leaderName, tc.WaitLeader()) rc = tc.GetLeaderServer().GetRaftCluster() r = rc.GetRegion(region.Id) re.NotNil(r) @@ -1642,6 +1647,10 @@ func TestMinResolvedTS(t *testing.T) { // See https://github.com/tikv/pd/issues/4941 func TestTransferLeaderBack(t *testing.T) { + beforeTimes := member.ChangeFrequencyTimes(10) + defer func() { + member.ChangeFrequencyTimes(beforeTimes) + }() re := require.New(t) ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/tests/server/id/id_test.go b/tests/server/id/id_test.go index 6a7c1a9a028..f5619b9e606 100644 --- a/tests/server/id/id_test.go +++ b/tests/server/id/id_test.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/kvproto/pkg/pdpb" "github.com/stretchr/testify/require" + "github.com/tikv/pd/pkg/member" "github.com/tikv/pd/pkg/utils/syncutil" "github.com/tikv/pd/pkg/utils/testutil" "github.com/tikv/pd/tests" @@ -106,6 +107,10 @@ func TestCommand(t *testing.T) { } func TestMonotonicID(t *testing.T) { + beforeTimes := member.ChangeFrequencyTimes(10) + defer func() { + member.ChangeFrequencyTimes(beforeTimes) + }() re := require.New(t) ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/tests/server/region_syncer/region_syncer_test.go b/tests/server/region_syncer/region_syncer_test.go index 2015f520a91..a7ef4454e6e 100644 --- a/tests/server/region_syncer/region_syncer_test.go +++ b/tests/server/region_syncer/region_syncer_test.go @@ -23,6 +23,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tikv/pd/pkg/core" + "github.com/tikv/pd/pkg/member" "github.com/tikv/pd/pkg/utils/testutil" "github.com/tikv/pd/server/config" "github.com/tikv/pd/tests" @@ -254,6 +255,10 @@ func TestPrepareChecker(t *testing.T) { // ref: https://github.com/tikv/pd/issues/6988 func TestPrepareCheckerWithTransferLeader(t *testing.T) { + beforeTimes := member.ChangeFrequencyTimes(10) + defer func() { + member.ChangeFrequencyTimes(beforeTimes) + }() re := require.New(t) ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -298,7 +303,7 @@ func TestPrepareCheckerWithTransferLeader(t *testing.T) { leaderServer = cluster.GetLeaderServer() err = cluster.ResignLeader() re.NoError(err) - re.NotEqual(leaderServer.GetLeader().GetName(), cluster.WaitLeader()) + re.NotEqual(leaderServer.GetServer().Name(), cluster.WaitLeader()) rc = cluster.GetLeaderServer().GetServer().GetRaftCluster() re.True(rc.IsPrepared()) re.NoError(failpoint.Disable("github.com/tikv/pd/pkg/schedule/changeCoordinatorTicker"))