fix: solve compatibility issue for mongodb inputs when using 5.x relicaset (#9892)

This commit is contained in:
alon 2021-10-15 14:15:40 -05:00 committed by GitHub
parent aaaaabd0fd
commit 34c2b6232d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 11 deletions

View File

@ -249,6 +249,7 @@ type TransactionStats struct {
// ReplStatus stores data related to replica sets. // ReplStatus stores data related to replica sets.
type ReplStatus struct { type ReplStatus struct {
SetName string `bson:"setName"` SetName string `bson:"setName"`
IsWritablePrimary interface{} `bson:"isWritablePrimary"` // mongodb 5.x
IsMaster interface{} `bson:"ismaster"` IsMaster interface{} `bson:"ismaster"`
Secondary interface{} `bson:"secondary"` Secondary interface{} `bson:"secondary"`
IsReplicaSet interface{} `bson:"isreplicaset"` IsReplicaSet interface{} `bson:"isreplicaset"`
@ -1165,11 +1166,13 @@ func NewStatLine(oldMongo, newMongo MongoStatus, key string, all bool, sampleSec
if newStat.Repl != nil { if newStat.Repl != nil {
returnVal.ReplSetName = newStat.Repl.SetName returnVal.ReplSetName = newStat.Repl.SetName
// BEGIN code modification // BEGIN code modification
if newStat.Repl.IsMaster.(bool) { if val, ok := newStat.Repl.IsMaster.(bool); ok && val {
returnVal.NodeType = "PRI" returnVal.NodeType = "PRI"
} else if newStat.Repl.Secondary != nil && newStat.Repl.Secondary.(bool) { } else if val, ok := newStat.Repl.IsWritablePrimary.(bool); ok && val {
returnVal.NodeType = "PRI"
} else if val, ok := newStat.Repl.Secondary.(bool); ok && val {
returnVal.NodeType = "SEC" returnVal.NodeType = "SEC"
} else if newStat.Repl.ArbiterOnly != nil && newStat.Repl.ArbiterOnly.(bool) { } else if val, ok := newStat.Repl.ArbiterOnly.(bool); ok && val {
returnVal.NodeType = "ARB" returnVal.NodeType = "ARB"
} else { } else {
returnVal.NodeType = "UNK" returnVal.NodeType = "UNK"