core: use withOptions instead of withAffinity (#2791)

Fixes #2738
Closes #1766
This commit is contained in:
Łukasz Strzałkowski 2017-03-14 12:47:10 -07:00 committed by Kun Zhang
parent 884b65a891
commit da93a64ec1
4 changed files with 11 additions and 19 deletions

View File

@ -152,7 +152,10 @@ public final class CallOptions {
/**
* 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")
public CallOptions withAffinity(Attributes affinity) {
CallOptions newOptions = new CallOptions(this);
@ -183,7 +186,10 @@ public final class CallOptions {
/**
* Returns the attributes for affinity-based routing.
*
* @deprecated use {@link #getOption(Key)}.
*/
@Deprecated
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1766")
public Attributes getAffinity() {
return affinity;

View File

@ -187,6 +187,7 @@ public abstract class LoadBalancer {
* @param args the pick arguments
*/
// TODO(lukaszx0) make it abstract once deprecated overload will be removed.
@SuppressWarnings("deprecation")
public PickResult pickSubchannel(PickSubchannelArgs args) {
return pickSubchannel(args.getCallOptions().getAffinity(), args.getHeaders());
}

View File

@ -42,7 +42,6 @@ import static java.util.concurrent.TimeUnit.SECONDS;
import static org.mockito.Mockito.mock;
import com.google.common.base.Objects;
import io.grpc.Attributes.Key;
import io.grpc.internal.SerializingExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
@ -57,15 +56,12 @@ public class CallOptionsTest {
private String sampleCompressor = "compressor";
private Deadline.Ticker ticker = new FakeTicker();
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 CallOptions.Key<String> option1 = CallOptions.Key.of("option1", "default");
private CallOptions.Key<String> option2 = CallOptions.Key.of("option2", "default");
private CallOptions allSet = CallOptions.DEFAULT
.withAuthority(sampleAuthority)
.withDeadline(sampleDeadline)
.withAffinity(sampleAffinity)
.withCallCredentials(sampleCreds)
.withCompression(sampleCompressor)
.withWaitForReady()
@ -77,7 +73,6 @@ public class CallOptionsTest {
public void defaultsAreAllNull() {
assertThat(CallOptions.DEFAULT.getDeadline()).isNull();
assertThat(CallOptions.DEFAULT.getAuthority()).isNull();
assertThat(CallOptions.DEFAULT.getAffinity()).isEqualTo(Attributes.EMPTY);
assertThat(CallOptions.DEFAULT.getExecutor()).isNull();
assertThat(CallOptions.DEFAULT.getCredentials()).isNull();
assertThat(CallOptions.DEFAULT.getCompressor()).isNull();
@ -95,7 +90,6 @@ public class CallOptionsTest {
public void allWiths() {
assertThat(allSet.getAuthority()).isSameAs(sampleAuthority);
assertThat(allSet.getDeadline()).isSameAs(sampleDeadline);
assertThat(allSet.getAffinity()).isSameAs(sampleAffinity);
assertThat(allSet.getCredentials()).isSameAs(sampleCreds);
assertThat(allSet.getCompressor()).isSameAs(sampleCompressor);
assertThat(allSet.getExecutor()).isSameAs(directExecutor());
@ -112,10 +106,6 @@ public class CallOptionsTest {
equal(allSet,
allSet.withDeadline(Deadline.after(314, NANOSECONDS)).withDeadline(sampleDeadline)))
.isTrue();
assertThat(
equal(allSet,
allSet.withAffinity(Attributes.EMPTY).withAffinity(sampleAffinity)))
.isTrue();
assertThat(
equal(allSet,
allSet.withCallCredentials(mock(CallCredentials.class))
@ -168,7 +158,6 @@ public class CallOptionsTest {
assertThat(actual).contains("deadline=null");
assertThat(actual).contains("authority=authority");
assertThat(actual).contains("callCredentials=null");
assertThat(actual).contains("affinity={sample=blah}");
assertThat(actual).contains("executor=class io.grpc.internal.SerializingExecutor");
assertThat(actual).contains("compressorName=compressor");
assertThat(actual).contains("customOptions=[[option1, value1], [option2, value2]]");
@ -217,7 +206,6 @@ public class CallOptionsTest {
private static boolean equal(CallOptions o1, CallOptions o2) {
return Objects.equal(o1.getDeadline(), o2.getDeadline())
&& Objects.equal(o1.getAuthority(), o2.getAuthority())
&& Objects.equal(o1.getAffinity(), o2.getAffinity())
&& Objects.equal(o1.getCredentials(), o2.getCredentials());
}

View File

@ -48,7 +48,6 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import io.grpc.Attributes;
import io.grpc.CallOptions;
import io.grpc.IntegerMarshaller;
import io.grpc.LoadBalancer.PickResult;
@ -93,7 +92,7 @@ public class DelayedClientTransportTest {
@Captor private ArgumentCaptor<Status> statusCaptor;
@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 =
MethodDescriptor.<String, Integer>newBuilder()
@ -304,11 +303,9 @@ public class DelayedClientTransportTest {
}
@Test public void reprocessSemantics() {
Attributes affinity1 = Attributes.newBuilder().set(SHARD_ID, 1).build();
Attributes affinity2 = Attributes.newBuilder().set(SHARD_ID, 2).build();
CallOptions failFastCallOptions = CallOptions.DEFAULT.withAffinity(affinity1);
CallOptions waitForReadyCallOptions =
CallOptions.DEFAULT.withWaitForReady().withAffinity(affinity2);
CallOptions failFastCallOptions = CallOptions.DEFAULT.withOption(SHARD_ID, 1);
CallOptions waitForReadyCallOptions = CallOptions.DEFAULT.withOption(SHARD_ID, 2)
.withWaitForReady();
SubchannelImpl subchannel1 = mock(SubchannelImpl.class);
SubchannelImpl subchannel2 = mock(SubchannelImpl.class);