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;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
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.Objects;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
|
@ -355,93 +354,6 @@ public abstract class NameResolver {
|
|||
public ConfigOrError parseServiceConfig(Map<String, ?> rawServiceConfig) {
|
||||
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.LoadBalancerProvider;
|
||||
import io.grpc.LoadBalancerRegistry;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
||||
import java.util.ArrayList;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import com.google.common.base.VerifyException;
|
|||
import io.grpc.Attributes;
|
||||
import io.grpc.EquivalentAddressGroup;
|
||||
import io.grpc.NameResolver;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.ProxiedSocketAddress;
|
||||
import io.grpc.ProxyDetector;
|
||||
import io.grpc.Status;
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ import io.grpc.ManagedChannel;
|
|||
import io.grpc.Metadata;
|
||||
import io.grpc.MethodDescriptor;
|
||||
import io.grpc.NameResolver;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.NameResolver.ResolutionResult;
|
||||
import io.grpc.ProxyDetector;
|
||||
import io.grpc.Status;
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ package io.grpc.internal;
|
|||
|
||||
import io.grpc.LoadBalancer;
|
||||
import io.grpc.LoadBalancerProvider;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ package io.grpc.util;
|
|||
|
||||
import io.grpc.LoadBalancer;
|
||||
import io.grpc.LoadBalancerProvider;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ import com.google.common.testing.FakeTicker;
|
|||
import io.grpc.EquivalentAddressGroup;
|
||||
import io.grpc.HttpConnectProxiedSocketAddress;
|
||||
import io.grpc.NameResolver;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.NameResolver.ResolutionResult;
|
||||
import io.grpc.ProxyDetector;
|
||||
import io.grpc.Status;
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ import io.grpc.Metadata;
|
|||
import io.grpc.MethodDescriptor;
|
||||
import io.grpc.MethodDescriptor.MethodType;
|
||||
import io.grpc.NameResolver;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.NameResolver.ResolutionResult;
|
||||
import io.grpc.ProxiedSocketAddress;
|
||||
import io.grpc.ProxyDetector;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import com.google.common.base.Stopwatch;
|
|||
import io.grpc.Internal;
|
||||
import io.grpc.LoadBalancer;
|
||||
import io.grpc.LoadBalancerProvider;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.grpclb.GrpclbState.Mode;
|
||||
import io.grpc.internal.ExponentialBackoffPolicy;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import io.grpc.Internal;
|
|||
import io.grpc.LoadBalancer;
|
||||
import io.grpc.LoadBalancer.Helper;
|
||||
import io.grpc.LoadBalancerProvider;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.services.HealthCheckingLoadBalancerUtil;
|
||||
import java.util.Map;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ import io.grpc.ConnectivityStateInfo;
|
|||
import io.grpc.EquivalentAddressGroup;
|
||||
import io.grpc.LoadBalancer;
|
||||
import io.grpc.LoadBalancerRegistry;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.SynchronizationContext.ScheduledHandle;
|
||||
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import io.grpc.LoadBalancer;
|
|||
import io.grpc.LoadBalancer.Helper;
|
||||
import io.grpc.LoadBalancerProvider;
|
||||
import io.grpc.LoadBalancerRegistry;
|
||||
import io.grpc.NameResolver.Helper.ConfigOrError;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.internal.ServiceConfigUtil;
|
||||
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
||||
|
|
|
|||
Loading…
Reference in New Issue