Skip to content

Commit e8a0639

Browse files
authored
ADT: Take advantage of the new HttpPipelinePosition functionality (Azure#22932)
1 parent 7342604 commit e8a0639

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsClientBuilder.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.azure.core.http.HttpHeaders;
1111
import com.azure.core.http.HttpPipeline;
1212
import com.azure.core.http.HttpPipelineBuilder;
13+
import com.azure.core.http.HttpPipelinePosition;
1314
import com.azure.core.http.policy.AddDatePolicy;
1415
import com.azure.core.http.policy.AddHeadersPolicy;
1516
import com.azure.core.http.policy.BearerTokenAuthenticationPolicy;
@@ -47,7 +48,8 @@ public final class DigitalTwinsClientBuilder {
4748
private static final String SDK_NAME = "name";
4849
private static final String SDK_VERSION = "version";
4950

50-
private final List<HttpPipelinePolicy> additionalPolicies;
51+
private final List<HttpPipelinePolicy> perCallPolicies = new ArrayList<>();
52+
private final List<HttpPipelinePolicy> perRetryPolicies = new ArrayList<>();
5153

5254
// mandatory
5355
private String endpoint;
@@ -79,7 +81,6 @@ public final class DigitalTwinsClientBuilder {
7981
* The public constructor for DigitalTwinsClientBuilder
8082
*/
8183
public DigitalTwinsClientBuilder() {
82-
additionalPolicies = new ArrayList<>();
8384
properties = CoreUtils.getProperties(DIGITAL_TWINS_PROPERTIES);
8485
httpLogOptions = new HttpLogOptions();
8586
}
@@ -90,7 +91,8 @@ private static HttpPipeline setupPipeline(
9091
HttpLogOptions httpLogOptions,
9192
ClientOptions clientOptions,
9293
HttpClient httpClient,
93-
List<HttpPipelinePolicy> additionalPolicies,
94+
List<HttpPipelinePolicy> perCallPolicies,
95+
List<HttpPipelinePolicy> perRetryPolicies,
9496
RetryPolicy retryPolicy,
9597
Configuration configuration,
9698
Map<String, String> properties) {
@@ -111,6 +113,8 @@ private static HttpPipeline setupPipeline(
111113
// Adds a "x-ms-client-request-id" header to each request. This header is useful for tracing requests through Azure ecosystems
112114
policies.add(new RequestIdPolicy());
113115

116+
policies.addAll(perCallPolicies);
117+
114118
// Only the RequestIdPolicy and UserAgentPolicy will take effect prior to the retry policy since neither of those need
115119
// to change in any way upon retry
116120
HttpPolicyProviders.addBeforeRetryPolicies(policies);
@@ -124,7 +128,7 @@ private static HttpPipeline setupPipeline(
124128
HttpPipelinePolicy credentialPolicy = new BearerTokenAuthenticationPolicy(tokenCredential, ADT_PUBLIC_SCOPE);
125129
policies.add(credentialPolicy);
126130

127-
policies.addAll(additionalPolicies);
131+
policies.addAll(perRetryPolicies);
128132

129133
// If client options has headers configured, add a policy for each
130134
if (clientOptions != null) {
@@ -135,7 +139,7 @@ private static HttpPipeline setupPipeline(
135139
}
136140

137141
// Custom policies, authentication policy, and add date policy all take place after the retry policy which means
138-
// they will be applied once per http request, and once for every retried http request. For instance, the
142+
// they will be applied once per http request, and once for every retried http request. For example, the
139143
// AddDatePolicy will add a date time header for each request that is sent, and if the http request fails
140144
// and the retry policy dictates that the request should be retried, then the date time header policy will
141145
// be applied again and the current date time will be put in the header instead of the date time from
@@ -192,7 +196,8 @@ public DigitalTwinsAsyncClient buildAsyncClient() {
192196
this.httpLogOptions,
193197
this.clientOptions,
194198
this.httpClient,
195-
this.additionalPolicies,
199+
this.perCallPolicies,
200+
this.perRetryPolicies,
196201
retryPolicy,
197202
buildConfiguration,
198203
this.properties);
@@ -273,7 +278,14 @@ public DigitalTwinsClientBuilder httpLogOptions(HttpLogOptions logOptions) {
273278
* @throws NullPointerException If {@code pipelinePolicy} is {@code null}.
274279
*/
275280
public DigitalTwinsClientBuilder addPolicy(HttpPipelinePolicy pipelinePolicy) {
276-
this.additionalPolicies.add(Objects.requireNonNull(pipelinePolicy, "'pipelinePolicy' cannot be null"));
281+
Objects.requireNonNull(pipelinePolicy, "'pipelinePolicy' cannot be null.");
282+
283+
if (pipelinePolicy.getPipelinePosition() == HttpPipelinePosition.PER_CALL) {
284+
perCallPolicies.add(pipelinePolicy);
285+
} else {
286+
perRetryPolicies.add(pipelinePolicy);
287+
}
288+
277289
return this;
278290
}
279291

0 commit comments

Comments
 (0)