core,grpclb: Resolve isAndroid only once on class loading (#10345)

Motivation:

When multiple NameResolvers are created, the Classloader is scanned every time trying to figure out if the Platform is Android. This expensive work could be done only once.

Modification:

Cache isAndroid resolution in a constant.

Result:

Less expensive multiple NameResolvers instantiation.
This commit is contained in:
Stephane Landelle 2023-07-06 22:42:43 +02:00 committed by GitHub
parent 0b53dd7304
commit 1e30cb6601
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 2 deletions

View File

@ -46,6 +46,9 @@ public final class DnsNameResolverProvider extends NameResolverProvider {
private static final String SCHEME = "dns"; private static final String SCHEME = "dns";
private static final boolean IS_ANDROID = InternalServiceProviders
.isAndroid(DnsNameResolverProvider.class.getClassLoader());
@Override @Override
public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) { public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) {
if (SCHEME.equals(targetUri.getScheme())) { if (SCHEME.equals(targetUri.getScheme())) {
@ -60,7 +63,7 @@ public final class DnsNameResolverProvider extends NameResolverProvider {
args, args,
GrpcUtil.SHARED_CHANNEL_EXECUTOR, GrpcUtil.SHARED_CHANNEL_EXECUTOR,
Stopwatch.createUnstarted(), Stopwatch.createUnstarted(),
InternalServiceProviders.isAndroid(getClass().getClassLoader())), IS_ANDROID),
new BackoffPolicyRetryScheduler( new BackoffPolicyRetryScheduler(
new ExponentialBackoffPolicy.Provider(), new ExponentialBackoffPolicy.Provider(),
args.getScheduledExecutorService(), args.getScheduledExecutorService(),

View File

@ -53,6 +53,9 @@ final class SecretGrpclbNameResolverProvider {
private static final String SCHEME = "dns"; private static final String SCHEME = "dns";
private static final boolean IS_ANDROID = InternalServiceProviders
.isAndroid(SecretGrpclbNameResolverProvider.class.getClassLoader());
@Override @Override
public GrpclbNameResolver newNameResolver(URI targetUri, Args args) { public GrpclbNameResolver newNameResolver(URI targetUri, Args args) {
if (SCHEME.equals(targetUri.getScheme())) { if (SCHEME.equals(targetUri.getScheme())) {
@ -68,7 +71,7 @@ final class SecretGrpclbNameResolverProvider {
args, args,
GrpcUtil.SHARED_CHANNEL_EXECUTOR, GrpcUtil.SHARED_CHANNEL_EXECUTOR,
Stopwatch.createUnstarted(), Stopwatch.createUnstarted(),
InternalServiceProviders.isAndroid(getClass().getClassLoader())); IS_ANDROID);
} else { } else {
return null; return null;
} }