HADOOP-15662. Better exception handling of DNS errors.
Contributed by Da Zhou.
This commit is contained in:
parent
e8d1900369
commit
7211269142
|
@ -21,6 +21,7 @@ package org.apache.hadoop.fs.azurebfs.services;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -33,6 +34,8 @@ import org.apache.hadoop.fs.azurebfs.contracts.exceptions.InvalidAbfsRestOperati
|
||||||
import org.apache.hadoop.fs.azurebfs.constants.HttpHeaderConfigurations;
|
import org.apache.hadoop.fs.azurebfs.constants.HttpHeaderConfigurations;
|
||||||
import org.apache.hadoop.fs.azurebfs.oauth2.AzureADAuthenticator.HttpException;
|
import org.apache.hadoop.fs.azurebfs.oauth2.AzureADAuthenticator.HttpException;
|
||||||
|
|
||||||
|
import static org.apache.hadoop.fs.azurebfs.contracts.services.AzureServiceErrorCode.UNKNOWN;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The AbfsRestOperation for Rest AbfsClient.
|
* The AbfsRestOperation for Rest AbfsClient.
|
||||||
*/
|
*/
|
||||||
|
@ -173,6 +176,15 @@ public class AbfsRestOperation {
|
||||||
LOG.debug("HttpRequestFailure: " + method + "," + url, ex);
|
LOG.debug("HttpRequestFailure: " + method + "," + url, ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ex instanceof UnknownHostException) {
|
||||||
|
throw new AbfsRestOperationException(
|
||||||
|
UNKNOWN.getStatusCode(),
|
||||||
|
UNKNOWN.getErrorCode(),
|
||||||
|
String.format("Can not reach endpoint: %s, please check the account setting in configuration file", ex.getMessage()),
|
||||||
|
ex);
|
||||||
|
}
|
||||||
|
|
||||||
if (!client.getRetryPolicy().shouldRetry(retryCount, -1)) {
|
if (!client.getRetryPolicy().shouldRetry(retryCount, -1)) {
|
||||||
throw new InvalidAbfsRestOperationException(ex);
|
throw new InvalidAbfsRestOperationException(ex);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,11 +18,19 @@
|
||||||
|
|
||||||
package org.apache.hadoop.fs.azurebfs;
|
package org.apache.hadoop.fs.azurebfs;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import org.apache.hadoop.fs.FileSystem;
|
||||||
import org.apache.hadoop.fs.azurebfs.contracts.exceptions.AbfsRestOperationException;
|
import org.apache.hadoop.fs.azurebfs.contracts.exceptions.AbfsRestOperationException;
|
||||||
import org.apache.hadoop.fs.azurebfs.services.AbfsClient;
|
import org.apache.hadoop.fs.azurebfs.services.AbfsClient;
|
||||||
import org.apache.hadoop.fs.azurebfs.services.AbfsRestOperation;
|
import org.apache.hadoop.fs.azurebfs.services.AbfsRestOperation;
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.FS_DEFAULT_NAME_KEY;
|
||||||
|
import static org.apache.hadoop.fs.azurebfs.constants.TestConfigurationKeys.FS_AZURE_ACCOUNT_KEY;
|
||||||
|
import static org.apache.hadoop.test.LambdaTestUtils.intercept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test continuation token which has equal sign.
|
* Test continuation token which has equal sign.
|
||||||
|
@ -46,4 +54,19 @@ public final class ITestAbfsClient extends AbstractAbfsIntegrationTest {
|
||||||
Assert.assertEquals("InvalidQueryParameterValue", ex.getErrorCode().getErrorCode());
|
Assert.assertEquals("InvalidQueryParameterValue", ex.getErrorCode().getErrorCode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void verifyUnknownHost() throws Exception {
|
||||||
|
AbfsConfiguration conf = this.getConfiguration();
|
||||||
|
String accountName = this.getAccountName();
|
||||||
|
String fakeAccountName = "fake" + UUID.randomUUID() + accountName.substring(accountName.indexOf("."));
|
||||||
|
|
||||||
|
String fsDefaultFS = conf.get(FS_DEFAULT_NAME_KEY);
|
||||||
|
conf.set(FS_DEFAULT_NAME_KEY, fsDefaultFS.replace(accountName, fakeAccountName));
|
||||||
|
conf.set(FS_AZURE_ACCOUNT_KEY + "." + fakeAccountName, this.getAccountKey());
|
||||||
|
|
||||||
|
intercept(AbfsRestOperationException.class,
|
||||||
|
"Can not reach endpoint: " + fakeAccountName,
|
||||||
|
() -> FileSystem.get(conf.getRawConfiguration()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue