From 480b07537e5e94b328e00d0b69b2f1d264a4b3e6 Mon Sep 17 00:00:00 2001 From: husharp Date: Thu, 9 May 2024 11:33:47 +0800 Subject: [PATCH] make test happy Signed-off-by: husharp --- pkg/election/leadership.go | 27 ++++++++++++++++++++------- pkg/mcs/utils/util.go | 4 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/pkg/election/leadership.go b/pkg/election/leadership.go index 755a7d6d3318..121b4e5049d2 100644 --- a/pkg/election/leadership.go +++ b/pkg/election/leadership.go @@ -64,7 +64,10 @@ type Leadership struct { leaderKey string leaderValue string - LeaderWatch bool + leaderWatch struct { + syncutil.RWMutex + val bool + } keepAliveCtx context.Context keepAliveCancelFunc context.CancelFunc @@ -74,10 +77,6 @@ type Leadership struct { campaignTimes []time.Time } -func (ls *Leadership) SetLeaderWatch(val bool) { - ls.LeaderWatch = val -} - func (ls *Leadership) GetLeaderValue() string { return ls.leaderValue } @@ -123,6 +122,20 @@ func (ls *Leadership) GetLeaderKey() string { return ls.leaderKey } +// SetLeaderWatch sets the leader watch flag. +func (ls *Leadership) SetLeaderWatch(val bool) { + ls.leaderWatch.Lock() + ls.leaderWatch.val = val + ls.leaderWatch.Unlock() +} + +// GetLeaderWatch gets the leader watch flag. +func (ls *Leadership) GetLeaderWatch() bool { + ls.leaderWatch.RLock() + defer ls.leaderWatch.RUnlock() + return ls.leaderWatch.val +} + // GetCampaignTimesNum is used to get the campaign times of the leader within `campaignTimesRecordTimeout`. func (ls *Leadership) GetCampaignTimesNum() int { if ls == nil { @@ -386,7 +399,7 @@ func (ls *Leadership) Watch(serverCtx context.Context, revision int64) { return } // only API update the leader key to transfer the leader will meet - if ev.Type == mvccpb.PUT && ls.LeaderWatch { + if ev.Type == mvccpb.PUT && ls.GetLeaderWatch() { log.Info("[LeaderWatch] current leadership is updated", zap.Int64("watchRevision", revision), zap.Int64("revision", wresp.Header.Revision), zap.String("leader-key", ls.leaderKey), zap.String("purpose", ls.purpose)) return @@ -409,5 +422,5 @@ func (ls *Leadership) Reset() { } ls.keepAliveCancelFuncLock.Unlock() ls.getLease().Close() - ls.LeaderWatch = false + ls.SetLeaderWatch(false) } diff --git a/pkg/mcs/utils/util.go b/pkg/mcs/utils/util.go index 7bbebef5693a..dd5d0499319c 100644 --- a/pkg/mcs/utils/util.go +++ b/pkg/mcs/utils/util.go @@ -91,7 +91,7 @@ func RemoveExpectedPrimary(client *clientv3.Client, leaderPath string) { resp, err := kv.NewSlowLogTxn(client). Then(clientv3.OpDelete(strings.Join([]string{leaderPath, ExpectedPrimary}, "/"))). Commit() - if err != nil && !resp.Succeeded { + if err != nil || !resp.Succeeded { log.Error("change primary error", errs.ZapError(err)) return } @@ -113,7 +113,7 @@ func SetExpectedPrimary(client *clientv3.Client, leaderPath string) { // indicate the current primary has exited clientv3.OpDelete(leaderPath)). Commit() - if err != nil && !resp.Succeeded { + if err != nil || !resp.Succeeded { log.Error("change primary error", errs.ZapError(err)) return }