Skip to content

Commit 978ab46

Browse files
XiaofeiCaoCopilot
andauthored
mgmt, optimize client version load logic in AzureServiceClient (#47301)
* code * prepare release * add instance level cache * Update sdk/resources/azure-resourcemanager-resources/src/main/resources/azure-resourcemanager-resources.properties Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * add comments, and filter out empty strings * trim whitespaces --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 6693fff commit 978ab46

6 files changed

Lines changed: 60 additions & 20 deletions

File tree

eng/versioning/version_client.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ com.azure.resourcemanager:azure-resourcemanager-msi;2.53.4;2.54.0-beta.1
289289
com.azure.resourcemanager:azure-resourcemanager-network;2.56.0;2.57.0-beta.1
290290
com.azure.resourcemanager:azure-resourcemanager-perf;1.0.0-beta.1;1.0.0-beta.1
291291
com.azure.resourcemanager:azure-resourcemanager-privatedns;2.53.4;2.54.0-beta.1
292-
com.azure.resourcemanager:azure-resourcemanager-resources;2.53.4;2.54.0-beta.1
292+
com.azure.resourcemanager:azure-resourcemanager-resources;2.53.4;2.53.5
293293
com.azure.resourcemanager:azure-resourcemanager-redis;2.53.4;2.54.0-beta.1
294294
com.azure.resourcemanager:azure-resourcemanager-samples;2.0.0-beta.1;2.0.0-beta.1
295295
com.azure.resourcemanager:azure-resourcemanager-search;2.54.3;2.55.0-beta.1

sdk/resources/azure-resourcemanager-resources/CHANGELOG.md

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
# Release History
22

3-
## 2.54.0-beta.1 (Unreleased)
4-
5-
### Features Added
6-
7-
### Breaking Changes
8-
9-
### Bugs Fixed
3+
## 2.53.5 (2025-11-17)
104

115
### Other Changes
126

7+
- Optimized `AzureServiceClient` to load library versions during class initialization.
8+
139
## 2.53.4 (2025-10-27)
1410

1511
### Other Changes

sdk/resources/azure-resourcemanager-resources/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ For documentation on how to use this package, please see [Azure Management Libra
1818
<dependency>
1919
<groupId>com.azure.resourcemanager</groupId>
2020
<artifactId>azure-resourcemanager-resources</artifactId>
21-
<version>2.53.1</version>
21+
<version>2.53.5</version>
2222
</dependency>
2323
```
2424
[//]: # ({x-version-update-end})

sdk/resources/azure-resourcemanager-resources/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
<groupId>com.azure.resourcemanager</groupId>
1616
<artifactId>azure-resourcemanager-resources</artifactId>
17-
<version>2.54.0-beta.1</version> <!-- {x-version-update;com.azure.resourcemanager:azure-resourcemanager-resources;current} -->
17+
<version>2.53.5</version> <!-- {x-version-update;com.azure.resourcemanager:azure-resourcemanager-resources;current} -->
1818
<packaging>jar</packaging>
1919

2020
<name>Microsoft Azure SDK for Resource Management</name>

sdk/resources/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/AzureServiceClient.java

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import com.azure.core.management.AzureEnvironment;
1111
import com.azure.core.management.exception.ManagementError;
1212
import com.azure.core.management.exception.ManagementException;
13-
import com.azure.core.management.polling.PollerFactory;
1413
import com.azure.core.management.polling.PollResult;
14+
import com.azure.core.management.polling.PollerFactory;
1515
import com.azure.core.util.Context;
1616
import com.azure.core.util.CoreUtils;
1717
import com.azure.core.util.logging.ClientLogger;
@@ -30,21 +30,27 @@
3030
import java.nio.charset.Charset;
3131
import java.nio.charset.StandardCharsets;
3232
import java.time.Duration;
33+
import java.util.Arrays;
34+
import java.util.HashMap;
3335
import java.util.Map;
3436

3537
/**
3638
* ServiceClient is the abstraction for accessing REST operations and their payload data types.
3739
*/
3840
public abstract class AzureServiceClient {
39-
41+
private static final String UNKNOWN_VERSION = "UnknownVersion";
42+
// Library to version map. E.g. azure-resourcemanager-compute -> 2.54.0
43+
private static final Map<String, String> LIBRARY_VERSION_MAP = new HashMap<>();
4044
private final ClientLogger logger = new ClientLogger(getClass());
4145

42-
private final String sdkVersion;
43-
4446
private final SerializerAdapter serializerAdapter;
4547
private final HttpPipeline httpPipeline;
46-
4748
private final String sdkName;
49+
private final String sdkVersion;
50+
51+
static {
52+
loadLibraryVersions();
53+
}
4854

4955
/**
5056
* Creates a new instance of {@link AzureServiceClient}.
@@ -57,20 +63,17 @@ protected AzureServiceClient(HttpPipeline httpPipeline, SerializerAdapter serial
5763
AzureEnvironment environment) {
5864
this.httpPipeline = httpPipeline;
5965
this.serializerAdapter = serializerAdapter;
60-
6166
String packageName = this.getClass().getPackage().getName();
6267
String implementationSegment = ".implementation";
6368
if (packageName.endsWith(implementationSegment)) {
6469
packageName = packageName.substring(0, packageName.length() - implementationSegment.length());
6570
}
6671
this.sdkName = packageName;
6772
if (packageName.startsWith("com.")) {
68-
// com.azure.resourcemanager.compute -> azure-resourcemanager-compute.properties
6973
String artifactId = packageName.substring("com.".length()).replace(".", "-");
70-
Map<String, String> properties = CoreUtils.getProperties(artifactId + ".properties");
71-
sdkVersion = properties.getOrDefault("version", "UnknownVersion");
74+
this.sdkVersion = LIBRARY_VERSION_MAP.getOrDefault(artifactId, UNKNOWN_VERSION);
7275
} else {
73-
sdkVersion = "UnknownVersion";
76+
this.sdkVersion = UNKNOWN_VERSION;
7477
}
7578
}
7679

@@ -184,6 +187,22 @@ public <T, U> Mono<U> getLroFinalResultOrError(AsyncPollResponse<PollResult<T>,
184187
}
185188
}
186189

190+
private static void loadLibraryVersions() {
191+
// Get premium libraries
192+
// CoreUtils.getProperties will return empty map for any IOException, e.g. if the property file does not exist.
193+
// It'll neither throw nor return null.
194+
Map<String, String> properties = CoreUtils.getProperties("azure-resourcemanager-resources.properties");
195+
Arrays.stream(properties.getOrDefault("premium-libraries", "").split(","))
196+
.filter(premiumLibrary -> !CoreUtils.isNullOrEmpty(premiumLibrary))
197+
.map(String::trim)
198+
.forEach(premiumLibrary -> {
199+
// load version for each library
200+
Map<String, String> libraryProperties = CoreUtils.getProperties(premiumLibrary + ".properties");
201+
String version = libraryProperties.getOrDefault("version", UNKNOWN_VERSION);
202+
LIBRARY_VERSION_MAP.put(premiumLibrary, version);
203+
});
204+
}
205+
187206
private static class HttpResponseImpl extends HttpResponse {
188207
private final int statusCode;
189208
private final byte[] responseBody;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,26 @@
11
version=${project.version}
2+
# Premium libraries whose versions are eagerly loaded at AzureServiceClient class initialization.
3+
# This list is maintained to ensure that premium management libraries are initialized early for diagnostics and telemetry.
4+
premium-libraries=azure-resourcemanager-authorization,\
5+
azure-resourcemanager-cdn,\
6+
azure-resourcemanager-containerinstance,\
7+
azure-resourcemanager-appplatform,\
8+
azure-resourcemanager-appservice,\
9+
azure-resourcemanager-compute,\
10+
azure-resourcemanager-containerregistry,\
11+
azure-resourcemanager-containerservice,\
12+
azure-resourcemanager-cosmos,\
13+
azure-resourcemanager-dns,\
14+
azure-resourcemanager-eventhubs,\
15+
azure-resourcemanager-keyvault,\
16+
azure-resourcemanager-monitor,\
17+
azure-resourcemanager-msi,\
18+
azure-resourcemanager-network,\
19+
azure-resourcemanager-privatedns,\
20+
azure-resourcemanager-redis,\
21+
azure-resourcemanager-resources,\
22+
azure-resourcemanager-search,\
23+
azure-resourcemanager-servicebus,\
24+
azure-resourcemanager-sql,\
25+
azure-resourcemanager-storage,\
26+
azure-resourcemanager-trafficmanager

0 commit comments

Comments
 (0)