正在查看: 逼多多 v3.6.2 应用的 LoadBalancerRegistry.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: 逼多多 v3.6.2 应用的 LoadBalancerRegistry.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package io.grpc;
import io.grpc.ServiceProviders;
import io.grpc.internal.PickFirstLoadBalancerProvider;
import io.grpc.util.SecretRoundRobinLoadBalancerProvider;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import q.l;
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1771")
public final class LoadBalancerRegistry {
private static LoadBalancerRegistry instance;
private final LinkedHashSet<LoadBalancerProvider> allProviders = new LinkedHashSet<>();
private final LinkedHashMap<String, LoadBalancerProvider> effectiveProviders = new LinkedHashMap<>();
private static final Logger logger = Logger.getLogger(LoadBalancerRegistry.class.getName());
private static final Iterable<Class<?>> HARDCODED_CLASSES = getHardCodedClasses();
private static final class LoadBalancerPriorityAccessor implements ServiceProviders.PriorityAccessor<LoadBalancerProvider> {
LoadBalancerPriorityAccessor() {
}
@Override
public int getPriority(LoadBalancerProvider loadBalancerProvider) {
return loadBalancerProvider.getPriority();
}
@Override
public boolean isAvailable(LoadBalancerProvider loadBalancerProvider) {
return loadBalancerProvider.isAvailable();
}
}
private synchronized void addProvider(LoadBalancerProvider loadBalancerProvider) {
l.e(loadBalancerProvider.isAvailable(), "isAvailable() returned false");
this.allProviders.add(loadBalancerProvider);
}
public static synchronized LoadBalancerRegistry getDefaultRegistry() {
LoadBalancerRegistry loadBalancerRegistry;
synchronized (LoadBalancerRegistry.class) {
try {
if (instance == null) {
List<LoadBalancerProvider> loadAll = ServiceProviders.loadAll(LoadBalancerProvider.class, HARDCODED_CLASSES, LoadBalancerProvider.class.getClassLoader(), new LoadBalancerPriorityAccessor());
instance = new LoadBalancerRegistry();
for (LoadBalancerProvider loadBalancerProvider : loadAll) {
logger.fine("Service loader found " + loadBalancerProvider);
instance.addProvider(loadBalancerProvider);
}
instance.refreshProviderMap();
}
loadBalancerRegistry = instance;
} catch (Throwable th) {
throw th;
}
}
return loadBalancerRegistry;
}
static List<Class<?>> getHardCodedClasses() {
ArrayList arrayList = new ArrayList();
try {
String str = PickFirstLoadBalancerProvider.GRPC_EXPERIMENTAL_XDS_DUALSTACK_ENDPOINTS;
arrayList.add(PickFirstLoadBalancerProvider.class);
} catch (ClassNotFoundException e) {
logger.log(Level.WARNING, "Unable to find pick-first LoadBalancer", (Throwable) e);
}
try {
int i = SecretRoundRobinLoadBalancerProvider.Provider.a;
arrayList.add(SecretRoundRobinLoadBalancerProvider.Provider.class);
} catch (ClassNotFoundException e2) {
logger.log(Level.FINE, "Unable to find round-robin LoadBalancer", (Throwable) e2);
}
return Collections.unmodifiableList(arrayList);
}
private synchronized void refreshProviderMap() {
try {
this.effectiveProviders.clear();
Iterator<LoadBalancerProvider> it = this.allProviders.iterator();
while (it.hasNext()) {
LoadBalancerProvider next = it.next();
String policyName = next.getPolicyName();
LoadBalancerProvider loadBalancerProvider = this.effectiveProviders.get(policyName);
if (loadBalancerProvider != null && loadBalancerProvider.getPriority() >= next.getPriority()) {
}
this.effectiveProviders.put(policyName, next);
}
} catch (Throwable th) {
throw th;
}
}
public synchronized void deregister(LoadBalancerProvider loadBalancerProvider) {
this.allProviders.remove(loadBalancerProvider);
refreshProviderMap();
}
public synchronized LoadBalancerProvider getProvider(String str) {
return this.effectiveProviders.get(l.o(str, "policy"));
}
synchronized Map<String, LoadBalancerProvider> providers() {
return new LinkedHashMap(this.effectiveProviders);
}
public synchronized void register(LoadBalancerProvider loadBalancerProvider) {
addProvider(loadBalancerProvider);
refreshProviderMap();
}
}