From 74189c78cb3058672be868b6e6e7f364c34cfe36 Mon Sep 17 00:00:00 2001 From: seungh0 Date: Wed, 12 Jun 2024 19:20:08 +0900 Subject: [PATCH] Allow `QueryOptions` to disable timeout. If it is zero, the read timeout will be disabled for this statement. Closes #1494 Original pull request: #1495 --- .../data/cassandra/core/cql/QueryOptions.java | 6 ++-- .../core/cql/QueryOptionsUnitTests.java | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/QueryOptions.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/QueryOptions.java index 2f1e5fde6..db955ebdc 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/QueryOptions.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/QueryOptions.java @@ -284,6 +284,7 @@ public int hashCode() { * Builder for {@link QueryOptions}. * * @author Mark Paluch + * @author Seungho Kang * @since 1.5 */ public static class QueryOptionsBuilder { @@ -482,8 +483,7 @@ public QueryOptionsBuilder readTimeout(long readTimeout, TimeUnit timeUnit) { @Deprecated public QueryOptionsBuilder readTimeout(Duration readTimeout) { - Assert.isTrue(!readTimeout.isZero() && !readTimeout.isNegative(), - "ReadTimeout must be greater than equal to zero"); + Assert.isTrue(!readTimeout.isNegative(), "ReadTimeout must be greater than equal to zero"); this.timeout = readTimeout; @@ -548,7 +548,7 @@ public QueryOptionsBuilder serialConsistencyLevel(ConsistencyLevel consistencyLe */ public QueryOptionsBuilder timeout(Duration timeout) { - Assert.isTrue(!timeout.isZero() && !timeout.isNegative(), "ReadTimeout must be greater than equal to zero"); + Assert.isTrue(!timeout.isNegative(), "ReadTimeout must be greater than equal to zero"); this.timeout = timeout; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/QueryOptionsUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/QueryOptionsUnitTests.java index 549db43dc..35cdba1b1 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/QueryOptionsUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/QueryOptionsUnitTests.java @@ -31,6 +31,7 @@ * @author Mark Paluch * @author Tomasz Lelek * @author Sam Lightfoot + * @author Seungho Kang */ class QueryOptionsUnitTests { @@ -86,4 +87,34 @@ void buildQueryOptionsMutate() { assertThat(mutated.getRoutingKeyspace()).isEqualTo(CqlIdentifier.fromCql("rksl")); assertThat(mutated.getRoutingKey()).isEqualTo(ByteBuffer.allocate(1)); } + + @Test // GH-1494 + void buildZeroDurationTimeoutQueryOptions() { + + QueryOptions queryOptions = QueryOptions.builder().timeout(Duration.ofSeconds(0)).build(); + + assertThat(queryOptions.getTimeout()).isEqualTo(Duration.ZERO); + } + + @Test // GH-1494 + void shouldRejectNegativeDurationTimeoutQueryOptions() { + + assertThatIllegalArgumentException().isThrownBy( + () -> QueryOptions.builder().timeout(Duration.ofSeconds(-1)).build()); + } + + @Test // GH-1494 + void buildZeroDurationReadTimeoutQueryOptions() { + + QueryOptions queryOptions = QueryOptions.builder().readTimeout(Duration.ofSeconds(0)).build(); + + assertThat(queryOptions.getReadTimeout()).isEqualTo(Duration.ZERO); + } + + @Test // GH-1494 + void shouldRejectNegativeDurationReadTimeoutQueryOptions() { + + assertThatIllegalArgumentException().isThrownBy( + () -> QueryOptions.builder().readTimeout(Duration.ofSeconds(-1)).build()); + } }