@@ -217,31 +217,36 @@ func (b *Builder) setFeatureCompatibilityVersionIfUpgradeIsHappening() error {
217217}
218218
219219func (b * Builder ) Build () (AutomationConfig , error ) {
220- hostnames := make ([]string , b .members + b .arbiters )
220+ if err := b .setFeatureCompatibilityVersionIfUpgradeIsHappening (); err != nil {
221+ return AutomationConfig {}, fmt .Errorf ("can't build the automation config: %s" , err )
222+ }
223+
224+ hostnames := make ([]string , 0 , b .members + b .arbiters )
221225
222226 // Create hostnames for data-bearing nodes. They start from 0
223227 for i := 0 ; i < b .members ; i ++ {
224- hostnames [ i ] = fmt .Sprintf ("%s-%d.%s" , b .name , i , b .domain )
228+ hostnames = append ( hostnames , fmt .Sprintf ("%s-%d.%s" , b .name , i , b .domain ) )
225229 }
226230
227231 // Create hostnames for arbiters. They are added right after the regular members
228- for i := b . members ; i < b .arbiters + b . members ; i ++ {
232+ for i := 0 ; i < b .arbiters ; i ++ {
229233 // Arbiters will be in b.name-arb-svc service
230- hostnames [ i ] = fmt .Sprintf ("%s-arb-%d.%s" , b .name , i - b . members , b .arbiterDomain )
234+ hostnames = append ( hostnames , fmt .Sprintf ("%s-arb-%d.%s" , b .name , i , b .arbiterDomain ) )
231235 }
232236
233237 members := make ([]ReplicaSetMember , b .members + b .arbiters )
234238 processes := make ([]Process , b .members + b .arbiters )
235239
236- if err := b .setFeatureCompatibilityVersionIfUpgradeIsHappening (); err != nil {
237- return AutomationConfig {}, fmt .Errorf ("can't build the automation config: %s" , err )
238- }
239-
240240 dataDir := DefaultMongoDBDataDir
241241 if b .dataDir != "" {
242242 dataDir = b .dataDir
243243 }
244244
245+ fcv := versions .CalculateFeatureCompatibilityVersion (b .mongodbVersion )
246+ if len (b .fcv ) > 0 {
247+ fcv = b .fcv
248+ }
249+
245250 for i , h := range hostnames {
246251 // Arbiters start counting from b.members and up
247252 isArbiter := i >= b .members
@@ -257,11 +262,6 @@ func (b *Builder) Build() (AutomationConfig, error) {
257262 replicaSetIndex = arbitersStartingIndex + processIndex
258263 }
259264
260- fcv := versions .CalculateFeatureCompatibilityVersion (b .mongodbVersion )
261- if b .fcv != "" {
262- fcv = b .fcv
263- }
264-
265265 // TODO: Replace with a Builder for Process.
266266 process := & Process {
267267 Name : toProcessName (b .name , processIndex , isArbiter ),
@@ -296,14 +296,11 @@ func (b *Builder) Build() (AutomationConfig, error) {
296296 horizon = b .replicaSetHorizons [i ]
297297 }
298298
299- isVotingMember := true
300- if ! isArbiter && i >= (maxVotingMembers - b .arbiters ) {
301- // Arbiters can't be non-voting members
302- // If there are more than 7 (maxVotingMembers) members on this Replica Set
303- // those that lose right to vote should be the data-bearing nodes, not the
304- // arbiters.
305- isVotingMember = false
306- }
299+ // Arbiters can't be non-voting members
300+ // If there are more than 7 (maxVotingMembers) members on this Replica Set
301+ // those that lose right to vote should be the data-bearing nodes, not the
302+ // arbiters.
303+ isVotingMember := isArbiter || i < (maxVotingMembers - b .arbiters )
307304
308305 // TODO: Replace with a Builder for ReplicaSetMember.
309306 members [i ] = newReplicaSetMember (process .Name , replicaSetIndex , horizon , isArbiter , isVotingMember )
0 commit comments