in src/main/java/com/aliyuncs/kms/secretsmanager/client/service/DefaultSecretManagerClientBuilder.java [460:480]
private List<RegionInfo> sortRegionInfos(List<RegionInfo> regionInfos) {
List<RegionInfoExtend> regionInfoExtends = new ArrayList<>();
for (RegionInfo regionInfo : regionInfos) {
double pingDelay;
if (!StringUtils.isEmpty(regionInfo.getEndpoint())) {
pingDelay = PingUtils.ping(regionInfo.getEndpoint());
} else if (regionInfo.getVpc()) {
pingDelay = PingUtils.ping(KmsEndpointUtils.getVPCEndpoint(regionInfo.getRegionId()));
} else {
pingDelay = PingUtils.ping(KmsEndpointUtils.getEndPoint(regionInfo.getRegionId()));
}
RegionInfoExtend regionInfoExtend = new RegionInfoExtend(regionInfo);
regionInfoExtend.setReachable(pingDelay >= 0);
regionInfoExtend.setEscaped(pingDelay >= 0 ? pingDelay : Double.MAX_VALUE);
regionInfoExtends.add(regionInfoExtend);
}
return regionInfoExtends.stream().sorted(Comparator.comparing((RegionInfoExtend regionInfoExtend) -> !regionInfoExtend.getReachable())
.thenComparing(RegionInfoExtend::getEscaped))
.map(regionInfoExtend -> new RegionInfo(regionInfoExtend.getRegionId(), regionInfoExtend.getVpc(), regionInfoExtend.getEndpoint(), regionInfoExtend.getKmsType()))
.collect(Collectors.toList());
}