in src/main/java/com/aliyun/oss/internal/OSSOperation.java [159:244]
protected <T> T doOperation(RequestMessage request, ResponseParser<T> parser, String bucketName, String key,
boolean keepResponseOpen, List<RequestHandler> requestHandlers, List<ResponseHandler> reponseHandlers)
throws OSSException, ClientException {
Span span = null;
if (client.getClientConfiguration().isTracerEnabled()){
AlibabaCloudTracer alibabaCloudTracer = AlibabaCloudTracerProvider.getInstance().getTracer();
AlibabaCloudAttributesBuilder AttributesBuilder = new AlibabaCloudAttributesBuilder();
Attributes attributes = AttributesBuilder.getAttributesBuilder()
.put("alibaba.cloud.service", getProduct())
.put("alibaba.cloud.signature_version", client.getClientConfiguration().getSignatureVersion().toString())
.put("alibaba.cloud.resource.type", "OSS")
.put("http.request.method", request.getMethod().name())
.build();
AlibabaCloudSpanBuilder alibabaCloudSpanBuilder = alibabaCloudTracer.spanBuilder(bucketName);
if (alibabaCloudSpanBuilder != null) {
span = alibabaCloudSpanBuilder.setAllAttributes(attributes).startSpan();
}
}
final WebServiceRequest originalRequest = request.getOriginalRequest();
request.getHeaders().putAll(client.getClientConfiguration().getDefaultHeaders());
request.getHeaders().putAll(originalRequest.getHeaders());
request.getParameters().putAll(originalRequest.getParameters());
ExecutionContext context = createDefaultContext(request.getMethod(), bucketName, key, originalRequest);
context.addRequestHandler(new RequestProgressHanlder());
if (requestHandlers != null) {
for (RequestHandler handler : requestHandlers)
context.addRequestHandler(handler);
}
if (client.getClientConfiguration().isCrcCheckEnabled()) {
context.addRequestHandler(new RequestChecksumHanlder());
}
context.addResponseHandler(new ResponseProgressHandler(originalRequest));
if (reponseHandlers != null) {
for (ResponseHandler handler : reponseHandlers)
context.addResponseHandler(handler);
}
if (client.getClientConfiguration().isCrcCheckEnabled()) {
context.addResponseHandler(new ResponseChecksumHandler());
}
List<RequestSigner> signerHandlers = this.client.getClientConfiguration().getSignerHandlers();
if (signerHandlers != null) {
for (RequestSigner signer : signerHandlers) {
context.addSignerHandler(signer);
}
}
ResponseMessage response = null;
try {
response = send(request, context, keepResponseOpen);
return parser.parse(response);
} catch (ResponseParseException rpe) {
OSSException oe = ExceptionFactory.createInvalidResponseException(response.getRequestId(), rpe.getMessage(),
rpe);
logException("Unable to parse response error: ", rpe);
if (span != null) {
span.setAttribute("alibaba.cloud.error.code", "ParseResponseError");
}
throw oe;
} catch (OSSException e) {
if (span != null) {
span.setAttribute("alibaba.cloud.error.code", e.getErrorCode());
span.setAttribute("alibaba.cloud.request_id", e.getRequestId());
}
throw e;
} catch (ClientException ce) {
if (span != null) {
span.setAttribute("alibaba.cloud.error.code", ce.getErrorCode());
}
throw ce;
} finally {
if (span != null) {
if (response != null) {
span.setAttribute("alibaba.cloud.request_id", response.getRequestId());
span.setAttribute("http.response.status_code", String.valueOf(response.getStatusCode()));
}
span.end();
}
}
}