Skip to content

Commit e4d4418

Browse files
loadbalancer: move DefaultLoadBalancer out of experimental (#3136)
Motivation: We've had DefaultLoadBalancer running in place of round-robin for some time and it looks good. It's time to move it into the main package and prepare to remove RoundRobinLoadBalancer. Modifications: Move most of the contents of servicetalk-loadbalancer-experimental to the servicetalk-loadbalancer package.
1 parent 36ebeb1 commit e4d4418

File tree

100 files changed

+85
-86
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+85
-86
lines changed

servicetalk-loadbalancer-experimental/src/main/java/io/servicetalk/loadbalancer/RequestTracker.java servicetalk-client-api/src/main/java/io/servicetalk/client/api/RequestTracker.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package io.servicetalk.loadbalancer;
16+
package io.servicetalk.client.api;
1717

1818
import io.servicetalk.context.api.ContextMap;
1919

servicetalk-examples/docs/modules/ROOT/pages/http/index.adoc

+4-6

servicetalk-examples/http/loadbalancer/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ apply from: "../../gradle/idea.gradle"
1919
dependencies {
2020
implementation project(":servicetalk-annotations")
2121
implementation project(":servicetalk-http-netty")
22-
implementation project(":servicetalk-loadbalancer-experimental")
22+
implementation project(":servicetalk-loadbalancer")
2323

2424
runtimeOnly "org.apache.logging.log4j:log4j-slf4j-impl:$log4jVersion"
2525
}

servicetalk-grpc-netty/build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ dependencies {
3636
implementation project(":servicetalk-transport-netty-internal")
3737
implementation project(":servicetalk-utils-internal")
3838
implementation project(":servicetalk-concurrent-internal")
39-
implementation project(":servicetalk-loadbalancer-experimental")
4039
implementation "org.slf4j:slf4j-api:$slf4jVersion"
4140
implementation "com.google.protobuf:protobuf-java"
4241

servicetalk-grpc-netty/src/main/java/io/servicetalk/grpc/netty/GrpcRequestTracker.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.servicetalk.client.api.ConnectionFactory;
2020
import io.servicetalk.client.api.ConnectionFactoryFilter;
2121
import io.servicetalk.client.api.DelegatingConnectionFactory;
22+
import io.servicetalk.client.api.RequestTracker;
2223
import io.servicetalk.concurrent.api.Single;
2324
import io.servicetalk.context.api.ContextMap;
2425
import io.servicetalk.grpc.api.GrpcLifecycleObserver;
@@ -28,7 +29,6 @@
2829
import io.servicetalk.http.api.HttpRequestMetaData;
2930
import io.servicetalk.http.api.HttpResponseMetaData;
3031
import io.servicetalk.http.netty.HttpLifecycleObserverRequesterFilter;
31-
import io.servicetalk.loadbalancer.RequestTracker;
3232
import io.servicetalk.transport.api.ConnectionInfo;
3333
import io.servicetalk.transport.api.ExecutionStrategy;
3434
import io.servicetalk.transport.api.TransportObserver;
@@ -40,7 +40,7 @@
4040
import java.util.function.Function;
4141
import javax.annotation.Nullable;
4242

43-
import static io.servicetalk.loadbalancer.RequestTracker.REQUEST_TRACKER_KEY;
43+
import static io.servicetalk.client.api.RequestTracker.REQUEST_TRACKER_KEY;
4444

4545
final class GrpcRequestTracker {
4646

servicetalk-grpc-netty/src/test/java/io/servicetalk/grpc/netty/GrpcRequestTrackerTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package io.servicetalk.grpc.netty;
1717

1818
import io.servicetalk.client.api.DelegatingConnectionFactory;
19+
import io.servicetalk.client.api.RequestTracker;
1920
import io.servicetalk.concurrent.api.Publisher;
2021
import io.servicetalk.concurrent.api.Single;
2122
import io.servicetalk.context.api.ContextMap;
@@ -25,7 +26,6 @@
2526
import io.servicetalk.grpc.api.GrpcStatusCode;
2627
import io.servicetalk.grpc.api.GrpcStatusException;
2728
import io.servicetalk.http.api.FilterableStreamingHttpConnection;
28-
import io.servicetalk.loadbalancer.RequestTracker;
2929
import io.servicetalk.transport.api.HostAndPort;
3030
import io.servicetalk.transport.api.ServerContext;
3131
import io.servicetalk.transport.api.TransportObserver;
@@ -40,7 +40,7 @@
4040
import java.util.concurrent.atomic.AtomicInteger;
4141
import javax.annotation.Nullable;
4242

43-
import static io.servicetalk.loadbalancer.RequestTracker.REQUEST_TRACKER_KEY;
43+
import static io.servicetalk.client.api.RequestTracker.REQUEST_TRACKER_KEY;
4444
import static io.servicetalk.transport.netty.internal.AddressUtils.localAddress;
4545
import static io.servicetalk.transport.netty.internal.AddressUtils.serverHostAndPort;
4646
import static org.hamcrest.MatcherAssert.assertThat;

servicetalk-http-netty/build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ dependencies {
2929
implementation project(":servicetalk-dns-discovery-netty")
3030
implementation project(":servicetalk-http-utils")
3131
implementation project(":servicetalk-loadbalancer")
32-
implementation project(":servicetalk-loadbalancer-experimental")
3332
implementation project(":servicetalk-loadbalancer-experimental-provider")
3433
implementation project(":servicetalk-logging-slf4j-internal")
3534
implementation project(":servicetalk-tcp-netty-internal")

servicetalk-http-netty/src/main/java/io/servicetalk/http/netty/HttpRequestTracker.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@
1919
import io.servicetalk.client.api.ConnectionFactory;
2020
import io.servicetalk.client.api.ConnectionFactoryFilter;
2121
import io.servicetalk.client.api.DelegatingConnectionFactory;
22+
import io.servicetalk.client.api.RequestTracker;
2223
import io.servicetalk.concurrent.api.Single;
2324
import io.servicetalk.context.api.ContextMap;
2425
import io.servicetalk.http.api.FilterableStreamingHttpConnection;
2526
import io.servicetalk.http.api.HttpHeaders;
2627
import io.servicetalk.http.api.HttpLifecycleObserver;
2728
import io.servicetalk.http.api.HttpRequestMetaData;
2829
import io.servicetalk.http.api.HttpResponseMetaData;
29-
import io.servicetalk.loadbalancer.RequestTracker;
3030
import io.servicetalk.transport.api.ConnectionInfo;
3131
import io.servicetalk.transport.api.ExecutionStrategy;
3232
import io.servicetalk.transport.api.TransportObserver;
@@ -38,11 +38,11 @@
3838
import java.util.concurrent.atomic.AtomicLongFieldUpdater;
3939
import javax.annotation.Nullable;
4040

41+
import static io.servicetalk.client.api.RequestTracker.ErrorClass.EXT_ORIGIN_TIMEOUT;
42+
import static io.servicetalk.client.api.RequestTracker.ErrorClass.LOCAL_ORIGIN_REQUEST_FAILED;
43+
import static io.servicetalk.client.api.RequestTracker.REQUEST_TRACKER_KEY;
4144
import static io.servicetalk.http.api.HttpResponseStatus.StatusClass.SERVER_ERROR_5XX;
4245
import static io.servicetalk.http.api.HttpResponseStatus.TOO_MANY_REQUESTS;
43-
import static io.servicetalk.loadbalancer.RequestTracker.ErrorClass.EXT_ORIGIN_TIMEOUT;
44-
import static io.servicetalk.loadbalancer.RequestTracker.ErrorClass.LOCAL_ORIGIN_REQUEST_FAILED;
45-
import static io.servicetalk.loadbalancer.RequestTracker.REQUEST_TRACKER_KEY;
4646

4747
final class HttpRequestTracker {
4848

servicetalk-http-netty/src/test/java/io/servicetalk/http/netty/HttpRequestTrackerTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
package io.servicetalk.http.netty;
1717

1818
import io.servicetalk.client.api.DelegatingConnectionFactory;
19+
import io.servicetalk.client.api.RequestTracker;
1920
import io.servicetalk.concurrent.api.Single;
2021
import io.servicetalk.context.api.ContextMap;
2122
import io.servicetalk.http.api.FilterableStreamingHttpConnection;
2223
import io.servicetalk.http.api.HttpClient;
2324
import io.servicetalk.http.api.HttpResponse;
2425
import io.servicetalk.http.api.HttpService;
2526
import io.servicetalk.http.api.SingleAddressHttpClientBuilder;
26-
import io.servicetalk.loadbalancer.RequestTracker;
2727
import io.servicetalk.transport.api.HostAndPort;
2828
import io.servicetalk.transport.api.ServerContext;
2929
import io.servicetalk.transport.api.TransportObserver;
@@ -39,7 +39,7 @@
3939

4040
import static io.netty.handler.codec.http.HttpStatusClass.SERVER_ERROR;
4141
import static io.netty.handler.codec.http.HttpStatusClass.SUCCESS;
42-
import static io.servicetalk.loadbalancer.RequestTracker.REQUEST_TRACKER_KEY;
42+
import static io.servicetalk.client.api.RequestTracker.REQUEST_TRACKER_KEY;
4343
import static io.servicetalk.transport.netty.internal.AddressUtils.localAddress;
4444
import static io.servicetalk.transport.netty.internal.AddressUtils.serverHostAndPort;
4545
import static org.hamcrest.MatcherAssert.assertThat;

servicetalk-loadbalancer-experimental-provider/build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,5 @@ dependencies {
2121

2222
implementation project(":servicetalk-annotations")
2323
implementation project(":servicetalk-loadbalancer")
24-
implementation project(":servicetalk-loadbalancer-experimental")
2524
implementation "org.slf4j:slf4j-api:$slf4jVersion"
2625
}

servicetalk-loadbalancer-experimental/build.gradle

+4-19
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,9 @@
1616

1717
apply plugin: "io.servicetalk.servicetalk-gradle-plugin-internal-library"
1818

19-
dependencies {
20-
api project(":servicetalk-client-api")
21-
api project(":servicetalk-concurrent-api")
22-
23-
implementation project(":servicetalk-annotations")
24-
implementation project(":servicetalk-concurrent-api-internal")
25-
implementation project(":servicetalk-concurrent-internal")
26-
implementation project(":servicetalk-loadbalancer")
27-
implementation project(":servicetalk-utils-internal")
28-
implementation "org.slf4j:slf4j-api:$slf4jVersion"
19+
tasks.named("javadoc").configure {
20+
enabled = false
21+
}
2922

30-
testImplementation enforcedPlatform("org.junit:junit-bom:$junit5Version")
31-
testImplementation testFixtures(project(":servicetalk-concurrent-api"))
32-
testImplementation testFixtures(project(":servicetalk-concurrent-internal"))
33-
testImplementation project(":servicetalk-concurrent-test-internal")
34-
testImplementation project(":servicetalk-test-resources")
35-
testImplementation "org.junit.jupiter:junit-jupiter-api"
36-
testImplementation "org.junit.jupiter:junit-jupiter-params"
37-
testImplementation "org.hamcrest:hamcrest:$hamcrestVersion"
38-
testImplementation "org.mockito:mockito-core:$mockitoCoreVersion"
23+
dependencies {
3924
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
# This is a Gradle generated file for dependency locking.
22
# Manual edits can break the build and are not advised.
33
# This file is expected to be part of source control.
4-
com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath
5-
org.jctools:jctools-core:4.0.3=runtimeClasspath
6-
org.slf4j:slf4j-api:1.7.36=compileClasspath,runtimeClasspath
7-
empty=annotationProcessor,spotbugsPlugins,testAnnotationProcessor
4+
empty=annotationProcessor,compileClasspath,runtimeClasspath

servicetalk-loadbalancer-experimental/gradle/checkstyle/suppressions.xml

-4
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,4 @@
2121
<suppressions>
2222
<!-- No need for package-info.java file because we reuse the package where this file already exists -->
2323
<suppress checks="JavadocPackage" files=".*[\\/]src[\\/]main[\\/]java[\\/]io[\\/]servicetalk[\\/]loadbalancer.*"/>
24-
<suppress id="MissedElementsAreNonnullByDefault"
25-
files="io[\\/]servicetalk[\\/]loadbalancer[\\/]package-info.java"/>
26-
<suppress checks="LineLength"
27-
files="io[\\/]servicetalk[\\/]loadbalancer[\\/]OutlierDetectorConfig.java"/>
2824
</suppressions>

servicetalk-loadbalancer-experimental/gradle/spotbugs/test-exclusions.xml

-35
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright © 2024 Apple Inc. and the ServiceTalk project authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.servicetalk.loadbalancer;
17+
18+
// FIXME: 0.43: TL;DR: Remove this module. This package existed to support the DefaultLoadBalancer development which
19+
// has since been merged into the servicetalk-loadbalancer module.
20+
final class PlaceHolder {
21+
private PlaceHolder() {
22+
}
23+
}

servicetalk-loadbalancer-experimental/README.adoc servicetalk-loadbalancer/DEFAULTLOADBALANCER.adoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
~ Copyright © 2024 Apple Inc. and the ServiceTalk project authors
4+
~
5+
~ Licensed under the Apache License, Version 2.0 (the "License");
6+
~ you may not use this file except in compliance with the License.
7+
~ You may obtain a copy of the License at
8+
~
9+
~ http://www.apache.org/licenses/LICENSE-2.0
10+
~
11+
~ Unless required by applicable law or agreed to in writing, software
12+
~ distributed under the License is distributed on an "AS IS" BASIS,
13+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
~ See the License for the specific language governing permissions and
15+
~ limitations under the License.
16+
-->
17+
<!DOCTYPE suppressions PUBLIC
18+
"-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
19+
"https://checkstyle.org/dtds/suppressions_1_2.dtd">
20+
21+
<suppressions>
22+
<suppress checks="LineLength"
23+
files="io[\\/]servicetalk[\\/]loadbalancer[\\/]OutlierDetectorConfig.java"/>
24+
</suppressions>

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

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package io.servicetalk.loadbalancer;
1717

18+
import io.servicetalk.client.api.RequestTracker;
19+
1820
/**
1921
* An interface for tracking connection establishment measurements.
2022
* This has an intended usage similar to the {@link RequestTracker} but with a focus on connection establishment

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.function.Predicate;
4343
import javax.annotation.Nullable;
4444

45+
import static io.servicetalk.client.api.RequestTracker.REQUEST_TRACKER_KEY;
4546
import static io.servicetalk.concurrent.api.AsyncCloseables.toAsyncCloseable;
4647
import static io.servicetalk.concurrent.api.Completable.completed;
4748
import static io.servicetalk.concurrent.api.Publisher.fromIterable;
@@ -52,7 +53,6 @@
5253
import static io.servicetalk.loadbalancer.ConnectTracker.ErrorClass.CANCELLED;
5354
import static io.servicetalk.loadbalancer.ConnectTracker.ErrorClass.CONNECT_ERROR;
5455
import static io.servicetalk.loadbalancer.ConnectTracker.ErrorClass.CONNECT_TIMEOUT;
55-
import static io.servicetalk.loadbalancer.RequestTracker.REQUEST_TRACKER_KEY;
5656
import static java.util.Collections.emptyList;
5757
import static java.util.Objects.requireNonNull;
5858
import static java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater;

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

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.servicetalk.loadbalancer;
1717

18+
import io.servicetalk.client.api.RequestTracker;
1819
import io.servicetalk.client.api.ScoreSupplier;
1920

2021
import java.util.concurrent.locks.StampedLock;

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

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package io.servicetalk.loadbalancer;
1717

1818
import io.servicetalk.client.api.LoadBalancedConnection;
19+
import io.servicetalk.client.api.RequestTracker;
1920
import io.servicetalk.client.api.ScoreSupplier;
2021
import io.servicetalk.concurrent.Cancellable;
2122

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

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package io.servicetalk.loadbalancer;
1717

1818
import io.servicetalk.client.api.LoadBalancedConnection;
19+
import io.servicetalk.client.api.RequestTracker;
1920
import io.servicetalk.concurrent.api.Executor;
2021
import io.servicetalk.loadbalancer.LoadBalancerObserver.HostObserver;
2122

servicetalk-loadbalancer-experimental/src/test/java/io/servicetalk/loadbalancer/DefaultLoadBalancerTest.java servicetalk-loadbalancer/src/test/java/io/servicetalk/loadbalancer/DefaultLoadBalancerTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.servicetalk.loadbalancer;
1717

18+
import io.servicetalk.client.api.RequestTracker;
1819
import io.servicetalk.client.api.ServiceDiscovererEvent;
1920
import io.servicetalk.concurrent.PublisherSource;
2021
import io.servicetalk.concurrent.api.Processors;
+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package io.servicetalk.loadbalancer;
1717

18+
import io.servicetalk.client.api.RequestTracker;
19+
1820
import org.junit.jupiter.api.Test;
1921
import org.junit.jupiter.params.ParameterizedTest;
2022
import org.junit.jupiter.params.provider.ValueSource;

0 commit comments

Comments
 (0)