Skip to content

Commit

Permalink
prepare 3.0.0 release (#79)
Browse files Browse the repository at this point in the history
* add time threshold for backoff reset

* allow endpoint to be specified as either URI or HttpUrl

* add @SInCE

* add interface for customizing requests

* javadoc fixes

* add changelog for past releases

* remove JSR305

* replace SSL-specific config method with general-purpose HTTP config method

* make helper method static

* add end-to-end EventSource tests

* spacing

* omit default header value if there's a custom value

* avoid trailing period in logger name

* add 1.x branch

* update to OkHttp 4.x and Java 8

* javadoc fixes

* remove EventSource setters, + test improvements

* update Gradle release

* enable Github Pages

* skip tests in release

* add ability to force a stream restart; improve tests so we can test this

* revert whitespace change

* bump OkHttp version to latest Java 7-compatible version

* add ability to force a stream restart; improve tests so we can test this (#29)

* update to okhttp 4.5.0

* longer timeout for cleaner shutdown of test servers

* fix Gradle scopes

* allow setting specific thread priority

* remove misleading logging & unnecessary backoff, improve tests (#34)

* known issue with onClose() - add comment, disable test assertions

* allow caller to specify a custom logger instead of SLF4J (#32)

* add method for changing base name of SLF4J logger

* enable coverage reports in CI, improve CI to test all supported Java versions

* rm inapplicable CI copy-paste

* another CI fix

* add checkstyle config

* fix jitter calculation when upper bound is a power of 2

* misc coverage + test improvements, add CI enforcement of coverage (#39)

* fix shutdown state logic, simplify code paths (#40)

* Fix Java 7 compatibility.

* add OpenJDK 7 build + fix test race condition + javadoc fix (#42)

* update Gradle to 6.8.3

* Kotlinize build script

* fix logic for shutting down after an unrecoverable error

* use newer HTTP test helpers

* use Releaser v2 config + newer CI images (#47)

* use new stream-reading implementation to support CR-only line endings

* make buffer size configurable

* rm usage that's not allowed in Java 8

* add Guava test dependency

* add code coverage ovverride

* implement contract tests (#48)

* use Gradle 7

* Bounded queues for the EventHandler thread (#58)

* Bounded queue for the EventHandler thread

The unbounded queue fronting the 'event' thread can cause trouble when the
EventHandler is unable to keep up with the workload. This can lead to heap
exhaustion, GC issues and failure modes that are generally considered "bad".

Band-aid over this with a semaphore to limit the number of tasks in the queue.
The semaphore is opt-in and disabled by default to avoid any nasty surprises
for folks upgrading.

Also add 'EventSource.awaitClosed()' to allow users to wait for underlying
thread pools to completely shut down. We can't know if it's safe to clean
up resources used by the EventHandler thread if we can't be certain that it
has completely terminated.

* Address checkstyle griping in StubServer

* Fix JavaDoc issue

* Tighten up exception handling

Co-authored-by: Eli Bishop <eli@launchdarkly.com>

* update @SInCE

* test Java 17 in CI (#51)

* improve tests for AsyncEventHandler and EventSource.awaitClosed (#52)

* add streaming data mode for very large events (#53)

* add option to ensure that expected fields are always read

* add Gradle option to suppress kotlin-stdlib in our pom

* update okhttp to 4.9.3

* use LaunchDarkly logging facade

* rm unused

* misc fixes

* improve javadoc links

* remove SLF4J dependency, use only com.launchdarkly.logging

* update com.launchdarkly.logging version

* consistently use placeholders instead of concatenation in log output

* update release metadata

* use SecureRandom instead of Random, just to make scanners happier

* use SecureRandom instead of Random, just to make scanners happier

* use SecureRandom instead of Random, just to make scanners happier

* fix release metadata

* remove usage of Duration for Android compatibility

Co-authored-by: Eli Bishop <eli@launchdarkly.com>
Co-authored-by: LaunchDarklyCI <dev@launchdarkly.com>
Co-authored-by: Gavin Whelan <gwhelan@launchdarkly.com>
Co-authored-by: LaunchDarklyReleaseBot <launchdarklyreleasebot@launchdarkly.com>
Co-authored-by: Tom Lee <93216+thomaslee@users.noreply.github.com>
  • Loading branch information
6 people authored Dec 2, 2022
1 parent e6b0132 commit 9701d79
Show file tree
Hide file tree
Showing 13 changed files with 169 additions and 459 deletions.
16 changes: 3 additions & 13 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -61,18 +61,13 @@ java {
}

object Versions {
const val launchdarklyLogging = "1.1.0"
const val launchdarklyLogging = "1.1.1"
const val okhttp = "4.9.3"
const val slf4j = "1.7.22"
}

dependencies {
api("com.launchdarkly:launchdarkly-logging:${Versions.launchdarklyLogging}")
api("com.squareup.okhttp3:okhttp:${Versions.okhttp}")
api("org.slf4j:slf4j-api:${Versions.slf4j}")
// SLF4J is no longer referenced directly by okhttp-eventsource, but since the default behavior is
// to use the SLF4J adapter from com.launchdarkly.logging, we are still retaining the dependency
// here to make sure it is in the classpath.
testImplementation("org.mockito:mockito-core:1.10.19")
testImplementation("com.launchdarkly:test-helpers:1.0.0")
testImplementation("com.google.guava:guava:30.1-jre")
Expand Down Expand Up @@ -129,19 +124,14 @@ tasks.jacocoTestCoverageVerification.configure {
// The key for each of these items is the complete method signature minus the "com.launchdarkly.eventsource." prefix.
"AsyncEventHandler.acquire()" to 2,
"AsyncEventHandler.execute(java.lang.Runnable)" to 3,
"EventSource.awaitClosed(java.time.Duration)" to 3,
"EventSource.awaitClosed(long, java.util.concurrent.TimeUnit)" to 2,
"EventSource.awaitClosed(java.time.Duration)" to 1,
"EventSource.handleSuccessfulResponse(okhttp3.Response)" to 2,
"EventSource.maybeReconnectDelay(int, long)" to 2,
"EventSource.run()" to 3,
"EventSource.Builder.createInitialClientBuilder()" to 1,
"EventSource.Builder.defaultTrustManager()" to 2,
"EventSource.Builder.loggerBaseName(java.lang.String)" to 2,
"LoggerBridge.ChannelImpl.log(com.launchdarkly.logging.LDLogLevel, java.lang.String, java.lang.Object[])" to 7,
"LoggerBridge.ChannelImpl.log(com.launchdarkly.logging.LDLogLevel, java.lang.String, java.lang.Object)" to 7,
"LoggerBridge.ChannelImpl.log(com.launchdarkly.logging.LDLogLevel, java.lang.Object)" to 7,
"LoggerBridge.ChannelImpl.isEnabled(com.launchdarkly.logging.LDLogLevel)" to 1,
"MessageEvent.getData()" to 2,
"SLF4JLogger.error(java.lang.String)" to 2,
"ModernTLSSocketFactory.createSocket(java.lang.String, int)" to 1,
"ModernTLSSocketFactory.createSocket(java.lang.String, int, java.net.InetAddress, int)" to 1,
"ModernTLSSocketFactory.createSocket(java.net.InetAddress, int)" to 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.launchdarkly.eventsource.*;
import com.launchdarkly.logging.*;
import java.net.URI;
import java.time.Duration;
import java.util.concurrent.atomic.AtomicInteger;

import okhttp3.*;
Expand Down Expand Up @@ -36,10 +35,10 @@ public StreamEntity(TestService owner, String id, StreamOptions options, LDLogAd
eb.headers(hb.build());
}
if (options.initialDelayMs != null) {
eb.reconnectTime(Duration.ofMillis(options.initialDelayMs));
eb.reconnectTime(options.initialDelayMs, null);
}
if (options.readTimeoutMs != null) {
eb.readTimeout(Duration.ofMillis(options.readTimeoutMs));
eb.readTimeout(options.readTimeoutMs, null);
}
if (options.lastEventId != null) {
eb.lastEventId(options.lastEventId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.launchdarkly.eventsource;

import java.time.Duration;

interface ConnectionHandler {
void setReconnectionTime(Duration reconnectionTime);
void setReconnectTimeMillis(long reconnecTimeMillis);
void setLastEventId(String lastEventId);
}
3 changes: 1 addition & 2 deletions src/main/java/com/launchdarkly/eventsource/EventParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import java.io.PipedOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.time.Duration;
import java.util.Set;
import java.util.regex.Pattern;

Expand Down Expand Up @@ -229,7 +228,7 @@ public boolean processStream() throws IOException {
break;
case RETRY:
if (DIGITS_ONLY.matcher(fieldValue).matches()) {
connectionHandler.setReconnectionTime(Duration.ofMillis(Long.parseLong(fieldValue)));
connectionHandler.setReconnectTimeMillis(Long.parseLong(fieldValue));
}
break;
default:
Expand Down
Loading

0 comments on commit 9701d79

Please sign in to comment.