|
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