Search in sources :

Example 16 with ConfigOrError

use of io.grpc.NameResolver.ConfigOrError in project grpc-java by grpc.

the class ServiceConfigUtil method selectLbPolicyFromList.

/**
 * Parses and selects a load balancing policy from a non-empty list of raw configs. If selection
 * is successful, the returned ConfigOrError object will include a {@link
 * ServiceConfigUtil.PolicySelection} as its config value.
 */
public static ConfigOrError selectLbPolicyFromList(List<LbConfig> lbConfigs, LoadBalancerRegistry lbRegistry) {
    List<String> policiesTried = new ArrayList<>();
    for (LbConfig lbConfig : lbConfigs) {
        String policy = lbConfig.getPolicyName();
        LoadBalancerProvider provider = lbRegistry.getProvider(policy);
        if (provider == null) {
            policiesTried.add(policy);
        } else {
            if (!policiesTried.isEmpty()) {
                Logger.getLogger(ServiceConfigUtil.class.getName()).log(Level.FINEST, "{0} specified by Service Config are not available", policiesTried);
            }
            ConfigOrError parsedLbPolicyConfig = provider.parseLoadBalancingPolicyConfig(lbConfig.getRawConfigValue());
            if (parsedLbPolicyConfig.getError() != null) {
                return parsedLbPolicyConfig;
            }
            return ConfigOrError.fromConfig(new PolicySelection(provider, parsedLbPolicyConfig.getConfig()));
        }
    }
    return ConfigOrError.fromError(Status.UNKNOWN.withDescription("None of " + policiesTried + " specified by Service Config are available."));
}
Also used : LoadBalancerProvider(io.grpc.LoadBalancerProvider) ArrayList(java.util.ArrayList) ConfigOrError(io.grpc.NameResolver.ConfigOrError)

Example 17 with ConfigOrError

use of io.grpc.NameResolver.ConfigOrError in project grpc-java by grpc.

the class ScParser method parseServiceConfig.

@Override
public ConfigOrError parseServiceConfig(Map<String, ?> rawServiceConfig) {
    try {
        Object loadBalancingPolicySelection;
        ConfigOrError choiceFromLoadBalancer = autoLoadBalancerFactory.parseLoadBalancerPolicy(rawServiceConfig);
        if (choiceFromLoadBalancer == null) {
            loadBalancingPolicySelection = null;
        } else if (choiceFromLoadBalancer.getError() != null) {
            return ConfigOrError.fromError(choiceFromLoadBalancer.getError());
        } else {
            loadBalancingPolicySelection = choiceFromLoadBalancer.getConfig();
        }
        return ConfigOrError.fromConfig(ManagedChannelServiceConfig.fromServiceConfig(rawServiceConfig, retryEnabled, maxRetryAttemptsLimit, maxHedgedAttemptsLimit, loadBalancingPolicySelection));
    } catch (RuntimeException e) {
        return ConfigOrError.fromError(Status.UNKNOWN.withDescription("failed to parse service config").withCause(e));
    }
}
Also used : ConfigOrError(io.grpc.NameResolver.ConfigOrError)

Example 18 with ConfigOrError

use of io.grpc.NameResolver.ConfigOrError in project grpc-java by grpc.

the class GrpclbLoadBalancerProviderTest method retrieveModeFromLbConfig_pickFirst.

@Test
public void retrieveModeFromLbConfig_pickFirst() throws Exception {
    String lbConfig = "{\"childPolicy\" : [{\"pick_first\" : {}}, {\"round_robin\" : {}}]}";
    ConfigOrError configOrError = provider.parseLoadBalancingPolicyConfig(parseJsonObject(lbConfig));
    assertThat(configOrError.getConfig()).isNotNull();
    GrpclbConfig config = (GrpclbConfig) configOrError.getConfig();
    assertThat(config.getMode()).isEqualTo(Mode.PICK_FIRST);
    assertThat(config.getServiceName()).isNull();
}
Also used : ConfigOrError(io.grpc.NameResolver.ConfigOrError) Test(org.junit.Test)

Example 19 with ConfigOrError

use of io.grpc.NameResolver.ConfigOrError in project grpc-java by grpc.

the class GrpclbLoadBalancerProviderTest method retrieveModeFromLbConfig_unsupportedChildPolicy.

@Test
public void retrieveModeFromLbConfig_unsupportedChildPolicy() throws Exception {
    String lbConfig = "{\"childPolicy\" : [ {\"nonono\" : {}} ]}";
    ConfigOrError configOrError = provider.parseLoadBalancingPolicyConfig(parseJsonObject(lbConfig));
    assertThat(configOrError.getError()).isNotNull();
    assertThat(configOrError.getError().getDescription()).contains("None of [nonono] specified child policies are available.");
}
Also used : ConfigOrError(io.grpc.NameResolver.ConfigOrError) Test(org.junit.Test)

Example 20 with ConfigOrError

use of io.grpc.NameResolver.ConfigOrError in project grpc-java by grpc.

the class GrpclbLoadBalancerProviderTest method retrieveModeFromLbConfig_emptyConfigUseRoundRobin.

@Test
public void retrieveModeFromLbConfig_emptyConfigUseRoundRobin() throws Exception {
    String lbConfig = "{}";
    ConfigOrError configOrError = provider.parseLoadBalancingPolicyConfig(parseJsonObject(lbConfig));
    assertThat(configOrError.getConfig()).isNotNull();
    GrpclbConfig config = (GrpclbConfig) configOrError.getConfig();
    assertThat(config.getMode()).isEqualTo(Mode.ROUND_ROBIN);
    assertThat(config.getServiceName()).isNull();
}
Also used : ConfigOrError(io.grpc.NameResolver.ConfigOrError) Test(org.junit.Test)

Aggregations

ConfigOrError (io.grpc.NameResolver.ConfigOrError)57 Test (org.junit.Test)52 PolicySelection (io.grpc.internal.ServiceConfigUtil.PolicySelection)10 EquivalentAddressGroup (io.grpc.EquivalentAddressGroup)9 Helper (io.grpc.LoadBalancer.Helper)9 Status (io.grpc.Status)9 AutoConfiguredLoadBalancer (io.grpc.internal.AutoConfiguredLoadBalancerFactory.AutoConfiguredLoadBalancer)7 ForwardingLoadBalancerHelper (io.grpc.util.ForwardingLoadBalancerHelper)7 Map (java.util.Map)7 InetSocketAddress (java.net.InetSocketAddress)6 SocketAddress (java.net.SocketAddress)4 Random (java.util.Random)4 CreateSubchannelArgs (io.grpc.LoadBalancer.CreateSubchannelArgs)3 ResolvedAddresses (io.grpc.LoadBalancer.ResolvedAddresses)3 LoadBalancerProvider (io.grpc.LoadBalancerProvider)3 LoadBalancerRegistry (io.grpc.LoadBalancerRegistry)3 LeastRequestConfig (io.grpc.xds.LeastRequestLoadBalancer.LeastRequestConfig)3 LbConfig (io.grpc.internal.ServiceConfigUtil.LbConfig)2 RingHashConfig (io.grpc.xds.RingHashLoadBalancer.RingHashConfig)2 LinkedHashMap (java.util.LinkedHashMap)2