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:
Kun Zhang 2019-04-10 16:28:23 -07:00 committed by GitHub
parent ba335f5e68
commit 0244418d2d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 98 additions and 99 deletions

View File

@ -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;
/**

View File

@ -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();
}
}
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
/**

View File

@ -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;
/**

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;