|
42 | 42 | import java.net.HttpURLConnection; |
43 | 43 | import java.net.URL; |
44 | 44 | import java.net.URLEncoder; |
| 45 | +import java.util.ArrayList; |
45 | 46 | import java.util.Arrays; |
| 47 | +import java.util.Collections; |
46 | 48 | import java.util.HashMap; |
47 | 49 | import java.util.List; |
48 | 50 | import java.util.Map; |
@@ -111,18 +113,26 @@ public Client(@NonNull String applicationID, @NonNull String apiKey, String[] ho |
111 | 113 | setReadHosts(hosts); |
112 | 114 | setWriteHosts(hosts); |
113 | 115 | } else { |
114 | | - setReadHosts( |
115 | | - applicationID + "-dsn.algolia.net", |
116 | | - applicationID + "-1.algolianet.com", |
117 | | - applicationID + "-2.algolianet.com", |
118 | | - applicationID + "-3.algolianet.com" |
119 | | - ); |
120 | | - setWriteHosts( |
121 | | - applicationID + ".algolia.net", |
| 116 | + // Initialize hosts to their default values. |
| 117 | + // |
| 118 | + // NOTE: The host list comes in two parts: |
| 119 | + // |
| 120 | + // 1. The fault-tolerant, load-balanced DNS host. |
| 121 | + // 2. The non-fault-tolerant hosts. Those hosts must be randomized to ensure proper load balancing in case |
| 122 | + // of the first host's failure. |
| 123 | + // |
| 124 | + List<String> fallbackHosts = Arrays.asList( |
122 | 125 | applicationID + "-1.algolianet.com", |
123 | 126 | applicationID + "-2.algolianet.com", |
124 | 127 | applicationID + "-3.algolianet.com" |
125 | 128 | ); |
| 129 | + Collections.shuffle(fallbackHosts); |
| 130 | + readHosts = new ArrayList<>(fallbackHosts.size() + 1); |
| 131 | + readHosts.add(applicationID + "-dsn.algolia.net"); |
| 132 | + readHosts.addAll(fallbackHosts); |
| 133 | + writeHosts = new ArrayList<>(fallbackHosts.size() + 1); |
| 134 | + writeHosts.add(applicationID + ".algolia.net"); |
| 135 | + writeHosts.addAll(fallbackHosts); |
126 | 136 | } |
127 | 137 | } |
128 | 138 |
|
|
0 commit comments