1
15
16 package software.amazon.awssdk.core.internal.http;
17
18 import software.amazon.awssdk.annotations.SdkInternalApi;
19 import software.amazon.awssdk.core.RequestOverrideConfiguration;
20 import software.amazon.awssdk.core.SdkRequest;
21 import software.amazon.awssdk.core.SdkRequestOverrideConfiguration;
22 import software.amazon.awssdk.core.async.AsyncRequestBody;
23 import software.amazon.awssdk.core.http.ExecutionContext;
24 import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
25 import software.amazon.awssdk.core.interceptor.ExecutionInterceptorChain;
26 import software.amazon.awssdk.core.internal.http.pipeline.RequestPipeline;
27 import software.amazon.awssdk.core.internal.http.timers.TimeoutTracker;
28 import software.amazon.awssdk.core.signer.Signer;
29 import software.amazon.awssdk.utils.Validate;
30
31
36 @SdkInternalApi
37 public final class RequestExecutionContext {
38 private static final RequestOverrideConfiguration EMPTY_CONFIG = SdkRequestOverrideConfiguration.builder().build();
39 private AsyncRequestBody requestProvider;
40 private final SdkRequest originalRequest;
41 private final ExecutionContext executionContext;
42 private TimeoutTracker apiCallTimeoutTracker;
43 private TimeoutTracker apiCallAttemptTimeoutTracker;
44
45 private RequestExecutionContext(Builder builder) {
46 this.requestProvider = builder.requestProvider;
47 this.originalRequest = Validate.paramNotNull(builder.originalRequest, "originalRequest");
48 this.executionContext = Validate.paramNotNull(builder.executionContext, "executionContext");
49 }
50
51
54 public static Builder builder() {
55 return new Builder();
56 }
57
58 public AsyncRequestBody requestProvider() {
59 return requestProvider;
60 }
61
62
65 public ExecutionInterceptorChain interceptorChain() {
66 return executionContext.interceptorChain();
67 }
68
69 public ExecutionAttributes executionAttributes() {
70 return executionContext.executionAttributes();
71 }
72
73 public ExecutionContext executionContext() {
74 return executionContext;
75 }
76
77 public SdkRequest originalRequest() {
78 return originalRequest;
79 }
80
81 public RequestOverrideConfiguration requestConfig() {
82 return originalRequest.overrideConfiguration()
83
84 .map(c -> (RequestOverrideConfiguration) c)
85 .orElse(EMPTY_CONFIG);
86 }
87
88
91 public Signer signer() {
92 return executionContext.signer();
93 }
94
95
98 public TimeoutTracker apiCallTimeoutTracker() {
99 return apiCallTimeoutTracker;
100 }
101
102
106 public void apiCallTimeoutTracker(TimeoutTracker timeoutTracker) {
107 this.apiCallTimeoutTracker = timeoutTracker;
108 }
109
110 public TimeoutTracker apiCallAttemptTimeoutTracker() {
111 return apiCallAttemptTimeoutTracker;
112 }
113
114 public void apiCallAttemptTimeoutTracker(TimeoutTracker timeoutTracker) {
115 this.apiCallAttemptTimeoutTracker = timeoutTracker;
116 }
117
118
123 public void requestProvider(AsyncRequestBody publisher) {
124 requestProvider = publisher;
125 }
126
127
130 public static final class Builder {
131
132 private AsyncRequestBody requestProvider;
133 private SdkRequest originalRequest;
134 private ExecutionContext executionContext;
135
136 public Builder requestProvider(AsyncRequestBody requestProvider) {
137 this.requestProvider = requestProvider;
138 return this;
139 }
140
141 public Builder originalRequest(SdkRequest originalRequest) {
142 this.originalRequest = originalRequest;
143 return this;
144 }
145
146 public Builder executionContext(ExecutionContext executionContext) {
147 this.executionContext = executionContext;
148 return this;
149 }
150
151 public RequestExecutionContext build() {
152 return new RequestExecutionContext(this);
153 }
154 }
155 }
156