SiyaoIsHiding commented on code in PR #1902:
URL: 
https://github.com/apache/cassandra-java-driver/pull/1902#discussion_r1433178698


##########
core/src/main/java/com/datastax/oss/driver/internal/core/config/cloud/CloudConfigFactory.java:
##########
@@ -225,22 +228,40 @@ protected TrustManagerFactory createTrustManagerFactory(
   @NonNull
   protected BufferedReader fetchProxyMetadata(
       @NonNull URL metadataServiceUrl, @NonNull SSLContext sslContext) throws 
IOException {
-    try {
-      HttpsURLConnection connection = (HttpsURLConnection) 
metadataServiceUrl.openConnection();
-      connection.setSSLSocketFactory(sslContext.getSocketFactory());
-      connection.setRequestMethod("GET");
-      connection.setRequestProperty("host", "localhost");
-      return new BufferedReader(
-          new InputStreamReader(connection.getInputStream(), 
StandardCharsets.UTF_8));
-    } catch (ConnectException e) {
-      throw new IllegalStateException(
-          "Unable to connect to cloud metadata service. Please make sure your 
cluster is not parked or terminated",
-          e);
-    } catch (UnknownHostException e) {
-      throw new IllegalStateException(
-          "Unable to resolve host for cloud metadata service. Please make sure 
your cluster is not terminated",
-          e);
+    HttpsURLConnection connection = null;
+    int attempt = 0;
+    while(attempt < METADATA_RETRY_MAX_ATTEMPTS){
+      try {
+        connection = (HttpsURLConnection) metadataServiceUrl.openConnection();
+        connection.setSSLSocketFactory(sslContext.getSocketFactory());
+        connection.setRequestMethod("GET");
+        connection.setRequestProperty("host", "localhost");
+        attempt++;
+        // if this is the last attempt, throw
+        // else if the response code is not 200, retry
+        // else, throw
+        if (attempt != METADATA_RETRY_MAX_ATTEMPTS && 
connection.getResponseCode() != 200) {

Review Comment:
   3xx should be redirected as long as the redirection is in the same protocol. 
How about if `(connection.getResponseCode() == 401 || 
connection.getResponseCode() == 421 || connection.getResponseCode() >= 500)`, 
retry?
   
   "a set of if tests underneath that" do you mean extracting the conditions 
into a function, like `bool shouldRetryGivenStatusCode(int)`?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to