Skip to content

Commit fa5fa01

Browse files
authored
misc: credentials search precedence change (#1162)
1 parent 03b14d9 commit fa5fa01

File tree

8 files changed

+57
-10
lines changed

8 files changed

+57
-10
lines changed

runtime/auth/aws-credentials/api/aws-credentials.api

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ public final class aws/smithy/kotlin/runtime/auth/awscredentials/CachedCredentia
33
public synthetic fun <init> (Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider;JJLaws/smithy/kotlin/runtime/time/Clock;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
44
public fun close ()V
55
public fun resolve (Laws/smithy/kotlin/runtime/collections/Attributes;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
6+
public fun toString ()Ljava/lang/String;
67
}
78

89
public final class aws/smithy/kotlin/runtime/auth/awscredentials/CachedCredentialsProviderKt {
@@ -45,6 +46,7 @@ public final class aws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProv
4546
public fun <init> (Ljava/util/List;)V
4647
public fun <init> ([Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider;)V
4748
public fun resolve (Laws/smithy/kotlin/runtime/collections/Attributes;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
49+
public fun toString ()Ljava/lang/String;
4850
}
4951

5052
public abstract interface class aws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProviderConfig {
@@ -61,6 +63,10 @@ public final class aws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProv
6163
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
6264
}
6365

66+
public final class aws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProviderKt {
67+
public static final fun getSimpleClassName (Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider;)Ljava/lang/String;
68+
}
69+
6470
public abstract interface class aws/smithy/kotlin/runtime/auth/awscredentials/SigV4aClientConfig {
6571
public abstract fun getSigV4aSigningRegionSet ()Ljava/util/Set;
6672
}

runtime/auth/aws-credentials/common/src/aws/smithy/kotlin/runtime/auth/awscredentials/CachedCredentialsProvider.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ public class CachedCredentialsProvider(
7373
cachedCredentials.close()
7474
source.closeIfCloseable()
7575
}
76+
77+
override fun toString(): String = this.simpleClassName + ": " + this.source.simpleClassName
7678
}
7779

7880
/**

runtime/auth/aws-credentials/common/src/aws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,14 @@ public interface CredentialsProvider : IdentityProvider {
2727
public interface CloseableCredentialsProvider :
2828
CredentialsProvider,
2929
Closeable
30+
31+
/**
32+
* Retrieves the simple name of the class implementing [CredentialsProvider].
33+
*
34+
* This property uses Kotlin reflection to obtain the simple class name of
35+
* the current instance of [CredentialsProvider]. The simple class name is
36+
* the name of the class without the package qualification (e.g., "MyCredentialsProvider"
37+
* instead of "com.example.MyCredentialsProvider").
38+
*/
39+
public val CredentialsProvider.simpleClassName: String
40+
get() = this::class.simpleName ?: "AnonymousCredentialsProvider"

runtime/auth/aws-credentials/common/src/aws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProviderChain.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ public class CredentialsProviderChain(vararg providers: CredentialsProvider) :
2121
public constructor(providers: List<CredentialsProvider>) : this(*providers.toTypedArray())
2222

2323
override suspend fun resolve(attributes: Attributes): Credentials = super.resolve(attributes)
24+
25+
override fun toString(): String = providers.joinToString(" -> ")
2426
}

runtime/protocol/http-client/common/src/aws/smithy/kotlin/runtime/http/operation/SdkOperationExecution.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package aws.smithy.kotlin.runtime.http.operation
77

88
import aws.smithy.kotlin.runtime.InternalApi
9+
import aws.smithy.kotlin.runtime.businessmetrics.BusinessMetrics
910
import aws.smithy.kotlin.runtime.businessmetrics.SmithyBusinessMetric
1011
import aws.smithy.kotlin.runtime.businessmetrics.emitBusinessMetric
1112
import aws.smithy.kotlin.runtime.client.LogMode
@@ -23,9 +24,11 @@ import aws.smithy.kotlin.runtime.http.request.dumpRequest
2324
import aws.smithy.kotlin.runtime.http.request.immutableView
2425
import aws.smithy.kotlin.runtime.http.request.toBuilder
2526
import aws.smithy.kotlin.runtime.http.response.dumpResponse
27+
import aws.smithy.kotlin.runtime.identity.Identity
2628
import aws.smithy.kotlin.runtime.io.Handler
2729
import aws.smithy.kotlin.runtime.io.middleware.Middleware
2830
import aws.smithy.kotlin.runtime.io.middleware.Phase
31+
import aws.smithy.kotlin.runtime.operation.ExecutionContext
2932
import aws.smithy.kotlin.runtime.retries.RetryStrategy
3033
import aws.smithy.kotlin.runtime.retries.StandardRetryStrategy
3134
import aws.smithy.kotlin.runtime.retries.policy.RetryPolicy
@@ -285,6 +288,9 @@ internal class AuthHandler<Input, Output>(
285288
identityProvider.resolve(request.context)
286289
}
287290

291+
// emit identity business metrics
292+
emitIdentityBusinessMetrics(identity, request.context)
293+
288294
val resolveEndpointReq = ResolveEndpointRequest(request.context, request.subject.immutableView(), identity)
289295

290296
if (endpointResolver != null) {
@@ -408,3 +414,9 @@ private class InterceptorTransmitMiddleware<I, O>(
408414
return call
409415
}
410416
}
417+
418+
/**
419+
* Emits an [Identity]'s attributes' [BusinessMetrics] into the [ExecutionContext]
420+
*/
421+
private fun emitIdentityBusinessMetrics(identity: Identity, context: ExecutionContext) =
422+
identity.attributes.getOrNull(BusinessMetrics)?.toList()?.reversed()?.forEach(context::emitBusinessMetric)

runtime/runtime-core/api/runtime-core.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public abstract interface class aws/smithy/kotlin/runtime/businessmetrics/Busine
8383

8484
public final class aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtilsKt {
8585
public static final fun containsBusinessMetric (Laws/smithy/kotlin/runtime/operation/ExecutionContext;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)Z
86+
public static final fun emitBusinessMetric (Laws/smithy/kotlin/runtime/collections/MutableAttributes;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)V
8687
public static final fun emitBusinessMetric (Laws/smithy/kotlin/runtime/operation/ExecutionContext;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)V
8788
public static final fun getAccountIdBasedEndpointAccountId ()Laws/smithy/kotlin/runtime/collections/AttributeKey;
8889
public static final fun getBusinessMetrics ()Laws/smithy/kotlin/runtime/collections/AttributeKey;

runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ package aws.smithy.kotlin.runtime.businessmetrics
66

77
import aws.smithy.kotlin.runtime.InternalApi
88
import aws.smithy.kotlin.runtime.collections.AttributeKey
9+
import aws.smithy.kotlin.runtime.collections.MutableAttributes
910
import aws.smithy.kotlin.runtime.collections.get
1011
import aws.smithy.kotlin.runtime.operation.ExecutionContext
1112

1213
/**
1314
* Keeps track of all business metrics along an operations execution
1415
*/
1516
@InternalApi
16-
public val BusinessMetrics: AttributeKey<MutableSet<String>> = AttributeKey("aws.sdk.kotlin#BusinessMetrics")
17+
public val BusinessMetrics: AttributeKey<MutableSet<BusinessMetric>> = AttributeKey("aws.smithy.kotlin#BusinessMetrics")
1718

1819
/**
1920
* The account ID in an account ID based endpoint
@@ -33,9 +34,21 @@ public val ServiceEndpointOverride: AttributeKey<Boolean> = AttributeKey("aws.sm
3334
@InternalApi
3435
public fun ExecutionContext.emitBusinessMetric(metric: BusinessMetric) {
3536
if (this.attributes.contains(BusinessMetrics)) {
36-
this.attributes[BusinessMetrics].add(metric.identifier)
37+
this.attributes[BusinessMetrics].add(metric)
3738
} else {
38-
this.attributes[BusinessMetrics] = mutableSetOf(metric.identifier)
39+
this.attributes[BusinessMetrics] = mutableSetOf(metric)
40+
}
41+
}
42+
43+
/**
44+
* Emit a business metric to the mutable attributes
45+
*/
46+
@InternalApi
47+
public fun MutableAttributes.emitBusinessMetric(metric: BusinessMetric) {
48+
if (this.contains(BusinessMetrics)) {
49+
this[BusinessMetrics].add(metric)
50+
} else {
51+
this[BusinessMetrics] = mutableSetOf(metric)
3952
}
4053
}
4154

@@ -45,7 +58,7 @@ public fun ExecutionContext.emitBusinessMetric(metric: BusinessMetric) {
4558
@InternalApi
4659
public fun ExecutionContext.removeBusinessMetric(metric: BusinessMetric) {
4760
if (this.attributes.contains(BusinessMetrics)) {
48-
this.attributes[BusinessMetrics].remove(metric.identifier)
61+
this.attributes[BusinessMetrics].remove(metric)
4962
}
5063
}
5164

@@ -54,7 +67,7 @@ public fun ExecutionContext.removeBusinessMetric(metric: BusinessMetric) {
5467
*/
5568
@InternalApi
5669
public fun ExecutionContext.containsBusinessMetric(metric: BusinessMetric): Boolean =
57-
(this.attributes.contains(BusinessMetrics)) && this.attributes[BusinessMetrics].contains(metric.identifier)
70+
(this.attributes.contains(BusinessMetrics)) && this.attributes[BusinessMetrics].contains(metric)
5871

5972
/**
6073
* Valid business metrics

runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtilsTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class BusinessMetricsUtilsTest {
1717
executionContext.emitBusinessMetric(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION)
1818

1919
assertTrue(executionContext.attributes.contains(BusinessMetrics))
20-
assertTrue(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION.identifier))
20+
assertTrue(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION))
2121
}
2222

2323
@Test
@@ -27,8 +27,8 @@ class BusinessMetricsUtilsTest {
2727
executionContext.emitBusinessMetric(SmithyBusinessMetric.SIGV4A_SIGNING)
2828

2929
assertTrue(executionContext.attributes.contains(BusinessMetrics))
30-
assertTrue(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION.identifier))
31-
assertTrue(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.SIGV4A_SIGNING.identifier))
30+
assertTrue(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION))
31+
assertTrue(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.SIGV4A_SIGNING))
3232
}
3333

3434
@Test
@@ -37,12 +37,12 @@ class BusinessMetricsUtilsTest {
3737
executionContext.emitBusinessMetric(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION)
3838

3939
assertTrue(executionContext.attributes.contains(BusinessMetrics))
40-
assertTrue(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION.identifier))
40+
assertTrue(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION))
4141

4242
executionContext.removeBusinessMetric(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION)
4343

4444
assertTrue(executionContext.attributes.contains(BusinessMetrics))
45-
assertFalse(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION.identifier))
45+
assertFalse(executionContext.attributes[BusinessMetrics].contains(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION))
4646
}
4747

4848
@Test

0 commit comments

Comments
 (0)