HADOOP-17229. No update of bytes received counter value after response failure occurs in ABFS (#2264)
Contributed by Mehakmeet Singh Change-Id: Ia9ad1b87a460b10d27486bd00ee67c3cedd2b5b5
This commit is contained in:
parent
5710005a19
commit
7970710418
@ -248,8 +248,12 @@ private boolean executeHttpOperation(final int retryCount) throws AzureBlobFileS
|
|||||||
|
|
||||||
httpOperation.processResponse(buffer, bufferOffset, bufferLength);
|
httpOperation.processResponse(buffer, bufferOffset, bufferLength);
|
||||||
incrementCounter(AbfsStatistic.GET_RESPONSES, 1);
|
incrementCounter(AbfsStatistic.GET_RESPONSES, 1);
|
||||||
|
//Only increment bytesReceived counter when the status code is 2XX.
|
||||||
|
if (httpOperation.getStatusCode() >= HttpURLConnection.HTTP_OK
|
||||||
|
&& httpOperation.getStatusCode() <= HttpURLConnection.HTTP_PARTIAL) {
|
||||||
incrementCounter(AbfsStatistic.BYTES_RECEIVED,
|
incrementCounter(AbfsStatistic.BYTES_RECEIVED,
|
||||||
httpOperation.getBytesReceived());
|
httpOperation.getBytesReceived());
|
||||||
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
if (ex instanceof UnknownHostException) {
|
if (ex instanceof UnknownHostException) {
|
||||||
LOG.warn(String.format("Unknown host name: %s. Retrying to resolve the host name...", httpOperation.getUrl().getHost()));
|
LOG.warn(String.format("Unknown host name: %s. Retrying to resolve the host name...", httpOperation.getUrl().getHost()));
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
import org.apache.hadoop.fs.FSDataInputStream;
|
import org.apache.hadoop.fs.FSDataInputStream;
|
||||||
import org.apache.hadoop.fs.FSDataOutputStream;
|
import org.apache.hadoop.fs.FSDataOutputStream;
|
||||||
|
import org.apache.hadoop.fs.FileAlreadyExistsException;
|
||||||
import org.apache.hadoop.io.IOUtils;
|
import org.apache.hadoop.io.IOUtils;
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
import org.apache.hadoop.fs.azurebfs.services.AbfsOutputStream;
|
import org.apache.hadoop.fs.azurebfs.services.AbfsOutputStream;
|
||||||
@ -278,4 +279,31 @@ public void testAbfsHttpResponseStatistics() throws IOException {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Testing bytes_received counter value when a response failure occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testAbfsHttpResponseFailure() throws IOException {
|
||||||
|
describe("Test to check the values of bytes received counter when a "
|
||||||
|
+ "response is failed");
|
||||||
|
|
||||||
|
AzureBlobFileSystem fs = getFileSystem();
|
||||||
|
Path responseFailurePath = path(getMethodName());
|
||||||
|
Map<String, Long> metricMap;
|
||||||
|
FSDataOutputStream out = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
//create an empty file
|
||||||
|
out = fs.create(responseFailurePath);
|
||||||
|
//Re-creating the file again on same path with false overwrite, this
|
||||||
|
// would cause a response failure with status code 409.
|
||||||
|
out = fs.create(responseFailurePath, false);
|
||||||
|
} catch (FileAlreadyExistsException faee) {
|
||||||
|
metricMap = fs.getInstrumentationMap();
|
||||||
|
// Assert after catching the 409 error to check the counter values.
|
||||||
|
assertAbfsStatistics(AbfsStatistic.BYTES_RECEIVED, 0, metricMap);
|
||||||
|
} finally {
|
||||||
|
IOUtils.cleanupWithLogger(LOG, out);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user