You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/02/27 08:56:38 UTC
[james-project] 01/05: JAMES-3062: EventDeadLetters containEvents()
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
commit 624fdef9818f71bc1cd4172592da2a505e298503
Author: duc91 <du...@gmail.com>
AuthorDate: Fri Feb 21 16:08:23 2020 +0700
JAMES-3062: EventDeadLetters containEvents()
---
.../james/mailbox/events/EventDeadLetters.java | 2 +
.../mailbox/events/EventDeadLettersContract.java | 48 ++++++++++++++++++++++
.../mailbox/events/CassandraEventDeadLetters.java | 6 +++
.../events/CassandraEventDeadLettersDAO.java | 12 ++++++
.../events/CassandraEventDeadLettersDAOTest.java | 40 ++++++++++++++++++
.../events/CassandraEventDeadLettersTest.java | 8 +---
.../mailbox/events/MemoryEventDeadLetters.java | 5 +++
.../mailbox/events/MemoryEventDeadLettersTest.java | 9 +---
8 files changed, 115 insertions(+), 15 deletions(-)
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventDeadLetters.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventDeadLetters.java
index 0e1c805..053ba45 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventDeadLetters.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventDeadLetters.java
@@ -95,4 +95,6 @@ public interface EventDeadLetters {
Flux<InsertionId> failedIds(Group registeredGroup);
Flux<Group> groupsWithFailedEvents();
+
+ Mono<Boolean> containEvents();
}
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersContract.java
index 74cc2f2..5929c11 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersContract.java
@@ -438,4 +438,52 @@ interface EventDeadLettersContract {
assertThat(eventDeadLetters.groupsWithFailedEvents().toStream()).isEmpty();
}
}
+
+ interface ContainEventsContract extends EventDeadLettersContract {
+ @Test
+ default void containEventsShouldReturnFalseOnNothingStored() {
+ EventDeadLetters eventDeadLetters = eventDeadLetters();
+
+ assertThat(eventDeadLetters.containEvents().block()).isFalse();
+ }
+
+ @Test
+ default void containEventsShouldReturnTrueOnStoredEvents() {
+ EventDeadLetters eventDeadLetters = eventDeadLetters();
+ eventDeadLetters.store(GROUP_A, EVENT_1, INSERTION_ID_1).block();
+
+ assertThat(eventDeadLetters.containEvents().block()).isTrue();
+ }
+
+ @Test
+ default void containEventsShouldReturnFalseWhenRemoveAllStoredEvents() {
+ EventDeadLetters eventDeadLetters = eventDeadLetters();
+ eventDeadLetters.store(GROUP_A, EVENT_1, INSERTION_ID_1).block();
+ eventDeadLetters.store(GROUP_A, EVENT_2, INSERTION_ID_2).block();
+
+ assertThat(eventDeadLetters.containEvents().block()).isTrue();
+
+ eventDeadLetters.remove(GROUP_A, INSERTION_ID_1).block();
+ eventDeadLetters.remove(GROUP_A, INSERTION_ID_2).block();
+
+ assertThat(eventDeadLetters.containEvents().block()).isFalse();
+ }
+
+ @Test
+ default void containEventsShouldReturnTrueWhenRemoveSomeStoredEvents() {
+ EventDeadLetters eventDeadLetters = eventDeadLetters();
+ eventDeadLetters.store(GROUP_A, EVENT_1, INSERTION_ID_1).block();
+ eventDeadLetters.store(GROUP_A, EVENT_2, INSERTION_ID_2).block();
+
+ assertThat(eventDeadLetters.containEvents().block()).isTrue();
+
+ eventDeadLetters.remove(GROUP_A, INSERTION_ID_1).block();
+
+ assertThat(eventDeadLetters.containEvents().block()).isTrue();
+ }
+ }
+
+ interface AllContracts extends StoreContract, RemoveContract, FailedEventContract, FailedEventsContract, GroupsWithFailedEventsContract, ContainEventsContract {
+
+ }
}
\ No newline at end of file
diff --git a/mailbox/event/event-cassandra/src/main/java/org/apache/james/mailbox/events/CassandraEventDeadLetters.java b/mailbox/event/event-cassandra/src/main/java/org/apache/james/mailbox/events/CassandraEventDeadLetters.java
index 920168c..97e4a8e 100644
--- a/mailbox/event/event-cassandra/src/main/java/org/apache/james/mailbox/events/CassandraEventDeadLetters.java
+++ b/mailbox/event/event-cassandra/src/main/java/org/apache/james/mailbox/events/CassandraEventDeadLetters.java
@@ -31,6 +31,7 @@ public class CassandraEventDeadLetters implements EventDeadLetters {
private final CassandraEventDeadLettersDAO cassandraEventDeadLettersDAO;
private final CassandraEventDeadLettersGroupDAO cassandraEventDeadLettersGroupDAO;
+
@Inject
CassandraEventDeadLetters(CassandraEventDeadLettersDAO cassandraEventDeadLettersDAO,
CassandraEventDeadLettersGroupDAO cassandraEventDeadLettersGroupDAO) {
@@ -76,4 +77,9 @@ public class CassandraEventDeadLetters implements EventDeadLetters {
public Flux<Group> groupsWithFailedEvents() {
return cassandraEventDeadLettersGroupDAO.retrieveAllGroups();
}
+
+ @Override
+ public Mono<Boolean> containEvents() {
+ return cassandraEventDeadLettersDAO.containEvents();
+ }
}
diff --git a/mailbox/event/event-cassandra/src/main/java/org/apache/james/mailbox/events/CassandraEventDeadLettersDAO.java b/mailbox/event/event-cassandra/src/main/java/org/apache/james/mailbox/events/CassandraEventDeadLettersDAO.java
index 0afe2ba..d9913ad 100644
--- a/mailbox/event/event-cassandra/src/main/java/org/apache/james/mailbox/events/CassandraEventDeadLettersDAO.java
+++ b/mailbox/event/event-cassandra/src/main/java/org/apache/james/mailbox/events/CassandraEventDeadLettersDAO.java
@@ -47,6 +47,7 @@ public class CassandraEventDeadLettersDAO {
private final PreparedStatement deleteStatement;
private final PreparedStatement selectEventStatement;
private final PreparedStatement selectEventIdsWithGroupStatement;
+ private final PreparedStatement containEventsStatement;
@Inject
CassandraEventDeadLettersDAO(Session session, EventSerializer eventSerializer) {
@@ -56,6 +57,7 @@ public class CassandraEventDeadLettersDAO {
this.deleteStatement = prepareDeleteStatement(session);
this.selectEventStatement = prepareSelectEventStatement(session);
this.selectEventIdsWithGroupStatement = prepareSelectInsertionIdsWithGroupStatement(session);
+ this.containEventsStatement = prepareContainEventStatement(session);
}
private PreparedStatement prepareInsertStatement(Session session) {
@@ -85,6 +87,12 @@ public class CassandraEventDeadLettersDAO {
.where(eq(GROUP, bindMarker(GROUP))));
}
+ private PreparedStatement prepareContainEventStatement(Session session) {
+ return session.prepare(select(EVENT)
+ .from(TABLE_NAME)
+ .limit(1));
+ }
+
Mono<Void> store(Group group, Event failedEvent, EventDeadLetters.InsertionId insertionId) {
return executor.executeVoid(insertStatement.bind()
.setString(GROUP, group.asString())
@@ -111,6 +119,10 @@ public class CassandraEventDeadLettersDAO {
.map(row -> EventDeadLetters.InsertionId.of(row.getUUID(INSERTION_ID)));
}
+ Mono<Boolean> containEvents() {
+ return executor.executeReturnExists(containEventsStatement.bind().setFetchSize(1));
+ }
+
private Event deserializeEvent(String serializedEvent) {
return eventSerializer.fromJson(serializedEvent).get();
}
diff --git a/mailbox/event/event-cassandra/src/test/java/org/apache/james/mailbox/events/CassandraEventDeadLettersDAOTest.java b/mailbox/event/event-cassandra/src/test/java/org/apache/james/mailbox/events/CassandraEventDeadLettersDAOTest.java
index 729c671..35ab39f 100644
--- a/mailbox/event/event-cassandra/src/test/java/org/apache/james/mailbox/events/CassandraEventDeadLettersDAOTest.java
+++ b/mailbox/event/event-cassandra/src/test/java/org/apache/james/mailbox/events/CassandraEventDeadLettersDAOTest.java
@@ -102,4 +102,44 @@ class CassandraEventDeadLettersDAOTest {
.collectList().block())
.containsOnly(INSERTION_ID_1, INSERTION_ID_2, INSERTION_ID_3);
}
+
+ @Test
+ void shouldReturnTrueWhenEventStored() {
+ cassandraEventDeadLettersDAO.store(GROUP_B, EVENT_1, INSERTION_ID_1).block();
+ assertThat(cassandraEventDeadLettersDAO.containEvents().block()).isTrue();
+ }
+
+ @Test
+ void shouldReturnTrueWhenNoEventStored() {
+ assertThat(cassandraEventDeadLettersDAO.containEvents().block()).isFalse();
+ }
+
+ @Test
+ void shouldReturnTrueWhenEventsStoredAndRemovedSome() {
+ cassandraEventDeadLettersDAO.store(GROUP_B, EVENT_1, INSERTION_ID_1).block();
+ cassandraEventDeadLettersDAO.store(GROUP_B, EVENT_1, INSERTION_ID_2).block();
+ cassandraEventDeadLettersDAO.store(GROUP_B, EVENT_1, INSERTION_ID_3).block();
+
+ assertThat(cassandraEventDeadLettersDAO.containEvents().block()).isTrue();
+
+ cassandraEventDeadLettersDAO.removeEvent(GROUP_B, INSERTION_ID_3).block();
+
+ assertThat(cassandraEventDeadLettersDAO.containEvents().block()).isTrue();
+ }
+
+ @Test
+ void shouldReturnFalseWhenRemovedAllEventsStored() {
+ cassandraEventDeadLettersDAO.store(GROUP_B, EVENT_1, INSERTION_ID_1).block();
+ cassandraEventDeadLettersDAO.store(GROUP_B, EVENT_1, INSERTION_ID_2).block();
+ cassandraEventDeadLettersDAO.store(GROUP_B, EVENT_1, INSERTION_ID_3).block();
+
+ assertThat(cassandraEventDeadLettersDAO.containEvents().block()).isTrue();
+
+ cassandraEventDeadLettersDAO.removeEvent(GROUP_B, INSERTION_ID_3).block();
+ cassandraEventDeadLettersDAO.removeEvent(GROUP_B, INSERTION_ID_2).block();
+ cassandraEventDeadLettersDAO.removeEvent(GROUP_B, INSERTION_ID_1).block();
+
+ assertThat(cassandraEventDeadLettersDAO.containEvents().block()).isFalse();
+ }
+
}
diff --git a/mailbox/event/event-cassandra/src/test/java/org/apache/james/mailbox/events/CassandraEventDeadLettersTest.java b/mailbox/event/event-cassandra/src/test/java/org/apache/james/mailbox/events/CassandraEventDeadLettersTest.java
index fce1ee7..9930e9f 100644
--- a/mailbox/event/event-cassandra/src/test/java/org/apache/james/mailbox/events/CassandraEventDeadLettersTest.java
+++ b/mailbox/event/event-cassandra/src/test/java/org/apache/james/mailbox/events/CassandraEventDeadLettersTest.java
@@ -22,19 +22,13 @@ package org.apache.james.mailbox.events;
import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.backends.cassandra.CassandraClusterExtension;
import org.apache.james.event.json.EventSerializer;
-import org.apache.james.mailbox.events.EventDeadLettersContract.FailedEventContract;
-import org.apache.james.mailbox.events.EventDeadLettersContract.FailedEventsContract;
-import org.apache.james.mailbox.events.EventDeadLettersContract.GroupsWithFailedEventsContract;
-import org.apache.james.mailbox.events.EventDeadLettersContract.RemoveContract;
-import org.apache.james.mailbox.events.EventDeadLettersContract.StoreContract;
import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.model.TestMessageId;
import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.RegisterExtension;
-class CassandraEventDeadLettersTest implements StoreContract, RemoveContract, FailedEventContract, FailedEventsContract,
- GroupsWithFailedEventsContract {
+class CassandraEventDeadLettersTest implements EventDeadLettersContract.AllContracts {
@RegisterExtension
static CassandraClusterExtension cassandraClusterExtension = new CassandraClusterExtension(CassandraEventDeadLettersModule.MODULE);
diff --git a/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/MemoryEventDeadLetters.java b/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/MemoryEventDeadLetters.java
index 3c8f423..cbf37ab 100644
--- a/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/MemoryEventDeadLetters.java
+++ b/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/MemoryEventDeadLetters.java
@@ -83,4 +83,9 @@ public class MemoryEventDeadLetters implements EventDeadLetters {
return Flux.fromIterable(ImmutableList.copyOf(deadLetters.rowKeySet()));
}
}
+
+ @Override
+ public Mono<Boolean> containEvents() {
+ return Mono.just(deadLetters.size() > 0);
+ }
}
diff --git a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/MemoryEventDeadLettersTest.java b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/MemoryEventDeadLettersTest.java
index ab2c8a4..2ef0996 100644
--- a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/MemoryEventDeadLettersTest.java
+++ b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/MemoryEventDeadLettersTest.java
@@ -19,16 +19,9 @@
package org.apache.james.mailbox.events;
-import static org.apache.james.mailbox.events.EventDeadLettersContract.FailedEventContract;
-import static org.apache.james.mailbox.events.EventDeadLettersContract.FailedEventsContract;
-import static org.apache.james.mailbox.events.EventDeadLettersContract.GroupsWithFailedEventsContract;
-import static org.apache.james.mailbox.events.EventDeadLettersContract.RemoveContract;
-import static org.apache.james.mailbox.events.EventDeadLettersContract.StoreContract;
-
import org.junit.jupiter.api.BeforeEach;
-class MemoryEventDeadLettersTest implements StoreContract, RemoveContract, FailedEventContract, FailedEventsContract,
- GroupsWithFailedEventsContract {
+class MemoryEventDeadLettersTest implements EventDeadLettersContract.AllContracts {
private MemoryEventDeadLetters eventDeadLetters;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org