Skip to content

Commit

Permalink
chore: consistent implementation of isLeader and getRole for MongoDB. (
Browse files Browse the repository at this point in the history
…#7462)

(cherry picked from commit d79febc)
  • Loading branch information
xuriwuyun committed May 30, 2024
1 parent 2e4993d commit ede7865
Showing 1 changed file with 8 additions and 15 deletions.
23 changes: 8 additions & 15 deletions pkg/lorry/engines/mongodb/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,13 @@ func (mgr *Manager) GetReplSetStatus(ctx context.Context) (*ReplSetStatus, error
}

func (mgr *Manager) IsLeaderMember(ctx context.Context, cluster *dcs.Cluster, dcsMember *dcs.Member) (bool, error) {
if dcsMember == nil {
dcsMember = cluster.GetMemberWithName(mgr.CurrentMemberName)
}
if dcsMember == nil {
return false, errors.New("no member specified")
}

status, err := mgr.GetReplSetStatus(ctx)
if err != nil {
mgr.Logger.Info("rs.status() error", "error", err.Error())
Expand All @@ -317,21 +324,7 @@ func (mgr *Manager) IsLeaderMember(ctx context.Context, cluster *dcs.Cluster, dc
}

func (mgr *Manager) IsLeader(ctx context.Context, cluster *dcs.Cluster) (bool, error) {
cur := mgr.Client.Database("admin").RunCommand(ctx, bson.D{{Key: "isMaster", Value: 1}})
if cur.Err() != nil {
return false, errors.Wrap(cur.Err(), "run isMaster")
}

resp := IsMasterResp{}
if err := cur.Decode(&resp); err != nil {
return false, errors.Wrap(err, "decode isMaster response")
}

if resp.OK != 1 {
return false, errors.Errorf("mongo says: %s", resp.Errmsg)
}

return resp.IsMaster, nil
return mgr.IsLeaderMember(ctx, cluster, nil)
}

func (mgr *Manager) GetReplSetConfig(ctx context.Context) (*RSConfig, error) {
Expand Down

0 comments on commit ede7865

Please sign in to comment.