diff --git a/runner-config.yaml b/runner-config.yaml index ea4081e..bcb9988 100644 --- a/runner-config.yaml +++ b/runner-config.yaml @@ -39,7 +39,9 @@ runner: commandLatencyMonitoring: true # Enables Lettuce internal command latency monitoring connectionMonitoring: true # Enables Additional metrics for connection inactive time. Note supported with GA build of lettuce, and required custom Lettuce client build. See README.md for instruction ho to enable them autoReconnect: true - supportMaintenanceEvents: false + maintenanceEventsConfig: + enabled: true + movingEndpointAddressType: PUBLIC_IP #reconnectOptions: # fixedDelay: PT1S # 1s Configures constant delay between re-connection attempts #pingBeforeActivate: false diff --git a/src/main/java/io/lettuce/test/WorkloadRunnerBase.java b/src/main/java/io/lettuce/test/WorkloadRunnerBase.java index 6ee0155..0db0a36 100644 --- a/src/main/java/io/lettuce/test/WorkloadRunnerBase.java +++ b/src/main/java/io/lettuce/test/WorkloadRunnerBase.java @@ -2,6 +2,8 @@ import io.lettuce.core.AbstractRedisClient; import io.lettuce.core.ClientOptions; +import io.lettuce.core.MaintenanceEventsOptions; +import io.lettuce.core.MaintenanceEventsOptions.AddressType; import io.lettuce.core.RedisURI; import io.lettuce.core.SocketOptions; import io.lettuce.core.TimeoutOptions; @@ -19,6 +21,7 @@ import io.lettuce.core.resource.Delay; import io.lettuce.test.config.WorkloadRunnerConfig; import io.lettuce.test.config.WorkloadRunnerConfig.ClientOptionsConfig; +import io.lettuce.test.config.WorkloadRunnerConfig.MaintenanceEventsConfig; import io.lettuce.test.config.WorkloadRunnerConfig.SocketOptionsConfig; import io.lettuce.test.config.WorkloadRunnerConfig.TcpUserTimeoutOptionsConfig; import io.lettuce.test.config.WorkloadRunnerConfig.TimeoutOptionsConfig; @@ -313,8 +316,20 @@ protected ClientOptions createClientOptions(ClientOptionsConfig config) { builder.autoReconnect(config.getAutoReconnect()); } - if (config.getSupportMaintenanceEvents() != null) { - OptionalClientOptions.applySupportMaintenanceEventsOption(builder, config.getSupportMaintenanceEvents()); + if (config.getMaintenanceEventsConfig() != null) { + MaintenanceEventsConfig maintEventsCfg = config.getMaintenanceEventsConfig(); + if (maintEventsCfg.isEnabled()) { + MaintenanceEventsOptions options; + if (maintEventsCfg.getMovingEndpointAddressType() != null) { + AddressType addrType = AddressType.valueOf(maintEventsCfg.getMovingEndpointAddressType()); + options = MaintenanceEventsOptions.enabled(addrType); + log.info("Enabling supportMaintenanceEvents with address type: {}", addrType); + } else { + options = MaintenanceEventsOptions.enabled(); + log.info("Enabling supportMaintenanceEvents with default (auto resolve) address type."); + } + builder.supportMaintenanceEvents(options); + } } if (config.getPingBeforeActivate() != null) { @@ -404,7 +419,7 @@ private void applyKeepAliveOptions(SocketOptions.KeepAliveOptions.Builder builde static class OptionalClientOptions { - static public void applySupportMaintenanceEventsOption(ClientOptions.Builder builder, boolean value) { + static public void applySupportMaintenanceEventsOption(ClientOptions.Builder builder, MaintenanceEventsConfig value) { try { Method method = builder.getClass().getMethod("supportMaintenanceEvents", boolean.class); method.invoke(builder, value); diff --git a/src/main/java/io/lettuce/test/config/WorkloadRunnerConfig.java b/src/main/java/io/lettuce/test/config/WorkloadRunnerConfig.java index 49c22cf..7511836 100644 --- a/src/main/java/io/lettuce/test/config/WorkloadRunnerConfig.java +++ b/src/main/java/io/lettuce/test/config/WorkloadRunnerConfig.java @@ -363,7 +363,7 @@ public static class ClientOptionsConfig { private Boolean autoReconnect; - private Boolean supportMaintenanceEvents; + private MaintenanceEventsConfig maintenanceEventsConfig; private Boolean pingBeforeActivate; @@ -388,12 +388,12 @@ public void setAutoReconnect(Boolean autoReconnect) { this.autoReconnect = autoReconnect; } - public Boolean getSupportMaintenanceEvents() { - return supportMaintenanceEvents; + public MaintenanceEventsConfig getMaintenanceEventsConfig() { + return maintenanceEventsConfig; } - public void setSupportMaintenanceEvents(Boolean supportMaintenanceEvents) { - this.supportMaintenanceEvents = supportMaintenanceEvents; + public void setMaintenanceEventsConfig(MaintenanceEventsConfig supportMaintenanceEvents) { + this.maintenanceEventsConfig = supportMaintenanceEvents; } public Boolean getPingBeforeActivate() { @@ -446,7 +446,7 @@ public void setReconnectOptions(ReconnectOptionsConfig reconnectOptions) { @Override public String toString() { - return "ClientOptionsConfig{" + "autoReconnect=" + autoReconnect + ", proactiveRebind=" + supportMaintenanceEvents + return "ClientOptionsConfig{" + "autoReconnect=" + autoReconnect + ", proactiveRebind=" + maintenanceEventsConfig + ", pingBeforeActivate=" + pingBeforeActivate + ", requestQueueSize=" + requestQueueSize + ", timeoutOptions=" + timeoutOptions + ", socketOptions=" + socketOptions + ", disconnectedBehavior='" + disconnectedBehavior + '\'' + ", reconnectOptions=" + reconnectOptions + '}'; @@ -648,4 +648,28 @@ public String toString() { } + public static class MaintenanceEventsConfig { + + boolean enabled; + + String movingEndpointAddressType; + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public String getMovingEndpointAddressType() { + return movingEndpointAddressType; + } + + public void setMovingEndpointAddressType(String movingEndpointAddressType) { + this.movingEndpointAddressType = movingEndpointAddressType; + } + + } + }