@Override public <Output> Response<Output> execute(HttpResponseHandler<Output> responseHandler) { RequestConfig config = requestConfig != null ? requestConfig : new AmazonWebServiceRequestAdapter(request.getOriginalRequest()); return new RequestExecutor<Output>(request, config, getNonNullResponseHandler(errorResponseHandler), getNonNullResponseHandler(responseHandler), executionContext, getRequestHandlers() ).execute(); }
checkInterrupted(); if (originalContent instanceof BufferedInputStream && originalContent.markSupported()) { .build(); beforeAttempt(beforeAttemptContext); response = executeOneRequest(execOneParams); savedException = execOneParams.retriedException; handleRetryableException(execOneParams, ioe); } catch (InterruptedException ie) { savedException = ie; savedException = e; thrown = true; throw lastReset(captureExceptionMetrics(e)); } catch (Error e) { thrown = true; throw lastReset(captureExceptionMetrics(e)); } finally { afterAttempt(afterAttemptContext);
private Response<Output> doExecute() throws InterruptedException { runBeforeRequestHandlers(); setSdkTransactionId(request); setUserAgent(request); request.getHeaders().putAll(requestConfig.getCustomRequestHeaders()); mergeQueryParameters(requestConfig.getCustomQueryParameters()); Response<Output> response = null; final InputStream origContent = request.getContent(); final InputStream toBeClosed = beforeRequest(); // for progress tracking try { publishProgress(listener, ProgressEventType.CLIENT_REQUEST_STARTED_EVENT); response = executeHelper(); publishProgress(listener, ProgressEventType.CLIENT_REQUEST_SUCCESS_EVENT); awsRequestMetrics.endEvent(AwsClientSideMonitoringMetrics.ApiCallLatency); awsRequestMetrics.getTimingInfo().endTiming(); afterResponse(response); return response; } catch (AmazonClientException e) { afterError(response, e); throw e; } finally { closeQuietlyForRuntimeExceptions(toBeClosed, log);
resetRequestInputStream(request); checkInterrupted(); if (requestLog.isDebugEnabled()) { requestLog.debug((execOneParams.isRetry() ? "Retrying " : "Sending ") + "Request: " + request); final AWSCredentials credentials = getCredentialsFromContext(); final ProgressListener listener = requestConfig.getProgressListener(); pauseBeforeRetry(execOneParams, listener); updateRetryHeaderInfo(request, execOneParams); checkInterrupted(); execOneParams.newApacheRequest(httpRequestFactory, request, httpClientSettings); captureConnectionPoolMetrics(); .startTimer(execOneParams.apacheRequest, getRequestTimeout(requestConfig)); if (shouldBufferHttpEntity(responseHandler.needsConnectionLeftOpen(), executionContext, execOneParams, final StatusLine statusLine = execOneParams.apacheResponse.getStatusLine(); final int statusCode = statusLine == null ? -1 : statusLine.getStatusCode(); if (isRequestSuccessful(execOneParams.apacheResponse)) { awsRequestMetrics.addProperty(Field.StatusCode, statusCode);
checkInterrupted(); if (originalContent instanceof BufferedInputStream && originalContent.markSupported()) { .build(); beforeAttempt(beforeAttemptContext); response = executeOneRequest(execOneParams); savedException = execOneParams.retriedException; handleRetryableException(execOneParams, ioe); } catch (InterruptedException ie) { savedException = ie; } catch (RuntimeException e) { savedException = e; throw lastReset(captureExceptionMetrics(e)); } catch (Error e) { throw lastReset(captureExceptionMetrics(e)); } finally { afterAttempt(afterAttemptContext);
try { awsResponse = responseHandler .handle(beforeUnmarshalling(httpResponse)); } finally { awsRequestMetrics.endEvent(Field.ResponseProcessingTime);
private Response<Output> doExecute() throws InterruptedException { runBeforeRequestHandlers(); setSdkTransactionId(request); setUserAgent(request); request.getHeaders().putAll(requestConfig.getCustomRequestHeaders()); mergeQueryParameters(requestConfig.getCustomQueryParameters()); Response<Output> response = null; final InputStream origContent = request.getContent(); final InputStream toBeClosed = beforeRequest(); // for progress tracking try { publishProgress(listener, ProgressEventType.CLIENT_REQUEST_STARTED_EVENT); response = executeHelper(); publishProgress(listener, ProgressEventType.CLIENT_REQUEST_SUCCESS_EVENT); awsRequestMetrics.getTimingInfo().endTiming(); afterResponse(response); return response; } catch (AmazonClientException e) { afterError(response, e); throw e; } finally {
private void handleRetryableException(ExecOneRequestParams execOneParams, Exception e) { captureExceptionMetrics(e); awsRequestMetrics.addProperty(Field.AWSRequestID, null); SdkClientException sdkClientException; if (!(e instanceof SdkClientException)) { sdkClientException = new SdkClientException( "Unable to execute HTTP request: " + e.getMessage(), e); } else { sdkClientException = (SdkClientException) e; } boolean willRetry = shouldRetry(execOneParams, sdkClientException); if (log.isTraceEnabled()) { log.trace(sdkClientException.getMessage() + (willRetry ? " Request will be retried." : ""), e); } else if (log.isDebugEnabled()) { log.trace(sdkClientException.getMessage() + (willRetry ? " Request will be retried." : "")); } if (!willRetry) { throw lastReset(sdkClientException); } // Cache the retryable exception execOneParams.retriedException = sdkClientException; }
/** * Publishes the "request content length" event, and returns an input stream, which will be * made mark-and-resettable if possible, for progress tracking purposes. * * @return an input stream, which will be made mark-and-resettable if possible, for progress * tracking purposes; or null if the request doesn't have an input stream */ private InputStream beforeRequest() { ProgressListener listener = requestConfig.getProgressListener(); reportContentLength(listener); if (request.getContent() == null) { return null; } final InputStream content = monitorStreamProgress(listener, buffer( makeResettable( request.getContent()))); if (AmazonHttpClient.unreliableTestConfig == null) { return content; } return wrapWithUnreliableStream(content); }
@Override public <Output> Response<Output> execute(HttpResponseHandler<Output> responseHandler) { RequestConfig config = requestConfig != null ? requestConfig : new AmazonWebServiceRequestAdapter(request.getOriginalRequest()); return new RequestExecutor<Output>(request, config, getNonNullResponseHandler(errorResponseHandler), getNonNullResponseHandler(responseHandler), executionContext, getRequestHandlers() ).execute(); }
resetRequestInputStream(request, execOneParams.retriedException); checkInterrupted(); if (requestLog.isDebugEnabled()) { requestLog.debug((execOneParams.isRetry() ? "Retrying " : "Sending ") + "Request: " + request); final AWSCredentials credentials = getCredentialsFromContext(); final ProgressListener listener = requestConfig.getProgressListener(); pauseBeforeRetry(execOneParams, listener); updateRetryHeaderInfo(request, execOneParams); checkInterrupted(); execOneParams.newApacheRequest(httpRequestFactory, request, httpClientSettings); captureConnectionPoolMetrics(); .startTimer(execOneParams.apacheRequest, getRequestTimeout(requestConfig)); if (shouldBufferHttpEntity(responseHandler.needsConnectionLeftOpen(), executionContext, execOneParams, Output response = handleResponse(httpResponse); final SdkBaseException exception = handleErrorResponse(execOneParams.apacheRequest, execOneParams.apacheResponse, localRequestContext);
checkInterrupted(); if (originalContent instanceof BufferedInputStream && originalContent.markSupported()) { .build(); beforeAttempt(beforeAttemptContext); response = executeOneRequest(execOneParams); savedException = execOneParams.retriedException; handleRetryableException(execOneParams, ioe); } catch (InterruptedException ie) { savedException = ie; savedException = e; thrown = true; throw lastReset(captureExceptionMetrics(e)); } catch (Error e) { thrown = true; throw lastReset(captureExceptionMetrics(e)); } finally { afterAttempt(afterAttemptContext);
try { awsResponse = responseHandler .handle(beforeUnmarshalling(httpResponse)); } finally { awsRequestMetrics.endEvent(Field.ResponseProcessingTime);
private Response<Output> doExecute() throws InterruptedException { runBeforeRequestHandlers(); setSdkTransactionId(request); setUserAgent(request); request.getHeaders().putAll(requestConfig.getCustomRequestHeaders()); mergeQueryParameters(requestConfig.getCustomQueryParameters()); Response<Output> response = null; final InputStream origContent = request.getContent(); final InputStream toBeClosed = beforeRequest(); // for progress tracking try { publishProgress(listener, ProgressEventType.CLIENT_REQUEST_STARTED_EVENT); response = executeHelper(); publishProgress(listener, ProgressEventType.CLIENT_REQUEST_SUCCESS_EVENT); awsRequestMetrics.endEvent(AwsClientSideMonitoringMetrics.ApiCallLatency); awsRequestMetrics.getTimingInfo().endTiming(); afterResponse(response); return response; } catch (AmazonClientException e) { afterError(response, e); throw e; } finally { closeQuietlyForRuntimeExceptions(toBeClosed, log);
/** * Publishes the "request content length" event, and returns an input stream, which will be * made mark-and-resettable if possible, for progress tracking purposes. * * @return an input stream, which will be made mark-and-resettable if possible, for progress * tracking purposes; or null if the request doesn't have an input stream */ private InputStream beforeRequest() { ProgressListener listener = requestConfig.getProgressListener(); reportContentLength(listener); if (request.getContent() == null) { return null; } final InputStream content = monitorStreamProgress(listener, buffer( makeResettable( request.getContent()))); if (AmazonHttpClient.unreliableTestConfig == null) { return content; } return wrapWithUnreliableStream(content); }
private void handleRetryableException(ExecOneRequestParams execOneParams, Exception e) { captureExceptionMetrics(e); awsRequestMetrics.addProperty(Field.AWSRequestID, null); SdkClientException sdkClientException; if (!(e instanceof SdkClientException)) { sdkClientException = new SdkClientException( "Unable to execute HTTP request: " + e.getMessage(), e); } else { sdkClientException = (SdkClientException) e; } boolean willRetry = shouldRetry(execOneParams, sdkClientException); if (log.isTraceEnabled()) { log.trace(sdkClientException.getMessage() + (willRetry ? " Request will be retried." : ""), e); } else if (log.isDebugEnabled()) { log.trace(sdkClientException.getMessage() + (willRetry ? " Request will be retried." : "")); } if (!willRetry) { throw lastReset(sdkClientException); } // Cache the retryable exception execOneParams.retriedException = sdkClientException; }
@Override public <Output> Response<Output> execute(HttpResponseHandler<Output> responseHandler) { RequestConfig config = requestConfig != null ? requestConfig : new AmazonWebServiceRequestAdapter(request.getOriginalRequest()); return new RequestExecutor<Output>(request, config, getNonNullResponseHandler(errorResponseHandler), getNonNullResponseHandler(responseHandler), executionContext, getRequestHandlers() ).execute(); }
resetRequestInputStream(request, execOneParams.retriedException); checkInterrupted(); if (requestLog.isDebugEnabled()) { requestLog.debug((execOneParams.isRetry() ? "Retrying " : "Sending ") + "Request: " + request); final AWSCredentials credentials = getCredentialsFromContext(); final ProgressListener listener = requestConfig.getProgressListener(); pauseBeforeRetry(execOneParams, listener); updateRetryHeaderInfo(request, execOneParams); checkInterrupted(); execOneParams.newApacheRequest(httpRequestFactory, request, httpClientSettings); captureConnectionPoolMetrics(); .startTimer(execOneParams.apacheRequest, getRequestTimeout(requestConfig)); if (shouldBufferHttpEntity(responseHandler.needsConnectionLeftOpen(), executionContext, execOneParams, Output response = handleResponse(httpResponse); final SdkBaseException exception = handleErrorResponse(execOneParams.apacheRequest, execOneParams.apacheResponse, localRequestContext);
try { awsResponse = responseHandler .handle(beforeUnmarshalling(httpResponse)); } finally { awsRequestMetrics.endEvent(Field.ResponseProcessingTime);
private void handleRetryableException(ExecOneRequestParams execOneParams, Exception e) { captureExceptionMetrics(e); awsRequestMetrics.addProperty(Field.AWSRequestID, null); SdkClientException sdkClientException; if (!(e instanceof SdkClientException)) { sdkClientException = new SdkClientException( "Unable to execute HTTP request: " + e.getMessage(), e); } else { sdkClientException = (SdkClientException) e; } boolean willRetry = shouldRetry(execOneParams, sdkClientException); if (log.isTraceEnabled()) { log.trace(sdkClientException.getMessage() + (willRetry ? " Request will be retried." : ""), e); } else if (log.isDebugEnabled()) { log.trace(sdkClientException.getMessage() + (willRetry ? " Request will be retried." : "")); } if (!willRetry) { throw lastReset(sdkClientException); } // Cache the retryable exception execOneParams.retriedException = sdkClientException; }