Skip to content

Commit

Permalink
JAMES-2092 Cache messages on events whenever possible
Browse files Browse the repository at this point in the history
  • Loading branch information
chibenwa authored and aduprat committed Jul 13, 2017
1 parent 33419f6 commit 3c6ff2c
Show file tree
Hide file tree
Showing 28 changed files with 577 additions and 81 deletions.
Expand Up @@ -133,7 +133,8 @@ protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSe
getQuotaRootResolver(),
getMessageParser(),
getMessageIdFactory(),
getBatchSizes());
getBatchSizes(),
getImmutableMailboxMessageFactory());
}

}
Expand Up @@ -30,6 +30,7 @@
import org.apache.james.mailbox.quota.QuotaManager;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.BatchSizes;
import org.apache.james.mailbox.store.ImmutableMailboxMessage;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
Expand All @@ -46,9 +47,9 @@ public class CassandraMessageManager extends StoreMessageManager {
public CassandraMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index,
MailboxEventDispatcher dispatcher, MailboxPathLocker locker, Mailbox mailbox, QuotaManager quotaManager,
QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory,
BatchSizes batchSizes) throws MailboxException {
BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory) throws MailboxException {
super(mapperFactory, index, dispatcher, locker, mailbox, new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(), quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes);
new SimpleGroupMembershipResolver(), quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory);

}

Expand Down
Expand Up @@ -27,9 +27,11 @@
import org.apache.james.backends.cassandra.utils.CassandraUtils;
import org.apache.james.mailbox.MailboxListener;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.cassandra.modules.CassandraRegistrationModule;
import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageMetaData;
import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.model.TestMessageId;
import org.apache.james.mailbox.store.TestIdDeserializer;
Expand All @@ -40,12 +42,15 @@
import org.apache.james.mailbox.store.json.MessagePackEventSerializer;
import org.apache.james.mailbox.store.json.event.EventConverter;
import org.apache.james.mailbox.store.json.event.MailboxConverter;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
import org.apache.james.mailbox.util.EventCollector;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.google.common.collect.ImmutableMap;

/**
Integration tests for RegisteredDelegatingMailboxListener using a cassandra back-end.
Expand All @@ -57,6 +62,7 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
public static final MailboxPath MAILBOX_PATH_2 = new MailboxPath("#private", "user", "mbx.other");
public static final int CASSANDRA_TIME_OUT_IN_S = 10;
public static final int SCHEDULER_PERIOD_IN_S = 20;
public static final ImmutableMap<MessageUid, MailboxMessage> EMPTY_MESSAGE_CACHE = ImmutableMap.of();

private CassandraCluster cassandra = CassandraCluster.create(new CassandraRegistrationModule());
private RegisteredDelegatingMailboxListener registeredDelegatingMailboxListener1;
Expand Down Expand Up @@ -142,7 +148,8 @@ public void tearDown() {
public void mailboxEventListenersShouldBeTriggeredIfRegistered() throws Exception {
SimpleMailbox simpleMailbox = new SimpleMailbox(MAILBOX_PATH_1, 42);
simpleMailbox.setMailboxId(TestId.of(52));
final MailboxListener.Event event = new EventFactory().added(mailboxSession, new TreeMap<>(), simpleMailbox);
TreeMap<MessageUid, MessageMetaData> uids = new TreeMap<>();
final MailboxListener.Event event = new EventFactory().added(mailboxSession, uids, simpleMailbox, EMPTY_MESSAGE_CACHE);

registeredDelegatingMailboxListener1.event(event);

Expand All @@ -155,7 +162,8 @@ public void mailboxEventListenersShouldBeTriggeredIfRegistered() throws Exceptio
public void onceEventListenersShouldBeTriggeredOnceAcrossTheCluster() {
SimpleMailbox simpleMailbox = new SimpleMailbox(MAILBOX_PATH_1, 42);
simpleMailbox.setMailboxId(TestId.of(52));
final MailboxListener.Event event = new EventFactory().added(mailboxSession, new TreeMap<>(), simpleMailbox);
TreeMap<MessageUid, MessageMetaData> uids = new TreeMap<>();
final MailboxListener.Event event = new EventFactory().added(mailboxSession, uids, simpleMailbox, EMPTY_MESSAGE_CACHE);

registeredDelegatingMailboxListener1.event(event);

Expand Down
Expand Up @@ -105,6 +105,7 @@ protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSe
getQuotaRootResolver(),
getMessageParser(),
getMessageIdFactory(),
getBatchSizes());
getBatchSizes(),
getImmutableMailboxMessageFactory());
}
}
Expand Up @@ -29,6 +29,7 @@
import org.apache.james.mailbox.quota.QuotaManager;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.BatchSizes;
import org.apache.james.mailbox.store.ImmutableMailboxMessage;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
Expand All @@ -45,9 +46,9 @@ public class HBaseMessageManager extends StoreMessageManager {
public HBaseMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index,
MailboxEventDispatcher dispatcher, MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver aclResolver,
GroupMembershipResolver groupMembershipResolver, QuotaManager quotaManager,
QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException {
QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory) throws MailboxException {
super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager,
quotaRootResolver, messageParser, messageIdFactory, batchSizes);
quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory);

}

Expand Down
Expand Up @@ -77,7 +77,8 @@ protected StoreMessageManager createMessageManager(Mailbox mailboxEntity, Mailbo
getQuotaRootResolver(),
getMessageParser(),
getMessageIdFactory(),
getBatchSizes());
getBatchSizes(),
getImmutableMailboxMessageFactory());
}

@Override
Expand Down
Expand Up @@ -36,6 +36,7 @@
import org.apache.james.mailbox.quota.QuotaManager;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.BatchSizes;
import org.apache.james.mailbox.store.ImmutableMailboxMessage;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
Expand All @@ -56,10 +57,10 @@ public class JCRMessageManager extends StoreMessageManager {
public JCRMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index,
final MailboxEventDispatcher dispatcher, MailboxPathLocker locker, JCRMailbox mailbox,
MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, Logger log,
QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes)
QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory)
throws MailboxException {
super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager,
quotaRootResolver, messageParser, messageIdFactory, batchSizes);
quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory);
this.log = log;
}

Expand Down
Expand Up @@ -36,6 +36,7 @@
import org.apache.james.mailbox.quota.QuotaManager;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.BatchSizes;
import org.apache.james.mailbox.store.ImmutableMailboxMessage;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
Expand All @@ -54,10 +55,10 @@ public JPAMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearc
final MailboxEventDispatcher dispatcher, MailboxPathLocker locker,
final Mailbox mailbox, MailboxACLResolver aclResolver,
GroupMembershipResolver groupMembershipResolver, QuotaManager quotaManager,
QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException {
QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory) throws MailboxException {

super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver,
quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes);
quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory);
}

@Override
Expand Down
Expand Up @@ -105,6 +105,7 @@ protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSe
getQuotaRootResolver(),
getMessageParser(),
getMessageIdFactory(),
getBatchSizes());
getBatchSizes(),
getImmutableMailboxMessageFactory());
}
}
Expand Up @@ -38,6 +38,7 @@
import org.apache.james.mailbox.quota.QuotaManager;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.BatchSizes;
import org.apache.james.mailbox.store.ImmutableMailboxMessage;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
import org.apache.james.mailbox.store.mail.model.Mailbox;
Expand All @@ -64,19 +65,19 @@ public OpenJPAMessageManager(MailboxSessionMapperFactory mapperFactory,
MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver aclResolver,
GroupMembershipResolver groupMembershipResolver,
QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser,
MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException {
MessageId.Factory messageIdFactory, BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory) throws MailboxException {
this(mapperFactory, index, dispatcher, locker, mailbox, AdvancedFeature.None, aclResolver,
groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes);
groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory);
}

public OpenJPAMessageManager(MailboxSessionMapperFactory mapperFactory,
MessageSearchIndex index, MailboxEventDispatcher dispatcher,
MailboxPathLocker locker, Mailbox mailbox, AdvancedFeature f,
MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser,
MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException {
MessageId.Factory messageIdFactory, BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory) throws MailboxException {

super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes);
super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory);
this.feature = f;
}

Expand Down
Expand Up @@ -87,6 +87,7 @@ protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSessi
getQuotaRootResolver(),
getMessageParser(),
getMessageIdFactory(),
getBatchSizes());
getBatchSizes(),
getImmutableMailboxMessageFactory());
}
}
Expand Up @@ -11,6 +11,7 @@
import org.apache.james.mailbox.quota.QuotaManager;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.BatchSizes;
import org.apache.james.mailbox.store.ImmutableMailboxMessage;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
Expand All @@ -22,8 +23,8 @@ public class InMemoryMessageManager extends StoreMessageManager {

public InMemoryMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher,
MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException {
super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes);
QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory) throws MailboxException {
super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory);
}

@Override
Expand Down
1 change: 0 additions & 1 deletion mailbox/store/pom.xml
Expand Up @@ -39,7 +39,6 @@
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>james-server-util</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
Expand Down

0 comments on commit 3c6ff2c

Please sign in to comment.