17
17
package com .mongodb .connection ;
18
18
19
19
import com .mongodb .ConnectionString ;
20
- import com .mongodb .MongoClientException ;
21
20
import com .mongodb .MongoClientSettings ;
22
21
import com .mongodb .ServerAddress ;
23
22
import com .mongodb .annotations .Immutable ;
@@ -596,14 +595,13 @@ public String getShortDescription() {
596
595
}
597
596
598
597
private ClusterSettings (final Builder builder ) {
599
- // TODO: Unit test this
600
598
if (builder .srvHost != null ) {
601
599
if (builder .srvHost .contains (":" )) {
602
600
throw new IllegalArgumentException ("The srvHost can not contain a host name that specifies a port" );
603
601
}
604
602
605
- if (builder .hosts . get ( 0 ). getHost () .split ("\\ ." ).length < 3 ) {
606
- throw new MongoClientException (format ("An SRV host name '%s' was provided that does not contain at least three parts. "
603
+ if (builder .srvHost .split ("\\ ." ).length < 3 ) {
604
+ throw new IllegalArgumentException (format ("An SRV host name '%s' was provided that does not contain at least three parts. "
607
605
+ "It must contain a hostname, domain name and a top level domain." , builder .hosts .get (0 ).getHost ()));
608
606
}
609
607
}
@@ -612,10 +610,6 @@ private ClusterSettings(final Builder builder) {
612
610
throw new IllegalArgumentException ("Multiple hosts cannot be specified when using ClusterType.STANDALONE." );
613
611
}
614
612
615
- if (builder .mode != null && builder .mode == ClusterConnectionMode .SINGLE && builder .hosts .size () > 1 ) {
616
- throw new IllegalArgumentException ("Can not directly connect to more than one server" );
617
- }
618
-
619
613
if (builder .requiredReplicaSetName != null ) {
620
614
if (builder .requiredClusterType == ClusterType .UNKNOWN ) {
621
615
builder .requiredClusterType = ClusterType .REPLICA_SET ;
@@ -628,7 +622,18 @@ private ClusterSettings(final Builder builder) {
628
622
description = builder .description ;
629
623
srvHost = builder .srvHost ;
630
624
hosts = builder .hosts ;
631
- mode = builder .mode != null ? builder .mode : hosts .size () == 1 ? ClusterConnectionMode .SINGLE : ClusterConnectionMode .MULTIPLE ;
625
+ if (srvHost != null ) {
626
+ if (builder .mode == ClusterConnectionMode .SINGLE ) {
627
+ throw new IllegalArgumentException ("An SRV host name was provided but the connection mode is not MULTIPLE" );
628
+ }
629
+ mode = ClusterConnectionMode .MULTIPLE ;
630
+ } else {
631
+ if (builder .mode == ClusterConnectionMode .SINGLE && builder .hosts .size () > 1 ) {
632
+ throw new IllegalArgumentException ("Can not directly connect to more than one server" );
633
+ }
634
+
635
+ mode = builder .mode != null ? builder .mode : hosts .size () == 1 ? ClusterConnectionMode .SINGLE : ClusterConnectionMode .MULTIPLE ;
636
+ }
632
637
requiredReplicaSetName = builder .requiredReplicaSetName ;
633
638
requiredClusterType = builder .requiredClusterType ;
634
639
localThresholdMS = builder .localThresholdMS ;
0 commit comments