func isValidAsCandidateSiblingOfIntermediateMaster(intermediateMasterInstance *inst.Instance, sibling *inst.Instance) bool { if sibling.Key.Equals(&intermediateMasterInstance.Key) { // same instance return false } if !isGeneralyValidAsCandidateSiblingOfIntermediateMaster(sibling) { return false } if sibling.HasReplicationFilters != intermediateMasterInstance.HasReplicationFilters { return false } if sibling.IsBinlogServer() != intermediateMasterInstance.IsBinlogServer() { // When both are binlog servers, failover is trivial. // When failed IM is binlog server, its sibling is still valid, but we catually prefer to just repoint the slave up -- simplest! return false } if sibling.ExecBinlogCoordinates.SmallerThan(&intermediateMasterInstance.ExecBinlogCoordinates) { return false } return true }