[ENHANCEMENT] Allow disable threads
This changeset will not alter thread categorisation which works decently today but only thread presentation
to the end user which is currently relying on search. As an operator I wishes to have a security trigger
if things go blur.
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraThreadIdGuessingAlgorithm.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraThreadIdGuessingAlgorithm.java
index 9967264..812191c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraThreadIdGuessingAlgorithm.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraThreadIdGuessingAlgorithm.java
@@ -48,6 +48,8 @@
import reactor.core.publisher.Mono;
public class CassandraThreadIdGuessingAlgorithm implements ThreadIdGuessingAlgorithm {
+ private static final boolean DISABLE_THREADS = Boolean.valueOf(System.getProperty("james.mailbox.threads.disable", "false"));
+
private final MailboxManager mailboxManager;
private final CassandraThreadDAO threadDAO;
private final CassandraThreadLookupDAO threadLookupDAO;
@@ -82,6 +84,10 @@
@Override
public Flux<MessageId> getMessageIdsInThread(ThreadId threadId, MailboxSession session) {
+ if (DISABLE_THREADS) {
+ return Flux.just(threadId.getBaseMessageId());
+ }
+
SearchQuery searchQuery = SearchQuery.builder()
.andCriteria(SearchQuery.threadId(threadId))
.sorts(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival, SearchQuery.Sort.Order.NATURAL))
diff --git a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresThreadIdGuessingAlgorithm.java b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresThreadIdGuessingAlgorithm.java
index 77419e9..cec52e2 100644
--- a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresThreadIdGuessingAlgorithm.java
+++ b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresThreadIdGuessingAlgorithm.java
@@ -44,6 +44,8 @@
import reactor.core.publisher.Mono;
public class PostgresThreadIdGuessingAlgorithm implements ThreadIdGuessingAlgorithm {
+ private static final boolean DISABLE_THREADS = Boolean.valueOf(System.getProperty("james.mailbox.threads.disable", "false"));
+
private final PostgresThreadDAO.Factory threadDAOFactory;
@Inject
@@ -76,6 +78,10 @@
@Override
public Flux<MessageId> getMessageIdsInThread(ThreadId threadId, MailboxSession session) {
+ if (DISABLE_THREADS) {
+ return Flux.just(threadId.getBaseMessageId());
+ }
+
PostgresThreadDAO threadDAO = threadDAOFactory.create(session.getUser().getDomainPart());
return threadDAO.findMessageIds(threadId, session.getUser())
.switchIfEmpty(Flux.error(new ThreadNotFoundException(threadId)));