mirror of https://github.com/grpc/grpc-java.git
core: use withOptions instead of withAffinity (#2791)
Fixes #2738 Closes #1766
This commit is contained in:
parent
884b65a891
commit
da93a64ec1
|
|
@ -152,7 +152,10 @@ public final class CallOptions {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a new {@code CallOptions} with attributes for affinity-based routing.
|
* Returns a new {@code CallOptions} with attributes for affinity-based routing.
|
||||||
|
*
|
||||||
|
* @deprecated use {@link #withOption(Key, Object)}.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1766")
|
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1766")
|
||||||
public CallOptions withAffinity(Attributes affinity) {
|
public CallOptions withAffinity(Attributes affinity) {
|
||||||
CallOptions newOptions = new CallOptions(this);
|
CallOptions newOptions = new CallOptions(this);
|
||||||
|
|
@ -183,7 +186,10 @@ public final class CallOptions {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the attributes for affinity-based routing.
|
* Returns the attributes for affinity-based routing.
|
||||||
|
*
|
||||||
|
* @deprecated use {@link #getOption(Key)}.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1766")
|
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1766")
|
||||||
public Attributes getAffinity() {
|
public Attributes getAffinity() {
|
||||||
return affinity;
|
return affinity;
|
||||||
|
|
|
||||||
|
|
@ -187,6 +187,7 @@ public abstract class LoadBalancer {
|
||||||
* @param args the pick arguments
|
* @param args the pick arguments
|
||||||
*/
|
*/
|
||||||
// TODO(lukaszx0) make it abstract once deprecated overload will be removed.
|
// TODO(lukaszx0) make it abstract once deprecated overload will be removed.
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
||||||
return pickSubchannel(args.getCallOptions().getAffinity(), args.getHeaders());
|
return pickSubchannel(args.getCallOptions().getAffinity(), args.getHeaders());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,6 @@ import static java.util.concurrent.TimeUnit.SECONDS;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import io.grpc.Attributes.Key;
|
|
||||||
import io.grpc.internal.SerializingExecutor;
|
import io.grpc.internal.SerializingExecutor;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
@ -57,15 +56,12 @@ public class CallOptionsTest {
|
||||||
private String sampleCompressor = "compressor";
|
private String sampleCompressor = "compressor";
|
||||||
private Deadline.Ticker ticker = new FakeTicker();
|
private Deadline.Ticker ticker = new FakeTicker();
|
||||||
private Deadline sampleDeadline = Deadline.after(1, NANOSECONDS, ticker);
|
private Deadline sampleDeadline = Deadline.after(1, NANOSECONDS, ticker);
|
||||||
private Key<String> sampleKey = Attributes.Key.of("sample");
|
|
||||||
private Attributes sampleAffinity = Attributes.newBuilder().set(sampleKey, "blah").build();
|
|
||||||
private CallCredentials sampleCreds = mock(CallCredentials.class);
|
private CallCredentials sampleCreds = mock(CallCredentials.class);
|
||||||
private CallOptions.Key<String> option1 = CallOptions.Key.of("option1", "default");
|
private CallOptions.Key<String> option1 = CallOptions.Key.of("option1", "default");
|
||||||
private CallOptions.Key<String> option2 = CallOptions.Key.of("option2", "default");
|
private CallOptions.Key<String> option2 = CallOptions.Key.of("option2", "default");
|
||||||
private CallOptions allSet = CallOptions.DEFAULT
|
private CallOptions allSet = CallOptions.DEFAULT
|
||||||
.withAuthority(sampleAuthority)
|
.withAuthority(sampleAuthority)
|
||||||
.withDeadline(sampleDeadline)
|
.withDeadline(sampleDeadline)
|
||||||
.withAffinity(sampleAffinity)
|
|
||||||
.withCallCredentials(sampleCreds)
|
.withCallCredentials(sampleCreds)
|
||||||
.withCompression(sampleCompressor)
|
.withCompression(sampleCompressor)
|
||||||
.withWaitForReady()
|
.withWaitForReady()
|
||||||
|
|
@ -77,7 +73,6 @@ public class CallOptionsTest {
|
||||||
public void defaultsAreAllNull() {
|
public void defaultsAreAllNull() {
|
||||||
assertThat(CallOptions.DEFAULT.getDeadline()).isNull();
|
assertThat(CallOptions.DEFAULT.getDeadline()).isNull();
|
||||||
assertThat(CallOptions.DEFAULT.getAuthority()).isNull();
|
assertThat(CallOptions.DEFAULT.getAuthority()).isNull();
|
||||||
assertThat(CallOptions.DEFAULT.getAffinity()).isEqualTo(Attributes.EMPTY);
|
|
||||||
assertThat(CallOptions.DEFAULT.getExecutor()).isNull();
|
assertThat(CallOptions.DEFAULT.getExecutor()).isNull();
|
||||||
assertThat(CallOptions.DEFAULT.getCredentials()).isNull();
|
assertThat(CallOptions.DEFAULT.getCredentials()).isNull();
|
||||||
assertThat(CallOptions.DEFAULT.getCompressor()).isNull();
|
assertThat(CallOptions.DEFAULT.getCompressor()).isNull();
|
||||||
|
|
@ -95,7 +90,6 @@ public class CallOptionsTest {
|
||||||
public void allWiths() {
|
public void allWiths() {
|
||||||
assertThat(allSet.getAuthority()).isSameAs(sampleAuthority);
|
assertThat(allSet.getAuthority()).isSameAs(sampleAuthority);
|
||||||
assertThat(allSet.getDeadline()).isSameAs(sampleDeadline);
|
assertThat(allSet.getDeadline()).isSameAs(sampleDeadline);
|
||||||
assertThat(allSet.getAffinity()).isSameAs(sampleAffinity);
|
|
||||||
assertThat(allSet.getCredentials()).isSameAs(sampleCreds);
|
assertThat(allSet.getCredentials()).isSameAs(sampleCreds);
|
||||||
assertThat(allSet.getCompressor()).isSameAs(sampleCompressor);
|
assertThat(allSet.getCompressor()).isSameAs(sampleCompressor);
|
||||||
assertThat(allSet.getExecutor()).isSameAs(directExecutor());
|
assertThat(allSet.getExecutor()).isSameAs(directExecutor());
|
||||||
|
|
@ -112,10 +106,6 @@ public class CallOptionsTest {
|
||||||
equal(allSet,
|
equal(allSet,
|
||||||
allSet.withDeadline(Deadline.after(314, NANOSECONDS)).withDeadline(sampleDeadline)))
|
allSet.withDeadline(Deadline.after(314, NANOSECONDS)).withDeadline(sampleDeadline)))
|
||||||
.isTrue();
|
.isTrue();
|
||||||
assertThat(
|
|
||||||
equal(allSet,
|
|
||||||
allSet.withAffinity(Attributes.EMPTY).withAffinity(sampleAffinity)))
|
|
||||||
.isTrue();
|
|
||||||
assertThat(
|
assertThat(
|
||||||
equal(allSet,
|
equal(allSet,
|
||||||
allSet.withCallCredentials(mock(CallCredentials.class))
|
allSet.withCallCredentials(mock(CallCredentials.class))
|
||||||
|
|
@ -168,7 +158,6 @@ public class CallOptionsTest {
|
||||||
assertThat(actual).contains("deadline=null");
|
assertThat(actual).contains("deadline=null");
|
||||||
assertThat(actual).contains("authority=authority");
|
assertThat(actual).contains("authority=authority");
|
||||||
assertThat(actual).contains("callCredentials=null");
|
assertThat(actual).contains("callCredentials=null");
|
||||||
assertThat(actual).contains("affinity={sample=blah}");
|
|
||||||
assertThat(actual).contains("executor=class io.grpc.internal.SerializingExecutor");
|
assertThat(actual).contains("executor=class io.grpc.internal.SerializingExecutor");
|
||||||
assertThat(actual).contains("compressorName=compressor");
|
assertThat(actual).contains("compressorName=compressor");
|
||||||
assertThat(actual).contains("customOptions=[[option1, value1], [option2, value2]]");
|
assertThat(actual).contains("customOptions=[[option1, value1], [option2, value2]]");
|
||||||
|
|
@ -217,7 +206,6 @@ public class CallOptionsTest {
|
||||||
private static boolean equal(CallOptions o1, CallOptions o2) {
|
private static boolean equal(CallOptions o1, CallOptions o2) {
|
||||||
return Objects.equal(o1.getDeadline(), o2.getDeadline())
|
return Objects.equal(o1.getDeadline(), o2.getDeadline())
|
||||||
&& Objects.equal(o1.getAuthority(), o2.getAuthority())
|
&& Objects.equal(o1.getAuthority(), o2.getAuthority())
|
||||||
&& Objects.equal(o1.getAffinity(), o2.getAffinity())
|
|
||||||
&& Objects.equal(o1.getCredentials(), o2.getCredentials());
|
&& Objects.equal(o1.getCredentials(), o2.getCredentials());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,6 @@ import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import io.grpc.Attributes;
|
|
||||||
import io.grpc.CallOptions;
|
import io.grpc.CallOptions;
|
||||||
import io.grpc.IntegerMarshaller;
|
import io.grpc.IntegerMarshaller;
|
||||||
import io.grpc.LoadBalancer.PickResult;
|
import io.grpc.LoadBalancer.PickResult;
|
||||||
|
|
@ -93,7 +92,7 @@ public class DelayedClientTransportTest {
|
||||||
@Captor private ArgumentCaptor<Status> statusCaptor;
|
@Captor private ArgumentCaptor<Status> statusCaptor;
|
||||||
@Captor private ArgumentCaptor<ClientStreamListener> listenerCaptor;
|
@Captor private ArgumentCaptor<ClientStreamListener> listenerCaptor;
|
||||||
|
|
||||||
private static final Attributes.Key<Integer> SHARD_ID = Attributes.Key.of("shard-id");
|
private static final CallOptions.Key<Integer> SHARD_ID = CallOptions.Key.of("shard-id", -1);
|
||||||
|
|
||||||
private final MethodDescriptor<String, Integer> method =
|
private final MethodDescriptor<String, Integer> method =
|
||||||
MethodDescriptor.<String, Integer>newBuilder()
|
MethodDescriptor.<String, Integer>newBuilder()
|
||||||
|
|
@ -304,11 +303,9 @@ public class DelayedClientTransportTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test public void reprocessSemantics() {
|
@Test public void reprocessSemantics() {
|
||||||
Attributes affinity1 = Attributes.newBuilder().set(SHARD_ID, 1).build();
|
CallOptions failFastCallOptions = CallOptions.DEFAULT.withOption(SHARD_ID, 1);
|
||||||
Attributes affinity2 = Attributes.newBuilder().set(SHARD_ID, 2).build();
|
CallOptions waitForReadyCallOptions = CallOptions.DEFAULT.withOption(SHARD_ID, 2)
|
||||||
CallOptions failFastCallOptions = CallOptions.DEFAULT.withAffinity(affinity1);
|
.withWaitForReady();
|
||||||
CallOptions waitForReadyCallOptions =
|
|
||||||
CallOptions.DEFAULT.withWaitForReady().withAffinity(affinity2);
|
|
||||||
|
|
||||||
SubchannelImpl subchannel1 = mock(SubchannelImpl.class);
|
SubchannelImpl subchannel1 = mock(SubchannelImpl.class);
|
||||||
SubchannelImpl subchannel2 = mock(SubchannelImpl.class);
|
SubchannelImpl subchannel2 = mock(SubchannelImpl.class);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue