This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new de80310717 [FIX] Filter too big values for Cassandra TTLs (#2156)
de80310717 is described below

commit de80310717b00db3552db44d1a489919a9600e50
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Tue Mar 26 08:48:32 2024 +0100

    [FIX] Filter too big values for Cassandra TTLs (#2156)
---
 .../james/vacation/api/NotificationRegistryContract.java | 16 ++++++++++++++++
 .../cassandra/CassandraNotificationRegistryDAO.java      |  3 ++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git 
a/server/data/data-api/src/test/java/org/apache/james/vacation/api/NotificationRegistryContract.java
 
b/server/data/data-api/src/test/java/org/apache/james/vacation/api/NotificationRegistryContract.java
index 77ec6fe5c6..e443673e62 100644
--- 
a/server/data/data-api/src/test/java/org/apache/james/vacation/api/NotificationRegistryContract.java
+++ 
b/server/data/data-api/src/test/java/org/apache/james/vacation/api/NotificationRegistryContract.java
@@ -62,6 +62,22 @@ public interface NotificationRegistryContract {
         assertThat(notificationRegistry().isRegistered(ACCOUNT_ID, 
recipientId()).block()).isTrue();
     }
 
+    @Test
+    default void registerShouldWorkWithExpiracyDateInTheFarFuture() {
+        when(zonedDateTimeProvider.get()).thenReturn(ZONED_DATE_TIME);
+        notificationRegistry().register(ACCOUNT_ID, recipientId(), 
Optional.of(ZonedDateTime.parse("2050-04-03T02:01:05+07:00[Asia/Vientiane]"))).block();
+
+        assertThat(notificationRegistry().isRegistered(ACCOUNT_ID, 
recipientId()).block()).isTrue();
+    }
+
+    @Test
+    default void registerShouldWorkWithExpiracyDateInTheFarFarFuture() {
+        when(zonedDateTimeProvider.get()).thenReturn(ZONED_DATE_TIME);
+        notificationRegistry().register(ACCOUNT_ID, recipientId(), 
Optional.of(ZonedDateTime.parse("2120-04-03T02:01:05+07:00[Asia/Vientiane]"))).block();
+
+        assertThat(notificationRegistry().isRegistered(ACCOUNT_ID, 
recipientId()).block()).isTrue();
+    }
+
     @Test
     default void registerShouldExpireAfterExpiracyDate() {
         when(zonedDateTimeProvider.get()).thenReturn(ZONED_DATE_TIME);
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryDAO.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryDAO.java
index ec498ee800..3f6b8b80c8 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryDAO.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryDAO.java
@@ -76,7 +76,8 @@ public class CassandraNotificationRegistryDAO {
 
     public Mono<Void> register(AccountId accountId, RecipientId recipientId, 
Optional<Integer> ttl) {
         return cassandraAsyncExecutor.executeVoid(
-            ttl.map(value -> registerWithTTLStatement.bind().setInt(TTL, 
value))
+            ttl.filter(value -> value <= 630720000) // Maximum value for 
Cassandra's TTL
+                .map(value -> registerWithTTLStatement.bind().setInt(TTL, 
value))
                 .orElse(registerStatement.bind())
                 .setString(CassandraNotificationTable.ACCOUNT_ID, 
accountId.getIdentifier())
                 .setString(CassandraNotificationTable.RECIPIENT_ID, 
recipientId.getAsString()));


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to