From a7a1804fac2987dd2f34640733a29f94e1b46a9c Mon Sep 17 00:00:00 2001 From: jitokim Date: Fri, 15 Nov 2024 02:42:31 +0900 Subject: [PATCH] Rename Cassandra TTL Property for Clarity Rename `timeToLiveSeconds` to `timeToLive` in `CassandraChatMemoryProperties` and associated code to prevent misleading interpretation. This change addresses issue #1728, as the property previously suggested values in seconds but expected milliseconds. Improve readability and ensure accurate configuration by aligning the name with its behavior. Include updates to test cases to validate the new property name and verify ISO 8601 format handling. Fixes #1728 Signed-off-by: Jihoon Kim --- .../CassandraChatMemoryAutoConfiguration.java | 5 ++-- .../CassandraChatMemoryProperties.java | 11 ++++---- ...assandraChatMemoryAutoConfigurationIT.java | 26 ++++++++++++++++++- .../CassandraChatMemoryPropertiesTest.java | 7 ++--- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfiguration.java index c168669e7..9f98736ce 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfiguration.java @@ -31,6 +31,7 @@ import org.springframework.context.annotation.Bean; * {@link AutoConfiguration Auto-configuration} for {@link CassandraChatMemory}. * * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ @AutoConfiguration(after = CassandraAutoConfiguration.class) @@ -52,8 +53,8 @@ public class CassandraChatMemoryAutoConfiguration { if (!properties.isInitializeSchema()) { builder = builder.disallowSchemaChanges(); } - if (null != properties.getTimeToLiveSeconds()) { - builder = builder.withTimeToLive(properties.getTimeToLiveSeconds()); + if (null != properties.getTimeToLive()) { + builder = builder.withTimeToLive(properties.getTimeToLive()); } return CassandraChatMemory.create(builder.build()); diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryProperties.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryProperties.java index 7c3bde2c8..c815131f3 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryProperties.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryProperties.java @@ -30,6 +30,7 @@ import org.springframework.lang.Nullable; * Configuration properties for Cassandra chat memory. * * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ @ConfigurationProperties(CassandraChatMemoryProperties.CONFIG_PREFIX) @@ -47,7 +48,7 @@ public class CassandraChatMemoryProperties extends CommonChatMemoryProperties { private String userColumn = CassandraChatMemoryConfig.DEFAULT_USER_COLUMN_NAME; - private Duration timeToLiveSeconds = null; + private Duration timeToLive = null; public String getKeyspace() { return this.keyspace; @@ -82,12 +83,12 @@ public class CassandraChatMemoryProperties extends CommonChatMemoryProperties { } @Nullable - public Duration getTimeToLiveSeconds() { - return this.timeToLiveSeconds; + public Duration getTimeToLive() { + return this.timeToLive; } - public void setTimeToLiveSeconds(Duration timeToLiveSeconds) { - this.timeToLiveSeconds = timeToLiveSeconds; + public void setTimeToLive(Duration timeToLive) { + this.timeToLive = timeToLive; } } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java index abc4b6c43..c1eba20a8 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java @@ -16,6 +16,7 @@ package org.springframework.ai.autoconfigure.chat.memory.cassandra; +import java.time.Duration; import java.util.List; import com.datastax.driver.core.utils.UUIDs; @@ -37,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ @Testcontainers @@ -57,7 +59,7 @@ class CassandraChatMemoryAutoConfigurationIT { this.contextRunner.withPropertyValues("spring.cassandra.contactPoints=" + getContactPointHost()) .withPropertyValues("spring.cassandra.port=" + getContactPointPort()) .withPropertyValues("spring.cassandra.localDatacenter=" + cassandraContainer.getLocalDatacenter()) - + .withPropertyValues("spring.ai.chat.memory.cassandra.time-to-live=" + getTimeToLive()) .run(context -> { CassandraChatMemory memory = context.getBean(CassandraChatMemory.class); @@ -84,6 +86,20 @@ class CassandraChatMemoryAutoConfigurationIT { .isEqualTo(MessageType.ASSISTANT); assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(0).getContent()).isEqualTo("test answer"); + CassandraChatMemoryProperties properties = context.getBean(CassandraChatMemoryProperties.class); + assertThat(properties.getTimeToLive()).isEqualTo(getTimeToLive()); + }); + } + + @Test + void compareTimeToLive_ISO8601Format() { + this.contextRunner.withPropertyValues("spring.cassandra.contactPoints=" + getContactPointHost()) + .withPropertyValues("spring.cassandra.port=" + getContactPointPort()) + .withPropertyValues("spring.cassandra.localDatacenter=" + cassandraContainer.getLocalDatacenter()) + .withPropertyValues("spring.ai.chat.memory.cassandra.time-to-live=" + getTimeToLiveString()) + .run(context -> { + CassandraChatMemoryProperties properties = context.getBean(CassandraChatMemoryProperties.class); + assertThat(properties.getTimeToLive()).isEqualTo(Duration.parse(getTimeToLiveString())); }); } @@ -95,4 +111,12 @@ class CassandraChatMemoryAutoConfigurationIT { return String.valueOf(cassandraContainer.getContactPoint().getPort()); } + private Duration getTimeToLive() { + return Duration.ofSeconds(12000); + } + + private String getTimeToLiveString() { + return "PT1M"; + } + } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryPropertiesTest.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryPropertiesTest.java index c3b473089..ee44f27b4 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryPropertiesTest.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryPropertiesTest.java @@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ class CassandraChatMemoryPropertiesTest { @@ -37,7 +38,7 @@ class CassandraChatMemoryPropertiesTest { assertThat(props.getTable()).isEqualTo(CassandraChatMemoryConfig.DEFAULT_TABLE_NAME); assertThat(props.getAssistantColumn()).isEqualTo(CassandraChatMemoryConfig.DEFAULT_ASSISTANT_COLUMN_NAME); assertThat(props.getUserColumn()).isEqualTo(CassandraChatMemoryConfig.DEFAULT_USER_COLUMN_NAME); - assertThat(props.getTimeToLiveSeconds()).isNull(); + assertThat(props.getTimeToLive()).isNull(); assertThat(props.isInitializeSchema()).isTrue(); } @@ -48,14 +49,14 @@ class CassandraChatMemoryPropertiesTest { props.setTable("my_table"); props.setAssistantColumn("my_assistant_column"); props.setUserColumn("my_user_column"); - props.setTimeToLiveSeconds(Duration.ofDays(1)); + props.setTimeToLive(Duration.ofDays(1)); props.setInitializeSchema(false); assertThat(props.getKeyspace()).isEqualTo("my_keyspace"); assertThat(props.getTable()).isEqualTo("my_table"); assertThat(props.getAssistantColumn()).isEqualTo("my_assistant_column"); assertThat(props.getUserColumn()).isEqualTo("my_user_column"); - assertThat(props.getTimeToLiveSeconds()).isEqualTo(Duration.ofDays(1)); + assertThat(props.getTimeToLive()).isEqualTo(Duration.ofDays(1)); assertThat(props.isInitializeSchema()).isFalse(); }