diff --git a/lib/sdk/server/build.gradle b/lib/sdk/server/build.gradle index 9d2eac0..a93dab6 100644 --- a/lib/sdk/server/build.gradle +++ b/lib/sdk/server/build.gradle @@ -71,7 +71,7 @@ ext.versions = [ "guava": "32.0.1-jre", "jackson": "2.11.2", "launchdarklyJavaSdkCommon": "2.1.1", - "launchdarklyJavaSdkInternal": "1.4.0", + "launchdarklyJavaSdkInternal": "1.5.0", "launchdarklyLogging": "1.1.0", "okhttp": "4.9.3", // specify this for the SDK build instead of relying on the transitive dependency from okhttp-eventsource "okhttpEventsource": "4.1.0", diff --git a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/Representations.java b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/Representations.java index 5447cfe..94772cc 100644 --- a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/Representations.java +++ b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/Representations.java @@ -45,6 +45,7 @@ public static class SdkConfigEventParams { boolean allAttributesPrivate; int capacity; boolean enableDiagnostics; + boolean enableGzip; String[] globalPrivateAttributes; Long flushIntervalMs; } diff --git a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/SdkClientEntity.java b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/SdkClientEntity.java index c7f43b0..db70d6c 100644 --- a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/SdkClientEntity.java +++ b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/SdkClientEntity.java @@ -390,7 +390,8 @@ private LDConfig buildSdkConfig(SdkConfigParams params, String tag) { } else { endpoints.events(params.events.baseUri); EventProcessorBuilder eb = Components.sendEvents() - .allAttributesPrivate(params.events.allAttributesPrivate); + .allAttributesPrivate(params.events.allAttributesPrivate) + .enableGzipCompression(params.events.enableGzip); if (params.events.capacity > 0) { eb.capacity(params.events.capacity); } diff --git a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/TestService.java b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/TestService.java index 994cffe..84bbb3e 100644 --- a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/TestService.java +++ b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/TestService.java @@ -31,10 +31,12 @@ public class TestService { "client-prereq-events", "context-type", "evaluation-hooks", + "event-gzip", "event-sampling", "filtering", "inline-context-all", "migrations", + "optional-event-gzip", "server-side", "service-endpoints", "strongly-typed", diff --git a/lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/ComponentsImpl.java b/lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/ComponentsImpl.java index 0433a28..ea40f41 100644 --- a/lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/ComponentsImpl.java +++ b/lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/ComponentsImpl.java @@ -222,6 +222,7 @@ public EventProcessor build(ClientContext context) { null, // use default request path for server-side events null, // use default request path for client-side events 0, // 0 means default retry delay + enableGzipCompression, context.getBaseLogger().subLogger(Loggers.EVENTS_LOGGER_NAME)); } else { eventSender = new EventSenderWrapper(eventSenderConfigurer.build(context)); diff --git a/lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/integrations/EventProcessorBuilder.java b/lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/integrations/EventProcessorBuilder.java index 4c79c4e..c818c9f 100644 --- a/lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/integrations/EventProcessorBuilder.java +++ b/lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/integrations/EventProcessorBuilder.java @@ -66,6 +66,7 @@ public abstract class EventProcessorBuilder implements ComponentConfigurer eventSenderConfigurer = null; + protected boolean enableGzipCompression = false; /** * Sets whether or not all optional user attributes should be hidden from LaunchDarkly. @@ -211,4 +212,20 @@ public EventProcessorBuilder userKeysFlushInterval(Duration userKeysFlushInterva this.userKeysFlushInterval = userKeysFlushInterval == null ? DEFAULT_USER_KEYS_FLUSH_INTERVAL : userKeysFlushInterval; return this; } + + /** + * Enables gzip compression for event payloads. + *

+ * When enabled, event payloads will be compressed using gzip before being sent to LaunchDarkly. + * This can significantly reduce bandwidth usage when sending large event payloads. + *

+ * The default value is false. + * + * @param enableGzipCompression whether to enable gzip compression + * @return the builder + */ + public EventProcessorBuilder enableGzipCompression(boolean enableGzipCompression) { + this.enableGzipCompression = enableGzipCompression; + return this; + } }