Fix mapping of Cassandra's idle-timeout and heartbeat-interval

Previous to this commit the connection idle timeout and heartbeat
interval were mapped to seconds whereas Cassandra expects ms for all
duration types.

This commit fixes the mapping and removes the default duration unit
since it should be considered ms like every other duration properties.

Closes gh-23249
pull/23585/head
Stephane Nicoll 4 years ago
parent aab4ee9aa2
commit 7c13c01cb6

@ -146,11 +146,11 @@ public class CassandraAutoConfiguration {
}
private void mapPoolingOptions(CassandraProperties properties, CassandraDriverOptions options) {
PropertyMapper map = PropertyMapper.get();
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
CassandraProperties.Pool poolProperties = properties.getPool();
map.from(poolProperties::getIdleTimeout).whenNonNull().asInt(Duration::getSeconds)
map.from(poolProperties::getIdleTimeout).asInt(Duration::toMillis)
.to((idleTimeout) -> options.add(DefaultDriverOption.HEARTBEAT_TIMEOUT, idleTimeout));
map.from(poolProperties::getHeartbeatInterval).whenNonNull().asInt(Duration::getSeconds)
map.from(poolProperties::getHeartbeatInterval).asInt(Duration::toMillis)
.to((heartBeatInterval) -> options.add(DefaultDriverOption.HEARTBEAT_INTERVAL, heartBeatInterval));
}

@ -17,7 +17,6 @@
package org.springframework.boot.autoconfigure.cassandra;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -26,7 +25,6 @@ import com.datastax.oss.driver.api.core.DefaultConsistencyLevel;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
import org.springframework.boot.convert.DurationUnit;
/**
* Configuration properties for Cassandra.
@ -360,18 +358,14 @@ public class CassandraProperties {
public static class Pool {
/**
* Idle timeout before an idle connection is removed. If a duration suffix is not
* specified, seconds will be used.
* Idle timeout before an idle connection is removed.
*/
@DurationUnit(ChronoUnit.SECONDS)
private Duration idleTimeout = Duration.ofSeconds(120);
/**
* Heartbeat interval after which a message is sent on an idle connection to make
* sure it's still alive. If a duration suffix is not specified, seconds will be
* used.
* sure it's still alive.
*/
@DurationUnit(ChronoUnit.SECONDS)
private Duration heartbeatInterval = Duration.ofSeconds(30);
public Duration getIdleTimeout() {

Loading…
Cancel
Save