Skip to content

Commit 570bdc1

Browse files
committed
Revert "Add tests for execution attribute precedence and fix PR comments"
This reverts commit 68f931a.
1 parent edf352c commit 570bdc1

File tree

8 files changed

+51
-214
lines changed

8 files changed

+51
-214
lines changed

core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/handler/AwsClientHandlerUtils.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,16 +101,10 @@ static <InputT extends SdkRequest, OutputT extends SdkResponse> ExecutionContext
101101
.putAttribute(SdkInternalExecutionAttribute.DISABLE_HOST_PREFIX_INJECTION,
102102
clientConfig.option(SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION));
103103

104-
ExecutionAttributes clientOverrideExecutionAttributes = clientConfig.option(SdkClientOption.EXECUTION_ATTRIBUTES);
105-
if (clientOverrideExecutionAttributes != null) {
106-
executionAttributes = clientOverrideExecutionAttributes.merge(executionAttributes);
107-
}
108-
109-
Optional<RequestOverrideConfiguration> requestOverrideConfiguration =
110-
(Optional<RequestOverrideConfiguration>) originalRequest.overrideConfiguration();
111-
if (requestOverrideConfiguration.isPresent()) {
112-
executionAttributes = requestOverrideConfiguration.get().executionAttributes().merge(executionAttributes);
113-
}
104+
Optional.ofNullable(clientConfig.option(SdkClientOption.EXECUTION_ATTRIBUTES)).ifPresent(clientOverrideConfiguration ->
105+
executionAttributes.putAllAttributes(clientOverrideConfiguration));
106+
originalRequest.overrideConfiguration().ifPresent(requestOverrideConfiguration ->
107+
executionAttributes.putAllAttributes(requestOverrideConfiguration.executionAttributes()));
114108

115109
ExecutionInterceptorChain executionInterceptorChain =
116110
new ExecutionInterceptorChain(clientConfig.option(SdkClientOption.EXECUTION_INTERCEPTORS));

core/sdk-core/src/main/java/software/amazon/awssdk/core/RequestOverrideConfiguration.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import software.amazon.awssdk.annotations.Immutable;
2929
import software.amazon.awssdk.annotations.SdkPublicApi;
3030
import software.amazon.awssdk.core.interceptor.ExecutionAttribute;
31-
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
3231
import software.amazon.awssdk.core.signer.Signer;
3332
import software.amazon.awssdk.metrics.MetricPublisher;
3433
import software.amazon.awssdk.utils.CollectionUtils;
@@ -48,7 +47,7 @@ public abstract class RequestOverrideConfiguration {
4847
private final Duration apiCallAttemptTimeout;
4948
private final Signer signer;
5049
private final List<MetricPublisher> metricPublishers;
51-
private final ExecutionAttributes executionAttributes;
50+
private final Map<ExecutionAttribute<?>, Object> executionAttributes;
5251

5352
protected RequestOverrideConfiguration(Builder<?> builder) {
5453
this.headers = CollectionUtils.deepUnmodifiableMap(builder.headers(), () -> new TreeMap<>(String.CASE_INSENSITIVE_ORDER));
@@ -58,7 +57,7 @@ protected RequestOverrideConfiguration(Builder<?> builder) {
5857
this.apiCallAttemptTimeout = Validate.isPositiveOrNull(builder.apiCallAttemptTimeout(), "apiCallAttemptTimeout");
5958
this.signer = builder.signer();
6059
this.metricPublishers = Collections.unmodifiableList(new ArrayList<>(builder.metricPublishers()));
61-
this.executionAttributes = builder.executionAttributes().build();
60+
this.executionAttributes = Collections.unmodifiableMap(new HashMap<>(builder.executionAttributes()));
6261
}
6362

6463
/**
@@ -148,7 +147,7 @@ public List<MetricPublisher> metricPublishers() {
148147
* An attribute value added on the client within the collection of attributes is superseded by an
149148
* attribute value added on the request.
150149
*/
151-
public ExecutionAttributes executionAttributes() {
150+
public Map<ExecutionAttribute<?>, Object> executionAttributes() {
152151
return executionAttributes;
153152
}
154153

@@ -392,16 +391,16 @@ default B putRawQueryParameter(String name, String value) {
392391
* @param executionAttributes Execution attributes map for this request
393392
* @return This object for method chaining.
394393
*/
395-
B executionAttributes(Map<ExecutionAttribute<?>, ?> executionAttributes);
394+
B executionAttributes(Map<ExecutionAttribute<?>, Object> executionAttributes);
396395

397396
/**
398397
* Add an execution attribute to the existing collection of execution attributes.
399398
* @param attribute The execution attribute object
400399
* @param value The value of the execution attribute.
401400
*/
402-
<T> B putExecutionAttribute(ExecutionAttribute<T> attribute, T value);
401+
B addExecutionAttribute(ExecutionAttribute attribute, Object value);
403402

404-
ExecutionAttributes.Builder executionAttributes();
403+
Map<ExecutionAttribute<?>, Object> executionAttributes();
405404

406405
/**
407406
* Create a new {@code SdkRequestOverrideConfiguration} with the properties set on this builder.
@@ -419,7 +418,7 @@ protected abstract static class BuilderImpl<B extends Builder> implements Builde
419418
private Duration apiCallAttemptTimeout;
420419
private Signer signer;
421420
private List<MetricPublisher> metricPublishers = new ArrayList<>();
422-
private ExecutionAttributes.Builder executionAttributes = ExecutionAttributes.builder();
421+
private Map<ExecutionAttribute<?>, Object> executionAttributes = new HashMap<>();
423422

424423
protected BuilderImpl() {
425424
}
@@ -561,20 +560,20 @@ public List<MetricPublisher> metricPublishers() {
561560
}
562561

563562
@Override
564-
public B executionAttributes(Map<ExecutionAttribute<?>, ?> executionAttributes) {
563+
public B executionAttributes(Map<ExecutionAttribute<?>, Object> executionAttributes) {
565564
Validate.paramNotNull(executionAttributes, "executionAttributes");
566-
this.executionAttributes = ExecutionAttributes.builder().putAll(executionAttributes);
565+
this.executionAttributes = executionAttributes;
567566
return (B) this;
568567
}
569568

570569
@Override
571-
public <T> B putExecutionAttribute(ExecutionAttribute<T> executionAttribute, T value) {
570+
public B addExecutionAttribute(ExecutionAttribute executionAttribute, Object value) {
572571
this.executionAttributes.put(executionAttribute, value);
573572
return (B) this;
574573
}
575574

576575
@Override
577-
public ExecutionAttributes.Builder executionAttributes() {
576+
public Map<ExecutionAttribute<?>, Object> executionAttributes() {
578577
return executionAttributes;
579578
}
580579

core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import java.util.function.Consumer;
2727
import software.amazon.awssdk.annotations.SdkPublicApi;
2828
import software.amazon.awssdk.core.interceptor.ExecutionAttribute;
29-
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
3029
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
3130
import software.amazon.awssdk.core.retry.RetryMode;
3231
import software.amazon.awssdk.core.retry.RetryPolicy;
@@ -59,7 +58,7 @@ public final class ClientOverrideConfiguration
5958
private final ProfileFile defaultProfileFile;
6059
private final String defaultProfileName;
6160
private final List<MetricPublisher> metricPublishers;
62-
private final ExecutionAttributes executionAttributes;
61+
private final Map<ExecutionAttribute<?>, Object> executionAttributes;
6362

6463
/**
6564
* Initialize this configuration. Private to require use of {@link #builder()}.
@@ -74,7 +73,7 @@ private ClientOverrideConfiguration(Builder builder) {
7473
this.defaultProfileFile = builder.defaultProfileFile();
7574
this.defaultProfileName = builder.defaultProfileName();
7675
this.metricPublishers = Collections.unmodifiableList(new ArrayList<>(builder.metricPublishers()));
77-
this.executionAttributes = builder.executionAttributes().build();
76+
this.executionAttributes = Collections.unmodifiableMap(new HashMap<>(builder.executionAttributes()));
7877
}
7978

8079
@Override
@@ -205,7 +204,7 @@ public List<MetricPublisher> metricPublishers() {
205204
*
206205
* @Return Map of execution attributes.
207206
*/
208-
public ExecutionAttributes executionAttributes() {
207+
public Map<ExecutionAttribute<?>, Object> executionAttributes() {
209208
return executionAttributes;
210209
}
211210

@@ -458,16 +457,16 @@ default Builder retryPolicy(RetryMode retryMode) {
458457
* @param executionAttributes Execution attributes map for this client.
459458
* @return This object for method chaining.
460459
*/
461-
Builder executionAttributes(Map<ExecutionAttribute<?>, ?> executionAttributes);
460+
Builder executionAttributes(Map<ExecutionAttribute<?>, Object> executionAttributes);
462461

463462
/**
464-
* Put an execution attribute into to the existing collection of execution attributes.
463+
* Add an execution attribute to the existing collection of execution attributes.
465464
* @param attribute The execution attribute object
466465
* @param value The value of the execution attribute.
467466
*/
468-
<T> Builder putExecutionAttribute(ExecutionAttribute<T> attribute, T value);
467+
Builder addExecutionAttribute(ExecutionAttribute attribute, Object value);
469468

470-
ExecutionAttributes.Builder executionAttributes();
469+
Map<ExecutionAttribute<?>, Object> executionAttributes();
471470
}
472471

473472
/**
@@ -483,7 +482,7 @@ private static final class DefaultClientOverrideConfigurationBuilder implements
483482
private ProfileFile defaultProfileFile;
484483
private String defaultProfileName;
485484
private List<MetricPublisher> metricPublishers = new ArrayList<>();
486-
private ExecutionAttributes.Builder executionAttributes = ExecutionAttributes.builder();
485+
private Map<ExecutionAttribute<?>, Object> executionAttributes = new HashMap<>();
487486

488487
@Override
489488
public Builder headers(Map<String, List<String>> headers) {
@@ -649,20 +648,20 @@ public List<MetricPublisher> metricPublishers() {
649648
}
650649

651650
@Override
652-
public Builder executionAttributes(Map<ExecutionAttribute<?>, ?> executionAttributes) {
651+
public Builder executionAttributes(Map<ExecutionAttribute<?>, Object> executionAttributes) {
653652
Validate.paramNotNull(executionAttributes, "executionAttributes");
654-
this.executionAttributes = ExecutionAttributes.builder().putAll(executionAttributes);
653+
this.executionAttributes = executionAttributes;
655654
return this;
656655
}
657656

658657
@Override
659-
public <T> Builder putExecutionAttribute(ExecutionAttribute<T> executionAttribute, T value) {
658+
public Builder addExecutionAttribute(ExecutionAttribute executionAttribute, Object value) {
660659
this.executionAttributes.put(executionAttribute, value);
661660
return this;
662661
}
663662

664663
@Override
665-
public ExecutionAttributes.Builder executionAttributes() {
664+
public Map<ExecutionAttribute<?>, Object> executionAttributes() {
666665
return executionAttributes;
667666
}
668667

core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/SdkClientOption.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import software.amazon.awssdk.annotations.SdkProtectedApi;
2424
import software.amazon.awssdk.core.ClientType;
2525
import software.amazon.awssdk.core.ServiceConfiguration;
26-
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
26+
import software.amazon.awssdk.core.interceptor.ExecutionAttribute;
2727
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
2828
import software.amazon.awssdk.core.retry.RetryPolicy;
2929
import software.amazon.awssdk.http.SdkHttpClient;
@@ -142,8 +142,8 @@ public final class SdkClientOption<T> extends ClientOption<T> {
142142
/**
143143
* Option to specify additional execution attributes to each client call.
144144
*/
145-
public static final SdkClientOption<ExecutionAttributes> EXECUTION_ATTRIBUTES =
146-
new SdkClientOption<>(new UnsafeValueType(ExecutionAttributes.class));
145+
public static final SdkClientOption<Map<ExecutionAttribute<?>, Object>> EXECUTION_ATTRIBUTES =
146+
new SdkClientOption<>(new UnsafeValueType(Map.class));
147147

148148
private SdkClientOption(Class<T> valueClass) {
149149
super(valueClass);

core/sdk-core/src/main/java/software/amazon/awssdk/core/interceptor/ExecutionAttributes.java

Lines changed: 3 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@
1919
import java.util.Map;
2020
import software.amazon.awssdk.annotations.NotThreadSafe;
2121
import software.amazon.awssdk.annotations.SdkPublicApi;
22-
import software.amazon.awssdk.utils.Validate;
23-
import software.amazon.awssdk.utils.builder.CopyableBuilder;
24-
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
2522

2623
/**
2724
* A mutable collection of {@link ExecutionAttribute}s that can be modified by {@link ExecutionInterceptor}s in order to save and
@@ -31,16 +28,8 @@
3128
*/
3229
@SdkPublicApi
3330
@NotThreadSafe
34-
public final class ExecutionAttributes implements ToCopyableBuilder<ExecutionAttributes.Builder, ExecutionAttributes> {
35-
private final Map<ExecutionAttribute<?>, Object> attributes;
36-
37-
public ExecutionAttributes() {
38-
this.attributes = new HashMap<>();
39-
}
40-
41-
private ExecutionAttributes(Map<? extends ExecutionAttribute<?>, ?> attributes) {
42-
this.attributes = new HashMap<>(attributes);
43-
}
31+
public final class ExecutionAttributes {
32+
private final Map<ExecutionAttribute<?>, Object> attributes = new HashMap<>();
4433

4534
/**
4635
* Retrieve the current value of the provided attribute in this collection of attributes. This will return null if the value
@@ -51,13 +40,6 @@ public <U> U getAttribute(ExecutionAttribute<U> attribute) {
5140
return (U) attributes.get(attribute);
5241
}
5342

54-
/**
55-
* Retrieve the collection of attributes.
56-
*/
57-
public Map<ExecutionAttribute<?>, ?> getAttributes() {
58-
return attributes;
59-
}
60-
6143
/**
6244
* Update or set the provided attribute in this collection of attributes.
6345
*/
@@ -69,73 +51,16 @@ public <U> ExecutionAttributes putAttribute(ExecutionAttribute<U> attribute, U v
6951
/**
7052
* Add all execution attributes from the provided collection to the internal collection of attributes.
7153
*/
72-
public <U> ExecutionAttributes putAllAttributes(Map<ExecutionAttribute<?>, ?> executionAttributes) {
54+
public <U> ExecutionAttributes putAllAttributes(Map<ExecutionAttribute<?>, Object> executionAttributes) {
7355
this.attributes.putAll(executionAttributes);
7456
return this;
7557
}
7658

77-
/**
78-
* Merge attributes of a lower precedence into the current higher precedence current collection.
79-
*/
80-
public <U> ExecutionAttributes merge(ExecutionAttributes lowerPrecedenceExecutionAttributes) {
81-
lowerPrecedenceExecutionAttributes.getAttributes().forEach(this.attributes::putIfAbsent);
82-
return this;
83-
}
84-
8559
/**
8660
* Set the provided attribute in this collection of attributes if it does not already exist in the collection.
8761
*/
8862
public <U> ExecutionAttributes putAttributeIfAbsent(ExecutionAttribute<U> attribute, U value) {
8963
attributes.putIfAbsent(attribute, value);
9064
return this;
9165
}
92-
93-
public static Builder builder() {
94-
return new Builder();
95-
}
96-
97-
@Override
98-
public Builder toBuilder() {
99-
return builder().putAll(attributes);
100-
}
101-
102-
public ExecutionAttributes copy() {
103-
return toBuilder().build();
104-
}
105-
106-
public static final class Builder implements CopyableBuilder<ExecutionAttributes.Builder, ExecutionAttributes> {
107-
108-
private final Map<ExecutionAttribute<?>, Object> executionAttributes = new HashMap<>();
109-
110-
private Builder() {
111-
}
112-
113-
@SuppressWarnings("unchecked") // Cast is safe due to implementation of {@link #put}
114-
public <T> T get(ExecutionAttribute<T> key) {
115-
Validate.notNull(key, "Key to retrieve must not be null.");
116-
return (T) executionAttributes.get(key);
117-
}
118-
119-
/**
120-
* Add a mapping between the provided key and value.
121-
*/
122-
public <T> ExecutionAttributes.Builder put(ExecutionAttribute<T> key, T value) {
123-
Validate.notNull(key, "Key to set must not be null.");
124-
executionAttributes.put(key, value);
125-
return this;
126-
}
127-
128-
/**
129-
* Adds all the attributes from the map provided.
130-
*/
131-
public ExecutionAttributes.Builder putAll(Map<? extends ExecutionAttribute<?>, ?> attributes) {
132-
executionAttributes.putAll(attributes);
133-
return this;
134-
}
135-
136-
@Override
137-
public ExecutionAttributes build() {
138-
return new ExecutionAttributes(executionAttributes);
139-
}
140-
}
14166
}

core/sdk-core/src/test/java/software/amazon/awssdk/core/RequestOverrideConfigurationTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public void executionAttributes_createsCopy() {
180180
.build();
181181

182182
executionAttributes.remove(testAttribute);
183-
assertThat(overrideConfig.executionAttributes().getAttribute(testAttribute)).isEqualTo(expectedValue);
183+
assertThat(overrideConfig.executionAttributes().get(testAttribute)).isEqualTo(expectedValue);
184184
}
185185

186186
@Test
@@ -193,11 +193,11 @@ public void executionAttributes_maintainsAllAdded() {
193193
SdkRequestOverrideConfiguration.Builder builder = SdkRequestOverrideConfiguration.builder();
194194

195195
for (Map.Entry<ExecutionAttribute, Object> attributeObjectEntry : executionAttributeObjectMap.entrySet()) {
196-
builder.putExecutionAttribute(attributeObjectEntry.getKey(), attributeObjectEntry.getValue());
196+
builder.addExecutionAttribute(attributeObjectEntry.getKey(), attributeObjectEntry.getValue());
197197
}
198198

199199
SdkRequestOverrideConfiguration overrideConfig = builder.build();
200-
assertThat(overrideConfig.executionAttributes().getAttributes()).isEqualTo(executionAttributeObjectMap);
200+
assertThat(overrideConfig.executionAttributes()).isEqualTo(executionAttributeObjectMap);
201201
}
202202

203203
@Test
@@ -209,10 +209,10 @@ public void executionAttributes_overwritesPreviouslyAdded() {
209209

210210
SdkRequestOverrideConfiguration.Builder builder = SdkRequestOverrideConfiguration.builder();
211211

212-
builder.putExecutionAttribute(new ExecutionAttribute("AddedAttribute"), mock(Object.class));
212+
builder.addExecutionAttribute(new ExecutionAttribute("AddedAttribute"), mock(Object.class));
213213
builder.executionAttributes(executionAttributes);
214214
SdkRequestOverrideConfiguration overrideConfig = builder.build();
215-
assertThat(overrideConfig.executionAttributes().getAttributes()).isEqualTo(executionAttributes);
215+
assertThat(overrideConfig.executionAttributes()).isEqualTo(executionAttributes);
216216
}
217217

218218
@Test
@@ -228,9 +228,9 @@ public void executionAttributes_listPreviouslyAdded_appendedToList() {
228228
ExecutionAttribute addedAttribute = new ExecutionAttribute("AddedAttribute");
229229
Object addedValue = mock(Object.class);
230230

231-
builder.putExecutionAttribute(addedAttribute, addedValue);
231+
builder.addExecutionAttribute(addedAttribute, addedValue);
232232

233233
SdkRequestOverrideConfiguration overrideConfig = builder.build();
234-
assertThat(overrideConfig.executionAttributes().getAttribute(addedAttribute)).isEqualTo(addedValue);
234+
assertThat(overrideConfig.executionAttributes().get(addedAttribute)).isEqualTo(addedValue);
235235
}
236236
}

0 commit comments

Comments
 (0)