A networking framework that evolves with your application

Overview

ServiceTalk

Maven Central

ServiceTalk is a JVM network application framework with APIs tailored to specific protocols (e.g. HTTP/1.x, HTTP/2.x, etc…​) and supports multiple programming paradigms.

It is built on Netty and is designed to provide most of the performance/scalability benefits of Netty for common networking protocols used in service to service communication. ServiceTalk provides server support and "smart client" like features such as client-side load balancing and service discovery integration.

See the ServiceTalk docs for more information.

Getting Started

ServiceTalk releases are available on Maven Central.

For Gradle as well as other build tools that don’t use Maven Central as a default repository, additional configuration is required.

Gradle, build.gradle
repositories {
  jcenter() // combines Maven Central and other popular repositories
}

Refer to the ServiceTalk docs for various examples that will get you started with the different features of ServiceTalk.

Note
Builds of the development version are available in Sonatype’s snapshots Maven repository.

Supported JVM

The minimum supported JDK version is 1.8.

Compatibility

ServiceTalk follows SemVer 2.0.0. API/ABI breaking changes will require package renaming for that module to avoid runtime classpath conflicts.

Note
0.x.y releases are not stable and are permitted to break API/ABI.

Contributor Setup

Important
If you’re intending to contribute to ServiceTalk, make sure to first read the contribution guidelines.

ServiceTalk uses Gradle as its build tool and only requires JDK 8 or higher to be pre-installed. ServiceTalk ships with the Gradle Wrapper, which means that there is no need to install Gradle on your machine beforehand.

File Encoding

ServiceTalk’s source code is UTF-8 encoded: make sure your filesystem supports it before attempting to build the project. Setting the JAVA_TOOL_OPTIONS env var to -Dfile.encoding=UTF-8 should help building the project in non-UTF-8 environments. Editors and IDEs must also support UTF-8 in order to successfully edit ServiceTalk’s source code.

Gradle Repositories

ServiceTalk’s build produces custom Gradle plugins and thus has regular (i.e. non-buildscript) dependencies on other plugins. This is the reason why the repositories that are provided if none are configured globally are the following:

allprojects {
  buildscript {
    repositories {
      jcenter()
      maven { url "https://plugins.gradle.org/m2/" }
    }
  }
  repositories {
    jcenter()
    maven { url "https://plugins.gradle.org/m2/" }
  }
}

If you have defined repositories or repository mirrors in your global Gradle config (~/.gradle/init.gradle), the build will detect them and attempt to inherit buildscript repositories into the main repositories of the sub-projects that produce custom Gradle plugins.

Note
This inheritance mechanism can be disabled by setting a Gradle property:
-PdisableInheritBuildscriptRepositories.

Build Commands

You should be able to run the following command to build ServiceTalk and verify that all tests and code quality checks pass:

$ ./gradlew build

The supported IDE is IntelliJ IDEA. In order to generate IntelliJ IDEA project files for ServiceTalk, you can run the following command:

$ ./gradlew idea

When done, running one of following commands would open ServiceTalk in IntelliJ:

Generic
$ idea .
macOS
$ open servicetalk.ipr

Project Communication

We encourage your participation asking questions and helping improve the ServiceTalk project. Github issues and pull requests are the primary mechanisms of participation and communication for ServiceTalk.

Comments
  • Flaky test: ConnectionCloseHeaderHandlingTest

    Flaky test: ConnectionCloseHeaderHandlingTest

    https://github.com/apple/servicetalk/pull/1578/checks?check_run_id=2670150613

    ConnectionCloseHeaderHandlingTest$NonPipelinedRequestsTest.31: useUds=false, viaProxy=true, awaitRequestPayload=false, requestInitiatesClosure=false, noRequestContent=false, noResponseContent=true

    java.util.concurrent.ExecutionException: io.servicetalk.transport.netty.internal.CloseHandler$CloseEventObservedException: PROTOCOL_CLOSING_INBOUND(The application protocol closed the read side of this connection. This maybe the result of sending an HTTP header such as Connection: close.) [id: 0x1c755501, L:/127.0.0.1:44596 ! R:127.0.0.1/127.0.0.1:37209]
    	at io.servicetalk.concurrent.api.SourceToFuture.reportGet(SourceToFuture.java:121)
    	at io.servicetalk.concurrent.api.SourceToFuture.get(SourceToFuture.java:92)
    	at io.servicetalk.http.netty.ConnectionCloseHeaderHandlingTest$ConnectionSetup.assertResponsePayloadBody(ConnectionCloseHeaderHandlingTest.java:241)
    	at io.servicetalk.http.netty.ConnectionCloseHeaderHandlingTest$NonPipelinedRequestsTest.testConnectionClosure(ConnectionCloseHeaderHandlingTest.java:311)
    	at jdk.internal.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
    	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
    	at org.junit.jupiter.engine.extension.TimeoutInvocation.proceed(TimeoutInvocation.java:46)
    	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
    	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
    	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestTemplateMethod(TimeoutExtension.java:92)
    	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
    	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
    	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
    	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
    	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:212)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:192)
    	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:139)
    	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:107)
    	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
    	at java.base/java.util.stream.ReferencePipeline$11$1.accept(ReferencePipeline.java:442)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
    	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
    	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:274)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
    	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
    	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:274)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
    	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
    	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:274)
    	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
    	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
    	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:107)
    	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:42)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
    	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
    	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
    	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
    	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
    	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
    	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
    	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
    	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
    	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
    	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
    	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
    	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
    	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
    	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    	at com.sun.proxy.$Proxy2.stop(Unknown Source)
    	at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:133)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
    	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
    	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    	at java.base/java.lang.Thread.run(Thread.java:829)
    Caused by: io.servicetalk.transport.netty.internal.CloseHandler$CloseEventObservedException: PROTOCOL_CLOSING_INBOUND(The application protocol closed the read side of this connection. This maybe the result of sending an HTTP header such as Connection: close.) [id: 0x1c755501, L:/127.0.0.1:44596 ! R:127.0.0.1/127.0.0.1:37209]
    Caused by: io.servicetalk.transport.netty.internal.StacklessClosedChannelException
    	at io.servicetalk.transport.netty.internal.DefaultNettyConnection.userEventTriggered(ChannelOutputShutdownEvent)(Unknown Source)
    
    flaky tests 
    opened by idelpivnitskiy 66
  • FlakyTest: GracefulConnectionClosureHandlingTest

    FlakyTest: GracefulConnectionClosureHandlingTest

    java.util.concurrent.ExecutionException: io.servicetalk.transport.netty.internal.StacklessClosedChannelException
    	at io.servicetalk.concurrent.api.SourceToFuture.reportGet(SourceToFuture.java:121)
    	at io.servicetalk.concurrent.api.SourceToFuture.get(SourceToFuture.java:92)
    	at io.servicetalk.http.netty.GracefulConnectionClosureHandlingTest.assertResponsePayloadBody(GracefulConnectionClosureHandlingTest.java:470)
    	at io.servicetalk.http.netty.GracefulConnectionClosureHandlingTest.closeAfterRequestMetaDataSentResponseMetaDataReceived(GracefulConnectionClosureHandlingTest.java:332)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:161)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:153)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at java.lang.Thread.run(Thread.java:748)
    Caused by: io.servicetalk.transport.netty.internal.StacklessClosedChannelException
    	at io.servicetalk.transport.netty.internal.DefaultNettyConnection.channelInactive(...)(Unknown Source)
    
    flaky tests 
    opened by tkountis 33
  • Convert jUnit4 tests to jUnit5

    Convert jUnit4 tests to jUnit5

    @danfaer has done huge work by migrating the biggest and the most complex modules (concurrent-api, http-api, and http-netty) from jUnit4 to jUnit5 in #1415 and #1521.

    For those, who want to learn ServiceTalk API, experience it as a user, and start contributing it might be a good exercise to do a similar conversion for other modules.

    Each pull request can convert only one module. There are plenty of modules that contain only a few test classes. Please, look at the referenced pull requests and make your work consistent with their style (how dependencies are declared, how parametrized tests are used, how timeout is configured, etc.).

    The whole list of modules with tests:

    • [x] servicetalk-buffer-api #1592
    • [x] servicetalk-buffer-netty #1593
    • [x] servicetalk-client-api-internal #1608
    • [x] servicetalk-client-api #1612
    • [x] servicetalk-concurrent-api-internal #1608
    • [x] servicetalk-concurrent-api #1415
    • [x] servicetalk-concurrent-api-internal #1658
    • [x] servicetalk-concurrent-api-test #1658
    • [x] servicetalk-concurrent-internal #1779
    • [x] servicetalk-concurrent-jdkflow #1624
    • [x] servicetalk-concurrent-reactivestreams #1628
    • [x] servicetalk-concurrent-test-internal #1658
    • [x] servicetalk-data-jackson-jersey #1645
    • [x] servicetalk-data-jackson #1664
    • [x] servicetalk-data-protobuf #1664
    • [x] servicetalk-dns-discovery-netty #1607
    • [x] servicetalk-encoding-api #1525
    • [x] servicetalk-encoding-netty #1664
    • [x] servicetalk-grpc-api #1660
    • [x] servicetalk-grpc-internal #1501
    • [x] servicetalk-grpc-netty #1660
    • [x] servicetalk-grpc-protobuf #1660
    • [x] servicetalk-grpc-protoc #1660
    • [x] servicetalk-http-api #1521
    • [x] servicetalk-http-netty #1521
    • [x] servicetalk-http-router-jersey #1645
    • [x] servicetalk-http-router-predicate #1659
    • [x] servicetalk-http-security-jersey #1659
    • [x] servicetalk-http-utils #1659
    • [X] servicetalk-loadbalancer#1762
    • [x] servicetalk-log4j2-mdc-utils #1664
    • [x] servicetalk-log4j2-mdc #1664
    • [x] servicetalk-opentracing-asynccontext #1603
    • [x] servicetalk-opentracing-http #1604
    • [x] servicetalk-opentracing-inmemory #1599
    • [x] servicetalk-opentracing-log4j2 #1605
    • [x] servicetalk-opentracing-zipkin-publisher #1606
    • [x] servicetalk-serialization-api #1664
    • [x] servicetalk-tcp-netty-internal #1664
    • [x] servicetalk-test-resources #1664
    • [x] servicetalk-transport-api #1600
    • [x] servicetalk-transport-netty-internal #1601 and #1780
    • [x] servicetalk-utils-internal #1664
    • [x] Remove jUnit4 dependency #1780
    good first issue 
    opened by idelpivnitskiy 27
  • GracefulConnectionClosureHandlingTest.closePipelinedAfterTwoRequestsSentBeforeAnyResponseReceived test failure

    GracefulConnectionClosureHandlingTest.closePipelinedAfterTwoRequestsSentBeforeAnyResponseReceived test failure

    https://ci.servicetalk.io/job/servicetalk-java11-prb/1644/testReport/junit/io.servicetalk.http.netty/GracefulConnectionClosureHandlingTest/closePipelinedAfterTwoRequestsSentBeforeAnyResponseReceived_4__protocol_HTTP_1_initiateClosureFromClient_false_useUds_false_viaProxy_true_/

    io.servicetalk.http.netty.GracefulConnectionClosureHandlingTest.closePipelinedAfterTwoRequestsSentBeforeAnyResponseReceived[4: protocol=HTTP_1 initiateClosureFromClient=false useUds=false viaProxy=true]
    
    Error Message
    java.util.concurrent.ExecutionException: io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer
    Stacktrace
    java.util.concurrent.ExecutionException: io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer
    	at io.servicetalk.concurrent.api.SourceToFuture.reportGet(SourceToFuture.java:121)
    	at io.servicetalk.concurrent.api.SourceToFuture.get(SourceToFuture.java:92)
    	at io.servicetalk.http.netty.GracefulConnectionClosureHandlingTest.closePipelinedAfterTwoRequestsSentBeforeAnyResponseReceived(GracefulConnectionClosureHandlingTest.java:401)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:171)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:163)
    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    	at java.base/java.lang.Thread.run(Thread.java:834)
    Caused by: io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer
    Standard Output
    2020-10-21 22:41:52,542              proxy-tunnel-38-3 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$handleRequest$3(ProxyTunnel.java:134) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:53,005              proxy-tunnel-39-3 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$handleRequest$3(ProxyTunnel.java:134) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:53,554              proxy-tunnel-40-3 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113) ~[?:?]
    	at java.net.SocketOutputStream.write(SocketOutputStream.java:129) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:145) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$handleRequest$3(ProxyTunnel.java:134) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:53,900              proxy-tunnel-41-3 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$handleRequest$3(ProxyTunnel.java:134) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:54,236              proxy-tunnel-42-3 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$handleRequest$3(ProxyTunnel.java:134) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:54,734              proxy-tunnel-43-3 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$handleRequest$3(ProxyTunnel.java:134) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:55,344              proxy-tunnel-44-3 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$handleRequest$3(ProxyTunnel.java:134) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:55,856              proxy-tunnel-45-3 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$handleRequest$3(ProxyTunnel.java:134) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:57,508              proxy-tunnel-46-2 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.handleRequest(ProxyTunnel.java:135) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$startProxy$0(ProxyTunnel.java:75) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:57,934              proxy-tunnel-47-2 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.handleRequest(ProxyTunnel.java:135) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$startProxy$0(ProxyTunnel.java:75) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:58,438              proxy-tunnel-48-2 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.handleRequest(ProxyTunnel.java:135) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$startProxy$0(ProxyTunnel.java:75) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:58,783              proxy-tunnel-49-2 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113) ~[?:?]
    	at java.net.SocketOutputStream.write(SocketOutputStream.java:129) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:145) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.handleRequest(ProxyTunnel.java:135) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$startProxy$0(ProxyTunnel.java:75) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:59,195                    Test worker [ERROR] ResourceLeakDetector           - LEAK: ByteBuf.release() was not called before it's garbage-collected. See https://netty.io/wiki/reference-counted-objects.html for more information.
    Recent access records: 
    Created at:
    	io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:385)
    	io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:187)
    	io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:178)
    	io.servicetalk.http.netty.HttpObjectEncoder.write(HttpObjectEncoder.java:127)
    	io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
    	io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
    	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
    	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
    	io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1015)
    	io.netty.channel.AbstractChannel.write(AbstractChannel.java:289)
    	io.servicetalk.transport.netty.internal.WriteStreamSubscriber$AllWritesPromise.writeNext(WriteStreamSubscriber.java:340)
    	io.servicetalk.transport.netty.internal.WriteStreamSubscriber.doWrite(WriteStreamSubscriber.java:169)
    	io.servicetalk.transport.netty.internal.WriteStreamSubscriber.onNext(WriteStreamSubscriber.java:160)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriptionSubscriber.onNext(ContextPreservingSubscriptionSubscriber.java:39)
    	io.servicetalk.transport.netty.internal.Flush$FlushSubscriber.onNext(Flush.java:116)
    	io.servicetalk.concurrent.api.RedoPublisher$RedoSubscriber.onNext(RedoPublisher.java:104)
    	io.servicetalk.concurrent.api.SingleFlatMapPublisher$SubscriberImpl.onNext(SingleFlatMapPublisher.java:101)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriber.onNext(ContextPreservingSubscriber.java:72)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriptionSubscriber.onNext(ContextPreservingSubscriptionSubscriber.java:39)
    	io.servicetalk.concurrent.internal.TaskBasedSignalOffloader$OffloadedSubscriptionSubscriber.onNext(TaskBasedSignalOffloader.java:799)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriber.onNext(ContextPreservingSubscriber.java:72)
    	io.servicetalk.concurrent.api.PublisherConcatWithCompletable$ConcatSubscriber.onNext(PublisherConcatWithCompletable.java:69)
    	io.servicetalk.concurrent.internal.TaskBasedSignalOffloader$OffloadedSubscriptionSubscriber.onNext(TaskBasedSignalOffloader.java:799)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriber.onNext(ContextPreservingSubscriber.java:72)
    	io.servicetalk.concurrent.api.PublisherConcatWithCompletable$ConcatSubscriber.onNext(PublisherConcatWithCompletable.java:69)
    	io.servicetalk.concurrent.internal.TaskBasedSignalOffloader$OffloadedSubscriptionSubscriber.onNext(TaskBasedSignalOffloader.java:799)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriptionSubscriber.onNext(ContextPreservingSubscriptionSubscriber.java:39)
    	io.servicetalk.concurrent.api.SingleFlatMapPublisher$SubscriberImpl.onNext(SingleFlatMapPublisher.java:101)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriber.onNext(ContextPreservingSubscriber.java:72)
    	io.servicetalk.concurrent.api.SingleFlatMapPublisher$SubscriberImpl.onNext(SingleFlatMapPublisher.java:101)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriber.onNext(ContextPreservingSubscriber.java:72)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriber.onNext(ContextPreservingSubscriber.java:72)
    	io.servicetalk.concurrent.api.PublisherConcatWithSingle$ConcatSubscriber.onNext(PublisherConcatWithSingle.java:80)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriber.onNext(ContextPreservingSubscriber.java:72)
    	io.servicetalk.concurrent.api.ConcatPublisher$ConcatSubscriber.onNext(ConcatPublisher.java:61)
    	io.servicetalk.concurrent.api.ContextPreservingSubscriber.onNext(ContextPreservingSubscriber.java:72)
    	io.servicetalk.concurrent.internal.ScalarValueSubscription.request(ScalarValueSubscription.java:61)
    	io.servicetalk.concurrent.api.SequentialSubscription.request(SequentialSubscription.java:110)
    	io.servicetalk.concurrent.api.ContextPreservingSubscription.request(ContextPreservingSubscription.java:46)
    	io.servicetalk.concurrent.api.PublisherConcatWithSingle$ConcatSubscriber.request(PublisherConcatWithSingle.java:157)
    	io.servicetalk.concurrent.api.ContextPreservingSubscription.request(ContextPreservingSubscription.java:46)
    	io.servicetalk.concurrent.internal.DelayedSubscription.request(DelayedSubscription.java:77)
    	io.servicetalk.concurrent.api.DelayedCancellableThenSubscription.request(DelayedCancellableThenSubscription.java:46)
    	io.servicetalk.concurrent.api.ContextPreservingSubscription.request(ContextPreservingSubscription.java:46)
    	io.servicetalk.concurrent.internal.DelayedSubscription.request(DelayedSubscription.java:77)
    	io.servicetalk.concurrent.api.DelayedCancellableThenSubscription.request(DelayedCancellableThenSubscription.java:46)
    	io.servicetalk.concurrent.api.ContextPreservingSubscription.request(ContextPreservingSubscription.java:46)
    	io.servicetalk.concurrent.internal.TaskBasedSignalOffloader$OffloadedSubscription.run(TaskBasedSignalOffloader.java:220)
    	io.servicetalk.concurrent.api.ContextPreservingRunnable.run(ContextPreservingRunnable.java:43)
    	java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    	java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    	java.base/java.lang.Thread.run(Thread.java:834)
    2020-10-21 22:41:59,429              proxy-tunnel-50-2 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.handleRequest(ProxyTunnel.java:135) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$startProxy$0(ProxyTunnel.java:75) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:41:59,916              proxy-tunnel-51-2 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.handleRequest(ProxyTunnel.java:135) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$startProxy$0(ProxyTunnel.java:75) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:42:00,402              proxy-tunnel-52-2 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.handleRequest(ProxyTunnel.java:135) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$startProxy$0(ProxyTunnel.java:75) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    2020-10-21 22:42:01,006              proxy-tunnel-53-2 [ERROR] ProxyTunnel                    - Proxy exception
    java.net.SocketException: Socket closed
    	at java.net.SocketInputStream.socketRead0(Native Method) ~[?:?]
    	at java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:168) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]
    	at java.net.SocketInputStream.read(SocketInputStream.java:200) ~[?:?]
    	at io.servicetalk.http.netty.ProxyTunnel.copyStream(ProxyTunnel.java:144) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.handleRequest(ProxyTunnel.java:135) ~[test/:?]
    	at io.servicetalk.http.netty.ProxyTunnel.lambda$startProxy$0(ProxyTunnel.java:75) ~[test/:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]
    
    flaky tests 
    opened by Scottmitch 24
  • Flaky test: io.servicetalk.http.router.jersey.CancellationTest.cancelRsStreams

    Flaky test: io.servicetalk.http.router.jersey.CancellationTest.cancelRsStreams

    https://ci.servicetalk.io/job/servicetalk-java11-prb/1138/testReport/junit/io.servicetalk.http.router.jersey/CancellationTest/cancelRsStreams/

    Error Message
    java.lang.AssertionError: 
    Expected: is null
         but: was <java.lang.IllegalStateException: Entity input stream has already been closed.>
    Stacktrace
    java.lang.AssertionError: 
    Expected: is null
         but: was <java.lang.IllegalStateException: Entity input stream has already been closed.>
    	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
    	at org.junit.Assert.assertThat(Assert.java:964)
    	at org.junit.Assert.assertThat(Assert.java:930)
    	at io.servicetalk.http.router.jersey.CancellationTest.testCancelResponseSingle(CancellationTest.java:262)
    	at io.servicetalk.http.router.jersey.CancellationTest.testCancelResponseSingle(CancellationTest.java:213)
    	at io.servicetalk.http.router.jersey.CancellationTest.cancelRsStreams(CancellationTest.java:169)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    	at org.mockito.internal.junit.JUnitRule$1.evaluateSafely(JUnitRule.java:57)
    	at org.mockito.internal.junit.JUnitRule$1.evaluate(JUnitRule.java:48)
    	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:54)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:171)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:163)
    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    	at java.base/java.lang.Thread.run(Thread.java:834)
    Standard Output
    [MockitoHint] CancellationTest.cancelSingle (see javadoc for MockitoHint):
    [MockitoHint] 1. Unused -> at io.servicetalk.http.router.jersey.CancellationTest.setup(CancellationTest.java:115)
    [MockitoHint] 2. Unused -> at io.servicetalk.http.router.jersey.CancellationTest.setup(CancellationTest.java:116)
    [MockitoHint] 3. Unused -> at io.servicetalk.http.router.jersey.CancellationTest.setup(CancellationTest.java:117)
    [MockitoHint] 4. Unused -> at io.servicetalk.http.router.jersey.CancellationTest.se
    ...[truncated 1402 chars]...
    io.servicetalk.http.router.jersey.CancellationTest.setup(CancellationTest.java:118)
    [MockitoHint] 5. Unused -> at io.servicetalk.http.router.jersey.CancellationTest.setup(CancellationTest.java:119)
    [MockitoHint] 6. Unused -> at io.servicetalk.http.router.jersey.CancellationTest.setup(CancellationTest.java:120)
    
    [MockitoHint] CancellationTest.cancelSse (see javadoc for MockitoHint):
    [MockitoHint] 1. Unused -> at io.servicetalk.http.router.jersey.CancellationTest.setup(CancellationTest.java:119)
    
    Standard Error
    Apr 02, 2020 10:32:57 PM org.glassfish.jersey.internal.inject.Providers checkProviderRuntime
    WARNING: A provider io.servicetalk.http.router.jersey.resources.CancellableResources registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider io.servicetalk.http.router.jersey.resources.CancellableResources will be ignored. 
    Apr 02, 2020 10:32:57 PM org.glassfish.jersey.internal.inject.Providers checkPr
    ...[truncated 16009 chars]...
    9)
    	at io.servicetalk.concurrent.api.ContextPreservingRunnable.run(ContextPreservingRunnable.java:43)
    	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    	at java.base/java.lang.Thread.run(Thread.java:834)
    

    This issue is different, compare to #108. Can not reproduce locally in Intellij IDEA.

    flaky tests 
    opened by idelpivnitskiy 21
  • ConsumeRequestPayloadOnResponsePathTest.testConsumeRequestPayloadAfterTrailersSent test failure

    ConsumeRequestPayloadOnResponsePathTest.testConsumeRequestPayloadAfterTrailersSent test failure

    https://ci.servicetalk.io/job/servicetalk-master-snapshot/378/testReport/junit/io.servicetalk.http.netty/ConsumeRequestPayloadOnResponsePathTest/testConsumeRequestPayloadAfterTrailersSent

    Error Message
    
    java.lang.AssertionError: 
    Expected: is "ExpectedRequestPayload"
         but: was ""
    Stacktrace
    
    java.lang.AssertionError: 
    Expected: is "ExpectedRequestPayload"
         but: was ""
    	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
    	at org.junit.Assert.assertThat(Assert.java:956)
    	at org.junit.Assert.assertThat(Assert.java:923)
    	at io.servicetalk.http.netty.ConsumeRequestPayloadOnResponsePathTest.test(ConsumeRequestPayloadOnResponsePathTest.java:174)
    	at io.servicetalk.http.netty.ConsumeRequestPayloadOnResponsePathTest.testConsumeRequestPayloadAfterTrailersSent(ConsumeRequestPayloadOnResponsePathTest.java:104)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:168)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:160)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at java.lang.Thread.run(Thread.java:748)
    
    flaky tests 
    opened by Scottmitch 20
  • Flaky test: HttpTransportObserverTest#serverHandlerError (protocol=HTTP_2)

    Flaky test: HttpTransportObserverTest#serverHandlerError (protocol=HTTP_2)

    https://github.com/apple/servicetalk/pull/1660/checks?check_run_id=2996316294

    java.util.concurrent.TimeoutException: serverHandlerError(io.servicetalk.http.netty.HttpProtocol) timed out after 30 seconds
    ...
    Suppressed: java.lang.RuntimeException: Thread sleep has been interrupted
    		at org.mockito.internal.verification.VerificationOverTimeImpl.sleep(VerificationOverTimeImpl.java:119)
    		at org.mockito.internal.verification.VerificationOverTimeImpl.handleVerifyException(VerificationOverTimeImpl.java:100)
    		at org.mockito.internal.verification.VerificationOverTimeImpl.verify(VerificationOverTimeImpl.java:86)
    		at org.mockito.internal.verification.VerificationWrapper.verify(VerificationWrapper.java:19)
    		at org.mockito.internal.verification.MockAwareVerificationMode.verify(MockAwareVerificationMode.java:27)
    		at org.mockito.internal.handler.MockHandlerImpl.handle(MockHandlerImpl.java:72)
    		at org.mockito.internal.handler.NullResultGuardian.handle(NullResultGuardian.java:29)
    		at org.mockito.internal.handler.InvocationNotifierHandler.handle(InvocationNotifierHandler.java:35)
    		at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor.doIntercept(MockMethodInterceptor.java:61)
    		at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor.doIntercept(MockMethodInterceptor.java:49)
    		at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor$DispatcherDefaultingToRealMethod.interceptAbstract(MockMethodInterceptor.java:126)
    		at io.servicetalk.transport.api.ConnectionObserver$WriteObserver$MockitoMock$798461370.writeComplete(Unknown Source)
    		at io.servicetalk.http.netty.HttpTransportObserverTest.testRequestResponse(HttpTransportObserverTest.java:232)
    		at io.servicetalk.http.netty.HttpTransportObserverTest.serverHandlerError(HttpTransportObserverTest.java:209)
    		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    		at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
    		at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
    		at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
    		at org.junit.jupiter.engine.extension.TimeoutInvocation.proceed(TimeoutInvocation.java:46)
    		... 136 more
    	Caused by: java.lang.InterruptedException: sleep interrupted
    		at java.base/java.lang.Thread.sleep(Native Method)
    		at org.mockito.internal.verification.VerificationOverTimeImpl.sleep(VerificationOverTimeImpl.java:117)
    		... 157 more
    
    flaky tests 
    opened by idelpivnitskiy 19
  • Flaky test: MalformedDataAfterHttpMessageTest

    Flaky test: MalformedDataAfterHttpMessageTest

    https://github.com/apple/servicetalk/pull/1887/checks?check_run_id=3905793736

    MalformedDataAfterHttpMessageTest > afterResponseNextClientRequestSucceeds() FAILED
    java.lang.AssertionError: 
    Expected: not <[id: 0x574fe329, L:/127.0.0.1:50732 ! R:127.0.0.1/127.0.0.1:39629]>
         but: was <[id: 0x574fe329, L:/127.0.0.1:50732 ! R:127.0.0.1/127.0.0.1:39629]>
    	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
    	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:6)
    	at io.servicetalk.http.netty.MalformedDataAfterHttpMessageTest.afterResponseNextClientRequestSucceeds(MalformedDataAfterHttpMessageTest.java:142)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
    	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
    	at org.junit.jupiter.engine.extension.TimeoutInvocation.proceed(TimeoutInvocation.java:46)
    	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
    	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
    	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
    	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
    	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
    	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
    	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
    	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.executeNonConcurrentTasks(ForkJoinPoolHierarchicalTestExecutorService.java:155)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:135)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.executeNonConcurrentTasks(ForkJoinPoolHierarchicalTestExecutorService.java:155)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:135)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185)
    	at java.base/java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:194)
    	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
    	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
    	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
    	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
    	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
    
    flaky tests 
    opened by chemicL 18
  • Allow default deserializers to handle payload without specified encoding

    Allow default deserializers to handle payload without specified encoding

    Motivation:

    Many existing services don't include charset in Content-Type header. Therefore it would be convenient to have a default (UTF-8) deserializer that can handle payload if charset is UTF-8 or no charset is specified.

    Modifications:

    • Add a rule to hasContentType method to accept no charset case when the expected charset is UTF-8.

    Result:

    The default textDeserializer and formUrlEncodedDeserializer can deserialize payload of request/response with no charset in Content-Type header.

    opened by sonicloong 17
  • PrematureClosureBeforeResponsePayloadBodyTest.notAllHeadersReceived test failure

    PrematureClosureBeforeResponsePayloadBodyTest.notAllHeadersReceived test failure

    https://ci.servicetalk.io/job/servicetalk-java8-prb/1724/testReport/junit/io.servicetalk.http.netty/PrematureClosureBeforeResponsePayloadBodyTest/notAllHeadersReceived/

    io.servicetalk.http.netty.PrematureClosureBeforeResponsePayloadBodyTest.notAllHeadersReceived
    
    Error Message
    java.lang.AssertionError: unexpected exception type thrown; expected:<io.netty.handler.codec.PrematureChannelClosureException> but was:<io.servicetalk.transport.netty.internal.CloseHandler.CloseEventObservedException>
    Stacktrace
    java.lang.AssertionError: unexpected exception type thrown; expected:<io.netty.handler.codec.PrematureChannelClosureException> but was:<io.servicetalk.transport.netty.internal.CloseHandler.CloseEventObservedException>
    	at org.junit.Assert.assertThrows(Assert.java:1020)
    	at org.junit.Assert.assertThrows(Assert.java:981)
    	at io.servicetalk.http.netty.PrematureClosureBeforeResponsePayloadBodyTest.notAllHeadersReceived(PrematureClosureBeforeResponsePayloadBodyTest.java:140)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:171)
    	at io.servicetalk.concurrent.internal.ServiceTalkTestTimeout$TimeoutStatement$CallableStatement.call(ServiceTalkTestTimeout.java:163)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at java.lang.Thread.run(Thread.java:748)
    Caused by: io.servicetalk.transport.netty.internal.CloseHandler$CloseEventObservedException: CHANNEL_CLOSED_INBOUND(The transport backing this connection has been shutdown (read)) [id: 0x44c95b76, L:/127.0.0.1:58992 ! R:127.0.0.1/127.0.0.1:37889]
    Caused by: io.netty.handler.codec.PrematureChannelClosureException: Connection closed before received headers
    	at io.servicetalk.http.netty.HttpObjectDecoder.decodeLast(HttpObjectDecoder.java:469)
    	at io.servicetalk.transport.netty.internal.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:305)
    	at io.servicetalk.transport.netty.internal.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:274)
    	at io.servicetalk.transport.netty.internal.ByteToMessageDecoder.userEventTriggered(ByteToMessageDecoder.java:266)
    	at io.servicetalk.http.netty.HttpObjectDecoder.userEventTriggered(HttpObjectDecoder.java:514)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:346)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:332)
    	at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:324)
    	at io.servicetalk.transport.netty.internal.ServiceTalkWireLogger.userEventTriggered(ServiceTalkWireLogger.java:93)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:346)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:332)
    	at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:324)
    	at io.netty.channel.DefaultChannelPipeline$HeadContext.userEventTriggered(DefaultChannelPipeline.java:1428)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:346)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:332)
    	at io.netty.channel.DefaultChannelPipeline.fireUserEventTriggered(DefaultChannelPipeline.java:913)
    	at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.shutdownInput(AbstractEpollChannel.java:483)
    	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:818)
    	at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe$1.run(AbstractEpollChannel.java:388)
    	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
    	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
    	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:384)
    	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
    	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    	at java.lang.Thread.run(Thread.java:748)
    
    flaky tests 
    opened by Scottmitch 15
  • Adding a ProtobufSerializationProvider

    Adding a ProtobufSerializationProvider

    Adding a ProtobufSerializationProvider to do generic protobuf serialization for any Message type that it can see a Parser for.

    Motivation:

    A common protobuf serialization implementation would be benefitial for most all services that use protobufs as a data encoding.

    Modifications:

    • Added servicetalk-data-protobuf package with a SerializationProvider and accompanying tests.

    Result:

    Any project needing ServiceTalk Buffer to Protobuf serialization/deserialization should be able to bring this project in and use it directly with little to no configuration or customization.

    opened by colestanfield 15
  • Bump dawidd6/action-download-artifact from 2.24.2 to 2.24.3

    Bump dawidd6/action-download-artifact from 2.24.2 to 2.24.3

    Bumps dawidd6/action-download-artifact from 2.24.2 to 2.24.3.

    Commits
    • bd10f38 Merge pull request #218 from dawidd6/dependabot-npm_and_yarn-adm-zip-0.5.10
    • 61a654a build(deps): bump adm-zip from 0.5.9 to 0.5.10
    • dcadc4b Merge pull request #211 from koplo199/master
    • ceeb280 Remove unnecessary semicolon
    • 806bb52 Catch 'Artifact has expired' error
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Consider request strategy when we schedule timeouts or retries

    Consider request strategy when we schedule timeouts or retries

    Motivation:

    Currently, timeout and retrying filter uses an HttpExecutionStrategy from the ExecutionContext. However, on the requester side users can either use a different API that optimizes the pre-computed strategy or they can put a custom strategy per request.

    Modifications:

    • For RetryingHttpRequesterFilter, compute alternativeTimerExecutor based on HTTP_EXECUTION_STRATEGY_KEY;
    • For TimeoutHttpRequesterFilter, compute useForTimeout based on HTTP_EXECUTION_STRATEGY_KEY;
    • Adjust tests for new behavior;

    Result:

    1. On the client-side, the actual HttpExecutionStrategy associated with the request is considered.
    2. Less use of offloading executor when there is no need to offload.
    opened by idelpivnitskiy 0
  • Deprecate ConnectionFactoryFilter

    Deprecate ConnectionFactoryFilter "append"

    Motivation:

    At the moment the user experience on how to apply multiple ConnectionFactoryFilters is confusing because there are multiple ways on how to perform this task.

    In order to improve the ambiguity there should only be one common way to append multiple acceptor factories.

    Modifications:

    This changeset deprecates the append methods on the ConnectionFactoryFilter. A new ConnectionFactoryFilterAppender is added which is used internally and in tests, but can be used by a user who needs to port functionality forward when relying on the old behavior.

    All internal use of the deprecated APIs has been replaced with the helper class in preparation for later removal.

    Result:

    The primary API to chain the factories should be through the regular HttpClientBuilder which is now expressed through deprecation and later removal of the other APIs.

    opened by daschl 0
  • Deprecate ConnectionAcceptor(+ Factory)

    Deprecate ConnectionAcceptor(+ Factory) "append"

    Motivation:

    At the moment the user experience on how to apply multiple ConnectionAcceptorFactories is confusing because there are many different ways on how to perform this task.

    In order to improve the ambiguity there should only be one common way to append multiple acceptor factories.

    Modifications:

    This changeset deprecates the append methods on both the ConnectionAcceptor and the ConnectionAcceptorFactory. A new ConnectionAcceptorFactoryAppender is added which is used internally and in tests, but can be used by a user who needs to port functionality forward when relying on the old behavior.

    All internal use of the deprecated APIs has been replaced with the helper class in preparation for later removal.

    Result:

    The primary API to chain the acceptors should be through the regular HttpServerBuilder which is now expressed through deprecation and later removal of the other APIs.

    opened by daschl 1
  • Introduce GrpcExecutionStrategies#offloadNone

    Introduce GrpcExecutionStrategies#offloadNone

    Motivation:

    To ensure partiy with HttpExecutionStrategies it makes sense to introduce "offloadNone" as a static utility method instead of only making it accessible through a builder.

    Modifications:

    This changeset adds the static "offloadNone" utility method in GrpcExecutionStrategies and clarifies the javadoc of "offloadNever" (which is deprecated) on alternative usage.

    Result:

    Feature parity between GRPC and HTTP on the "offloadNone" execution strategy creation.

    opened by daschl 0
  • Allow to open new a new connection when reserving (HTTP).

    Allow to open new a new connection when reserving (HTTP).

    Motivation:

    When a connection is being reserved on one of the HttpClient variants, at the moment the user has no control over the decision if an existing connection should be reused or a new one will be opened.

    Use cases have been reported where being able to explicitly reserve a new connection instead of reusing one would be benefitial.

    Modifications:

    This changeset adds support for this feature by introducing two new APIs at different levels:

    • At the HttpClient level a HTTP_FORCE_NEW_CONNECTION context key has been added which signals the intention at the reserveConnection level by the user.
    • The LoadBalancer now features a newConnection method which by default throws an UnsupportedOperationException for backwards compatibility.

    The RoundRobinLoadBalancer implements the newConnection API by reusing all of the existing internal functionality (only skipping the connection reuse part and having to explicitly reserve since no predicate is present).

    Result:

    The user can now explicitly ask for a new connection when reserving a connection instead of potentially receiving an already opened one.

    opened by daschl 0
Releases(0.42.23)
  • 0.42.23(Dec 13, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    Changes

    API deprecations

    • https://github.com/apple/servicetalk/commit/8b414d85100f7c1e35a60858d28c5a2f716e95cd - Deprecate BufferHandler and BufferHolder (#2452)
    • https://github.com/apple/servicetalk/commit/f50a6154673c409b11cb5e04dc15d6abb469cd65 - Change return type of LoadBalancerFactory#newLoadBalancer(...) (#2465)
      • A new overload was introduced to change the return type from <T extends C> LoadBalancer<T> to LoadBalancer<C>. This makes it possible for the LoadBalancer implementation to more easily wrap the connection and augment behavior if necessary.

    New features

    • https://github.com/apple/servicetalk/commit/e8b584eee3d4a92d02bd9185093d59d9aca14812 - This release is JDK19 compatible (#2433)
    • https://github.com/apple/servicetalk/commit/557f530b7fec156f4cfc413d1bd9c370a6bd49ca - Add ListenableAsyncCloseable#onClosing() (#2430)
    • https://github.com/apple/servicetalk/commit/2ea43f3c6ab0a4a561d8634292cc6d08702a9291 - Add CacheConnectionHttpLoadBalanceFactory (#2334)
    • https://github.com/apple/servicetalk/commit/080d6a01004950e29501923dbccdbf0a9d3f7e41 - Added mark/reset functionality to BufferInputStream (#2447)

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/344083e1c782f3126c359c50998f3b915c426a41 - RetryingHttpRequesterFilter subtract LB not ready from request retry strategy (#2438)
    • https://github.com/apple/servicetalk/commit/ce185f1c2662583c6beeb25fc6b1e310a442e4a3 - CloseHandler force RST on close if still reading to avoid half close hang (#2431)
    • https://github.com/apple/servicetalk/commit/0a9efcc1724f2f14b2913108e79457693535ab8c - RoundRobinLoadBalancer fix connection leak during graceful closure (#2450)
    • https://github.com/apple/servicetalk/commit/8e098e888ab1555ac8505a322d1cfc018a621f2d - ConnectionLimitReachedException should not trigger RRLB health-checking (#2457)
    • https://github.com/apple/servicetalk/commit/5608ce79ca87dab5cf48e1ec35b0677d16403c93 - Possible race when MAX_CONCURRENT_STREAMS setting changes in HTTP/2 (#2461)

    Improvements

    • https://github.com/apple/servicetalk/commit/d6476f723110e33e062dd0ac8e26858aa561a104 - ScheduledExecutorService to remove timeout objects on cancel (#2426)
    • https://github.com/apple/servicetalk/commit/bd5ffea4d6379f40d55e2ae76f28a4a45265a9c6 - Improve DefaultTestCertsTest and validate cert/key resources (#2427)
    • https://github.com/apple/servicetalk/commit/b3b6606189d1f27a0432b7f35d947fc415101e40 - Add FlowControlUtils.addWithUnderOverflowProtection for int (#2437)
    • https://github.com/apple/servicetalk/commit/b843d5ced3c3b71a8d7a734bffc4a0098ec1a1f0 - Reduce allocation in PublishAndSubscribeOn* (#2436)
    • https://github.com/apple/servicetalk/commit/d5918cca570cc23d24e7ed8abcd4e2bf11941e0b - Provide better exception when connection limit reached in LimitingConnectionFactoryFilter (#2454)
    • https://github.com/apple/servicetalk/commit/e83c645f4be514f59f621663414beb47a17e9ed7 - Add null checks to generated GRPC API (#2455)
    • https://github.com/apple/servicetalk/commit/10dbc25551231873dbac0eb1347b4eea6cd3193f - RetryingHttpRequesterFilter: change disableAutoRetries(), add disableAllRetries() (#2458)

    Dependencies

    • https://github.com/apple/servicetalk/commit/facbcfb16d0fd745e7bd706931674625a7d1b1ca - Update Netty 4.1.85 -> 4.1.86 (#2462)
    • https://github.com/apple/servicetalk/commit/d76b87b04184b17f21930304f2d8c1cd9d3b7b68 - Update netty-io_uring 0.0.15 -> 0.0.16 (#2443)

    Documentation

    • https://github.com/apple/servicetalk/commit/43c69c99b5521d0620c367ab40dd0de3d3e3b041 - Add gRPC Request Response Context Example (#2429)
    • https://github.com/apple/servicetalk/commit/e9c7be76b8e55789527403e65ac449bdf7329d69 - Remove duplicate doc sections from "Blocking: Safe by default" (#2448)
    • https://github.com/apple/servicetalk/commit/b93ca6618474a0059f18f3419c3c2db88612c3d2 - Add warning in example that DefaultTestCerts should not be used (#2428)
    • https://github.com/apple/servicetalk/commit/f3636fbdaf4b9885574530ac169e0e04f37d1622 - Clarify semantics around Jackson's ByteBufferFeeder (#2425)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @bobbyowolabi @daschl @idelpivnitskiy @mgodave @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.22(Nov 15, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    Changes

    API deprecations

    • https://github.com/apple/servicetalk/commit/1f780e3ee8b6e620dcdec745299d1ae67dbd8069 - Single.concatDeferSubscribe(Publisher) instead of Single.concat(Publisher, boolean) (#2388)
    • https://github.com/apple/servicetalk/commit/93201f5bfc35b3b14f59521772421c0c60d00f0a - Decouple GrpcStatusException creation from GrpcStatus (#2422)
      • Deprecate GrpcStatus methods and constructors related to creation of GrpcStatusException;
      • Add public methods to GrpcStatusException that allow for creation and take GrpcStatus as state;

    New features

    • https://github.com/apple/servicetalk/commit/7b250cea904f31d94dbf41cdf6b7115a393a6c4a - Add support for OpenTelemetry (#2408)
      • Adds two new modules servicetalk-opentelemetry-asynccontext and servicetalk-opentelemetry-http that enable native support for OpenTelemetry tracing. Thanks @aleqi200 for the contribution 🎉
    • https://github.com/apple/servicetalk/commit/9d0e9ce53f33503ffdef9e1ceb2a509e44b3eef1 - Move gRPC server deadline filter, allow custom insertion order (#2421)
      • Adds a new method defaultTimeout(Duration, boolean) for gRPC client/server builders to allow users disable default timeout filter position, and adds GrpcFilters class that users can use to configure timeout filter at any order.
    • https://github.com/apple/servicetalk/commit/16d1af6654362f3f289cf4657515122650f3260b - HostAndPort to support parsing ip+port string (#2412)
      • Adds HostAndPort.ofIpPort(...) methods that help parsing IP:port strings.

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/72af80a678cfa7d82fc614c8fc23d3b162f5e016 - DefaultDnsClient: avoid ConcurrentModificationException (#2424)
    • https://github.com/apple/servicetalk/commit/7de32fcdfaab3d6cd75fdf359654a20eadb9d77a - Publisher#takeUntil cancel before terminate (#2413)

    Improvements

    • https://github.com/apple/servicetalk/commit/8b41bf4090fdc0503b11df855d98e5b7b0a4c5bd - Preserve the caller's stacktrace for blocking API (#2420)

    Dependencies

    • https://github.com/apple/servicetalk/commit/4ebd76750f45444f2fadbc98e61bd78d0f64acd0 - Update Netty 4.1.82 -> 4.1.85 (#2415)
    • https://github.com/apple/servicetalk/commit/927529e626fd6e1e9cd6de31fb9567d881840c70 - Update Jackson 2.13.4.20221013 -> 2.14.0

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @aleqi200 @mgodave @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.21(Oct 27, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    Changes

    New API

    • https://github.com/apple/servicetalk/commit/78c3ee035cf7d0a33e8fb6818373fa9236338cf3 - Prepare for an upgrade to Netty 4.1.84 (#2392)
      • As part of this improvement, we added a new default method HttpHeadersFactory.validateNames() that tells users if the current HttpHeadersFactory is configured to validate header names or not.

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/b6a0e6dac2d22c4222ad0e3d5b87c236283a0326 - StringIndexOutOfBoundsException while parsing cookies (#2397)
    • https://github.com/apple/servicetalk/commit/6b17ccda54672e9ead7f8b37757b6bc129c162f0 - H2 TE header parsing bug fix (#2398)
    • https://github.com/apple/servicetalk/commit/6e56db03543d8cea7d2dfa4f47d33d375193f434 - H2 conversion support OWS for connection header csv (#2400)
    • https://github.com/apple/servicetalk/commit/17ec22dfff0499b7328b0d4adae82d495dc3bd39 - HeaderUtils: fix problems with missing space after a semicolon (#2402)
    • https://github.com/apple/servicetalk/commit/5d22672b817065a3b5e76bb12e0fa8355a998319 - BeforeFinallyHttpOperator: support re-subscribe to the message body (#2409)

    Improvements

    • https://github.com/apple/servicetalk/commit/7fb6875bafe6437afb268b7449630f9609ac37a9 - WriteStreamSubscriber: respect termination of the publisher (#2387)"
    • https://github.com/apple/servicetalk/commit/92e02c25904aec54847f762d2868fb8c334ce851 - Implement toString() for TestPublisherSubscriber#pollTerminal(...) (#2385)
    • https://github.com/apple/servicetalk/commit/78c3ee035cf7d0a33e8fb6818373fa9236338cf3 - Prepare for an upgrade to Netty 4.1.84 (#2392)

    Dependencies

    • https://github.com/apple/servicetalk/commit/6acca41a8d2b448eccb6c3eb6a36089e9a406937 - Update Jackson 2.13.4.20221012 -> 2.13.4.20221013 (#2396)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @mgodave @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.20(Oct 13, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    Changes

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/01d075ba5cc7ad3ed7dabea7e4a627c48ce89dcf - Buffer.[set|write]Bytes doesn't return -1 after EOF (#2395)

    Dependencies

    • https://github.com/apple/servicetalk/commit/31c7d104e0e5daeb9e6df51153b364af60a3dced - Use jackson-bom instead of jackson-databind (#2394)
      • Also updates jackson version 2.13.4 -> 2.13.4.1

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @mgodave @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.19(Oct 12, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    Changes

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/f9275174ade580424a38e5e39b0dc3d34987a4c2 - gRPC: apply default timeout filter before user-supplied HTTP client filters (#2390)
      • Position of the filter that serves gRPC deadline (defaultTimeout) feature moved from the end of the client filter chain to the beginning. It ensures the deadline covers all business logic, including all appended filters, and prevents situations when an added filter can deadlock. Note that starting from this release, any manual modifications for the grpc-timeout header won't have an effect on the actual timeout duration for the client. If you need to change its value before the timeout is scheduled, use DefaultGrpcClientMetadata#timeout() for per-request modifications.
    • https://github.com/apple/servicetalk/commit/aebad363b446bb321180d2c6f3ed7d0fde46b9f1 - Buffer.[set|write]Bytes doesn't respect length when reading from InputStream (#2389)
    • https://github.com/apple/servicetalk/commit/d9d8e93fc5ac94c7026a0a192c6916be5abfabdb - RetryingHttpRequesterFilter: drain response before mapping to exception (#2391)
    • https://github.com/apple/servicetalk/commit/abc0d75eab4b914a6c6c10dfac31531449bd6750 - Racy cancel from transport does not always cancel the message body (#2369)
    • https://github.com/apple/servicetalk/commit/922993b1138fd7c718d42e4a771dd1bd5357f7af - NettyCompression gzip streaming decompression over multiple buffers fix (#2380)

    New APIs

    • https://github.com/apple/servicetalk/commit/b1a5c5313c43e03ebd0f54240a901611c1be6337 - Add Publisher#concatPropagateCancel(Completable) to force cancel propagation (#2372)
    • https://github.com/apple/servicetalk/commit/ffc73537af53c8d7adf932f763809caca1643d04 - Single#concatPropagateCancel(Publisher) to force cancel propagation (#2381)

    Improvements

    • https://github.com/apple/servicetalk/commit/1c463da9974575711b032d57988c62724facb395 - PublisherAsBlockingIterable: LinkedBlockingQueue -> LinkedTransferQueue (#2386)
    • https://github.com/apple/servicetalk/commit/16a4f8ad95f034f81f168faef41dc67d0f7e276c - Expand allowed types to accommodate custom service discoverer events (#2379)
    • https://github.com/apple/servicetalk/commit/509bec5d0be27456362b97a5c4079c39e2426759 - DefaultPayloadInfo: enhance toString() to print all flags separately (#2373)
    • https://github.com/apple/servicetalk/commit/5dc983865f2a571ca983afa8e3a2ec92e490fd5f - DefaultBlockingHttp objects to use cast and shareContextOnSubscribe (#2370)

    Test Improvements

    • https://github.com/apple/servicetalk/commit/c74af36716f652bd2ea1789cc22c9addef130ef2 - Fix flaky [Http|Grpc]LifecycleObserverTest (#2376)
    • https://github.com/apple/servicetalk/commit/83760f5327f36665527acabdb32762ef3116efca - Fix flaky H2PriorKnowledgeFeatureParityTest.serverGracefulClose() (#2375)
    • https://github.com/apple/servicetalk/commit/8281b15f4328a9e29614e2467e636302880ba734 - HttpLifecycleObserverTest: account for CL for *DataRequested checks (#2374)
    • https://github.com/apple/servicetalk/commit/906c4fc9ac5bb84ea0bc026ed151733d1f54781c - Fix flaky ResponseCancelTest (#2337)
    • https://github.com/apple/servicetalk/commit/450096e06d094f8315abdc566ec238d3729f184b - Add regression tests for netty client factories (#2382)
    • https://github.com/apple/servicetalk/commit/f29e8bd2c25ca9f3e960f320ab3e79f8b457d604 - Enhance testing of the server-side control flow (#2377)

    Examples

    • https://github.com/apple/servicetalk/commit/438892b3235706fa85e02d3e2da92f37ec073bbf - Add http byte[] aggregated example (#2371)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @mgodave @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.18(Sep 27, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    Changes

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/f8cb571bfc4ae4bcccc0bcf3078bb9d107ae0bbc - Publisher#flatMapMerge subscribe after cancel (#2364)
    • https://github.com/apple/servicetalk/commit/952ce2ef13ea0d6df612b5233b3570d71cabdaa3 - ContentEncodingHttpRequesterFilter to remove content-length (#2365)
    • https://github.com/apple/servicetalk/commit/c11d5a958c3ef07b838168f3d29b3363bff48f52 - ContentEncodingHttpServiceFilter to remove content-length (#2366)

    Improvements

    • https://github.com/apple/servicetalk/commit/ae4d6d14c6d104a19dd23d1815fd6d9e22b2f7bf - Improvements for Set-Cookie parsing, allow lax parsing of older specs (#2368)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @chrisvest @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.17(Sep 14, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases. As the ServiceTalk API advances towards a 1.0 release all users are strongly encouraged to update their applications to eliminate all use of deprecated APIs. Existing deprecated APIs will be removed in a future ServiceTalk release without further additional notice. If you encounter problems replacing deprecated usages please create a support issue.

    Changes

    API Deprecations

    • https://github.com/apple/servicetalk/commit/43328e18fb05d7963630e03f00898d54d0d79da8 - gRPC request/response context to pass data between gRPC and HTTP layers (#2311)
      • Deprecate DefaultGrpcClientMetadata.INSTANCE constant and the same constant in all generated subtypes. Instead, always create a new instance of DefaultGrpcClientMetadata. If the INSTANCE is used, any manual attempt to access newly added request/response context will throw UnsupportedOperationException;
      • In the generated gRPC code, deprecate endpoints that operate with GrpcPayloadWriter. Users should migrate to the new overload that has BlockingStreamingGrpcServerResponse instead of GrpcPayloadWriter;
    • https://github.com/apple/servicetalk/commit/5e5b746a059c0fdcfca9cd53cbc816dbfa1e8abc - Deprecate CharSequences.asciiStringIndexOf(...) (#2353)
      • Users should use CharSequences#indexOf(...) instead.

    New features

    • https://github.com/apple/servicetalk/commit/43328e18fb05d7963630e03f00898d54d0d79da8 - gRPC request/response context to pass data between gRPC and HTTP layers (#2311)
      • No need to use AsyncContext anymore to pass HTTP headers to/from gRPC endpoint.
    • https://github.com/apple/servicetalk/commit/40d2f02d6a0723f2d3198bdd59862a4f02f044b8 - HTTP/2 set initial settings (#2341, #2346, #2361)
    • https://github.com/apple/servicetalk/commit/6b6b162b5e94b212a94c31b183d19d48a5710414 - Introduce IdleTimeoutConnectionFilter as alternative to IDLE_TIMEOUT (#2340)
      • Helps to track idle connections at L7 OSI layer rather than L4.

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/1681caf079b437a19f0b8542ed6caae18adb430c - HTTP/2 avoid premature connection closure when negotiating via ALPN (#2342)
    • https://github.com/apple/servicetalk/commit/f11310c6453e344d2290b4b69cf10cce21abb6ae - AsciiBuffer.indexOf returns incorrect result for 2-bytes characters (#2352)
    • https://github.com/apple/servicetalk/commit/2928a29c512b0c20d490fef1368d17271f49409a - Publisher#flatMapMerge allow terminal propagation after invalid demand (#2348)

    Improvements

    • https://github.com/apple/servicetalk/commit/8efc07a09f1ea8a80527d4dea68537ec36e98dcb - Override toString() for delegating connection (#2335)
    • https://github.com/apple/servicetalk/commit/b7b71bc60c2e1e39ce69b5ccd38843687de59dda - Improve DefaultHttp2Settings#toString() (#2347)
    • https://github.com/apple/servicetalk/commit/be079c1e40cf90b7c5ca5f83a5851a378d782a28 - Use IdleTimeoutConnectionFilter instead of SocketOption by default (#2349)
    • https://github.com/apple/servicetalk/commit/49f5f8f9a871d315aff118cf4af79c37365fd317 - Improve parsing of Set-Cookie headers (#2329)
    • https://github.com/apple/servicetalk/commit/9c668f47654463b22805ed1557ec17f702950ec6 - Allow users access payloadBodyInputStream() multiple times (#2355)

    Dependencies

    • https://github.com/apple/servicetalk/commit/3d8d0e83aec5bab121bb2e31765941cc538c322a - Update Netty 4.1.79 -> 4.1.82 (#2350, #2363)
    • https://github.com/apple/servicetalk/commit/4f1dca14d10175a160d3299f88fa4db0443483a7 - Update netty-incubator-transport-native-io_uring 0.0.14 -> 0.0.15 (#2357)
    • https://github.com/apple/servicetalk/commit/0e7eb61177733a64acbd4ea0cd39475c8f7fefc3 - Update Jackson 2.13.3 -> 2.13.4 (#2358)

    Tests improvements

    • https://github.com/apple/servicetalk/commit/ba7e826173dad07c334a87076467ead797005f50 - Validate HTTP/2 messages with malformed headers are rejected (#2359)
    • https://github.com/apple/servicetalk/commit/8bc579c0793e3135a53d4b396571b21b9b099913 - Update grpc-java 1.45.1 -> 1.49.0 to test compatibility with the latest release

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @chrisvest @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.16(Aug 31, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    Changes

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/8fbe0d3b923e419b9a79a8a1024848d3aa7a6f99 - Avoid race when HTTP/1.x request is cancelled at connection level filter (#2331)
    • https://github.com/apple/servicetalk/commit/797b5e5bd964c0cfc46518e3ae79ccc7f3dcdbb2 - BeforeFinallyHttpOperator dereference subscriber after termination (#2327)

    Documentation

    • https://github.com/apple/servicetalk/commit/126f25d3a5130037fb01e05988923f6075dfe54d - Clarify debugging examples with more comments (#2330)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @bondolo @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.15(Aug 18, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    As the ServiceTalk API advances towards a 1.0 release all users are strongly encouraged to update their applications to eliminate all use of deprecated APIs. Existing deprecated APIs will be removed in a future ServiceTalk release without further additional notice. If you encounter problems replacing deprecated usages please create a support issue.

    Changes

    API Deprecations

    • https://github.com/apple/servicetalk/commit/443f41276e9add7027982e9bd55189dbc901ca32 - RoundRobinLoadBalancer health-checking should use DeltaJitter (#2326)
      • RoundRobinLoadBalancerFactory.Builder#healthCheckInterval(Duration) is deprecated in favor of the new overload RoundRobinLoadBalancerFactory.Builder#healthCheckInterval(Duration, Duration) that helps to control base duration and the delta jitter at the same time.

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/49bb61f59dce1ff98def0d69a105c8522dfb5651 - Publisher#flatMapConcatSingle null value concurrency fix (#2323)
    • https://github.com/apple/servicetalk/commit/9052736261432589426801e0a8ac95d6ebb83285 - Add io_uring dependencies with classifiers in servicetalk-dependencies (#2328)
      • This issue didn't let Maven users to pull all transitive dependencies correctly.

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @bondolo @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.14(Aug 11, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    As the ServiceTalk API advances towards a 1.0 release all users are strongly encouraged to update their applications to eliminate all use of deprecated APIs. Existing deprecated APIs will be removed in a future ServiceTalk release without further additional notice. If you encounter problems replacing deprecated usages please create a support issue.

    Changes

    API Deprecations

    Developer note: Additional API deprecation advisories and guidance have been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.

    • https://github.com/apple/servicetalk/commit/24ad6cc05355d8709d6b2893f2fb3d371b28b31d - Deprecate io.servicetalk.client.api.internal.DefaultPartitionedClientGroup (#2176)
      • Deprecation of DefaultPartitionedClientGroup. We are unaware of any use-cases of this API and we plan to remove it completely in future releases.
    • https://github.com/apple/servicetalk/commit/908a84f3ab79aa832f2f0c7bfac0f07b5972e746 - Deprecate public gRPC API that is not used anymore by ST (#2300)
      • Deprecate io.servicetalk.grpc.api.GrpcClientFactory#supportedMessageCodings, variant available as io.servicetalk.grpc.api.GrpcClientFactory#bufferDecoderGroup, and GrpcRoutes.AllGrpcRoutes interface.
    • https://github.com/apple/servicetalk/commit/5cfe9c4ac7f30196ec2d7b8c0a8240fa0b213a95 - Revert backward incompatible changes (api & binary) introduced in #2278 (#2306)
      • Deprecated HttpLoadBalancerFactory#toLoadBalancedConnection(FilterableStreamingHttpConnection) - introduced a variant that also accepts ContextMap and ReservableRequestConcurrencyController.
      • Deprecate all classes and interfaces in io.servicetalk.client.api.internal package. servicetalk-client-api-internal module will be removed in future releases.
    • https://github.com/apple/servicetalk/commit/df916b669d7ff1be6c275e2bfa48c5059df44733 - Give access to the underlying TCP ConnectionContext from HTTP/2 service (#2319)
      • Deprecate one of io.servicetalk.transport.netty.internal.DefaultNettyConnection#initChildChannel overloads.

    New API

    • https://github.com/apple/servicetalk/commit/6e477534923975eeba9c8addb01b796e1a54347f - Make RequestConcurrencyController public (#2278)
    • https://github.com/apple/servicetalk/commit/df916b669d7ff1be6c275e2bfa48c5059df44733 - Give access to the underlying TCP ConnectionContext from HTTP/2 service (#2319)

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/986a80c7523866afc7be5061ec147e72a29a3946 - gRPC Trailers-Only response doesn't mark a streaming request as finished (#2313)

    Improvements

    • https://github.com/apple/servicetalk/commit/17fbb91532db847634476df97c190a9bc2c95cf1 - Null check result of HttpServerBuilder supplier (#2317)
    • https://github.com/apple/servicetalk/commit/d46dbd6563910e8a56f80dae43de53df25bdb1e3 - Throw error when score is invoked on a connection that doesn't support it (#2318)
    • https://github.com/apple/servicetalk/commit/a99f319597b44e229b0927549bd710e0be3d9424 - Remove logging for duplicate termination in Jersey router (#2316)
    • https://github.com/apple/servicetalk/commit/af18034e1d0010c504a3a6eb54b7f15832c707da - gRPC add default method for asBlockingClient to simplify filter creation (#2309)
    • https://github.com/apple/servicetalk/commit/44c434381abfe6af0abd77558193952c8b52963f - Remove unused internal code from servicetalk-grpc-api (#2299)
    • https://github.com/apple/servicetalk/commit/e5a00b5028870e11dab1e53f72b25afe90628532 - grpc-protoc javadoc testing updates (#2140)

    Dependencies

    • https://github.com/apple/servicetalk/commit/86c9b8b744b13fde23b56555e6295f560d347e79 - Update protobuf 3.21.2 -> 3.21.4 (#2315)
    • https://github.com/apple/servicetalk/commit/0515fd509180ec93af93d84b5e1ab3d8c6769e41 - Upgrade Gradle wrapper 7.5 → 7.5.1 (#2312)
    • https://github.com/apple/servicetalk/commit/48e51f3622a00feb1e3877437adc197117c66279 - Upgrade JMH 1.3.3 → 1.3.5 (#2272)
    • https://github.com/apple/servicetalk/commit/bd7b9da9c54edb63ef1938271738837be08b6a18 - Add netty-incubator-transport-native-io_uring to servicetalk-dependencies (#2295)
    • https://github.com/apple/servicetalk/commit/c7375c44818599f2609f14a3ab182f6c54708e21 - Define jaxb-impl as api in servicetalk-dependencies

    Build/Release/Github actions

    • https://github.com/apple/servicetalk/commit/e6225efcc10bd1837138e87bd0a0941ea736b769 - Use compileJava options.release (#2301)
    • https://github.com/apple/servicetalk/commit/987538c721b5d592851c9a60fc57b6e5b464035a - Hide use of sun.misc.Unsafe from javac (#2303)

    Test improvements

    • https://github.com/apple/servicetalk/commit/9c61136de7151eb0e10d01ca86c15087be764f94 - ConnectablePayloadWriterTest.multiThreadedProducerConsumer increase timeout (#2296)
    • https://github.com/apple/servicetalk/commit/2a29d608927afc425a57f17a9e27ec40243f0222 - Increase CompositeClosableTest timeouts (#2302)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @bondolo @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.13(Jul 27, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    As the ServiceTalk API advances towards a 1.0 release all users are strongly encouraged to update their applications to eliminate all use of deprecated APIs. Existing deprecated APIs will be removed in a future ServiceTalk release without further additional notice. If you encounter problems replacing deprecated usages please create a support issue.

    Changes

    API Deprecations

    • https://github.com/apple/servicetalk/commit/da74e30da5c2f8c6ec734174f4c95f8ba9497e7a - Deprecate unused ClientInvoker interface (#2287)
    • https://github.com/apple/servicetalk/commit/da06991b4ca9e523a0a43bf14cf9a10e34e55301 - Propagate ContextMap through LoadBalancedAddress (#2285)
      • Add LoadBalancedAddress#newConnection(ContextMap) method;
      • Deprecate LoadBalancedAddress#newConnection();

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/c4b13e9418f658eff61e6eef1c9d192c40e54c23 - Cancellation can leave an HTTP/1.x connection in half-closed state (#2264)
    • https://github.com/apple/servicetalk/commit/9f02857be7c265d3905a5a96e9f7ce817d59bc5f - Default methods that return async sources should not throw (#2288)
    • https://github.com/apple/servicetalk/commit/4bae4c108bfd7b19a86643ff62cf0cac61f710e7 - Handle HTTP/1.1 response cancelation same way at all levels (#2266)

    Improvements

    • https://github.com/apple/servicetalk/commit/2a0f45c2a0f2c608cb4242afb991c622b1e90a85 - servicetalk-bom to include internal depdencies as API (#2283)
    • https://github.com/apple/servicetalk/commit/a09e56ba71cd19aa9e9cf8e75140b51b12b04072 - LoadBalancedStreamingHttpConnection doesn't need connect strategy (#2274)
    • https://github.com/apple/servicetalk/commit/639c1b62256d310f8d4bdc0a4a71c30c3d69f115 - Implement toString() for HttpProtocolConfig and its components (#2281)
    • https://github.com/apple/servicetalk/commit/68b86092fb3e4c336bb7768ca6b422f70638e28b - WriteStreamSubscriber: don't interact with Subscription after terminal (#2276)
    • https://github.com/apple/servicetalk/commit/ed3ea74279c612358b0eccb2b19355b0dbea6950 - Adjust logging in IdleTimeoutInitializer (#2289)

    Dependency Updates

    • https://github.com/apple/servicetalk/commit/857e2e5b43cb3478cf149b8c32195308cefe7ab4 - Update protobuf 3.21.0 -> 3.21.2 (#2284)
    • https://github.com/apple/servicetalk/commit/8c741fa9b7f457fa2548c4555f84f915f13b072d - Update proto-google-common-protos 2.8.3 -> 2.9.2 (#2294)
    • https://github.com/apple/servicetalk/commit/b3bc4dbe909bab7d353da0108adb54d791f3382e - Update reactive-streams 1.0.3 -> 1.0.4 (#2293)

    Build/Release/Github actions

    • https://github.com/apple/servicetalk/commit/fa6a0bf9941ef0ed4605be95cdea73a56574fa24 - Upgrade Gradle wrapper 7.4.2 → 7.5 (#2277)

    Test improvements

    • https://github.com/apple/servicetalk/commit/14e9fa7e16bbf2512dfb194bc075c917f5293e8c - Add .p12 stores for tests which require format (#2286)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @bondolo @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.12(Jul 14, 2022)

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    As the ServiceTalk API advances towards a 1.0 release all users are strongly encouraged to update their applications to eliminate all use of deprecated APIs. Existing deprecated APIs will be removed in a future ServiceTalk release without further additional notice. If you encounter problems replacing deprecated usages please create a support issue.

    Changes

    API Deprecations

    • https://github.com/apple/servicetalk/commit/4d890e853a733579ba3db03fd6d180ca0bc7c9c2 - Deprecate internal classes related to partitioning (#2267)

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/d3d4667c28dea4a096a964b715365967682226ed - TimeoutHttpRequesterFilter as a connection filter causes ClosedChannelException (#2263)
    • https://github.com/apple/servicetalk/commit/d959d8b366b08af80575e50087e2f68044a60a5d - TracingHttpServiceFilter should implement requiredOffloads() (#2260)
    • https://github.com/apple/servicetalk/commit/397bc76a87d072181dda1c8e23d8a4a3c2557e11 - Remove reference to obsolete gRPC plugin (#2256)
    • https://github.com/apple/servicetalk/commit/0f1ac159477079e21dbe132eaa102f5fabea5c04 - MultiAddressClientBuilder execution strategy control (#2166)
    • https://github.com/apple/servicetalk/commit/de5dca6d500bd21bc9903493d6316b38ca640dbc - SpliceFlatStreamToMetaSingle: avoid returning a static Throwable (#2253)

    Improvements

    • https://github.com/apple/servicetalk/commit/6e023e03f7fe1846ad2af5314ec07bfaa1cab368 - Enhance NPE in operators that invoke functions (#2262)
    • https://github.com/apple/servicetalk/commit/8cc2f3295a85ac84e7a322fc13c5d0c54d7d1755 - Enhance exception message thrown from appendNonOffloadingServiceFilter (#2261)
    • https://github.com/apple/servicetalk/commit/89a92b7c41965c7a95a84b9b6e65cfce2ea6528b - BufferDecoderGroupBuilder#add method w/out advertised flag (#2254)

    Dependency Updates

    • https://github.com/apple/servicetalk/commit/26ed66208d10ddeac691f09912350d52c1cb7793 - Update Netty 4.1.77 -> 4.1.78 (#2250)
    • https://github.com/apple/servicetalk/commit/711914815f5998eecc48cb14ff6055a280bb7e6b - Upgrade Netty 4.1.78 → 4.1.79 (#2268)
    • https://github.com/apple/servicetalk/commit/7071632172627ea9696db94206cc79d1d1769ecd - Upgrade google common protos 2.8.1 → 2.8.3
    • https://github.com/apple/servicetalk/commit/28330e3a7d3f5cd1e727b05eb19c6de4d8327f98 - Upgrade gradle protobuf plugin 0.8.18 → 0.8.18
    • https://github.com/apple/servicetalk/commit/5c7974d235dd933e2b6d130b46756eaeee33e202 - Upgrade Log4J 2.17.2 → 2.18.0 (#2269)
    • https://github.com/apple/servicetalk/commit/f855269218d5b9011b3b47ab0f99ecc31b298f37 - Upgrade Jackson 2.12.2.2 → 2.12.3 (#2270)
    • https://github.com/apple/servicetalk/commit/28ca713ce9714b95074b7ed5ed9ebc7245894445 - Update JCTools 3.3.0 -> 3.3.1-ea, use unpadded queues (#2257)

    Documentation & Examples

    • https://github.com/apple/servicetalk/commit/80c47465cd3636e9b029d1ceb756701245abfb41 - Link to servicetalk/examples repo (#2249)
    • https://github.com/apple/servicetalk/commit/a04b4f54546065a382ba13f24b0253c0f4d1cdd5 - Clarify preferred ordering for [Http|Grpc]LifecycleObserver filters (#2252)

    Build/Release/Github actions

    • https://github.com/apple/servicetalk/commit/ad6aa67e909ecaed823b6dd48f79d6db1ed95a3f - Bump dawidd6/action-download-artifact from 2.21.0 to 2.21.1 (#2255)
    • https://github.com/apple/servicetalk/commit/44831d07d9bf73f203b838a2e40489193a3976d5 - Update spotbugs 4.7.0 -> 4.7.1 (#2258)
    • https://github.com/apple/servicetalk/commit/f34e21ad26139824cce3155354aed326ea3bd67b - Update Pitest 1.7.0 → 1.7.4 (#2248)

    Tests

    • https://github.com/apple/servicetalk/commit/b3ca0088b4fb46f4d94196baa1733aecd31da0ce - Increase object count in CompositeClosableTest (#2259)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @bondolo @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.11(Jun 10, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    The 0.41.x branch is now EOL. Please plan your migrations accordingly, and let us know if you have any questions. The recommended path is:

    1. Update to the latest version of 0.41.x (https://github.com/apple/servicetalk/releases/tag/0.41.16)
    2. Resolve all deprecations. All deprecations include javadocs explaining the recommended replacement approach. The javadocs can pulled by your IDE and also viewable on the 0.41 docs website.
    3. Update to latest version of 0.42.x (see https://github.com/apple/servicetalk/releases - currently this release, 0.42.11)

    API Deprecations

    • https://github.com/apple/servicetalk/commit/5565f3214f3b9701fa5053eadbc3384fd8847128 - Add default implementations for deprecated methods (#2235) - this helps users to start migrating off interface methods that was marked as @Deprecated in previous releases

    New Features

    • https://github.com/apple/servicetalk/commit/bff337833db9f590628987dc9f6f6eb06e2248b8 - Add dependencies BOM (#2210)
      • ServiceTalk now provides two BOM (Bill of Materials) files each with slightly different purposes; servicetalk-bom and servicetalk-dependencies. BOM files allow separation of dependency management and version management; a BOM specifies only component versions, not dependencies. Centralizing the management of versions to a single file greatly reduces the maintenance burden for updating to new versions and improves consistency because all references to a dependency will use the same version. The BOM files define the versions of modules which might be included as dependencies, but do not include the module as a dependency. Later when the module is included as a dependency, the dependency is specified without including a version and the version specified in the BOM is used. The servicetalk-bom BOM includes version information all ServiceTalk modules; version selection for external non-ServiceTalk dependencies is done in individual modules. The servicetalk-dependencies BOM extends the servicetalk-bom by also defining specific versions to be used for the external modules ServiceTalk depends upon. Unless your application requires different versions of these same dependencies then using the servicetalk-dependencies BOM is the most convenient way to ensure that a tested and supported set of modules is used or building and running the application. The servicetalk-dependencies BOM should be preferred whenever possible. Using the servicetalk-bom may be easier when your application wishes to do more complete management of external dependencies, or you wish to include ServiceTalk as an enforcedPlatform, but do not want the external dependencies to be included in that constraint. To override a specific dependency version with your application's required version you can use something like the following in your build.gradle:
    implementation(platform("io.servicetalk:servicetalk-dependencies:$servicetalkVersion"))
    
    // Overrides the default Netty BOM version imported by ServiceTalk with a specific version
    implementation(enforcedPlatform("io.netty:netty-bom")) {
        version {
            strictly '4.1.76.Final'
        }
    }
    // Overrides the default Jackson databind version with a specific version
    implementation ("com.fasterxml.jackson.core:jackson-databind") {
        version {
            strictly '2.13.2.1'
        }
    }
    
    • https://github.com/apple/servicetalk/commit/b952931b2d97d4c8ea4331e118b658bd37a11e7b - Support Completable from a Callable (#2225)
    • https://github.com/apple/servicetalk/commit/49e3525dc8016cf91b222d105c5307328bf864da - Make HostHeaderHttpRequesterFilter public (#2212)
    • https://github.com/apple/servicetalk/commit/d85bc3fd8c16de7243fc713b36cf726849ab1358 - Add ConnectionObserver#connectionWritabilityChanged(boolean) (#2229)
    • https://github.com/apple/servicetalk/commit/f9091b0260f1f131ae7a9c58de707696568ef781 - HttpLifecycleObserver: notify when payload body is requested (#2230, #2243)

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/c0b80c08f6a1396c9c42e656495a5442948cf5ff - Clear async-context inside RRLB health checking (#2220)
    • https://github.com/apple/servicetalk/commit/6afe86b72d61ef3160f514c89c883fc02fcda2e7 - Fix regression of client offloadNone() strategy (#2192)
    • https://github.com/apple/servicetalk/commit/0e38d94b62619294e5d184d6c874b52e6e3a956d - Return ExecutionContext with correct strategy (#2244)

    Improvements

    • https://github.com/apple/servicetalk/commit/512558d0e76af4537845eb54e12678ab5c9dc80f - Make routers explicit about offloading behavior (#2241)
    • https://github.com/apple/servicetalk/commit/d05e52aa82332e02afda5ca3904a58f1c8057b04 - Allow no SP after status-code for HTTP/1.x responses (#2247)
    • https://github.com/apple/servicetalk/commit/f41ce248b789ff416c508648f430ec44a2c72a24 - Enhance logging for execution strategy computation (#2224)
    • https://github.com/apple/servicetalk/commit/fc53573c2cf34c16af5463d6125ccf4be4d66648 - Log the cause why native transport libs are not loaded (#2226)
    • https://github.com/apple/servicetalk/commit/05a015c7cc20db25cd886d037cfd87bdd2d70eb7 - gRPC improve error status for non-200 h2 response status (#2221)
    • https://github.com/apple/servicetalk/commit/9c4e932f014a8d450cb690b56f4069cb6aa50761 - Avoid direct usage of RuntimeException (#2228)
    • https://github.com/apple/servicetalk/commit/45019c5cc73c332aec7b6d55cfb5f30ac6b40391 - Cleanup HttpPredicateRouterBuilder (#2234)
    • https://github.com/apple/servicetalk/commit/64f2716f740b543be37388ce79d636abcc4d427d - Reduce log level in RoundRobinLoadBalancer (#2213)
    • https://github.com/apple/servicetalk/commit/13e6b47ab1010373aee5675052664a081adcb8df - Migrate ON_CONNECTION_SELECTED_CONSUMER to request context (#2239)
    • https://github.com/apple/servicetalk/commit/0f0f86eb27464afac9ecc3b27fe1a2269c9a4b67 - Use servicetalk-dependencies BOM internally (#2217)
    • https://github.com/apple/servicetalk/commit/05fbfa23a7d9b997449a026cee949f17d5ba9cab - Use more external dependency BOM files (#2218)
    • https://github.com/apple/servicetalk/commit/cda273e02b3e4768a4b9cb77292f100b3f5adacf - Use servicetalk-dependencies for tests (#2219)

    Dependency Updates

    • https://github.com/apple/servicetalk/commit/1290f952c0bb57499f931e362ad769866fa29f7f - Update netty-incubator-transport-native-io_uring 0.0.13 -> 0.0.14 (#2208)
    • https://github.com/apple/servicetalk/commit/83fd27c34595718a11785f9de156ed6fb3f1ed2a - Update spotbugs 4.6.0 -> 4.7.0 (#2222)
    • https://github.com/apple/servicetalk/commit/599b059ac2f30ef1eeb1081fddba49c3d29c5482 - Update protobuf 3.20.0 -> 3.21.0 (#2231)

    Documentation & Examples

    • https://github.com/apple/servicetalk/commit/e43761c8fcaf7d73b67b117bdeb69082d0f167a2 - Update http documentation links to https (#2232)
    • https://github.com/apple/servicetalk/commit/1d454a74a12f168ecc0c963d4709f74dcb8fd1e9 - Clarify expectations for TransportObserver implementations (#2238)
    • https://github.com/apple/servicetalk/commit/88bf117583ad026d9017a6a59f836dbefebc0900 - Spelling error in DefaultHttpExecutionStrategy (#2242)
    • https://github.com/apple/servicetalk/commit/48a0c54b99ede30b04c75b43b98e12ff095ff4af - Use servicetalk-grpc-protoc-all for pom.xml (#2214)

    Build/Release/Github actions

    • https://github.com/apple/servicetalk/commit/407a90d7273584a4011d1048ed8900c7d17ade57 - Add mavenCentral() repository if no repositories are configured (#2215)
    • https://github.com/apple/servicetalk/commit/ff6436b174631c7910b1342d1abfb3250dc9dad8 - Bump dawidd6/action-download-artifact from 2.20.0 to 2.21.0 (#2236)
    • https://github.com/apple/servicetalk/commit/201748f2ca222a89e876edd7ccd92b52cb3557a9 - Bump dawidd6/action-download-artifact from 2.19.0 to 2.20.0 (#2233)

    Tests

    • https://github.com/apple/servicetalk/commit/8127bde8b4a48d72a7a01a46fac679b0be854017 - Add unit test for gRPC over h1, negotiated by TLS+ALPN (#2216)
    • https://github.com/apple/servicetalk/commit/931ffe4edd6436148dade509aaf0bc27f1e92fa4 - Additional test of expected server offloading (#2227)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @bondolo @chemicL @domcorvasce :tada: ** NEW CONTRIBUTOR ** :tada: @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.10(May 12, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful improvements and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    The 0.41.x branch is now EOL. Please plan your migrations accordingly, and let us know if you have any questions. The recommended path is:

    1. Update to the latest version of 0.41.x (https://github.com/apple/servicetalk/releases/tag/0.41.16)
    2. Resolve all deprecations. All deprecations include javadocs explaining the recommended replacement approach. The javadocs can pulled by your IDE and also viewable on the 0.41 docs website.
    3. Update to latest version of 0.42.x (see https://github.com/apple/servicetalk/releases - currently this release, 0.42.10)

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/9aec0e075261037d7753ea521e9fb612cdebd048 - Avoid deadlock consuming from blocking Iterator (#2204)
    • https://github.com/apple/servicetalk/commit/3d260462dce23d126892ecf5206a3c15fecad3c5 - Avoid self-suppression for exceptions (#2211)

    Dependency Updates

    • https://github.com/apple/servicetalk/commit/8b0cf587aff89a4d7b91bcaa72eaa3093aa372f5 - Update Netty 4.1.76 -> 4.1.77 (#2207)
    • https://github.com/apple/servicetalk/commit/4ce81d513c9598043c5ffba49478bb72ed06a8e5 - Tighter dependency for protoc plugin (#2209)
      • For projects which use the ServiceTalk protoc compiler you may now need to add servicetalk-data-protobuf as a dependency as it is required for the generated classes. The missing dependency is most often seen as package ProtobufSerializerFactory does not exist. Previously servicetalk-data-protobuf had been transitively included for you.
    • https://github.com/apple/servicetalk/commit/dc03468592be2a9512cf4db010f32844dfe149d6 - fix: servicetalk-data-jackson dependency scopes (#2198)

    Documentation & Examples

    • https://github.com/apple/servicetalk/commit/2cda82d01b9d0d38e7ef0ccb24e41e392f7ad198 - Update JVM version for javadoc generation (#2191)
    • https://github.com/apple/servicetalk/commit/4bcfe24b46ea2b47c9f93d7e6b0ee6a5a5e686aa - Generate JavaDoc only for API JavaDoc tasks (#2202)
    • https://github.com/apple/servicetalk/commit/e4fd15791c021ee7ed0de595066f159fa79a0c84 - Remove pom.xml from gRPC KeepAlive example (#2206)
    • https://github.com/apple/servicetalk/commit/7cd1c787445567b068d002d1f90901999ae988a2 - Add example for h2 keep alive (#2203)
    • https://github.com/apple/servicetalk/commit/759a20f1b9706848c2e1d972aa950ab828875d97 - Clarify AsyncContext concurrency docs (#2199)
    • https://github.com/apple/servicetalk/commit/42b1c49188b410ea3b81ae54a6de086b27f8144e - Resolve javadocAll errors (#2195)

    CI/Build

    • https://github.com/apple/servicetalk/commit/178fc28d03c6a65b97c0e5d03a01b73c0997f9c7 - Combine publish-docs.sh and release.sh (#2196)
    • https://github.com/apple/servicetalk/commit/eaa9cfdf02ce233f2a1efaa423c3cefc214737e7 - release.sh fixes to build on non-main branch (#2194)
    • https://github.com/apple/servicetalk/commit/b172da33f83ebd7b8a180e0e8401415f9a265c23 - Call japicmp.sh from release.sh (#2193)
    • https://github.com/apple/servicetalk/commit/470759ee99b3b67b5ae0e7ee1ecdf45fa99fa9df - Bump dawidd6/action-download-artifact from 2.17.0 to 2.18.0 (#2190)
    • https://github.com/apple/servicetalk/commit/8d75ff2336239e7f0acac1835200991199ad0c00 - Bump actions/setup-java from 2 to 3 (#2184)
    • https://github.com/apple/servicetalk/commit/291f7aa0b6b18998c5fe40b3e0a7613fb28326bd - Bump github/codeql-action from 1 to 2 (#2200)
    • https://github.com/apple/servicetalk/commit/d7a5f10b92a33766992604988f49ea2edbb62c10 - Bump dawidd6/action-download-artifact from 2.18.0 to 2.19.0 (#2197)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @bondolo @chemicL @eddie4941 @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.42.9(Apr 15, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several useful new features, improvements, and bug fixes. This release is expected to be a "drop-in" replacement for all prior 0.42.X releases.

    API Deprecations

    • https://github.com/apple/servicetalk/commit/d62bfd2c91a9f1f4cfb40f874639d96099be6d5f - Deprecate offloadNever() (#2133)
      • Users should migrate to offloadNone()
    • https://github.com/apple/servicetalk/commit/4141e33b965c52491197e1ef64bb624c15354596 - LoadBalancer and ConnectionFactory: add a context of the caller (#2168)
      • Deprecate LoadBalancer#selectConnection(Predicate), users should migrate to the new method LoadBalancer#selectConnection(Predicate, ContextMap);
      • Deprecate ConnectionFactory#newConnection(Address, TransportObserver), users should migrate to the new method ConnectionFactory#newConnection(Address, ContextMap, TransportObserver);

    New Features

    • https://github.com/apple/servicetalk/commit/2ca7af25b6d32344f0e95af93e722ca2ce7f1384 - Make ServiceTalk protoc plugin extensible (#2160)
    • https://github.com/apple/servicetalk/commit/071666f01247768d867b6add749811c2b548d89c - Let ConnectionFactory see difference between proxied and direct connections (#2169)
    • https://github.com/apple/servicetalk/commit/13107f831acfd853433afc559ea6e3a483d5cfab - Introduce HttpProviders and GrpcProviders (#2137)
    • https://github.com/apple/servicetalk/commit/0124d9f923790217d522118271add6d5c057e853 - Add [Single | Completable].cache(...) operators (#2162)
    • https://github.com/apple/servicetalk/commit/1ab2b76142ddf332a17a57d78ff2cc608bab2072 - Jersey Protobuf Serialization Support (#2159)
    • https://github.com/apple/servicetalk/commit/0fae5cb137bfa8cdc0c7e68102189541844c46da - Expose SslConfig through ConnectionInfo (#2150)
    • https://github.com/apple/servicetalk/commit/b274746fe19f43221615d811ee9d56ae0ff29a64 - Add grpc-health service implementation (#2147)
    • https://github.com/apple/servicetalk/commit/cdc249e5e37ec66b44b2065337d6ebc0af6710b4 - Add Publisher.flatMapConcatSingle(...) (#2151)
    • https://github.com/apple/servicetalk/commit/c8d0139e28e54bf751eacc746289131db37a9c58 - Let users move GrpcLifecycleObserver in the filter chain (#2171)

    Improvements

    • https://github.com/apple/servicetalk/commit/78d1186147fa2cb1764d06aacc283d970423c088 - Use more specific ConcurrentMap methods (#2188)
    • https://github.com/apple/servicetalk/commit/6edc415b23fae91fb8010d705e5601e9be05d916 - Implement ServiceDiscoverer#toString() for DefaultDnsServiceDiscoverer (#2149)
    • https://github.com/apple/servicetalk/commit/998fd000486cde4e56a751d01d49c1654fefa037 - Processors.newPublisherProcessor() simplify duplicate terminal check (#2148)
    • https://github.com/apple/servicetalk/commit/125524c535eb7305135ab6b698ab1ac99771a49c - RoundRobinLoadBalancer: better identify excess connections (#2173)
    • https://github.com/apple/servicetalk/commit/fce6b3e6bf79b42172e65da428f3b591d3687b24 - RoundRobinLoadBalancer: increase visibility into health-checking (#2182)
    • https://github.com/apple/servicetalk/commit/d07605e28c7ca1d4b161c9d66b8859d6a39cd199 - Always set default ServiceTalkSocketOptions#IDLE_TIMEOUT (5 minutes) (#2174)
    • https://github.com/apple/servicetalk/commit/fbd5cf52625fb1dd9a5e9e18f61be5ca523b8d71 - DNS ServiceDiscoverer: add jitter for the subsequent DNS queries (#2170)
    • https://github.com/apple/servicetalk/commit/c4df3a331f9d17fe6d40419063827f2013735b6c - Conditionally use IoExecutor timer for retry (#2134)

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/c08f21ecc05f2c447a6ac65bb29d1c28479ee5ab - HTTP/1.x Client write explicit empty buffer fix (#2175)
    • https://github.com/apple/servicetalk/commit/f1a3581acfd2a835198570e8eda36ea9f15c9218 - Update TextMapFormatter: default sampled to null rather than false when extracting trace context (#2177)
    • https://github.com/apple/servicetalk/commit/3ae63a5e2e4f9f944e949fa608e738159196719d - fix: handle null parent spans in asChildOf calls (#2167)
    • https://github.com/apple/servicetalk/commit/1c8385628d2037ac5032226e022c162cb6e7df1e - HTTP/2 handlers should throw Http2Exception and send RST_STREAM frame (#2146)
    • https://github.com/apple/servicetalk/commit/99712d1b5f5cc5387f0f34cbccd373146ff5207f - Publisher.multicast(...) duplicate cancel IndexOutOfBounds exception (#2161)
    • https://github.com/apple/servicetalk/commit/bb0ed159d52aed38fff41bae5fd19d3b04f9473e - Use filter strategy for streaming async server (#2156)
    • https://github.com/apple/servicetalk/commit/40c3e3c531575ee4e680a3bb47f7968d731ce3e3 - servicetalk-grpc-protoc name conflict fixes (#2157)

    Dependency Updates

    • https://github.com/apple/servicetalk/commit/39528eda80877698608144fa3dc0637a7d0bb4da - Update Netty 4.1.74 -> 4.1.75 (#2141)
    • https://github.com/apple/servicetalk/commit/ac4dddb9361cc2e2045fc9f6feb1a67dbeebf997 - Update Netty 4.1.75 -> 4.1.76 (#2187)
    • https://github.com/apple/servicetalk/commit/6fd32bba1ccbbcd30147218bb652797eb0e42690 - Update netty-incubator-transport-native-io_uring 0.0.12 -> 0.0.13 (#2181)
    • https://github.com/apple/servicetalk/commit/be967dbd737642feba0e0a91868e1dafe47a222e - Update Jackson 2.13.1 -> 2.13.2.2 (#2178)
    • https://github.com/apple/servicetalk/commit/96e96f9a618505615109ad0b203896ea337eda4f - Update protobuf 3.19.2 -> 3.20.0 (#2186)
    • https://github.com/apple/servicetalk/commit/b127e564f5242e9f1d83e242da7b5cc5ab635bd7 - Update proto-google-common-protos 2.7.1 -> 2.8.1 (#2179)
    • https://github.com/apple/servicetalk/commit/7addb0007539bde853e950c0414f555b1f1ee072 - Update log4j 2.17.1 -> 2.17.2 (#2180)

    Documentation & Examples

    • https://github.com/apple/servicetalk/commit/6620b3c3ea7af175d4d7870715a6d1df7cdf58c8 - Enhance servicetalk-examples-grpc-observer (#2172)
    • https://github.com/apple/servicetalk/commit/6586322c97554e9c649b22c4c61272dc8f7a172c - CONTRIBUTING - Project Communication section (#2153)
    • https://github.com/apple/servicetalk/commit/6f0c43a1b27cb2146e1f7899bc5e28b3b0252b24 - Enhance javadoc for HttpSerializers.stringStreamingSerializer (#2164)
    • https://github.com/apple/servicetalk/commit/17c2bb479a9de97726821366f9559eae0433ec50 - Remove examples for multi-address client that similar to single-address (#2129)
    • https://github.com/apple/servicetalk/commit/bfc8183e1fce54141a7133853e1eff442298f52e - Update offloading documentation (#2039)

    CI/Build

    • https://github.com/apple/servicetalk/commit/efe1842aec67723505d97a00f7bde7a3c0cb6260 - Bump actions/upload-artifact from 2 to 3 (#2183)
    • https://github.com/apple/servicetalk/commit/c27ef5c6e7a428db1ba8797b7164a4eec8d2cea9 - Update spotbugs 4.4.1 -> 4.6.0 (#2158)
    • https://github.com/apple/servicetalk/commit/1d3607a82147e3a1b1268bcb0df4d607731adb4e - Update gradlew 7.3 -> 7.4.1 (#2163)
    • https://github.com/apple/servicetalk/commit/b01305a33600a41f91cb539a09784673fef3e3b5 - Update node.js 14.16.0 -> 16.14.2 (doc site generation) (#2165)
    • https://github.com/apple/servicetalk/commit/66566d1d6ace9a67a81bb7854c9e081dd5d81b56 - Update grpc-java 1.43.0 -> 1.45.1 (test dependency) (#2176)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    @bondolo @chemicL @eddie4941 @idelpivnitskiy @saturnism @Scottmitch @suman-ganta @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.41.16(Mar 23, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk 0.41 users that contains several bug fixes and improvements. The 0.41.X releases are provided for users operating legacy production systems, most users should migrate to the current mainline 0.42 releases.

    Bug fixes

    • https://github.com/apple/servicetalk/commit/00061db134418ac73529c83caef52fd4dd8aaa43 - Add publishOn/subscribeOn Executor overload (#2155)
    • https://github.com/apple/servicetalk/commit/ec0aa39a6b319e605a096a7656d2f3997471698a - Revert "Deprecated GrpcClientBuilder#MultiClientBuilder" (#2128)
    • https://github.com/apple/servicetalk/commit/805a73ed2a8f76238b53cd38476f3d43f608b5b2 - Completable/Single Processors more robust top of stack removal (#2116)
    • https://github.com/apple/servicetalk/commit/096d4d206398eb504a0da44c12f1a3ad0d66a929 - Fix memory leak in Completable/Single Processors (#2114)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    • @bondolo
    • @chemicL
    • @Scottmitch
    • @tkountis
    Source code(tar.gz)
    Source code(zip)
  • 0.42.8(Mar 10, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.

    API deprecation

    • https://github.com/apple/servicetalk/commit/b92caff07c6ba0498ef0ebb469718972d86b27d7 - Deprecate HttpClients.forMultiAddressUrl(ServiceDiscoverer) (#2132)
      • Instead, MultiAddressHttpClientBuilder#initializer(SingleAddressInitializer) should be used to override ServiceDiscoverer using SingleAddressHttpClientBuilder#serviceDiscoverer(ServiceDiscoverer).
    • https://github.com/apple/servicetalk/commit/a452927ccf86a9b39c4be1aca658eeb5505b48f2 - Deprecated PartitionedHttpClientBuilder and partition client APIs (#2131)
      • PartitionedHttpClientBuilder is hard to use because it requires implementation of a special ServiceDiscoverer that we do not provide OOTB. We are unaware of anyone using this feature, but if there are any users they should consider ClientGroup as an alternative or reach out to us to provide more context why the PartitionedHttpClientBuilder is required.
    • https://github.com/apple/servicetalk/commit/9c3ed5ab3ff0db751cf707039928d80621f17849 - grpc-protoc ServiceFactory.Builder #addService(BlockingService) -> #addBlockingService(BlockingService) (#2143)
      • The existing overloaded method required casting to disambiguate calls or implied compiler warnings when the argument was a lambda. We added a specific method for the blocking service argument to improve the API.

    New features

    • https://github.com/apple/servicetalk/commit/310f6b5c0c23e142b19fcfb636b7354380f9d470 - Allow override of the HttpHeadersFactory for multi-address and partitioned clients (#2135)

    Improvements

    • https://github.com/apple/servicetalk/commit/dbcbfd8f71f6194572e0de7b9d7a82be9f3b0e70 - Javadoc for generated gRPC classes has warnings and errors (#2139)
    • https://github.com/apple/servicetalk/commit/a93fc9bede7743b3eb07e016e461e5ebd57ba9fc - Decouple multi-address and partitioned client builders from HttpClientBuildContext (#2136)
    • https://github.com/apple/servicetalk/commit/1d8459062165ae65e4306c427ff0e85173d9b49d - Revert "Removed GrpcClientBuilder#MultiClientBuilder (#1809)" (#2127)
    • https://github.com/apple/servicetalk/commit/3dbd25a26055fcfbf360d31cd2b4d94218e4d5ea - Enhance URI parsing exceptions (#2126)
    • https://github.com/apple/servicetalk/commit/dd4b95d6378c582aa376b65863b78c187f41281a - Remove use of special defaultStrategy() merge method (#2108)

    Bug fixes

    • https://github.com/apple/servicetalk/commit/dd94aeae5ada3f6713b6b0393cc80713fb603923 - Remove proxy-connection header from outgoing HTTP/2 messages (#2138)

    Examples

    • https://github.com/apple/servicetalk/commit/2c310bbcf12a6cdacddda966d2693130080752f5 - Add an HTTP example for protobuf serialization (#2107)

    Documentation

    • https://github.com/apple/servicetalk/commit/0828d09c0228a98b554cfedb2bb9a848e0748956 - Explain wire/frame logging logUserData (#2125)
    • https://github.com/apple/servicetalk/commit/3a9ed5616d1d131cc4cf744163f946bf14a194d4 - grpc-protoc fix missing javadoc (#2144)

    Build / CI

    • https://github.com/apple/servicetalk/commit/c8aabe9dcd2dcb8fcbddb27f575d85b083cad8d0 - Bump actions/checkout from 2.4.0 to 3 (#2124)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report any unintended omission.

    • @bondolo
    • @chemicL
    • @idelpivnitskiy
    • @Scottmitch
    • @tkountis
    Source code(tar.gz)
    Source code(zip)
  • 0.42.7(Mar 2, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.

    Improvements

    • https://github.com/apple/servicetalk/commit/70d2a476e4ba55446e19fa8e73641832e53643ba - Reduce Publisher/Single retry/repeat allocations (#2120)
    • https://github.com/apple/servicetalk/commit/3aadf0b20f0e3507822f84c5489fcdcb500a8b4d - Add missing generics for cast in DefaultAsyncContextProvider (#2122)
    • https://github.com/apple/servicetalk/commit/c64ec90ef295f1d22908d6d0f0a323546cd98e90 - Reduce initial size of WriteStreamSubscriber queue (#2119)
    • https://github.com/apple/servicetalk/commit/aef3845ae92761f05fd24c13ab147f08e045f9f4 - Reduce initial queue size for h1 pipelined connection (#2118)
    • https://github.com/apple/servicetalk/commit/cf0a8b89447463c1689c22d8956340ccc9490c2d - Minor Processor usage cleanup (#2115)

    Dependencies

    • https://github.com/apple/servicetalk/commit/aab55492dca6212213063b07331a3e851bfaa9e4 - Add netty-tcnative-boringssl-static runtime dependency (#2121)

    Examples

    • https://github.com/apple/servicetalk/commit/48c78c2470839de412c072a4f3e9424281323611 - Move existing serialization example to json sub-folder (#2106)

    Build / CI

    • https://github.com/apple/servicetalk/commit/609d3dc04976239a73286adbebddf77cc109b92b - Minor improvement in Github action names (#2123)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    • @idelpivnitskiy
    • @Scottmitch
    Source code(tar.gz)
    Source code(zip)
  • 0.42.6(Feb 27, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.

    Bug fixes

    • https://github.com/apple/servicetalk/commit/ddcf25658d990657c775afc689a8c941e5bcc792 - Fix memory leak in Completable/Single Processors (#2114)
    • https://github.com/apple/servicetalk/commit/a2223172538b575e4fb6e24127fbac7a24702fa0 - Completable/Single Processors more robust top of stack removal (#2116)

    Testing

    • https://github.com/apple/servicetalk/commit/f832ea0d705099cb5c7012459a0933403b948f77 - Add more tests for Publisher.multicast (#2111)
    Source code(tar.gz)
    Source code(zip)
  • 0.42.4(Feb 26, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.

    Bug fixes

    • https://github.com/apple/servicetalk/commit/69c0f542fac55c0c291872a0ac92b19c2d012834 - Publisher.multicast lack of demand on cancel (#2109)
    Source code(tar.gz)
    Source code(zip)
  • 0.41.15(Feb 24, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.

    New features

    Bug fixes

    • https://github.com/apple/servicetalk/commit/3ceaf2c0964556725a3a9610548146d18df8a72f - CompositeCloseable: prepend doesn't respect ordering (#2097)
    • https://github.com/apple/servicetalk/commit/facbef1113b588cce580bcb5f8e3898ec3b09699 - Content-Type for Zipkin Protobuf should be application/x-protobuf (#2101)
    • https://github.com/apple/servicetalk/commit/ccbe7f99135dab1ddc32eb80694e9bfa5d320c5f - ConnectionFactory-level filters can not migrate to new API of #1956 (#2089)

    Improvements

    • https://github.com/apple/servicetalk/commit/efbd2676a5807cc1a52a0fcc908db58b99571d09 - Validate HTTP header name matches the token format (#2103)
    • https://github.com/apple/servicetalk/commit/a4dd491ba832b3c7d712e07937acfcd3dbc1989d - Make HttpLifecycleObserverServiceFilter constructor public (#2096)

    Improvements for tests

    • https://github.com/apple/servicetalk/commit/39eb4e57372a965f75b59978fbe5a11bbc164df4 - Refactor io_uring unit test (#2099)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    • @bondolo
    • @chemicL
    • @idelpivnitskiy
    • @saturnism
    • @Scottmitch
    • @sullis
    • @tkountis
    Source code(tar.gz)
    Source code(zip)
  • 0.42.3(Feb 23, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements. It contains all changes released in 0.41.15 plus the following:

    New features

    • https://github.com/apple/servicetalk/commit/bacb5abddfc90d7eb0fc6ec4531394cef9c719cb - Add Single.repeatWhen(BiIntFunction<T, Completable>) (#2090)
    • https://github.com/apple/servicetalk/commit/6471bdfe8f5e40736f8841f0a346e3b23159ccc9 - Add PayloadSizeLimitingHttp[Requester|Service]Filter (#2100)

    Bug fixes

    Improvements

    • https://github.com/apple/servicetalk/commit/c730c0dccbe22fd69e370bc6bfcbae3e23719ebe - Always encode spans as list in HttpReporter (https://github.com/apple/servicetalk/pull/2092)
    • io.servicetalk.opentracing.zipkin.publisher.reporter.HttpReporter used to report non-batched single span using an unspecified API. From the current release, even non-batched span is published using the endpoint accepting an array of spans with one item (refer to https://zipkin.io/zipkin-api/#/default/post_spans for HTTP API specification).
    • https://github.com/apple/servicetalk/commit/237691001df41704b7a57b7d19479e0ca3bc0382 - Increase log level when global resources are closed (#2105)
    • https://github.com/apple/servicetalk/commit/24c34c3e8a6bc97bea25506c243ca00fceb6e781 - Revert breaking changes for TimeoutFromRequest introduced in #1832 (#2094)

    Improvements for tests

    • https://github.com/apple/servicetalk/commit/a3fe3fa0ae4fef74f3bf9742133edcb11a2d212f - Changing instances of ExecutorExtension to static (#2088)

    Documentation

    • https://github.com/apple/servicetalk/commit/bf48490891518ca37d82252a8d2599d3169fd02e - Update docs references to 0.41.14 and 0.42.2
    • https://github.com/apple/servicetalk/commit/6848b093bffa70f622b4471700bd727d87ed1cfd - Update Jersey Router documentation (#2059)
    • https://github.com/apple/servicetalk/commit/3720865e0f7c5c9099d5fe61b3cb046e3a153014 - Fix jackson-jersey references to deprecated classes (#2063)
    • https://github.com/apple/servicetalk/commit/4aa52873f2d631e843bbdff23c9eb66e471affe8 - Add client RetryingHttpRequesterFilter example (#2095)
    • https://github.com/apple/servicetalk/commit/cfb59490a2674263440297a68478f5a439f5f0ba - Fix broken JAX-RS javadoc links (#2072)

    Dependencies

    • https://github.com/apple/servicetalk/commit/b46aaf72a905eb52d6910985f14f66bd2ba11a11 - Upgrade to Mockito 4.3.1 (#2091)
    • https://github.com/apple/servicetalk/commit/e350689c94831c6d38d852003e0674612b9ccc77 - Update grpc-java 1.42.1 -> 1.43.0 (used for compatibility testing) (#2027)
    • https://github.com/apple/servicetalk/commit/f32b0ce4e643fecdce6c24f71e379d3d2c301841 - Use gRPC-Java BOM (#2084)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    • @bondolo
    • @chemicL
    • @idelpivnitskiy
    • @saturnism
    • @Scottmitch
    • @sullis
    • @tkountis
    Source code(tar.gz)
    Source code(zip)
  • 0.42.2(Feb 10, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements. It contains all changes released in 0.41.14 plus the following:

    New features

    • https://github.com/apple/servicetalk/commit/d31c0dcaa96f7180e9dc0feae22f3cb81b08819f - Publisher#multicast option to not cancel upstream (#2065)
    • https://github.com/apple/servicetalk/commit/5fe4903562ae98d2f884638bd99402edb776b17e - Implement setClassLevel() for ExecutorExtension (#2075)

    Bug fixes

    • https://github.com/apple/servicetalk/commit/e3b3c3c4a09e2f0439324b5628d39fa930aaa118 - Fix jersey-jackson not considering deprecated JacksonSerializationProvider #2060 (#2064)

    Improvements

    • https://github.com/apple/servicetalk/commit/dd99c4fe713d8d64e160669cfe2afa8d3954cc86 - Use setClassLevel(true) on static instances (#2068)
    • https://github.com/apple/servicetalk/commit/886cbcd43462901ed0b4bf1c83169be497032a4c - Default requiredOffloads use influenceStrategy (#2058)

    Documentation

    • https://github.com/apple/servicetalk/commit/6848b093bffa70f622b4471700bd727d87ed1cfd - Update Jersey Router documentation (#2059)
    • https://github.com/apple/servicetalk/commit/3720865e0f7c5c9099d5fe61b3cb046e3a153014 - Fix jackson-jersey references to deprecated classes (#2063)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    • @bondolo
    • @chemicL
    • @idelpivnitskiy
    • @Scottmitch
    • @tkountis
    Source code(tar.gz)
    Source code(zip)
  • 0.41.14(Feb 10, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.

    New features

    • https://github.com/apple/servicetalk/commit/20f62ae55e8bcd4abdeaf7e3c6ba83b53f09d0be - HTTP Expect: 100-continue (#2037) (#2079)
    • https://github.com/apple/servicetalk/commit/155e924c35445a88e06e5de8736128ca1f6e17b3 - IoExecutor implements concurrent.Executor (#2066)
    • https://github.com/apple/servicetalk/commit/917791d70a56ef1ed1d8f53021ecf358e0e7bf96 - Add awaitSubscribed() to test async sources (#1661)

    Bug fixes

    • https://github.com/apple/servicetalk/commit/9251d06b5b64e8f956baa0222aeac5497484c958 - Fix filters for MultiAddressUrlHttpClientBuilder (#2071)
    • https://github.com/apple/servicetalk/commit/1f972d13fc4719740c9f54952001c78b6a7d8e71 - MultiAddressUrlHttpClient should redirect POST/PUT/PATCH/DELETE by default (#2077)

    Improvements

    • https://github.com/apple/servicetalk/commit/580a5a2d0c03bf7589c386e1c7a22e24ac94dee1 - Schedule/execute no offload timeouts on IoExecutor (#2070)
    • https://github.com/apple/servicetalk/commit/a556d229daff489b544945b7d9ba5bf910a25a30 - Update grpc example pom.xml (#2057)
    • https://github.com/apple/servicetalk/commit/e33e1f4a9017002f9d56df98a5b2ac499604f891 - NettyIoThread should implement ContextMapHolder (#2083)

    Documentation

    • https://github.com/apple/servicetalk/commit/adad050912c671e64b44ff502b7eaf57287c7758 - Fix broken JAX-RS javadoc links (#2072)

    Dependencies

    • https://github.com/apple/servicetalk/commit/d86ab9a3e82f4686e8c644e2b51f1e71b1958c29 - Update Netty 4.1.73.Final -> 4.1.74.Final (#2080)
    • https://github.com/apple/servicetalk/commit/6fe935601d34976566819c0a55044a619730623a - Update netty-incubator-transport-native-io_uring 0.0.11 -> 0.0.12 (#2082)
    • https://github.com/apple/servicetalk/commit/9c8457557c30cc0a36dcc06636bb0af0516f6ae4 - Update slf4j 1.7.32 -> 1.7.36 (#2081)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    • @bondolo
    • @chemicL
    • @idelpivnitskiy
    • @Scottmitch
    • @tkountis
    Source code(tar.gz)
    Source code(zip)
  • 0.42.1(Jan 13, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements. It contains all changes released in 0.41.13 plus the following:

    New features

    • https://github.com/apple/servicetalk/commit/1b407d4d78aef79cee8b6f88c4f5845e29e1e18b - HttpSerializers client set Accept header (#2023)

    Improvements

    • https://github.com/apple/servicetalk/commit/30550d51806232d935f148d985b2b3f171cf1471 - Fix H2 Flush Strategy Aggregated API Optimization (#2033)

    Documentation

    • https://github.com/apple/servicetalk/commit/6724d7340f155b24fc8fe4f72d88e28389270b55 - Update doc links to https (#2034)

    Dependencies

    • https://github.com/apple/servicetalk/commit/9b50a70725c907401dcec0e8fda08861b940ab55 - Update jersey 2.34 -> 2.35 (#2028)
    • https://github.com/apple/servicetalk/commit/776d0e6aa180440f1369b735eb84c96df9db2e3a - Update Jackson 2.13.0 -> 2.13.1 (#2046)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    • @bondolo
    • @chemicL
    • @idelpivnitskiy
    • @Scottmitch
    • @tkountis
    Source code(tar.gz)
    Source code(zip)
  • 0.41.13(Jan 13, 2022)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements. It contains important bug fixes for retry logic configuration, upgrades netty to 4.1.73 which relaxes duplicated native library detection, protobuf to 3.19.2 which fixes a potential Denial of Service issue, log4j to 2.17.1 which fixes CVE-2021-44832.

    New features

    • https://github.com/apple/servicetalk/commit/6df69527ceb3449aaebf3c5b4327d77205ebdccf - Make exception mapper filters public (#2050)
      • HttpExceptionMapperServiceFilter and GrpcExceptionMapperServiceFilter can be used at any position in the filter chain to map Throwable(s) into a properly formatted HTTP/gRPC response.
    • https://github.com/apple/servicetalk/commit/83d4b934850bcb22a9528f3b538719fb1d1d096e - Make HttpLifecycleObserverServiceFilter public (#2051)
      • In addition to [Http|Grpc]ServerBuilder#lifecycleObserver(...) method that captures entire state of the server processing chain, new HttpLifecycleObserverServiceFilter allows users to place lifecycle observer at any other position in the filter chain or apply conditionally.

    API deprecation

    Developer note: Additional API deprecation advisories and guidance have been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.

    • https://github.com/apple/servicetalk/commit/593d6202bc2f13bb7cf12ce5b71dc16fab2883fb - Rename subscribeShareContext() to shareContextOnSubscribe() (#1975)
      • Deprecated subscribeShareContext() operator in Single, Completable, and Publisher, introduce shareContextOnSubscribe() as a replacement to clarify that this operator does not actually subscribes to the async source.

    Bug fixes

    • https://github.com/apple/servicetalk/commit/c69078f8c18cdca23205d76ae5f74789b9e541ce - Prevent retry logic modifications through the builder (#2031)
    • https://github.com/apple/servicetalk/commit/eb72c09119047cfed2696eb0bee6d339f1a567c5 - Allow using pre-existing AutoRetryStrategyProvider and RetryingHttpRequesterFilter together (#2042)
    • https://github.com/apple/servicetalk/commit/6e3667f8adb7ad2f1238e7a975b4a8837c260066 - Fix infinite retries under particular conditions (#2041) (#2049)

    Improvements

    • https://github.com/apple/servicetalk/commit/c444966f4803742bd970ab88e0d2e1c96dacfc11 - RoundRobinLoadBalancer: make targetResource logging less confusing (#2044)
    • https://github.com/apple/servicetalk/commit/22ae4cbcfbb310b9fc055986080533fe67afbb1e - Add more logging for GrpcRouter and other transport classes (#2055)

    Documentation

    • https://github.com/apple/servicetalk/commit/6724d7340f155b24fc8fe4f72d88e28389270b55 - Update doc links to https (#2034)

    Dependencies

    • https://github.com/apple/servicetalk/commit/65fe5cb229fed3f744d9c0ced67336c6fb2c32e5 - Update netty 4.1.72 -> 4.1.73 (#2053)
    • https://github.com/apple/servicetalk/commit/6f90bf1e17ac1826867aa43877e67c5597a8ebda - Update log4j 2.16.0 -> 2.17.1 (#2043, #2045)
    • https://github.com/apple/servicetalk/commit/fb74aa0fe3d0aea031e26dc552b74cd041cd3767 - Update protobuf 3.19.1 -> 3.19.2 (#2047)
    • https://github.com/apple/servicetalk/commit/efe2d946068ba3dff05bf8ccf8069383df2e5a90 - Update proto-google-common-protos 2.7.0 -> 2.7.1 (#2048)
    • https://github.com/apple/servicetalk/commit/b04b8ffdc68f69ff10f5e3a9c5b4946b8c2c4333 - Update gradle shadow 7.0.0 -> 7.1.1 (#2026)
    • https://github.com/apple/servicetalk/commit/72ba992dbb2d24dc2ae251b3dfee67f64efa6b26 - Update grpc-java 1.42.1 -> 1.43.0 (used for compatibility testing) (#2027)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    • @Abdelrahman-IK
    • @bondolo
    • @chemicL
    • @idelpivnitskiy
    • @Scottmitch
    • @tkountis
    Source code(tar.gz)
    Source code(zip)
  • 0.42.0(Dec 20, 2021)

    Overview

    This is a major ServiceTalk feature release appropriate for all users containing numerous new features and many improvements. We are actively working towards ServiceTalk 1.0 and this intermediate release helps us to refine and stabilize the API. Existing ServiceTalk applications will need to be recompiled to use the 0.42 release and will likely require some code changes or migration to the new API. Also, make sure all other libraries or extensions that depends on the ServiceTalk API in your classpath are also recompiled with 0.42.

    Changes

    The 0.42.0 release includes significant new features and API changes but incorporates as closely as possible the same dependencies and bug fixes as the prior 0.41.12 release.

    Offloading Changes

    In addition to the API changes, ServiceTalk 0.42 includes some significant behavioral differences that may impact existing applications. Offloading, the execution of user code on non-I/O threads, is one area that has changed significantly. In ServiceTalk 0.41 and earlier the strategy used for offloading was applied more generally than in 0.42. This meant that most user code, even code which did not expect to be offloaded, was offloaded from I/O threads. This approach had the advantages of consistency and safety; the execution environment for user code was predictable and the Netty I/O threads were protected from being unavailable while executing application code. In ServiceTalk 0.42 the offloading strategy is more focused and offloading is done in fewer situations, primarily only those situations which explicitly require offloading. Offloading is an expensive activity. If the application or ServiceTalk logic which needs to be executed is insignificant or carefully bounded and never blocks then avoiding offloading has a positive impact on both latency and throughput. Offloading is controlled by the use of the publishOn and subscribeOn offloading operators and for filters and services by implementing the StrategyInfluencer interface.

    Executors and other operators

    In prior versions of ServiceTalk all operators could access the most recently referenced Executor in the operator pipeline. In 0.42 the intended executor for executing the operations pipeline is only exposed to offloading operators. Other operators are effectively “immediate” meaning that they expect to run on whatever thread is active when they are invoked, the timeout and liftAsync operators are affected.

    Retrying / Auto-Retrying filters

    RetryingHttpRequesterFilter & Auto-Retrying filters/API were unified in a new RetryingHttpRequesterFilter now available under io.servicetalk.http.netty package. The new filter offers support for handling lower level transport errors and retrying them (ie. what Auto-Retry was offering before) as well as allowing users to define their own retry rules per request/response basis.

    RetryingHttpRequesterFilter offers fine grain control over retry behavior, here are some highlights:

    • retryRetryableExceptions Supports retry behavior for RetryableException which are transport layer errors that occur inside ST and signal erroneous behavior before a request touches the “wire”. By default this is enabled and behaves the same way Auto-Retry was before.
    • retryIdempotentRequests Supports retry behavior for requests that are marked as idempotent when an I/O exception occurs.
    • retryDelayedRetries Supports retry behavior for errors that are type of DelayedRetry a marker interface that holds additional backoff time info, to be evaluated when the total back-off time is computed. One possible situation that this can be useful is if users want to translate a Retry-After header in a response, and allow the retry-filter to wait for that amount of time (ie. retry-after period) before retrying.
    • responseMapper & retryResponses Supports mapping any response to an HttpResponseException giving the ability to users to retry particular responses according to their own criteria. First you map the response to an error with responseMapper then you define the retry behavior through retryResponses.

    All above flavors offer fine control over the retry behavior of each retry criterion, e.g retry up-to 5 times retryable exceptions, and up-to 2 times delayed retries with max-delay of 2 seconds. On top of that, users can define a max-total retry count, that can be used to exit the retry logic if the cumulative amount of retries (of all retry configurations) reaches that count.

    The RetryingHttpRequesterFilter is by default enabled and added as the last filter in the filter chain, similarly to how auto-retry behaved before, only retrying RetryableExceptions, however if users define their own version of that and apply it in a particular placement in their filter chain, then this order/configuration takes precedence over the default behavior.

    This work was ignited as an effort to minimize the places users have to define retry logic, and avoid situations where these placements conflict with each other resulting in retry logic that wasn’t expected.

    Serialization

    Interfaces from the io.servicetalk.serialization.api package have been deprecated (SerializationProvider, ..). The deprecated interfaces have been replaced with new interfaces in io.servicetalk.serializer.api. The new APIs apply lessons learned from usage of deprecated APIs and here are some highlights:

    • Composition between scalar serializers in streaming use cases. Streaming serializers provide reusable framing (Length Delimited VarInt/Fixed, gRPC) across different serialization technologies (Protobuf, thrift, ..).
    • Encapsulation of serialization allows exposing streaming building blocks while hiding custom framing (gRPC SerializerDescriptor).
    • Streaming APIs leverage Reactive Streams lifecycle and primitives instead of custom APIs and lifecycle.
    • Support for JDK primitive types such as byte[] and String. See how these utilities are composed/leveraged in HttpSerializers.

    Checkout the http serialization examples to see the new APIs in action. Javadocs on each deprecated type include @deprecated notices referencing the replacement classes, and here is a summary of commonly used types:

    Builders

    General

    • All builders (client & server, HTTP & gRPC) have been changed from abstract classes to interfaces to allows users wrap them to enhance/modify behavior. Method names didn’t change. HTTP users should not notice this change as soon as they recompile with 0.42, gRPC users may need to migrate their HTTP-specific configuration to HttpInitializer API (see #1867 and #1861). Resolving all deprecations highlighted building for 0.41.12 will make this transition smooth when upgrading to 0.42.
    • All one-way builder methods, like HttpServerBuilder.disableDrainingRequestPayloadBody(), have been changed to take a boolean argument to allow users enable/disable a feature it controls. Migrate from all deprecated builder methods in 0.41.12 or see #1750, #1823, and #1825 for the full list of methods.

    Server builders

    • All listen* methods return a protocol-specific context now: Single<HttpServerContext> for HTTP and Single<GrpcServerContext> for gRPC. Previously, these methods returned Single<ServerContext>.

    MultiAddressHttpClientBuilder & PartitionedHttpClientBuilder

    • Both builders now use SingleAddressInitializer abstraction to give access to the underlying SingleAddressHttpClientBuilder(s)

    MultiAddressHttpClientBuilder

    • maxRedirects(int)followRedirects(RedirectConfig)
    • redirects are disable by default now, use followRedirects(RedirectConfig) to enable them

    Filters API

    • 0.41.12 simplified client-side filters API to remove HttpExecutionStrategy from the arguments, see #1956.

    Users should update their filters to override one or more of the request or reserveConnection methods that does not take HttpExecutionStrategy as an argument. If modifications for the HttpExecutionStrategy are required, use HttpContextKeys#HTTP_EXECUTION_STRATEGY_KEY. See changes for HostHeaderHttpRequesterFilter as an example of how to migrate a filter. After this migration is done with 0.41.12 version, 0.42 won’t cause any issues.

    Note: All StreamingHttpClientFilter implementations should use delegate.request(...) instead of invoking super.request(delegate, ...). Invoking a super class implementation may lead to unexpected behavior change with new releases.

    • append method have been removed from all filter factories: ConnectionFactoryFilter, GrpcServiceFilterFactory, MultiAddressHttpClientFilterFactory, StreamingHttpClientFilterFactory, StreamingHttpConnectionFilterFactory, StreamingHttpServiceFilterFactory because the resulting factories did not allow correct computation of the combined execution strategy. Consider using appropriate append* methods on the client/server builder intead.
    • MultiAddressHttpClientFilterFactory have been removed, migrate to MultiAddressHttpClientBuilder#SingleAddressInitializer and use SingleAddressHttpClientBuilder#appendClientFilter(...).
    • GrpcClientBuilder#MultiClientBuilder and GrpcClientBuilder#buildMulti have been removed, use GrpcClientFactory#newClient(GrpcClientCallFactory) if necessary.

    ServiceDiscoverer API

    A new ServiceDiscovererEvent.Status type was introduced to let SD use a non-binary state of the address. ServiceDiscovererEvent#isAvailable() is replaced with ServiceDiscovererEvent#status().

    DefaultDnsServiceDiscoverer is using ServiceDiscovererEvent.Status.EXPIRED by default.

    ServiceDiscoveryRetryStrategy and DefaultServiceDiscoveryRetryStrategy have been deprecated in 0.41.12 and removed in 0.42 in favor of a standard BiIntFunction<Throwable, ? extends Completable> API of RetryStrategies.

    LoadBalancer API

    • LoadBalancerFactory#newLoadBalancer :

      • an extra String argument was added that describes a target resource for connections. It helps with debuggability.
      • eventStream publisher was changed from Publisher<? extends ServiceDiscovererEvent> to Publisher<? extends Collection<? extends ServiceDiscovererEvent>> to align it with ServiceDiscoverer API.
    • RoundRobinLoadBalancer.RoundRobinLoadBalancerFactory become a top level class with the builder.

    • RoundRobinLoadBalancer changed its visibility from public to pkg-private, RoundRobinLoadBalancerFactory should be used instead.

    • RoundRobinLoadBalancer.RoundRobinLoadBalancerFactory.Builder#eagerConnectionShutdown(boolean) was removed because ServiceDiscovererEvent.Status can provide all necessary information. The same behavior can be achieved by configuring DefaultDnsServiceDiscovererBuilder#missingRecordStatus(ServiceDiscovererEvent.Status.UNAVAILABE).

    If you have a custom implementation of the LoadBalancer interface, consider supporting all new statuses from the ServiceDiscoverer: AVAILABLE, UNAVAILABLE, EXPIRED.

    HTTP API

    • Parent interface of StatelessTrailersTransformer have been changed from TrailersTransformer<Object, Payload> to TrailersTransformer<Void, Payload>.
    • BlockingStreamingHttpServerResponse was converted from an abstract class to an interface.
    • HttpClients.*viaProxy(...) methods have been removed in favor of SingleAddressHttpClientBuilder#proxyAddress(...) configuration option after using a regular HttpClients.forSingleAddress(...) factory.

    Exceptions

    Removed exception types that were public but never thrown by ServiceTalk (see #1920):

    • ConnectionClosedException
    • InvalidRedirectException
    • MaxRequestLimitExceededException
    • MaxRequestLimitExceededRejectedSubscribeException

    Some exception types were changed to use more appropriate parent type:

    • ConnectionRejectedException extends RuntimeExceptionSocketException;
    • NoAvailableHostException extends RuntimeExceptionIOException;
    • DuplicateAttributeException extends RuntimeExceptionIllegalStateException;
    • TerminateRepeatException extends ExceptionRuntimeException;
    • ClosedServiceDiscovererException extends RuntimeExceptionClosedChannelException;

    Observability

    TransportObserver - gives low level visibility into L4 network level

    Some existing callbacks were improved to take extra arguments that help to increase visibility:

    • TransportObserver#onNewConnection()TransportObserver#onNewConnection(Object, Object) - tells which local/remote address is used for a new connection. Previously, it was impossible to know what was the remote peer if a connect attempt fails.
    • ReadObserver#itemRead()ReadObserver#itemRead(Object) - tells which object have been read from the network.
    • WriteObserver#itemReceived()WriteObserver#itemReceived(Object) - tells which object have been received for a write operation.
    • WriteObserver#itemWritten()WriteObserver#itemWritten(Object) - tells which object have been serialized and written to the OS network buffer.

    New callbacks that have to be implemented:

    • WriteObserver#itemFlushed() - notifies when a previously written object have been flushed to the network.
    • StreamObserver#streamIdAssigned(long) - notifies when a steam of a multiplexed connection (HTTP/2) gets an assigned id number.
    • ConnectionObserver#onTransportHandshakeComplete() - notifies when a transport protocol completes a handshake (like TCP 3-way handshake).

    Tracing

    Due to a bug in our B3 header handling, we weren’t able to handle all possible sampling states as defined by the specification. More specifically the lack of presence of x-b3-sampled, was being mishandled as if the carrier was suggesting no-sampling.

    The behavior was address by changing the API to support Boolean type sampling flag, restoring the possibility of 3-state option.

    • InMemorySpanContext#isSampled boolean → Boolean

    Additional API changes:

    • Removed InMemoryTraceState, SpanContext was enhanced to bridge API gap.
    • Trace identifiers were removed from the Span level, instead the SpanContext houses them now.

    Other

    • NettyIoExecutors#createIoExecutor(ThreadFactory) now requires io.servicetalk.transport.api.IoThreadFactory.

    Removed functionality

    • gRPC filters have been removed. HTTP filters should be used to cover most use-cases. When an API-specific filter is required or when you need to filter deserialized proto objects extending/wrapping your GrpcClient or GrpcService should provide the same level of control.

    Upgrading to ServiceTalk 0.42

    ServiceTalk 0.42 contains significant API and behavior updates as well as new API deprecations. Most applications will require some changes to use the 0.42 release. For applications developed using ServiceTalk 0.41 or earlier the best approach for updating an application to use the 0.42 release is to begin by updating the application to use the latest 0.41 release, currently 0.41.12. Once all deprecation warning have been resolved and tests are passing, only then begin upgrading to the 0.42 release. Applications built with much older ServiceTalk releases should upgrade incrementally through the latest release of each minor version until arriving at ServiceTalk 0.42. Fully rebuilding applications with each intermediate ServiceTalk version will provide the most complete deprecation and upgrading advice. Fully rebuilding applications with each intermediate ServiceTalk release will provide the most complete deprecation and upgrading advice and ensure that generated gRPC code is remains compatible with the application usage. Application developers should also pay careful attention to the API deprecations found in 0.42. Future 0.42.X releases, when they occur, will be compatible with this 0.42.0 release, but 0.43 and beyond versions of ServiceTalk will remove the currently deprecated APIs. Fortunately, it is currently expected that the ServiceTalk API will be more stable in future releases through the eventual ServiceTalk 1.0 release. Thank you for your understanding and cooperation on the way to 1.0!

    New features

    • https://github.com/apple/servicetalk/commit/4ce1aa6870a6e107dc3f57fbedba01fedddd3b2c - New Serializer APIs, consolidation of ContentCodec, and gRPC MethodDescriptor (#1673)
    • https://github.com/apple/servicetalk/commit/f40a200e1d77a3298fab5adf2a6a9bd60332affb - gRPC add MethodDescriptor Collection to services (#1764)
    • https://github.com/apple/servicetalk/commit/5569e8177f288d0207a9166ae17332a8c9f27123 - Introduce TimeSource in Executor (#1972)
    • https://github.com/apple/servicetalk/commit/f5ad671f943aeeff2fe371c0c1609c6fd244c8f8 - Introduce HttpServerContext and GrpcServerContext (#1990)
    • https://github.com/apple/servicetalk/commit/583aa2463d90ce866287785476a3909320bde613 - Add weight factor to the load balanced addresses (#1988)
    • https://github.com/apple/servicetalk/commit/d1d577efc6bee8cd443eedf846a03ba56c279695 - Add ExecutionStrategyInfluencer (#1832)
    • https://github.com/apple/servicetalk/commit/506cfd27573f42611098c17e051bc5745947f80e - Configurable offloading for async close (#1948)
    • https://github.com/apple/servicetalk/commit/c15ff249d3ac577b9859b7f99ed474be97bac9f0 - Configurable TransportEvent offloading (#1957)
    • https://github.com/apple/servicetalk/commit/6af1f605a42d6edf069ba6cc886e8261b578f56f - ConnectionAcceptor ConnectionFactory offloading control (#1921)
    • https://github.com/apple/servicetalk/commit/9db9b7fc2635195cd5cd333739b2b05dac0edae6 - HTTP OpenTracing filters Format<TextMap> support (#1758)
    • https://github.com/apple/servicetalk/commit/6beebe80fbe00d6671ccbfd9dc29453c08e82ae8 - API to support start/stop accepting connections (#1741)
    • https://github.com/apple/servicetalk/commit/6017f38ea4621e210fc6ca80436e6101b0dd462e - Add Publisher#multicast operator, fix Publisher#groupBy backpressure (#1472)
    • https://github.com/apple/servicetalk/commit/c38ddff4ae150c14e4eca7a83ca3230ca5e58118 - Completable#concat(Completable...) (#1941)
    • https://github.com/apple/servicetalk/commit/9f0a924d173eaf88936e47261530e60eaa2e8c75 - Conditional publishOn & subscribeOn operators (#1689)
    • https://github.com/apple/servicetalk/commit/b980aaa1903e4e3d06bef501dee7a7a6b29adbab - Add support for nonOffloading HTTP Server Filters (#1710)
    • https://github.com/apple/servicetalk/commit/d3cc7879952a48b17a2399bba45c812bf2cb6311 - Support additional constant delay for retries (#1754)

    Behavior changes

    • https://github.com/apple/servicetalk/commit/83530f21c3d94df853cedbbee5f781d095de9ab5 - Multi-address client: throw MalformedURLException instead of IllegalArgumentException (#1955)
    • https://github.com/apple/servicetalk/commit/e9d69fafcdbf34a93a00b3f3994d67c88aeda89d - Adjust parent types for exceptions (#1924)
    • https://github.com/apple/servicetalk/commit/8f507329949bf615fe939eb46aea5b4421012a44 - Disable offloading for routes if server offloading disabled (#1842)

    Bug fixes

    • https://github.com/apple/servicetalk/commit/8cf0d869487f1291ecd2029d598b5b0ea7ce3e89 - DefaultCompositeCloseable StackOverflowException (#1942)
    • https://github.com/apple/servicetalk/commit/72a0e64e9837d673d78f3bbb71499585d6fb0373 - Avoid error from connection closure when signals should be queued (#1850)
    • https://github.com/apple/servicetalk/commit/c4699d20912c1569dfed8a259196c731c64e6f2a - Fix B3 sampling API to support missing values (#1640)
    • https://github.com/apple/servicetalk/commit/76c30bf02354dcb1c28640119cab8229e4c5e700 - Correctly accept responses with grpc-encoding: identity (#1745)

    Improvements

    • https://github.com/apple/servicetalk/commit/68ddd1da89c08105fe5b275da88c77688fee44c0 - HTTP/2 messages with empty body should not have empty trailers (#1883)
    • https://github.com/apple/servicetalk/commit/e7927b756d2400875fdab7130576b9b550521754 - ZipkinPublisher remove unnecessary data (#1767)
    • https://github.com/apple/servicetalk/commit/a4951c95ed4cbda3acf4013d99d9a8830cfa8041 - Http conditional offload (#1724)

    API Improvements

    • https://github.com/apple/servicetalk/commit/f3e611bb067574589b6e3f129a38315ff413577d - Convert BlockingStreamingHttpServerResponse to an interface (#1986)
    • https://github.com/apple/servicetalk/commit/73cf04b3e7afbce1423b626b237c58f5c0f92e28 - StatelessTrailersTransformer: Object → Void state (#1985)
    • https://github.com/apple/servicetalk/commit/40ba1fa4abeb364c1c92e64a2ab36bbb32c3dee3 - Rename special execution strategies (#1987)
    • https://github.com/apple/servicetalk/commit/f58102944d77b2a903208edf93fa1ae9d25b6528 - publishOn/subscribeOn take io.servicetalk.concurrent.Executor (#1983)
    • https://github.com/apple/servicetalk/commit/17c9a1d63fcb5c7ca01a84afee3c41e1c3d398c7 - Rename subscribeShareContext to shareContextOnSubscribe (#1975)
    • https://github.com/apple/servicetalk/commit/7f456a8aa6026cd51d3ee78cf8365bb0eb9671de - Use connection execution context in proxy connect (#1951)
    • https://github.com/apple/servicetalk/commit/b3c356a74e5115c1aab76396a686f50cc7015061 - Converting GrpcClientBuilder to interface (#1908)
    • https://github.com/apple/servicetalk/commit/9eb3bf29b8e958766b49b7067f40f00f5698d2e0 - Converting GrpcServerBuilder to interface (#1903)
    • https://github.com/apple/servicetalk/commit/1c6179175cba36ca270db20c722b3165c3fc36f7 - Returns for some AsyncContext methods (#1839) (#1898)
    • https://github.com/apple/servicetalk/commit/3c9bd5ce57c8809086cff1f3227773671ad4bf1b - Untangling GrpcClientBuilder from SingleAddressHttpClientBuilder (#1867)
    • https://github.com/apple/servicetalk/commit/eedf98877debcfb939661d9ebc2c3ecdb04443b1 - Converting HttpServerBuilder to an interface (#1820)
    • https://github.com/apple/servicetalk/commit/d77785d750798b434820cc7c0c52ab518e39aae8 - Converting HttpClientBuilders to interfaces (#1819)
    • https://github.com/apple/servicetalk/commit/603b2dc4f2136c1acd153d21afb94d960fb137c2 - Conditional offload consistent exception handling (#1705)
    • https://github.com/apple/servicetalk/commit/1a2aa0599c3d29aa963bdb99db182ee760a0a036 - Relax OpenTracing HttpHeaders formatter to allow custom containers (#1703)
    • https://github.com/apple/servicetalk/commit/418e4a4d5c1eac3503647d85c2b8194eb6420b1d - NettyIoExecutors executors support IoThread
    • https://github.com/apple/servicetalk/commit/84be6a3332219354a950c02c2a282785057ab0ca - Simplify API hierarchy of HTTP and gRPC client builders (#1743)

    Removed API

    • https://github.com/apple/servicetalk/commit/3ac14877edffc826cb3b5624486c4d81997afeb3 - Remove gRPC filters (#1893)
    • https://github.com/apple/servicetalk/commit/27252069bb64b993f24046f2be5aabb3fa19b4e1 - Retry unification deprecations removal (#2019)
    • https://github.com/apple/servicetalk/commit/d6c8ce3ca640f648328244ef7fd0a2a6e17c0cc4 - Clean up TransportObserver after #2012 (#2015)
    • https://github.com/apple/servicetalk/commit/a234235f7764856718b90c38b32545e9cb82c630 - Clean up Read/WriteObserver after #2013 (#2014)
    • https://github.com/apple/servicetalk/commit/6498a4a539dfa0589d1f2018d3010d5acdab729d - Remove deprecated constructors from HttpHeadersFactories (#2002)
    • https://github.com/apple/servicetalk/commit/a2b2bbff1ea08db1c88db3f59d1a06d826448394 - Remove deprecated HttpClients factories for proxy (#1980)
    • https://github.com/apple/servicetalk/commit/bf17e6aa645992f951007c6a0879000cc8d8965c - Remove deprecated AbstractRetryingFilterBuilder build methods (#1981)
    • https://github.com/apple/servicetalk/commit/c953e169d1f96bac214abfa93fddf629cf65763b - Remove default impl from ConnectionObserver (#1982)
    • https://github.com/apple/servicetalk/commit/d4109758348a977fd47d35f404b05b3a370a7bd9 - Remove subscribeShareContext method (#1984)
    • https://github.com/apple/servicetalk/commit/689246cce5304bf5ac240b1caabc1c9ab633d874 - Cleanup LoadBalancer APIs (#1976)
    • https://github.com/apple/servicetalk/commit/8b578f7b6095496c60941e7c3f396846b6f28d8a - Removing deprecated ServiceDiscovererEvent methods (#1962)
    • https://github.com/apple/servicetalk/commit/1e96f7780e7a8d073948f2d6d2fb0c811ebb5857 - Clean up deprecated requester/client/filter API (#1960)
    • https://github.com/apple/servicetalk/commit/8387995707e58375e6ecbf6b16b7669f73b78b58 - Cleanup default methods from HttpMetaData (#1961)
    • https://github.com/apple/servicetalk/commit/b2cb23a25371f8804387520aed87c975156322ad - Clean up AsyncContext API (#1959)
    • https://github.com/apple/servicetalk/commit/b095506ff658750959fe5892c26ce5d49ffbe027 - Removing deprecated ServiceDiscoveryRetryStrategy (#1949)
    • https://github.com/apple/servicetalk/commit/d9947bb9cd136fcbfa5b5f14810f41f0d4c49aaf - Remove unused exception types (#1922)
    • https://github.com/apple/servicetalk/commit/15e6a759354e183f294d86bb98dabfe77b33d437 - Removing the public deprecated methods from gRPC builders (#1899)
    • https://github.com/apple/servicetalk/commit/bc9fbbe8ee1205e71f63fc7e2ecb18fcdd44e72b - Clean up deprecated API after changes for redirects in #1792 (#1862)
    • https://github.com/apple/servicetalk/commit/8a9488ea3de3ed3ace634d702fa7432d467708fe - Removing default implementations from HttpClientBuilder (#1866)
    • https://github.com/apple/servicetalk/commit/3f58ab77485957efda0afb1466260ee5630916f7 - Removal of deprecated one-way builder methods (#1844)
    • https://github.com/apple/servicetalk/commit/91d678a871711471dfa6d4ba7c07f42f4a3206a8 - Remove remaining disable* methods in builder APIs (#1826)
    • https://github.com/apple/servicetalk/commit/74ac3902a0ba09c72fde79923906ad1c3ac394ee - Removed GrpcClientBuilder#MultiClientBuilder (#1809)
    • https://github.com/apple/servicetalk/commit/7d5e1919202e32b21195ab2c909be563f0c008d4 - Remove payloadBody(CloseableIterable<Buffer>) methods (#1802)
    • https://github.com/apple/servicetalk/commit/c4f3bdc44cdf61ec7b336a4d4c57a5841510795e - Remove ExecutionStrategy offload* methods (#1794)
    • https://github.com/apple/servicetalk/commit/171a765675b7ca71d142b9e6f6fed317e14e2675 - Cleanup of PartitionedHttpClientBuilder (#1731)
    • https://github.com/apple/servicetalk/commit/e0dcd99952049fb0478d8d1de34a7b55060a0cbc - MultiAddressHttpClientBuilder API cleanup (#1721)
    • https://github.com/apple/servicetalk/commit/870654284f57418ba14dd99d275904b36ec94fb1 - Remove publishAndSubscribeOn (#1649)
    • https://github.com/apple/servicetalk/commit/decf81d7736dbb8a62f75a39c10415177c2ba547 - Remove recoverWith operators that were deprecated in #1435 (#1635)
    • https://github.com/apple/servicetalk/commit/bfaf5398abae319d6c705cbd5108f10b02e866bb - Remove Verifiers factory that was deprecated in #1392 (#1633)
    • https://github.com/apple/servicetalk/commit/7058755d368ee775555bd7551487841f36e2b71b - Remove deprecated CharSequences methods (#1634)
    • https://github.com/apple/servicetalk/commit/c304d8c23ce6b2b71132518a66f6f9358ee106ae - Remove append methods that were deprecated in #1578 (#1631)
    • https://github.com/apple/servicetalk/commit/edd0fd23cf69d1df2e8336a40de7746394d1b123 - Remove backlog(int) server builder option that was deprecated in #1375 (#1636)
    • https://github.com/apple/servicetalk/commit/c108732738627d3dc4845bbf30b98da3fc2c06c0 - Remove disableHostnameVerification() that was deprecated in #1561 (#1637)
    • https://github.com/apple/servicetalk/commit/2d8530c68c3dbbeaacba4b91b4a9d0baf7135dbd - Remove allowPrematureClosureBeforePayloadBody() that was deprecated in #1475 (#1638)
    • https://github.com/apple/servicetalk/commit/a6170f26337ff3a91d2de5944e02972965dfb16a - Remove deprecated idleTimeout() methods (#1602)
    • https://github.com/apple/servicetalk/commit/6aaa59a0570fabec01b68d1f76d828a4659652b1 - Remove deprecated compression implementation (#1537)
    • https://github.com/apple/servicetalk/commit/3e357a936ea5911344ea04119ff88829e07da5a0 - Remove deprecated SecurityConfigurator and Builder.secure() APIs (#1474)
    • https://github.com/apple/servicetalk/commit/4abbb69ad58170a786bfc23a84a1058f14f5b6d0 - Remove deprecated enableWireLogging and enableFrameLogging overloads (#1420)

    Build/Release/Github actions

    • https://github.com/apple/servicetalk/commit/98611f40592e109b0a7993e7227d5f4d55aae200 - Remove last jUnit4 dependencies, finish migration to jUnit5 (#1568, #1624, #1658, #1660, #1779, #1780)

    Dependency upgrades

    • https://github.com/apple/servicetalk/commit/8d3789168469361b4111f108ebe33494940b5bd4 - Update Jackson 2.10.5.1 → 2.13 (#1783, #1879)
    • This release includes Netty to 4.1.72 which contains an important fix for CVE-2021-43797 and Log4J to 2.16.0 which contains fixes for CVE-2021-44228 and CVE-2021-45046.

    Documentation

    • https://github.com/apple/servicetalk/commit/3f12fbf868190b61212bef551c8309816db2c3b7 - Add [Http|Grpc]LifecycleObserver examples (#1857)
    • https://github.com/apple/servicetalk/commit/5b9d7a9dbe41f9bb6ada18b181dc37a58204a7f6 - Improve deprecation docs on TypeHolder (#1782)
    • https://github.com/apple/servicetalk/commit/6c9b8cc7473556179b2e64debb11e760431bfaab - Javadoc improvements for HttpServerBuilder#append* methods (#1729)
    • https://github.com/apple/servicetalk/commit/8da1b2520f58864ed119cc6349a979827282a5e3 - Conditional publishOn and subscribeOn javadoc clarification (#1713)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    @bondolo @cancecen @chemicL @danfaer @idelpivnitskiy @Krupskis @madrob @mikhail-shibanov @rnett @Scottmitch @sikevux @sullis @tkountis @vglushak

    Source code(tar.gz)
    Source code(zip)
  • 0.41.12(Dec 15, 2021)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.

    New features

    • https://github.com/apple/servicetalk/commit/cc61daa12ca9fcae9724998c66a677f13d839c62 - Add support for io_uring (#1971)
      • io_uring is a new asynchronous I/O API for Linux that provides significant performance improvements for I/O operations. The minimal Linux kernel requirement is 5.10. Users need to set -Dio.servicetalk.transport.netty.tryIoUring=true to activate this feature.
    • https://github.com/apple/servicetalk/commit/13dce910cfda1acc1581dd389c1b73503f476a6f - Let users opt-in for app initialization failures without native libs (#2006)
      • Use -Dio.servicetalk.transport.netty.requireNativeLibs=true to fail ServiceTalk to start without native transport (epoll/kqueue). Without this system property, netty will fallback to Java NIO. However, Java NIO has limitations which may cause unexpected behavior and increased number of failed requests. For example, it does not proactively notify when a remote peer closes connections. As the result, a new request have to be attempted to observe that connection was closed leading to a request error.
    • https://github.com/apple/servicetalk/commit/ad81b3fdb8114a63fe349a9e9c7b008c1bcf17aa - Adjusting ServiceDiscovererEvent contract (#1906)
      • ServiceDiscovererEvent now has status() method instead of isAvailable() boolean flag;
    • https://github.com/apple/servicetalk/commit/93a98af04b8353768402116b8ad530174860e41f - Completable#concat(Completable...) (#1945)
    • https://github.com/apple/servicetalk/commit/cfe700741a803f243d528dcc9e2581fd7e23b1ad - Add context associated with an HTTP request or response (#1904)
      • As an alternative to AsyncContext, each HTTP request and response has a context() method that holds a state during request-response exchange. It's more lightweight and always is associated with a request or response, regardless of asynchronous boundaries or transitioning from async to blocking API.

    API deprecation

    Developer note: Additional API deprecation advisories and guidance have been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.

    • https://github.com/apple/servicetalk/commit/3c2d0e233cf45db56c2e8c79bcb7b812c7afc8b2 - Remove HttpExecutionStrategy from requester and reserveConnection API (#1956)
      • Users should update their filters to override another request or reserveConnection methods that do not take HttpExecutionStrategy as an argument. If modifications for the HttpExecutionStrategy are required, use HttpContextKeys#HTTP_EXECUTION_STRATEGY_KEY;
    • https://github.com/apple/servicetalk/commit/ebe29110c62a69cb48fbc4c636c9d4036efcf711 - Deprecate ServiceDiscoveryRetryStrategy (#1931)
      • Deprecated ServiceDiscoveryRetryStrategy and DefaultServiceDiscoveryRetryStrategy;
      • Deprecated PartitionedHttpClientBuilder#retryServiceDiscoveryErrors(ServiceDiscoveryRetryStrategy) and introduced a variant accepting BiIntFunction<Throwable, ? extends Completable>;
      • Deprecated SingleAddressHttpClientBuilder#retryServiceDiscoveryErrors(ServiceDiscoveryRetryStrategy) and introduced a variant accepting BiIntFunction<Throwable, ? extends Completable>.
    • https://github.com/apple/servicetalk/commit/9c66e411d9bfe6148ffaa690012f2e2fe8c0d932 - Deprecate and replace noOffloadsStrategy() (#1989)
      • noOffloadsStrategy() is deprecated and the more descriptive offloadNever() is introduced to replace it.
    • https://github.com/apple/servicetalk/commit/0d7085174d00f18ce6b0795d2d6ff3db220b1d0f - Unified retry / auto-retry filter support (#2020)
      • A new variant of RetryingHttpRequesterFilter was introduced in io.servicetalk.http.netty package;
      • io.servicetalk.http.utils.RetryingHttpRequesterFilter and AutoRetryStrategyProvider are deprecated and their logic in consolidated in io.servicetalk.http.netty.RetryingHttpRequesterFilter;
    • https://github.com/apple/servicetalk/commit/34f726e512f5bfa4b76c6f52444abfcec8efbdad - Migrate AsyncContext to ContextMap API (#1910)
      • API modifications:
        • Deprecate AsyncContextMap in favor of ContextMap API;
        • Deprecate AsyncContextMapHolder in favor of ContextMapHolder;
        • AsyncContext: deprecate all methods that reference AsyncContextMap and add new static methods that target ContextMap API;
        • Add temporarily method AsyncContext.newKeyMapping to allow mapping AsyncContextMap.Key <-> ContextMap.Key to let users use old/new API in the same codebase;
        • IoThreadFactory.IoThread extends deprecated AsyncContextMapHolder, consider migrating to NettyIoExecutors static factories that do not require an IoThreadFactory. If your codebase implements IoThreadFactory, make sure it also implements ContextMapHolder;
        • BasicAuthHttpServiceFilter: deprecate userInfoKey(AsyncContextMap.Key) in favor of userInfoAsyncContextKey(ContextMap.Key) and userInfoRequestContextKey(ContextMap.Key);
        • BasicAuthSecurityContextFilters: deprecate forGlobalBinding(AsyncContextMap.Key) in favor of forGlobalBinding(ContextMap.Key) and forNameBinding(AsyncContextMap.Key) in favor of forNameBinding(ContextMap.Key);
      • Behavior changes:
        • AsyncContext.put(...) and AsyncContext.putAll(...) don't throw UnsupportedOperationException when AsyncContext is disabled;
        • Default implementation of AsyncContext more strictly validates null keys. null keys were never allowed, but pre-existing behavior throws NPE on AsyncContext.get(key) instead of AsyncContext.put(null, value);

    Improvements

    • https://github.com/apple/servicetalk/commit/1fecc6b0fad46f82a4e4f79f357d7e77efd5c65d - Read/WriteObserver: give users visibility into items (#2013)
    • https://github.com/apple/servicetalk/commit/c0c2c83b6be89d03cd442c3caf8c0bc15143b34a - TransportObserver#onNewConnection give visibility into addresses (#2012)
    • https://github.com/apple/servicetalk/commit/e7a287bd06954ee8f83c3756a2b849fe517a64f8 - Provide more context when native transport is unavailable (#1978)
    • https://github.com/apple/servicetalk/commit/1d3ba699abdbfc9ba9ac30747bdcc2909d5810ea - Give visibility to the assigned HTTP/2 Stream ID (#1969)
    • https://github.com/apple/servicetalk/commit/81c81c92b766d969c852f25134fd9e9feedf2e29 - MessageEncodingException should take an encoding name only (#1940)
    • https://github.com/apple/servicetalk/commit/3358e01806837cb098703a5ac6db5add6597d71a - Implement toString() for our ThreadFactory variants (#1939)
    • https://github.com/apple/servicetalk/commit/cc4d56f5f3519b0ad9822292dba3737cf4fa17a2 - Correctly report TLS handshake when TCP Fast Open is enabled (#1970)

    Bug Fixes

    • https://github.com/apple/servicetalk/commit/582259aac3fd2d7465943287a5d74d7bbb7f5bea - Reduce SSLSession cache misses (#1958) (#1966)
    • https://github.com/apple/servicetalk/commit/80435d76ef492eb49a2b11be16e0de045a6606fc - DefaultCompositeCloseable StackOverflowException (#1946)
    • https://github.com/apple/servicetalk/commit/c08a4118cbf259d8d8ddf345884bfa90d15cf4dc - HttpLoadBalancerFactory should override newLoadBalancer with 3 args (#1935)

    Documentation

    • https://github.com/apple/servicetalk/commit/5055942d444be57b70494f9295dfae746df1371c - Improve BlockingIterable javadoc (#2010)
    • https://github.com/apple/servicetalk/commit/f07e70870561fceefd33d2d7c0f46fbf0a1cacf2 - Clarify ServiceDiscovererEvent contract related to address and status (#1963)

    Dependencies

    This release upgrades Netty to 4.1.72 which contains an important fix for CVE-2021-43797 and Log4J to 2.16.0 which contains fixes for CVE-2021-44228 and CVE-2021-45046.

    • https://github.com/apple/servicetalk/commit/51092e76afc56b3267b1a1490ce82ed10be70294 - Upgrade Log4J 2.15.0 → 2.16.0 (#2022)
    • https://github.com/apple/servicetalk/commit/1161335d92d2a20ba880d48e65ef0d0d3a8a6bf7 - Update Netty 4.1.70 -> 4.1.72 (#2016)
    • https://github.com/apple/servicetalk/commit/84454469edf4ac745edb6d2e4c9c7ebdc762d290 - Update log4j 2.14.1 -> 2.15.0 (#2007)
    • https://github.com/apple/servicetalk/commit/26c79f7a9a878e712365307b7f25ba4c6865534d - Update protobuf-gradle-plugin 0.8.17 -> 0.8.18 (#1995)
    • https://github.com/apple/servicetalk/commit/69870abe9a8cd517944ed5022b98e0df11c53b6c - Update proto-google-common-protos 2.5.1 -> 2.7.0 (#1994)
    • https://github.com/apple/servicetalk/commit/e6ea2c65a7ad20c5dbe014d5245a467b235a8cc2 - Update grpc-java 1.41.0 -> 1.42.1 (#1993)
    • https://github.com/apple/servicetalk/commit/0d5dc7e6ae4f1935944f3fed5307476cfb876e4c - Update protobuf 3.18.1 -> 3.19.1 (#1992)
    • https://github.com/apple/servicetalk/commit/78d156c4fb7ed860d719ad6a032889dddd1bb8e5 - Update junit 5.8.1 -> 5.8.2, junit-platform 1.8.0 -> 1.8.2 (#1991)
    • https://github.com/apple/servicetalk/commit/6f500314e0fface868043d732c4107d77c33868a - Update build to Gradle 7.3 (#1950)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    @bondolo @chemicL @idelpivnitskiy @Scottmitch @tkountis

    Source code(tar.gz)
    Source code(zip)
  • 0.41.11(Nov 4, 2021)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.

    Bug fixes

    • https://github.com/apple/servicetalk/commit/378a61ceeaf7ac884ed58475e7a50031ed34248f - RoundRobinLoadBalancer: use an Executor with unbounded queue by default for health checks (#1937)

    Improvements

    • https://github.com/apple/servicetalk/commit/f09799baa02b1f4a41cab7616619d3bdb53ae825 - RoundRobinLoadBalancer: reduce number of operators in health check chain (#1938)
    • https://github.com/apple/servicetalk/commit/95c6bdd3df1f7700237ea71208ce8ca3c335cd96 - RoundRobinLoadBalancerFactory flip eagerConnectionShutdown to false by default (#1934)
    • https://github.com/apple/servicetalk/commit/934b7ba5f90bf1a50dfa52e7c5f497408d5575c2 - SingleThreadedScheduler should fallback execution upon offloading failure and give visibility for unexpected exceptions from offloadExecutor (#1936)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    • @bondolo
    • @chemicL
    • @tkountis
    • @Scottmitch
    • @idelpivnitskiy
    Source code(tar.gz)
    Source code(zip)
  • 0.41.10(Nov 3, 2021)

    Changes

    This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.

    API deprecation

    Developer note: Additional API deprecation advisories and guidance have been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.

    • https://github.com/apple/servicetalk/commit/adbc99ad3c7aaa6f3277ced747624c9c3899ce5d - Deprecate unused exception types (#1920)

    Bug fixes

    • https://github.com/apple/servicetalk/commit/b6af2b661b5d3df05f69b2367246f210e003344d - Fixes for EmptyBuffer implementation (#1929)
    • https://github.com/apple/servicetalk/commit/70ce4bb226965c8a5d3daf296c7842a0cfd9bf3a - Make static final buffers unreleasable and read-only (#1928)

    Improvements

    • https://github.com/apple/servicetalk/commit/6433e3227ae694a08acc938962c8264148917a01 - Remove grpc and http modules from BOM (#1930)

    Build/Release/Github actions

    • https://github.com/apple/servicetalk/commit/c6ae8c37fc0c1d4a2904b3790819cf2fa5578137 - Bump actions/checkout from 2.3.5 to 2.4.0 (#1932)

    Dependency upgrades

    • https://github.com/apple/servicetalk/commit/b57491c869349117ccda39e8e5457ba8f465607e - Update Netty 4.1.69 -> 4.1.70 (#1933)

    Thank you

    Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.

    • @bondolo
    • @chemicL
    • @tkountis
    • @Scottmitch
    • @idelpivnitskiy
    Source code(tar.gz)
    Source code(zip)
Netty project - an event-driven asynchronous network application framework

Netty Project Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol serv

The Netty Project 30.5k Jan 3, 2023
Experimental Netty-based Java 16 application/web framework

Experimental Netty-based application/web framework. An example application can be seen here. Should I use this? Probably not! It's still incredibly ea

amy null 8 Feb 17, 2022
Apache MINA is a network application framework which helps users

Apache MINA is a network application framework which helps users develop high performance and high scalability network applications easily

The Apache Software Foundation 846 Dec 20, 2022
Book Finder application is a client-server application (gRPC) for educational purposes.

Book-Finder Book Finder application is a client-server application (gRPC) for educational purposes. Instalation These projects (Client/Server) are Mav

Mihai-Lucian Rîtan 21 Oct 27, 2022
Tools for keeping your cloud operating in top form. Chaos Monkey is a resiliency tool that helps applications tolerate random instance failures.

PROJECT STATUS: RETIRED The Simian Army project is no longer actively maintained. Some of the Simian Army functionality has been moved to other Netfli

Netflix, Inc. 7.9k Jan 6, 2023
Intra is an experimental tool that allows you to test new DNS-over-HTTPS services that encrypt domain name lookups and prevent manipulation by your network

Intra Intra is an experimental tool that allows you to test new DNS-over-HTTPS services that encrypt domain name lookups and prevent manipulation by y

Jigsaw 1.2k Jan 1, 2023
CustomRPC - a tool that allows you to change your discord rich presence (RPC) to a custom one

CustomRPC is a tool that allows you to change your discord rich presence (RPC) to a custom one. It also allows creating sentence sequences

null 2 May 3, 2022
VelocityControl is a BungeeControl-fork plugin enabling ChatControl Red to connect with your Velocity network.

VelocityControl is a BungeeControl-fork plugin enabling ChatControl Red to connect with your Velocity network.

Matej Pacan 10 Oct 24, 2022
Apache Dubbo is a high-performance, java based, open source RPC framework.

Apache Dubbo Project Apache Dubbo is a high-performance, Java-based open-source RPC framework. Please visit official site for quick start and document

The Apache Software Foundation 38.2k Dec 31, 2022
Socket.IO server implemented on Java. Realtime java framework

Netty-socketio Overview This project is an open-source Java implementation of Socket.IO server. Based on Netty server framework. Checkout Demo project

Nikita Koksharov 6k Dec 30, 2022
Realtime Client Server Framework for the JVM, supporting WebSockets with Cross-Browser Fallbacks

Welcome to Atmosphere: The Event Driven Framework supporting WebSocket and HTTP The Atmosphere Framework contains client and server side components fo

Atmosphere Framework 3.6k Jan 3, 2023
Telegram API Client and Telegram BOT API Library and Framework in Pure java.

Javagram Telegram API Client and Telegram Bot API library and framework in pure Java. Hello Telegram You can use Javagram for both Telegram API Client

Java For Everything 3 Oct 17, 2021
Unconventional Java code for building web servers / services without a framework.

Unconventional Java code for building web servers / services without a framework. Think dropwizard but as a seed project instead of a framework. If this project had a theme it would be break the rules but be mindful of your decisions.

StubbornJava 227 Nov 15, 2022
The core module is for the TenIO framework.

TenIO Core Module TenIO is an open-source project to create multiplayer online games that includes a java NIO (Non-blocking I/O) based server specific

Kong 2 Oct 23, 2022
jRT measures the response time of a java application to socket-based requests

jRT Version: 0.0.1 jRT is a instrumentation tool that logs and records networking I/O operations "response times" (applicaion response time if be corr

null 45 May 19, 2022
Android application allowing to sniff and inject Zigbee, Mosart and Enhanced ShockBurst packets on a Samsung Galaxy S20

RadioSploit 1.0 This Android application allows to sniff and inject Zigbee, Mosart and Enhanced ShockBurst packets from a Samsung Galaxy S20 smartphon

Romain Cayre 52 Nov 1, 2022
This is an open source android based Music Player application developed in Android Studio

Pulse Music An offline music player android app, with modern UI and powerful features If you liked this repo, fork it and leave a STAR. Your support m

Sharath 7 Apr 11, 2022
Java - Packet Analyzer Application based on Java, Networking and Swing UI

Network-Packet-Tracer-using-Java Java - Packet Analyzer / Sniffing System Application based on Java, Networking and Swing UI Java - Packet Analyzer Ap

Muhammad Asad 6 Feb 3, 2022
TCP Chat Application - Java networking, java swing

TCP-Chat-Application-in-Java TCP Chat Application - Java networking, java swing Java – Multithread Chat System Java Project on core Java, Java swing &

Muhammad Asad 5 Feb 4, 2022