Skip to content

Commit 79b24c2

Browse files
loadbalancer-experimental: Rename ConnectionPool* types to ConnectionSelector* (#3145)
Motivation: A ConnectionPoolPolicy doesn't actually control pooling, but selection from that pool. The name is also inconsistent with the thing it generates: a ConnectionSelector. Modifications: Rename the types to ConnectionSelector* for more consistency.
1 parent 5fb80d0 commit 79b24c2

13 files changed

+60
-58
lines changed

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/ConnectionPoolPolicies.java servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/ConnectionSelectorPolicies.java

+23-22
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@
1818
import io.servicetalk.client.api.LoadBalancedConnection;
1919

2020
/**
21-
* A factory to create different {@link ConnectionPoolPolicy} variants.
21+
* A factory to create different {@link ConnectionSelectorPolicy} variants.
2222
*/
23-
public final class ConnectionPoolPolicies {
23+
public final class ConnectionSelectorPolicies {
2424
private static final int DEFAULT_MAX_EFFORT = 5;
2525
private static final int DEFAULT_LINEAR_SEARCH_SPACE = 16;
2626

27-
private ConnectionPoolPolicies() {
27+
private ConnectionSelectorPolicies() {
2828
// no instances
2929
}
3030

3131
/**
3232
* A connection selection policy that prioritizes a configurable "core" pool.
3333
* <p>
34-
* This {@link ConnectionPoolPolicy} attempts to emulate the pooling behavior often seen in thread pools.
34+
* This {@link ConnectionSelectorPolicy} attempts to emulate the pooling behavior often seen in thread pools.
3535
* Specifically it allows for the configuration of a "core pool" size which are intended to be long-lived.
3636
* Iteration starts in the core pool at a random position and then iterates through the entire core pool before
3737
* moving to an overflow pool. Because iteration of this core pool starts at a random position the core connections
@@ -46,47 +46,48 @@ private ConnectionPoolPolicies() {
4646
* @param forceCorePool whether to avoid selecting connections from the core pool until it has reached the
4747
* configured core pool size.
4848
* @param <C> the concrete type of the {@link LoadBalancedConnection}
49-
* @return the configured {@link ConnectionPoolPolicy}.
49+
* @return the configured {@link ConnectionSelectorPolicy}.
5050
*/
51-
public static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> corePool(final int corePoolSize,
52-
final boolean forceCorePool) {
51+
public static <C extends LoadBalancedConnection> ConnectionSelectorPolicy<C> corePool(final int corePoolSize,
52+
final boolean forceCorePool) {
5353
return CorePoolConnectionSelector.factory(corePoolSize, forceCorePool);
5454
}
5555

5656
/**
5757
* A connection selection policy that prioritizes connection reuse.
5858
* <p>
59-
* This {@link ConnectionPoolPolicy} attempts to minimize the number of connections by attempting to direct
59+
* This {@link ConnectionSelectorPolicy} attempts to minimize the number of connections by attempting to direct
6060
* traffic to connections in the order they were created in linear order up until a configured quantity. After
6161
* this linear pool is exhausted the remaining connections will be selected from at random. Prioritizing traffic
6262
* to the existing connections will let tailing connections be removed due to idleness.
6363
*
6464
* @param <C> the concrete type of the {@link LoadBalancedConnection}
65-
* @return the configured {@link ConnectionPoolPolicy}.
65+
* @return the configured {@link ConnectionSelectorPolicy}.
6666
*/
67-
public static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> linearSearch() {
67+
public static <C extends LoadBalancedConnection> ConnectionSelectorPolicy<C> linearSearch() {
6868
return linearSearch(DEFAULT_LINEAR_SEARCH_SPACE);
6969
}
7070

7171
/**
7272
* A connection selection policy that prioritizes connection reuse.
7373
* <p>
74-
* This {@link ConnectionPoolPolicy} attempts to minimize the number of connections by attempting to direct
74+
* This {@link ConnectionSelectorPolicy} attempts to minimize the number of connections by attempting to direct
7575
* traffic to connections in the order they were created in linear order up until a configured quantity. After
7676
* this linear pool is exhausted the remaining connections will be selected from at random. Prioritizing traffic
7777
* to the existing connections will let tailing connections be removed due to idleness.
7878
*
7979
* @param linearSearchSpace the space to search linearly before resorting to random selection for remaining
8080
* connections.
8181
* @param <C> the concrete type of the {@link LoadBalancedConnection}
82-
* @return the configured {@link ConnectionPoolPolicy}.
82+
* @return the configured {@link ConnectionSelectorPolicy}.
8383
*/
84-
public static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> linearSearch(final int linearSearchSpace) {
84+
public static <C extends LoadBalancedConnection>
85+
ConnectionSelectorPolicy<C> linearSearch(final int linearSearchSpace) {
8586
return LinearSearchConnectionSelector.factory(linearSearchSpace);
8687
}
8788

8889
/**
89-
* A {@link ConnectionPoolPolicy} that attempts to discern between the health of individual connections.
90+
* A {@link ConnectionSelectorPolicy} that attempts to discern between the health of individual connections.
9091
* If individual connections have health data the P2C policy can be used to bias traffic toward the best
9192
* connections. This has the following algorithm:
9293
* <ol>
@@ -104,15 +105,15 @@ public static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> linearS
104105
* @param forceCorePool whether to avoid selecting connections from the core pool until it has reached the
105106
* configured core pool size.
106107
* @param <C> the concrete type of the {@link LoadBalancedConnection}
107-
* @return the configured {@link ConnectionPoolPolicy}.
108+
* @return the configured {@link ConnectionSelectorPolicy}.
108109
*/
109-
public static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> p2c(final int corePoolSize,
110-
final boolean forceCorePool) {
110+
public static <C extends LoadBalancedConnection> ConnectionSelectorPolicy<C> p2c(final int corePoolSize,
111+
final boolean forceCorePool) {
111112
return p2c(DEFAULT_MAX_EFFORT, corePoolSize, forceCorePool);
112113
}
113114

114115
/**
115-
* A {@link ConnectionPoolPolicy} that attempts to discern between the health of individual connections.
116+
* A {@link ConnectionSelectorPolicy} that attempts to discern between the health of individual connections.
116117
* If individual connections have health data the P2C policy can be used to bias traffic toward the best
117118
* connections. This has the following algorithm:
118119
* <ol>
@@ -131,11 +132,11 @@ public static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> p2c(fin
131132
* @param forceCorePool whether to avoid selecting connections from the core pool until it has reached the
132133
* configured core pool size.
133134
* @param <C> the concrete type of the {@link LoadBalancedConnection}
134-
* @return the configured {@link ConnectionPoolPolicy}.
135+
* @return the configured {@link ConnectionSelectorPolicy}.
135136
*/
136-
public static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> p2c(final int maxEffort,
137-
final int corePoolSize,
138-
final boolean forceCorePool) {
137+
public static <C extends LoadBalancedConnection> ConnectionSelectorPolicy<C> p2c(final int maxEffort,
138+
final int corePoolSize,
139+
final boolean forceCorePool) {
139140
return P2CConnectionSelector.factory(maxEffort, corePoolSize, forceCorePool);
140141
}
141142
}

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/ConnectionPoolPolicy.java servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/ConnectionSelectorPolicy.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
* Configuration of the policy for selecting connections from a pool to the same endpoint.
2222
* @param <C> the concrete type of the {@link LoadBalancedConnection}
2323
*/
24-
public abstract class ConnectionPoolPolicy<C extends LoadBalancedConnection> {
24+
public abstract class ConnectionSelectorPolicy<C extends LoadBalancedConnection> {
2525

26-
ConnectionPoolPolicy() {
26+
ConnectionSelectorPolicy() {
2727
// package private constructor to control proliferation
2828
}
2929

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/CorePoolConnectionSelector.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,13 @@ public C select(List<C> connections, Predicate<C> selector) {
8383
return null;
8484
}
8585

86-
static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> factory(
86+
static <C extends LoadBalancedConnection> ConnectionSelectorPolicy<C> factory(
8787
int corePoolSize, boolean forceCorePool) {
8888
return new CorePoolConnectionSelectorFactory<>(corePoolSize, forceCorePool);
8989
}
9090

9191
private static final class CorePoolConnectionSelectorFactory<C extends LoadBalancedConnection>
92-
extends ConnectionPoolPolicy<C> {
92+
extends ConnectionSelectorPolicy<C> {
9393

9494
private final int corePoolSize;
9595
private final boolean forceCorePool;

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/DefaultLoadBalancer.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ final class DefaultLoadBalancer<ResolvedAddress, C extends LoadBalancedConnectio
128128
* @param priorityStrategyFactory a builder of the {@link HostPriorityStrategy} to use with the load balancer.
129129
* @param loadBalancingPolicy a factory of the initial host selector to use with this load balancer.
130130
* @param subsetter a subset builder.
131-
* @param connectionPoolPolicy factory of the connection pool strategy to use with this load balancer.
131+
* @param connectionSelectorPolicy factory of the connection pool strategy to use with this load balancer.
132132
* @param connectionFactory a function which creates new connections.
133133
* @param loadBalancerObserverFactory factory used to build a {@link LoadBalancerObserver} to use with this
134134
* load balancer.
@@ -144,7 +144,7 @@ final class DefaultLoadBalancer<ResolvedAddress, C extends LoadBalancedConnectio
144144
final Function<String, HostPriorityStrategy> priorityStrategyFactory,
145145
final LoadBalancingPolicy<ResolvedAddress, C> loadBalancingPolicy,
146146
final Subsetter subsetter,
147-
final ConnectionPoolPolicy<C> connectionPoolPolicy,
147+
final ConnectionSelectorPolicy<C> connectionSelectorPolicy,
148148
final ConnectionFactory<ResolvedAddress, ? extends C> connectionFactory,
149149
final LoadBalancerObserverFactory loadBalancerObserverFactory,
150150
@Nullable final HealthCheckConfig healthCheckConfig,
@@ -155,8 +155,8 @@ final class DefaultLoadBalancer<ResolvedAddress, C extends LoadBalancedConnectio
155155
.buildSelector(Collections.emptyList(), lbDescription);
156156
this.priorityStrategy = requireNonNull(
157157
priorityStrategyFactory, "priorityStrategyFactory").apply(lbDescription);
158-
this.connectionSelector = requireNonNull(connectionPoolPolicy,
159-
"connectionPoolPolicy").buildConnectionSelector(lbDescription);
158+
this.connectionSelector = requireNonNull(connectionSelectorPolicy,
159+
"connectionSelectorPolicy").buildConnectionSelector(lbDescription);
160160
this.eventPublisher = requireNonNull(eventPublisher);
161161
this.eventStream = fromSource(eventStreamProcessor)
162162
.replay(1); // Allow for multiple subscribers and provide new subscribers with last signal.

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/DefaultLoadBalancerBuilder.java

+13-13
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ final class DefaultLoadBalancerBuilder<ResolvedAddress, C extends LoadBalancedCo
4040
@Nullable
4141
private LoadBalancerObserverFactory loadBalancerObserverFactory;
4242
private LoadBalancingPolicy<ResolvedAddress, C> loadBalancingPolicy = defaultLoadBalancingPolicy();
43-
private ConnectionPoolPolicy<C> connectionPoolPolicy = defaultConnectionSelectorFactory();
43+
private ConnectionSelectorPolicy<C> connectionSelectorPolicy = defaultConnectionSelectorPolicy();
4444
private OutlierDetectorConfig outlierDetectorConfig = OutlierDetectorConfig.DEFAULT_CONFIG;
4545

4646
// package private constructor so users must funnel through providers in `LoadBalancers`
@@ -69,9 +69,9 @@ public LoadBalancerBuilder<ResolvedAddress, C> outlierDetectorConfig(OutlierDete
6969
}
7070

7171
@Override
72-
public LoadBalancerBuilder<ResolvedAddress, C> connectionPoolPolicy(
73-
ConnectionPoolPolicy<C> connectionPoolPolicy) {
74-
this.connectionPoolPolicy = requireNonNull(connectionPoolPolicy, "connectionPoolPolicy");
72+
public LoadBalancerBuilder<ResolvedAddress, C> connectionSelectorPolicy(
73+
ConnectionSelectorPolicy<C> connectionSelectorPolicy) {
74+
this.connectionSelectorPolicy = requireNonNull(connectionSelectorPolicy, "connectionSelectorPolicy");
7575
return this;
7676
}
7777

@@ -84,30 +84,30 @@ public LoadBalancerBuilder<ResolvedAddress, C> backgroundExecutor(Executor backg
8484
@Override
8585
public LoadBalancerFactory<ResolvedAddress, C> build() {
8686
return new DefaultLoadBalancerFactory<>(id, loadBalancingPolicy, loadBalancerObserverFactory,
87-
connectionPoolPolicy, outlierDetectorConfig, getExecutor());
87+
connectionSelectorPolicy, outlierDetectorConfig, getExecutor());
8888
}
8989

9090
static final class DefaultLoadBalancerFactory<ResolvedAddress, C extends LoadBalancedConnection>
9191
implements LoadBalancerFactory<ResolvedAddress, C> {
9292

9393
private final String id;
9494
private final LoadBalancingPolicy<ResolvedAddress, C> loadBalancingPolicy;
95-
private final ConnectionPoolPolicy<C> connectionPoolPolicy;
95+
private final ConnectionSelectorPolicy<C> connectionSelectorPolicy;
9696
private final OutlierDetectorConfig outlierDetectorConfig;
9797
@Nullable
9898
private final LoadBalancerObserverFactory loadBalancerObserverFactory;
9999
private final Executor executor;
100100

101101
DefaultLoadBalancerFactory(final String id, final LoadBalancingPolicy<ResolvedAddress, C> loadBalancingPolicy,
102102
@Nullable final LoadBalancerObserverFactory loadBalancerObserverFactory,
103-
final ConnectionPoolPolicy<C> connectionPoolPolicy,
103+
final ConnectionSelectorPolicy<C> connectionSelectorPolicy,
104104
final OutlierDetectorConfig outlierDetectorConfig,
105105
final Executor executor) {
106106
this.id = requireNonNull(id, "id");
107107
this.loadBalancingPolicy = requireNonNull(loadBalancingPolicy, "loadBalancingPolicy");
108108
this.loadBalancerObserverFactory = loadBalancerObserverFactory;
109109
this.outlierDetectorConfig = requireNonNull(outlierDetectorConfig, "outlierDetectorConfig");
110-
this.connectionPoolPolicy = requireNonNull(connectionPoolPolicy, "connectionPoolPolicy");
110+
this.connectionSelectorPolicy = requireNonNull(connectionSelectorPolicy, "connectionSelectorPolicy");
111111
this.executor = requireNonNull(executor, "executor");
112112
}
113113

@@ -154,7 +154,7 @@ public LoadBalancer<C> newLoadBalancer(
154154
}
155155
return new DefaultLoadBalancer<>(id, targetResource, eventPublisher,
156156
DefaultHostPriorityStrategy::new, loadBalancingPolicy, new RandomSubsetter(Integer.MAX_VALUE),
157-
connectionPoolPolicy, connectionFactory,
157+
connectionSelectorPolicy, connectionFactory,
158158
loadBalancerObserverFactory, healthCheckConfig, outlierDetectorFactory);
159159
}
160160

@@ -169,7 +169,7 @@ public String toString() {
169169
return "DefaultLoadBalancerFactory{" +
170170
"id='" + id + '\'' +
171171
", loadBalancingPolicy=" + loadBalancingPolicy +
172-
", connectionPoolPolicy=" + connectionPoolPolicy +
172+
", connectionSelectorPolicy=" + connectionSelectorPolicy +
173173
", outlierDetectorConfig=" + outlierDetectorConfig +
174174
", loadBalancerObserverFactory=" + loadBalancerObserverFactory +
175175
", executor=" + executor +
@@ -187,8 +187,8 @@ LoadBalancingPolicy<ResolvedAddress, C> defaultLoadBalancingPolicy() {
187187
return LoadBalancingPolicies.roundRobin().build();
188188
}
189189

190-
private static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C>
191-
defaultConnectionSelectorFactory() {
192-
return ConnectionPoolPolicies.linearSearch();
190+
private static <C extends LoadBalancedConnection>
191+
ConnectionSelectorPolicy<C> defaultConnectionSelectorPolicy() {
192+
return ConnectionSelectorPolicies.linearSearch();
193193
}
194194
}

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/DelegatingLoadBalancerBuilder.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ public LoadBalancerBuilder<ResolvedAddress, C> backgroundExecutor(Executor backg
7979
}
8080

8181
@Override
82-
public LoadBalancerBuilder<ResolvedAddress, C> connectionPoolPolicy(
83-
ConnectionPoolPolicy<C> connectionPoolPolicy) {
84-
delegate = delegate.connectionPoolPolicy(connectionPoolPolicy);
82+
public LoadBalancerBuilder<ResolvedAddress, C> connectionSelectorPolicy(
83+
ConnectionSelectorPolicy<C> connectionSelectorPolicy) {
84+
delegate = delegate.connectionSelectorPolicy(connectionSelectorPolicy);
8585
return this;
8686
}
8787

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/LinearSearchConnectionSelector.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,12 @@ public C select(List<C> connections, Predicate<C> selector) {
9090
return null;
9191
}
9292

93-
static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> factory(final int linearSearchSpace) {
93+
static <C extends LoadBalancedConnection> ConnectionSelectorPolicy<C> factory(final int linearSearchSpace) {
9494
return new LinearSearchConnectionSelectorFactory<>(linearSearchSpace);
9595
}
9696

9797
private static final class LinearSearchConnectionSelectorFactory<C extends LoadBalancedConnection>
98-
extends ConnectionPoolPolicy<C> {
98+
extends ConnectionSelectorPolicy<C> {
9999

100100
private final int linearSearchSpace;
101101

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/LoadBalancerBuilder.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,13 @@ LoadBalancerBuilder<ResolvedAddress, C> loadBalancerObserver(
9696
LoadBalancerBuilder<ResolvedAddress, C> outlierDetectorConfig(OutlierDetectorConfig outlierDetectorConfig);
9797

9898
/**
99-
* Set the {@link ConnectionPoolPolicy} to use with this load balancer.
99+
* Set the {@link ConnectionSelectorPolicy} to use with this load balancer.
100100
*
101-
* @param connectionPoolPolicy the factory of connection pooling strategies to use.
101+
* @param connectionSelectorPolicy the factory of connection selection strategies to use.
102102
* @return {@code this}
103103
*/
104-
LoadBalancerBuilder<ResolvedAddress, C> connectionPoolPolicy(ConnectionPoolPolicy<C> connectionPoolPolicy);
104+
LoadBalancerBuilder<ResolvedAddress, C> connectionSelectorPolicy(
105+
ConnectionSelectorPolicy<C> connectionSelectorPolicy);
105106

106107
/**
107108
* Set the background {@link Executor} to use for determining time and scheduling background tasks such

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/P2CConnectionSelector.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,13 @@ private C p2cPick(ThreadLocalRandom rnd, int randomSearchSpace, List<C> connecti
140140
return null;
141141
}
142142

143-
static <C extends LoadBalancedConnection> ConnectionPoolPolicy<C> factory(
143+
static <C extends LoadBalancedConnection> ConnectionSelectorPolicy<C> factory(
144144
final int maxEffort, final int corePoolSize, final boolean forceCorePool) {
145145
return new P2CConnectionSelectorFactory<>(maxEffort, corePoolSize, forceCorePool);
146146
}
147147

148148
private static final class P2CConnectionSelectorFactory<C extends LoadBalancedConnection>
149-
extends ConnectionPoolPolicy<C> {
149+
extends ConnectionSelectorPolicy<C> {
150150

151151
private final int maxEffort;
152152
private final int corePoolSize;

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/RoundRobinToDefaultLBMigrationProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public LoadBalancerFactory<ResolvedAddress, C> build() {
142142
}
143143
return builder.outlierDetectorConfig(outlierDetectorConfig)
144144
.loadBalancingPolicy(loadBalancingPolicy)
145-
.connectionPoolPolicy(ConnectionPoolPolicies.linearSearch(linearSearchSpace))
145+
.connectionSelectorPolicy(ConnectionSelectorPolicies.linearSearch(linearSearchSpace))
146146
.build();
147147
}
148148
}

0 commit comments

Comments
 (0)