mirror of https://github.com/grpc/grpc-java.git
api: Rename blockingExecutor to offloadExecutor
The API review for #6279 came up with a more meaningful name that better explains the intent. A setter for the old name was left in ManagedChannelBuilder to ease migration to the new name by current users.
This commit is contained in:
parent
44c4fee95b
commit
4dba65bad4
|
|
@ -71,6 +71,13 @@ public abstract class ForwardingChannelBuilder<T extends ForwardingChannelBuilde
|
||||||
return thisT();
|
return thisT();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T offloadExecutor(Executor executor) {
|
||||||
|
delegate().offloadExecutor(executor);
|
||||||
|
return thisT();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public T blockingExecutor(Executor executor) {
|
public T blockingExecutor(Executor executor) {
|
||||||
delegate().blockingExecutor(executor);
|
delegate().blockingExecutor(executor);
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ public abstract class ManagedChannelBuilder<T extends ManagedChannelBuilder<T>>
|
||||||
public abstract T executor(Executor executor);
|
public abstract T executor(Executor executor);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides a custom executor that will be used for operations that block.
|
* Provides a custom executor that will be used for operations that block or are expensive.
|
||||||
*
|
*
|
||||||
* <p>It's an optional parameter. If the user has not provided an executor when the channel is
|
* <p>It's an optional parameter. If the user has not provided an executor when the channel is
|
||||||
* built, the builder will use a static cached thread pool.
|
* built, the builder will use a static cached thread pool.
|
||||||
|
|
@ -117,10 +117,16 @@ public abstract class ManagedChannelBuilder<T extends ManagedChannelBuilder<T>>
|
||||||
* @since 1.25.0
|
* @since 1.25.0
|
||||||
*/
|
*/
|
||||||
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/6279")
|
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/6279")
|
||||||
public T blockingExecutor(Executor executor) {
|
public T offloadExecutor(Executor executor) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/6279")
|
||||||
|
public T blockingExecutor(Executor executor) {
|
||||||
|
return offloadExecutor(executor);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds interceptors that will be called before the channel performs its real work. This is
|
* Adds interceptors that will be called before the channel performs its real work. This is
|
||||||
* functionally equivalent to using {@link ClientInterceptors#intercept(Channel, List)}, but while
|
* functionally equivalent to using {@link ClientInterceptors#intercept(Channel, List)}, but while
|
||||||
|
|
|
||||||
|
|
@ -474,7 +474,7 @@ public abstract class NameResolver {
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/6279")
|
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/6279")
|
||||||
public Executor getBlockingExecutor() {
|
public Executor getOffloadExecutor() {
|
||||||
return executor;
|
return executor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -500,7 +500,7 @@ public abstract class NameResolver {
|
||||||
builder.setProxyDetector(proxyDetector);
|
builder.setProxyDetector(proxyDetector);
|
||||||
builder.setSynchronizationContext(syncContext);
|
builder.setSynchronizationContext(syncContext);
|
||||||
builder.setServiceConfigParser(serviceConfigParser);
|
builder.setServiceConfigParser(serviceConfigParser);
|
||||||
builder.setBlockingExecutor(executor);
|
builder.setOffloadExecutor(executor);
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -569,12 +569,12 @@ public abstract class NameResolver {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See {@link Args#getBlockingExecutor}. This is an optional field.
|
* See {@link Args#getOffloadExecutor}. This is an optional field.
|
||||||
*
|
*
|
||||||
* @since 1.25.0
|
* @since 1.25.0
|
||||||
*/
|
*/
|
||||||
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/6279")
|
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/6279")
|
||||||
public Builder setBlockingExecutor(Executor executor) {
|
public Builder setOffloadExecutor(Executor executor) {
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,14 +61,14 @@ public class NameResolverTest {
|
||||||
assertThat(args.getProxyDetector()).isSameInstanceAs(proxyDetector);
|
assertThat(args.getProxyDetector()).isSameInstanceAs(proxyDetector);
|
||||||
assertThat(args.getSynchronizationContext()).isSameInstanceAs(syncContext);
|
assertThat(args.getSynchronizationContext()).isSameInstanceAs(syncContext);
|
||||||
assertThat(args.getServiceConfigParser()).isSameInstanceAs(parser);
|
assertThat(args.getServiceConfigParser()).isSameInstanceAs(parser);
|
||||||
assertThat(args.getBlockingExecutor()).isSameInstanceAs(executor);
|
assertThat(args.getOffloadExecutor()).isSameInstanceAs(executor);
|
||||||
|
|
||||||
NameResolver.Args args2 = args.toBuilder().build();
|
NameResolver.Args args2 = args.toBuilder().build();
|
||||||
assertThat(args2.getDefaultPort()).isEqualTo(defaultPort);
|
assertThat(args2.getDefaultPort()).isEqualTo(defaultPort);
|
||||||
assertThat(args2.getProxyDetector()).isSameInstanceAs(proxyDetector);
|
assertThat(args2.getProxyDetector()).isSameInstanceAs(proxyDetector);
|
||||||
assertThat(args2.getSynchronizationContext()).isSameInstanceAs(syncContext);
|
assertThat(args2.getSynchronizationContext()).isSameInstanceAs(syncContext);
|
||||||
assertThat(args2.getServiceConfigParser()).isSameInstanceAs(parser);
|
assertThat(args2.getServiceConfigParser()).isSameInstanceAs(parser);
|
||||||
assertThat(args2.getBlockingExecutor()).isSameInstanceAs(executor);
|
assertThat(args2.getOffloadExecutor()).isSameInstanceAs(executor);
|
||||||
|
|
||||||
assertThat(args2).isNotSameInstanceAs(args);
|
assertThat(args2).isNotSameInstanceAs(args);
|
||||||
assertThat(args2).isNotEqualTo(args);
|
assertThat(args2).isNotEqualTo(args);
|
||||||
|
|
@ -251,7 +251,7 @@ public class NameResolverTest {
|
||||||
.setProxyDetector(proxyDetector)
|
.setProxyDetector(proxyDetector)
|
||||||
.setSynchronizationContext(syncContext)
|
.setSynchronizationContext(syncContext)
|
||||||
.setServiceConfigParser(parser)
|
.setServiceConfigParser(parser)
|
||||||
.setBlockingExecutor(executor)
|
.setOffloadExecutor(executor)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ public abstract class AbstractManagedChannelImplBuilder
|
||||||
|
|
||||||
ObjectPool<? extends Executor> executorPool = DEFAULT_EXECUTOR_POOL;
|
ObjectPool<? extends Executor> executorPool = DEFAULT_EXECUTOR_POOL;
|
||||||
|
|
||||||
ObjectPool<? extends Executor> blockingExecutorPool = DEFAULT_EXECUTOR_POOL;
|
ObjectPool<? extends Executor> offloadExecutorPool = DEFAULT_EXECUTOR_POOL;
|
||||||
|
|
||||||
private final List<ClientInterceptor> interceptors = new ArrayList<>();
|
private final List<ClientInterceptor> interceptors = new ArrayList<>();
|
||||||
final NameResolverRegistry nameResolverRegistry = NameResolverRegistry.getDefaultRegistry();
|
final NameResolverRegistry nameResolverRegistry = NameResolverRegistry.getDefaultRegistry();
|
||||||
|
|
@ -220,11 +220,11 @@ public abstract class AbstractManagedChannelImplBuilder
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final T blockingExecutor(Executor executor) {
|
public final T offloadExecutor(Executor executor) {
|
||||||
if (executor != null) {
|
if (executor != null) {
|
||||||
this.blockingExecutorPool = new FixedObjectPool<>(executor);
|
this.offloadExecutorPool = new FixedObjectPool<>(executor);
|
||||||
} else {
|
} else {
|
||||||
this.blockingExecutorPool = DEFAULT_EXECUTOR_POOL;
|
this.offloadExecutorPool = DEFAULT_EXECUTOR_POOL;
|
||||||
}
|
}
|
||||||
return thisT();
|
return thisT();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -185,7 +185,7 @@ final class DnsNameResolver extends NameResolver {
|
||||||
this.stopwatch = Preconditions.checkNotNull(stopwatch, "stopwatch");
|
this.stopwatch = Preconditions.checkNotNull(stopwatch, "stopwatch");
|
||||||
this.syncContext =
|
this.syncContext =
|
||||||
Preconditions.checkNotNull(args.getSynchronizationContext(), "syncContext");
|
Preconditions.checkNotNull(args.getSynchronizationContext(), "syncContext");
|
||||||
this.executor = args.getBlockingExecutor();
|
this.executor = args.getOffloadExecutor();
|
||||||
this.usingExecutorResource = executor == null;
|
this.usingExecutorResource = executor == null;
|
||||||
this.enableSrv = enableSrv;
|
this.enableSrv = enableSrv;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -142,7 +142,7 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
private final ObjectPool<? extends Executor> executorPool;
|
private final ObjectPool<? extends Executor> executorPool;
|
||||||
private final ObjectPool<? extends Executor> balancerRpcExecutorPool;
|
private final ObjectPool<? extends Executor> balancerRpcExecutorPool;
|
||||||
private final ExecutorHolder balancerRpcExecutorHolder;
|
private final ExecutorHolder balancerRpcExecutorHolder;
|
||||||
private final ExecutorHolder blockingExecutorHolder;
|
private final ExecutorHolder offloadExecutorHolder;
|
||||||
private final TimeProvider timeProvider;
|
private final TimeProvider timeProvider;
|
||||||
private final int maxTraceEvents;
|
private final int maxTraceEvents;
|
||||||
|
|
||||||
|
|
@ -566,9 +566,9 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
builder.proxyDetector != null ? builder.proxyDetector : GrpcUtil.DEFAULT_PROXY_DETECTOR;
|
builder.proxyDetector != null ? builder.proxyDetector : GrpcUtil.DEFAULT_PROXY_DETECTOR;
|
||||||
this.retryEnabled = builder.retryEnabled && !builder.temporarilyDisableRetry;
|
this.retryEnabled = builder.retryEnabled && !builder.temporarilyDisableRetry;
|
||||||
this.loadBalancerFactory = new AutoConfiguredLoadBalancerFactory(builder.defaultLbPolicy);
|
this.loadBalancerFactory = new AutoConfiguredLoadBalancerFactory(builder.defaultLbPolicy);
|
||||||
this.blockingExecutorHolder =
|
this.offloadExecutorHolder =
|
||||||
new ExecutorHolder(
|
new ExecutorHolder(
|
||||||
checkNotNull(builder.blockingExecutorPool, "blockingExecutorPool"));
|
checkNotNull(builder.offloadExecutorPool, "offloadExecutorPool"));
|
||||||
this.nameResolverRegistry = builder.nameResolverRegistry;
|
this.nameResolverRegistry = builder.nameResolverRegistry;
|
||||||
this.nameResolverArgs =
|
this.nameResolverArgs =
|
||||||
NameResolver.Args.newBuilder()
|
NameResolver.Args.newBuilder()
|
||||||
|
|
@ -581,12 +581,12 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
builder.maxRetryAttempts,
|
builder.maxRetryAttempts,
|
||||||
builder.maxHedgedAttempts,
|
builder.maxHedgedAttempts,
|
||||||
loadBalancerFactory))
|
loadBalancerFactory))
|
||||||
.setBlockingExecutor(
|
.setOffloadExecutor(
|
||||||
// Avoid creating the blockingExecutor until it is first used
|
// Avoid creating the offloadExecutor until it is first used
|
||||||
new Executor() {
|
new Executor() {
|
||||||
@Override
|
@Override
|
||||||
public void execute(Runnable command) {
|
public void execute(Runnable command) {
|
||||||
blockingExecutorHolder.getExecutor().execute(command);
|
offloadExecutorHolder.getExecutor().execute(command);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
@ -900,7 +900,7 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
terminatedLatch.countDown();
|
terminatedLatch.countDown();
|
||||||
executorPool.returnObject(executor);
|
executorPool.returnObject(executor);
|
||||||
balancerRpcExecutorHolder.release();
|
balancerRpcExecutorHolder.release();
|
||||||
blockingExecutorHolder.release();
|
offloadExecutorHolder.release();
|
||||||
// Release the transport factory so that it can deallocate any resources.
|
// Release the transport factory so that it can deallocate any resources.
|
||||||
transportFactory.close();
|
transportFactory.close();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -100,18 +100,18 @@ public class AbstractManagedChannelImplBuilderTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void blockingExecutor_normal() {
|
public void offloadExecutor_normal() {
|
||||||
Executor executor = mock(Executor.class);
|
Executor executor = mock(Executor.class);
|
||||||
assertEquals(builder, builder.blockingExecutor(executor));
|
assertEquals(builder, builder.offloadExecutor(executor));
|
||||||
assertEquals(executor, builder.blockingExecutorPool.getObject());
|
assertEquals(executor, builder.offloadExecutorPool.getObject());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void blockingExecutor_null() {
|
public void offloadExecutor_null() {
|
||||||
ObjectPool<? extends Executor> defaultValue = builder.blockingExecutorPool;
|
ObjectPool<? extends Executor> defaultValue = builder.offloadExecutorPool;
|
||||||
builder.blockingExecutor(mock(Executor.class));
|
builder.offloadExecutor(mock(Executor.class));
|
||||||
assertEquals(builder, builder.blockingExecutor(null));
|
assertEquals(builder, builder.offloadExecutor(null));
|
||||||
assertEquals(defaultValue, builder.blockingExecutorPool);
|
assertEquals(defaultValue, builder.offloadExecutorPool);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -331,7 +331,7 @@ public class DnsNameResolverTest {
|
||||||
.setProxyDetector(GrpcUtil.NOOP_PROXY_DETECTOR)
|
.setProxyDetector(GrpcUtil.NOOP_PROXY_DETECTOR)
|
||||||
.setSynchronizationContext(syncContext)
|
.setSynchronizationContext(syncContext)
|
||||||
.setServiceConfigParser(mock(ServiceConfigParser.class))
|
.setServiceConfigParser(mock(ServiceConfigParser.class))
|
||||||
.setBlockingExecutor(
|
.setOffloadExecutor(
|
||||||
new Executor() {
|
new Executor() {
|
||||||
@Override
|
@Override
|
||||||
public void execute(Runnable command) {
|
public void execute(Runnable command) {
|
||||||
|
|
|
||||||
|
|
@ -266,7 +266,7 @@ public class ManagedChannelImplTest {
|
||||||
@Mock
|
@Mock
|
||||||
private CallCredentials creds;
|
private CallCredentials creds;
|
||||||
@Mock
|
@Mock
|
||||||
private Executor blockingExecutor;
|
private Executor offloadExecutor;
|
||||||
private ChannelBuilder channelBuilder;
|
private ChannelBuilder channelBuilder;
|
||||||
private boolean requestConnection = true;
|
private boolean requestConnection = true;
|
||||||
private BlockingQueue<MockClientTransportInfo> transports;
|
private BlockingQueue<MockClientTransportInfo> transports;
|
||||||
|
|
@ -328,7 +328,7 @@ public class ManagedChannelImplTest {
|
||||||
.userAgent(USER_AGENT)
|
.userAgent(USER_AGENT)
|
||||||
.idleTimeout(
|
.idleTimeout(
|
||||||
AbstractManagedChannelImplBuilder.IDLE_MODE_MAX_TIMEOUT_DAYS, TimeUnit.DAYS)
|
AbstractManagedChannelImplBuilder.IDLE_MODE_MAX_TIMEOUT_DAYS, TimeUnit.DAYS)
|
||||||
.blockingExecutor(blockingExecutor);
|
.offloadExecutor(offloadExecutor);
|
||||||
channelBuilder.executorPool = executorPool;
|
channelBuilder.executorPool = executorPool;
|
||||||
channelBuilder.binlog = null;
|
channelBuilder.binlog = null;
|
||||||
channelBuilder.channelz = channelz;
|
channelBuilder.channelz = channelz;
|
||||||
|
|
@ -3588,14 +3588,14 @@ public class ManagedChannelImplTest {
|
||||||
assertThat(args.getDefaultPort()).isEqualTo(DEFAULT_PORT);
|
assertThat(args.getDefaultPort()).isEqualTo(DEFAULT_PORT);
|
||||||
assertThat(args.getProxyDetector()).isSameInstanceAs(neverProxy);
|
assertThat(args.getProxyDetector()).isSameInstanceAs(neverProxy);
|
||||||
|
|
||||||
verify(blockingExecutor, never()).execute(any(Runnable.class));
|
verify(offloadExecutor, never()).execute(any(Runnable.class));
|
||||||
args.getBlockingExecutor()
|
args.getOffloadExecutor()
|
||||||
.execute(
|
.execute(
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {}
|
public void run() {}
|
||||||
});
|
});
|
||||||
verify(blockingExecutor, times(1)).execute(any(Runnable.class));
|
verify(offloadExecutor, times(1)).execute(any(Runnable.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue