anmolanmol1234 commented on code in PR #8611:
URL: https://github.com/apache/hadoop/pull/8611#discussion_r3664899991
##########
hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/services/AbfsBlobClient.java:
##########
@@ -367,31 +402,66 @@ public ListResponseData listPath(final String
relativePath, final boolean recurs
url,
requestHeaders);
- op.execute(tracingContext);
- ListResponseData listResponseData = parseListPathResults(op.getResult(),
uri);
- listResponseData.setOp(op);
-
- // Perform Pending Rename Redo Operation on Atomic Rename Paths.
- // Crashed HBase log rename recovery can be done by Filesystem.listStatus.
- if (tracingContext.getOpType() == FSOperationType.LISTSTATUS
- && op.getResult() != null
- && op.getResult().getStatusCode() == HTTP_OK) {
- boolean isRenameRecovered =
retryRenameOnAtomicEntriesInListResults(tracingContext,
- listResponseData.getRenamePendingJsonPaths());
- if (isRenameRecovered) {
- LOG.debug("Retrying list operation after rename recovery.");
- // Retry the list operation to get the updated list of paths after
rename recovery.
- AbfsRestOperation retryListOp = getAbfsRestOperation(
- AbfsRestOperationType.ListBlobs,
- HTTP_METHOD_GET,
- url,
- requestHeaders);
- retryListOp.execute(tracingContext);
- listResponseData = parseListPathResults(retryListOp.getResult(), uri);
- listResponseData.setOp(retryListOp);
+ updatePhotonRequestMetric(photonRequested);
+ final DurationTracker listingLatencyTracker =
+ maybeStartPhotonListingLatencyTracker(photonRequested);
+ try {
+ op.execute(tracingContext);
+ ListResponseData listResponseData =
+ parseListPathResultsWithMetrics(op, uri, photonRequested);
+
+ // Perform Pending Rename Redo Operation on Atomic Rename Paths.
+ // Crashed HBase log rename recovery can be done by
Filesystem.listStatus.
+ if (tracingContext.getOpType() == FSOperationType.LISTSTATUS
+ && op.getResult() != null
+ && op.getResult().getStatusCode() == HTTP_OK) {
+ boolean isRenameRecovered =
retryRenameOnAtomicEntriesInListResults(tracingContext,
+ listResponseData.getRenamePendingJsonPaths());
+ if (isRenameRecovered) {
+ LOG.debug("Retrying list operation after rename recovery.");
+ // Retry the list operation to get the updated list of paths after
rename recovery.
+ AbfsRestOperation retryListOp = getAbfsRestOperation(
+ AbfsRestOperationType.ListBlobs,
+ HTTP_METHOD_GET,
+ url,
+ requestHeaders);
+ retryListOp.execute(tracingContext);
+ listResponseData =
+ parseListPathResultsWithMetrics(retryListOp, uri,
photonRequested);
+ }
+ }
+ return listResponseData;
+ } finally {
+ if (listingLatencyTracker != null) {
+ listingLatencyTracker.close();
}
}
- return listResponseData;
+ }
+
+ /**
+ * Parse a ListBlobs response, emitting the Photon (Apache Arrow) response,
+ * fallback and parse-failure metrics along the way. Shared by the primary
and
+ * the rename-recovery retry list calls.
+ *
+ * @param op the executed ListBlobs REST operation.
+ * @param uri to be used for path conversion.
+ * @param photonRequested whether Arrow was requested for this listing.
+ * @return the parsed {@link ListResponseData}.
+ * @throws AzureBlobFileSystemException if parsing fails.
+ */
+ private ListResponseData parseListPathResultsWithMetrics(
+ final AbfsRestOperation op, final URI uri, final boolean photonRequested)
+ throws AzureBlobFileSystemException {
+ final AbfsHttpOperation result = op.getResult();
+ updatePhotonResponseMetrics(photonRequested, result);
Review Comment:
Response/fallback classification also counts non-200 responses. This is
invoked before the status code is checked, so an error response (404/409/etc.,
which carries an XML error body) increments PHOTON_FALLBACK_COUNT and makes the
"service fell back to XML" signal unusable for rollout decisions. Classify only
when result.getStatusCode() == HTTP_OK.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]