Skip to content

Commit

Permalink
core: Move ConfigOrError up level up. (#5578)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
zhangkun83 committed Apr 10, 2019
1 parent ba335f5 commit 0244418
Show file tree
Hide file tree
Showing 13 changed files with 98 additions and 99 deletions.
2 changes: 1 addition & 1 deletion core/src/main/java/io/grpc/LoadBalancerProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand Down
174 changes: 86 additions & 88 deletions core/src/main/java/io/grpc/NameResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

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;
Expand Down Expand Up @@ -355,93 +354,6 @@ public SynchronizationContext getSynchronizationContext() {
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();
}
}
}
}

/**
Expand Down Expand Up @@ -598,4 +510,90 @@ public ResolutionResult build() {
}
}
}

/**
* 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();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
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;
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/java/io/grpc/internal/DnsNameResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import io.grpc.LoadBalancer;
import io.grpc.LoadBalancerProvider;
import io.grpc.NameResolver.Helper.ConfigOrError;
import io.grpc.NameResolver.ConfigOrError;
import java.util.Map;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import io.grpc.LoadBalancer;
import io.grpc.LoadBalancerProvider;
import io.grpc.NameResolver.Helper.ConfigOrError;
import io.grpc.NameResolver.ConfigOrError;
import java.util.Map;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
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;

Expand Down
2 changes: 1 addition & 1 deletion xds/src/main/java/io/grpc/xds/XdsLoadBalancer.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
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;
Expand Down
2 changes: 1 addition & 1 deletion xds/src/main/java/io/grpc/xds/XdsLoadBalancerProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
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;
Expand Down

0 comments on commit 0244418

Please sign in to comment.