Skip to content

Commit 77ff444

Browse files
committed
revert metrics certificate source
1 parent ec24f95 commit 77ff444

5 files changed

Lines changed: 46 additions & 212 deletions

File tree

sdk/src/main/java/software/amazon/awssdk/iot/AwsIotMqtt5ClientBuilder.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
import software.amazon.awssdk.crt.mqtt5.TopicAliasingOptions;
3838
import software.amazon.awssdk.crt.utils.PackageInfo;
3939
import software.amazon.awssdk.crt.mqtt5.packets.UserProperty;
40-
import software.amazon.awssdk.crt.internal.IoTDeviceSDKMetrics;
40+
4141

4242
/**
4343
* Builders for making MQTT5 clients with different connection methods for AWS IoT Core.
@@ -51,7 +51,6 @@ public class AwsIotMqtt5ClientBuilder extends software.amazon.awssdk.crt.CrtReso
5151
private ConnectPacketBuilder configConnect;
5252
private TlsContextOptions configTls;
5353
private MqttConnectCustomAuthConfig configCustomAuth;
54-
private CertificateSource certificateSource = null;
5554

5655
private AwsIotMqtt5ClientBuilder(String hostName, Long port, TlsContextOptions tlsContext) {
5756
config = new Mqtt5ClientOptionsBuilder(hostName, port);
@@ -82,7 +81,6 @@ public static AwsIotMqtt5ClientBuilder newDirectMqttBuilderWithMtlsFromPath(Stri
8281
if (TlsContextOptions.isAlpnSupported()) {
8382
builder.configTls.withAlpnList("x-amzn-mqtt-ca");
8483
}
85-
builder.certificateSource = CertificateSource.CERTIFICATE_FILES;
8684
return builder;
8785
}
8886

@@ -101,7 +99,6 @@ public static AwsIotMqtt5ClientBuilder newDirectMqttBuilderWithMtlsFromMemory(St
10199
if (TlsContextOptions.isAlpnSupported()) {
102100
builder.configTls.withAlpnList("x-amzn-mqtt-ca");
103101
}
104-
builder.certificateSource = CertificateSource.CERTIFICATE_FILES;
105102
return builder;
106103
}
107104

@@ -121,7 +118,6 @@ public static AwsIotMqtt5ClientBuilder newDirectMqttBuilderWithMtlsFromPkcs11(St
121118
if (TlsContextOptions.isAlpnSupported()) {
122119
builder.configTls.withAlpnList("x-amzn-mqtt-ca");
123120
}
124-
builder.certificateSource = CertificateSource.PKCS11;
125121
return builder;
126122
}
127123

@@ -141,7 +137,6 @@ public static AwsIotMqtt5ClientBuilder newDirectMtlsCustomKeyOperationsBuilder(S
141137
if (TlsContextOptions.isAlpnSupported()) {
142138
builder.configTls.withAlpnList("x-amzn-mqtt-ca");
143139
}
144-
builder.certificateSource = CertificateSource.CERTIFICATE_FILES;
145140
return builder;
146141
}
147142

@@ -163,7 +158,6 @@ public static AwsIotMqtt5ClientBuilder newDirectMqttBuilderWithMtlsFromWindowsCe
163158
if (TlsContextOptions.isAlpnSupported()) {
164159
builder.configTls.withAlpnList("x-amzn-mqtt-ca");
165160
}
166-
builder.certificateSource = CertificateSource.WINDOWS_CERT_STORE;
167161
return builder;
168162
}
169163

@@ -221,7 +215,6 @@ public static AwsIotMqtt5ClientBuilder newDirectMqttBuilderWithMtlsFromPkcs12(St
221215
if (TlsContextOptions.isAlpnSupported()) {
222216
builder.configTls.withAlpnList("x-amzn-mqtt-ca");
223217
}
224-
builder.certificateSource = CertificateSource.PKCS12_FILE;
225218
return builder;
226219
}
227220

@@ -336,7 +329,6 @@ public static AwsIotMqtt5ClientBuilder newDirectMqttBuilderWithJavaKeystore(
336329
if (TlsContextOptions.isAlpnSupported()) {
337330
builder.configTls.withAlpnList("x-amzn-mqtt-ca");
338331
}
339-
builder.certificateSource = CertificateSource.JAVA_KEYSTORE;
340332
return builder;
341333
}
342334

@@ -843,7 +835,7 @@ public AwsIotMqtt5ClientBuilder withUserProperties(List<UserProperty> userProper
843835
{
844836
this.configConnect.withUserProperties(userProperties);
845837
return this;
846-
}
838+
}
847839

848840
/**
849841
* Constructs an MQTT5 client object configured with the options set.
@@ -875,10 +867,6 @@ public Mqtt5Client build() {
875867

876868
this.config.withConnectOptions(this.configConnect.build());
877869

878-
// Set SDK metrics for the CRT layer to embed in the CONNECT packet username
879-
IoTDeviceSDKMetrics sdkMetrics = IoTSdkMetrics.buildSdkMetrics(this.certificateSource);
880-
this.config.withMetrics(sdkMetrics);
881-
882870
Mqtt5Client returnClient = new Mqtt5Client(this.config.build());
883871

884872
// Keep a reference to the TLS configuration so any possible Websockets-related CrtResources are kept alive

sdk/src/main/java/software/amazon/awssdk/iot/AwsIotMqttConnectionBuilder.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import software.amazon.awssdk.crt.mqtt.MqttMessage;
3737
import software.amazon.awssdk.crt.mqtt.QualityOfService;
3838
import software.amazon.awssdk.crt.mqtt.WebsocketHandshakeTransformArgs;
39-
import software.amazon.awssdk.crt.internal.IoTDeviceSDKMetrics;
4039

4140
/**
4241
* A central class for building Mqtt connections without manually managing a large variety of native objects (some
@@ -61,7 +60,6 @@ public final class AwsIotMqttConnectionBuilder extends CrtResource {
6160
private boolean resetLazilyCreatedResources = true;
6261
// Used to detect if we need to set the ALPN list for custom authorizer
6362
private boolean isUsingCustomAuthorizer = false;
64-
private CertificateSource certificateSource = null;
6563

6664
private void resetDefaultPort() {
6765
if (TlsContextOptions.isAlpnSupported()) {
@@ -109,7 +107,6 @@ protected void releaseNativeHandle() {}
109107
public static AwsIotMqttConnectionBuilder newMtlsBuilderFromPath(String certPath, String privateKeyPath) {
110108
try (TlsContextOptions tlsContextOptions = TlsContextOptions.createWithMtlsFromPath(certPath, privateKeyPath)) {
111109
AwsIotMqttConnectionBuilder builder = new AwsIotMqttConnectionBuilder(tlsContextOptions);
112-
builder.certificateSource = CertificateSource.CERTIFICATE_FILES;
113110
return builder;
114111
}
115112
}
@@ -124,7 +121,6 @@ public static AwsIotMqttConnectionBuilder newMtlsBuilderFromPath(String certPath
124121
public static AwsIotMqttConnectionBuilder newMtlsBuilder(String certificate, String privateKey) {
125122
try (TlsContextOptions tlsContextOptions = TlsContextOptions.createWithMtls(certificate, privateKey)) {
126123
AwsIotMqttConnectionBuilder builder = new AwsIotMqttConnectionBuilder(tlsContextOptions);
127-
builder.certificateSource = CertificateSource.CERTIFICATE_FILES;
128124
return builder;
129125
}
130126
}
@@ -153,7 +149,6 @@ public static AwsIotMqttConnectionBuilder newMtlsBuilder(byte[] certificate, byt
153149
public static AwsIotMqttConnectionBuilder newMtlsPkcs11Builder(TlsContextPkcs11Options pkcs11Options) {
154150
try (TlsContextOptions tlsContextOptions = TlsContextOptions.createWithMtlsPkcs11(pkcs11Options)) {
155151
AwsIotMqttConnectionBuilder builder = new AwsIotMqttConnectionBuilder(tlsContextOptions);
156-
builder.certificateSource = CertificateSource.PKCS11;
157152
return builder;
158153
}
159154
}
@@ -167,7 +162,6 @@ public static AwsIotMqttConnectionBuilder newMtlsPkcs11Builder(TlsContextPkcs11O
167162
public static AwsIotMqttConnectionBuilder newMtlsCustomKeyOperationsBuilder(TlsContextCustomKeyOperationOptions operationOptions) {
168163
try (TlsContextOptions tlsContextOptions = TlsContextOptions.createWithMtlsCustomKeyOperations(operationOptions)) {
169164
AwsIotMqttConnectionBuilder builder = new AwsIotMqttConnectionBuilder(tlsContextOptions);
170-
builder.certificateSource = CertificateSource.CERTIFICATE_FILES;
171165
return builder;
172166
}
173167
}
@@ -187,7 +181,6 @@ public static AwsIotMqttConnectionBuilder newMtlsWindowsCertStorePathBuilder(Str
187181
try (TlsContextOptions tlsContextOptions = TlsContextOptions
188182
.createWithMtlsWindowsCertStorePath(certificatePath)) {
189183
AwsIotMqttConnectionBuilder builder = new AwsIotMqttConnectionBuilder(tlsContextOptions);
190-
builder.certificateSource = CertificateSource.WINDOWS_CERT_STORE;
191184
return builder;
192185
}
193186
}
@@ -208,7 +201,6 @@ public static AwsIotMqttConnectionBuilder newJavaKeystoreBuilder(
208201
try (TlsContextOptions tlsContextOptions = TlsContextOptions
209202
.createWithMtlsJavaKeystore(keyStore, certificateAlias, certificatePassword)) {
210203
AwsIotMqttConnectionBuilder builder = new AwsIotMqttConnectionBuilder(tlsContextOptions);
211-
builder.certificateSource = CertificateSource.JAVA_KEYSTORE;
212204
return builder;
213205
}
214206
}
@@ -226,7 +218,6 @@ public static AwsIotMqttConnectionBuilder newMtlsPkcs12Builder(
226218
String pkcs12Path, String pkcs12Password) {
227219
try (TlsContextOptions tlsContextOptions = TlsContextOptions.createWithMtlsPkcs12(pkcs12Path, pkcs12Password)) {
228220
AwsIotMqttConnectionBuilder builder = new AwsIotMqttConnectionBuilder(tlsContextOptions);
229-
builder.certificateSource = CertificateSource.PKCS12_FILE;
230221
return builder;
231222
}
232223
}
@@ -775,9 +766,6 @@ public MqttClientConnection build() {
775766

776767
resetLazilyCreatedResources = false;
777768

778-
// Set SDK metrics for the CRT layer to embed in the CONNECT packet username
779-
IoTDeviceSDKMetrics sdkMetrics = IoTSdkMetrics.buildSdkMetrics(this.certificateSource);
780-
config.setMetrics(sdkMetrics);
781769

782770
// Connection create
783771
try (MqttConnectionConfig connectionConfig = config.clone()) {

sdk/src/main/java/software/amazon/awssdk/iot/CertificateSource.java

Lines changed: 0 additions & 41 deletions
This file was deleted.

sdk/src/main/java/software/amazon/awssdk/iot/IoTSdkMetrics.java

Lines changed: 44 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,71 +8,74 @@
88
import java.util.ArrayList;
99
import java.util.List;
1010

11-
import software.amazon.awssdk.crt.internal.IoTDeviceSDKMetrics;
12-
import software.amazon.awssdk.crt.internal.IoTMetricsMetadata;
13-
import software.amazon.awssdk.crt.internal.IoTMetricEncoder;
11+
import software.amazon.awssdk.crt.iot.IoTDeviceSDKMetrics;
12+
import software.amazon.awssdk.crt.iot.IoTMetricsMetadata;
1413

1514
/**
16-
* Builds SDK-layer metrics for embedding in the MQTT CONNECT packet username field.
17-
* Collects SDK-layer feature usage (e.g., CERTIFICATE_SOURCE) and packages it
18-
* into an IoTDeviceSDKMetrics object for the CRT layer to merge with CRT features.
15+
* Provides SDK-level metadata (version info) to the CRT layer.
16+
* The CRT handles all feature detection (certificate source, TLS settings, etc.)
17+
* and embeds the combined metrics in the MQTT CONNECT packet username field.
1918
*/
20-
public class IoTSdkMetrics {
19+
class IoTSdkMetrics {
2120

22-
private static final String CERTIFICATE_SOURCE = "I";
21+
/** SDK library name reported in the metrics string. */
22+
private String sdkLibraryName = "IoTDeviceSDK/JAVA";
23+
24+
/**
25+
* The current version of the IoT SDK metrics format.
26+
* This must match the version expected by the CRT layer.
27+
*/
28+
private String iotSdkMetricsVersion = "1";
2329

2430
/**
2531
* Returns the installed SDK version string.
32+
*
33+
* <p>Attempts to read the specification version from the package manifest first,
34+
* falling back to the implementation version. Returns {@code "dev"} if the package
35+
* metadata is unavailable (e.g. when running from a source checkout without installing).
36+
*
37+
* @return a version string such as {@code "1.32.0"} or {@code "dev"}
2638
*/
27-
private static String getSdkVersion(){
28-
try{
39+
private static String getSdkVersion() {
40+
try {
2941
Package pkg = IoTSdkMetrics.class.getPackage();
3042
String version = pkg.getSpecificationVersion();
31-
if(version == null){
43+
if (version == null) {
3244
version = pkg.getImplementationVersion();
3345
}
34-
if(version == null){
46+
if (version == null) {
3547
version = "dev";
3648
}
3749
return version;
38-
}catch (Exception e){
50+
} catch (Exception e) {
3951
return "dev";
4052
}
4153
}
4254

4355
/**
44-
* Encodes SDK features into "ID/Value" format.
45-
* @param certificateSource the certificate method in use or null if none
46-
* @return encoded feature string (e.g., "I/A"), or empty string if no feature.
47-
*/
48-
private static String encodedFeatureList(CertificateSource certificateSource){
49-
if(certificateSource!=null){
50-
return CERTIFICATE_SOURCE + "/" + certificateSource.getValue();
51-
}
52-
return "";
53-
}
54-
55-
/**
56-
* Builds an IoTDeviceSDKMetrics instance for CRT layer.
57-
* Always include IoTSDKVersion. When a certificate source is provided,
58-
* also includes IoTSDKFeature and IoTSDKMetricsVersion.
56+
* Builds the SDK-level {@link IoTDeviceSDKMetrics} payload that is passed down to the CRT layer.
57+
*
58+
* <p>The returned object carries SDK identity and the metrics format version via two metadata entries:
59+
* <ul>
60+
* <li>{@code IoTSDKVersion} — the installed SDK package version, used to identify the
61+
* SDK release on the server side.</li>
62+
* <li>{@code IoTSDKMetricsVersion} — the metrics format version this SDK supports.
63+
* The CRT only merges SDK-supplied features when this value matches the version it expects,
64+
* so bumping {@link #iotSdkMetricsVersion} should be done in lockstep with CRT changes.</li>
65+
* </ul>
66+
*
67+
* <p>The CRT layer is responsible for detecting connection-level features (protocol version,
68+
* certificate source, TLS settings, proxy type, etc.) and appending them to the metadata
69+
* before embedding the result in the MQTT CONNECT packet username field.
5970
*
60-
* @param certificateSource the certificate method used, or null for connections
61-
* without client certs (websocket, custom auth)
62-
* @return metrics object ready to pass to CRT via withMetrics() or setMetrics()
71+
* @return a populated {@link IoTDeviceSDKMetrics} object ready to attach to an
72+
* MQTT5 client or MQTT3 connection configuration
6373
*/
64-
public static IoTDeviceSDKMetrics buildSdkMetrics(CertificateSource certificateSource) {
74+
IoTDeviceSDKMetrics buildSdkMetrics() {
6575
List<IoTMetricsMetadata> metadata = new ArrayList<>();
66-
6776
metadata.add(new IoTMetricsMetadata("IoTSDKVersion", getSdkVersion()));
68-
69-
String featureList = encodedFeatureList(certificateSource);
70-
if (!featureList.isEmpty()) {
71-
metadata.add(new IoTMetricsMetadata("IoTSDKFeature", featureList));
72-
metadata.add(new IoTMetricsMetadata("IoTSDKMetricsVersion",
73-
String.valueOf(IoTMetricEncoder.IOT_SDK_METRICS_FEATURE_VERSION)));
74-
}
75-
return new IoTDeviceSDKMetrics("IoTDeviceSDK/Java", metadata);
77+
metadata.add(new IoTMetricsMetadata("IoTSDKMetricsVersion", iotSdkMetricsVersion));
78+
return new IoTDeviceSDKMetrics(sdkLibraryName, metadata);
7679
}
7780

7881
}

0 commit comments

Comments
 (0)