mirror of https://github.com/grpc/grpc-java.git
core: Move ConfigOrError up level up. (#5578)
This class is used in other places than just NameResolver.Helper. It should not be an inner class of Helper. Strictly speaking this is an API-breaking change. However, this is part of the service config error handling API that hasn't been done yet. Nobody has a legitimate reason to use it.
This commit is contained in:
parent
ba335f5e68
commit
0244418d2d
|
|
@ -17,7 +17,7 @@
|
||||||
package io.grpc;
|
package io.grpc;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
@ -355,93 +354,6 @@ public abstract class NameResolver {
|
||||||
public ConfigOrError parseServiceConfig(Map<String, ?> rawServiceConfig) {
|
public ConfigOrError parseServiceConfig(Map<String, ?> rawServiceConfig) {
|
||||||
throw new UnsupportedOperationException("should have been implemented");
|
throw new UnsupportedOperationException("should have been implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents either a successfully parsed service config, containing all necessary parts to be
|
|
||||||
* later applied by the channel, or a Status containing the error encountered while parsing.
|
|
||||||
*
|
|
||||||
* @since 1.20.0
|
|
||||||
*/
|
|
||||||
public static final class ConfigOrError {
|
|
||||||
|
|
||||||
private static final class UnknownConfig {
|
|
||||||
|
|
||||||
UnknownConfig() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "service config is unused";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A sentinel value indicating that service config is not supported. This can be used to
|
|
||||||
* indicate that parsing of the service config is neither right nor wrong, but doesn't have
|
|
||||||
* any meaning.
|
|
||||||
*/
|
|
||||||
public static final ConfigOrError UNKNOWN_CONFIG =
|
|
||||||
ConfigOrError.fromConfig(new UnknownConfig());
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a {@link ConfigOrError} for the successfully parsed config.
|
|
||||||
*/
|
|
||||||
public static ConfigOrError fromConfig(Object config) {
|
|
||||||
return new ConfigOrError(config);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a {@link ConfigOrError} for the failure to parse the config.
|
|
||||||
*
|
|
||||||
* @param status a non-OK status
|
|
||||||
*/
|
|
||||||
public static ConfigOrError fromError(Status status) {
|
|
||||||
return new ConfigOrError(status);
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Status status;
|
|
||||||
private final Object config;
|
|
||||||
|
|
||||||
private ConfigOrError(Object config) {
|
|
||||||
this.config = checkNotNull(config, "config");
|
|
||||||
this.status = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ConfigOrError(Status status) {
|
|
||||||
this.config = null;
|
|
||||||
this.status = checkNotNull(status, "status");
|
|
||||||
checkArgument(!status.isOk(), "cannot use OK status: %s", status);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns config if exists, otherwise null.
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
public Object getConfig() {
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns error status if exists, otherwise null.
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
public Status getError() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
if (config != null) {
|
|
||||||
return MoreObjects.toStringHelper(this)
|
|
||||||
.add("config", config)
|
|
||||||
.toString();
|
|
||||||
} else {
|
|
||||||
assert status != null;
|
|
||||||
return MoreObjects.toStringHelper(this)
|
|
||||||
.add("error", status)
|
|
||||||
.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -598,4 +510,90 @@ public abstract class NameResolver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the attributes associated with the servers resolved by name resolution. If there are
|
||||||
|
* no attributes, {@link Attributes#EMPTY} will be returned.
|
||||||
|
*
|
||||||
|
* @since 1.21.0
|
||||||
|
*/
|
||||||
|
public static final class ConfigOrError {
|
||||||
|
private static final class UnknownConfig {
|
||||||
|
|
||||||
|
UnknownConfig() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "service config is unused";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A sentinel value indicating that service config is not supported. This can be used to
|
||||||
|
* indicate that parsing of the service config is neither right nor wrong, but doesn't have
|
||||||
|
* any meaning.
|
||||||
|
*/
|
||||||
|
public static final ConfigOrError UNKNOWN_CONFIG =
|
||||||
|
ConfigOrError.fromConfig(new UnknownConfig());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a {@link ConfigOrError} for the successfully parsed config.
|
||||||
|
*/
|
||||||
|
public static ConfigOrError fromConfig(Object config) {
|
||||||
|
return new ConfigOrError(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a {@link ConfigOrError} for the failure to parse the config.
|
||||||
|
*
|
||||||
|
* @param status a non-OK status
|
||||||
|
*/
|
||||||
|
public static ConfigOrError fromError(Status status) {
|
||||||
|
return new ConfigOrError(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Status status;
|
||||||
|
private final Object config;
|
||||||
|
|
||||||
|
private ConfigOrError(Object config) {
|
||||||
|
this.config = checkNotNull(config, "config");
|
||||||
|
this.status = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ConfigOrError(Status status) {
|
||||||
|
this.config = null;
|
||||||
|
this.status = checkNotNull(status, "status");
|
||||||
|
checkArgument(!status.isOk(), "cannot use OK status: %s", status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns config if exists, otherwise null.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public Object getConfig() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns error status if exists, otherwise null.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public Status getError() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
if (config != null) {
|
||||||
|
return MoreObjects.toStringHelper(this)
|
||||||
|
.add("config", config)
|
||||||
|
.toString();
|
||||||
|
} else {
|
||||||
|
assert status != null;
|
||||||
|
return MoreObjects.toStringHelper(this)
|
||||||
|
.add("error", status)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ import io.grpc.LoadBalancer.PickSubchannelArgs;
|
||||||
import io.grpc.LoadBalancer.SubchannelPicker;
|
import io.grpc.LoadBalancer.SubchannelPicker;
|
||||||
import io.grpc.LoadBalancerProvider;
|
import io.grpc.LoadBalancerProvider;
|
||||||
import io.grpc.LoadBalancerRegistry;
|
import io.grpc.LoadBalancerRegistry;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ import com.google.common.base.VerifyException;
|
||||||
import io.grpc.Attributes;
|
import io.grpc.Attributes;
|
||||||
import io.grpc.EquivalentAddressGroup;
|
import io.grpc.EquivalentAddressGroup;
|
||||||
import io.grpc.NameResolver;
|
import io.grpc.NameResolver;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.ProxiedSocketAddress;
|
import io.grpc.ProxiedSocketAddress;
|
||||||
import io.grpc.ProxyDetector;
|
import io.grpc.ProxyDetector;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ import io.grpc.ManagedChannel;
|
||||||
import io.grpc.Metadata;
|
import io.grpc.Metadata;
|
||||||
import io.grpc.MethodDescriptor;
|
import io.grpc.MethodDescriptor;
|
||||||
import io.grpc.NameResolver;
|
import io.grpc.NameResolver;
|
||||||
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.NameResolver.ResolutionResult;
|
import io.grpc.NameResolver.ResolutionResult;
|
||||||
import io.grpc.ProxyDetector;
|
import io.grpc.ProxyDetector;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ package io.grpc.internal;
|
||||||
|
|
||||||
import io.grpc.LoadBalancer;
|
import io.grpc.LoadBalancer;
|
||||||
import io.grpc.LoadBalancerProvider;
|
import io.grpc.LoadBalancerProvider;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ package io.grpc.util;
|
||||||
|
|
||||||
import io.grpc.LoadBalancer;
|
import io.grpc.LoadBalancer;
|
||||||
import io.grpc.LoadBalancerProvider;
|
import io.grpc.LoadBalancerProvider;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ import com.google.common.testing.FakeTicker;
|
||||||
import io.grpc.EquivalentAddressGroup;
|
import io.grpc.EquivalentAddressGroup;
|
||||||
import io.grpc.HttpConnectProxiedSocketAddress;
|
import io.grpc.HttpConnectProxiedSocketAddress;
|
||||||
import io.grpc.NameResolver;
|
import io.grpc.NameResolver;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.NameResolver.ResolutionResult;
|
import io.grpc.NameResolver.ResolutionResult;
|
||||||
import io.grpc.ProxyDetector;
|
import io.grpc.ProxyDetector;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ import io.grpc.Metadata;
|
||||||
import io.grpc.MethodDescriptor;
|
import io.grpc.MethodDescriptor;
|
||||||
import io.grpc.MethodDescriptor.MethodType;
|
import io.grpc.MethodDescriptor.MethodType;
|
||||||
import io.grpc.NameResolver;
|
import io.grpc.NameResolver;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.NameResolver.ResolutionResult;
|
import io.grpc.NameResolver.ResolutionResult;
|
||||||
import io.grpc.ProxiedSocketAddress;
|
import io.grpc.ProxiedSocketAddress;
|
||||||
import io.grpc.ProxyDetector;
|
import io.grpc.ProxyDetector;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import com.google.common.base.Stopwatch;
|
||||||
import io.grpc.Internal;
|
import io.grpc.Internal;
|
||||||
import io.grpc.LoadBalancer;
|
import io.grpc.LoadBalancer;
|
||||||
import io.grpc.LoadBalancerProvider;
|
import io.grpc.LoadBalancerProvider;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
import io.grpc.grpclb.GrpclbState.Mode;
|
import io.grpc.grpclb.GrpclbState.Mode;
|
||||||
import io.grpc.internal.ExponentialBackoffPolicy;
|
import io.grpc.internal.ExponentialBackoffPolicy;
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import io.grpc.Internal;
|
||||||
import io.grpc.LoadBalancer;
|
import io.grpc.LoadBalancer;
|
||||||
import io.grpc.LoadBalancer.Helper;
|
import io.grpc.LoadBalancer.Helper;
|
||||||
import io.grpc.LoadBalancerProvider;
|
import io.grpc.LoadBalancerProvider;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.services.HealthCheckingLoadBalancerUtil;
|
import io.grpc.services.HealthCheckingLoadBalancerUtil;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ import io.grpc.ConnectivityStateInfo;
|
||||||
import io.grpc.EquivalentAddressGroup;
|
import io.grpc.EquivalentAddressGroup;
|
||||||
import io.grpc.LoadBalancer;
|
import io.grpc.LoadBalancer;
|
||||||
import io.grpc.LoadBalancerRegistry;
|
import io.grpc.LoadBalancerRegistry;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
import io.grpc.SynchronizationContext.ScheduledHandle;
|
import io.grpc.SynchronizationContext.ScheduledHandle;
|
||||||
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ import io.grpc.LoadBalancer;
|
||||||
import io.grpc.LoadBalancer.Helper;
|
import io.grpc.LoadBalancer.Helper;
|
||||||
import io.grpc.LoadBalancerProvider;
|
import io.grpc.LoadBalancerProvider;
|
||||||
import io.grpc.LoadBalancerRegistry;
|
import io.grpc.LoadBalancerRegistry;
|
||||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
import io.grpc.internal.ServiceConfigUtil;
|
import io.grpc.internal.ServiceConfigUtil;
|
||||||
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue