Skip to content

Commit

Permalink
JAMES-2641 DefaultUserQuotaRootResolver should rely on SessionProvider
Browse files Browse the repository at this point in the history
This allow uncoupling it from the mailbox manager and breaks a dependency loop that prevented final allocation
  • Loading branch information
chibenwa committed Jan 15, 2019
1 parent 90af614 commit c4be7f6
Show file tree
Hide file tree
Showing 13 changed files with 22 additions and 19 deletions.
Expand Up @@ -80,7 +80,7 @@ public static CassandraMailboxManager provideMailboxManager(Session session, Cas
new CassandraGlobalMaxQuotaDao(session)); new CassandraGlobalMaxQuotaDao(session));
CassandraCurrentQuotaManager currentQuotaUpdater = new CassandraCurrentQuotaManager(session); CassandraCurrentQuotaManager currentQuotaUpdater = new CassandraCurrentQuotaManager(session);
StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaUpdater, maxQuotaManager); StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaUpdater, maxQuotaManager);
QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(manager, mapperFactory); QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory);


ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaUpdater, quotaRootResolver, delegatingMailboxListener, storeQuotaManager); ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaUpdater, quotaRootResolver, delegatingMailboxListener, storeQuotaManager);
manager.setQuotaManager(storeQuotaManager); manager.setQuotaManager(storeQuotaManager);
Expand Down
Expand Up @@ -82,7 +82,7 @@ public static StoreMessageIdManager createMessageIdManager(CassandraMailboxSessi
delegatingMailboxListener, delegatingMailboxListener,
new CassandraMessageId.Factory(), new CassandraMessageId.Factory(),
quotaManager, quotaManager,
new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory)); new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mapperFactory));
} }


public static MaxQuotaManager createMaxQuotaManager(CassandraCluster cassandra) { public static MaxQuotaManager createMaxQuotaManager(CassandraCluster cassandra) {
Expand Down
Expand Up @@ -249,7 +249,7 @@ public GroupMembershipResolver createGroupMembershipResolver() {
@Override @Override
public DefaultUserQuotaRootResolver createQuotaRootResolver(StoreMailboxManager mailboxManager) { public DefaultUserQuotaRootResolver createQuotaRootResolver(StoreMailboxManager mailboxManager) {
if (quotaRootResolver == null) { if (quotaRootResolver == null) {
quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mailboxManager.getMapperFactory()); quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory());
} }
return quotaRootResolver; return quotaRootResolver;
} }
Expand Down
Expand Up @@ -75,7 +75,7 @@ protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager,
delegatingMailboxListener, delegatingMailboxListener,
messageIdFactory, messageIdFactory,
quotaManager, quotaManager,
new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory)); new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory));
return new MessageIdManagerTestSystem(messageIdManager, messageIdFactory, mapperFactory, mailboxManager); return new MessageIdManagerTestSystem(messageIdManager, messageIdFactory, mapperFactory, mailboxManager);
} }
} }
Expand Up @@ -156,6 +156,10 @@ public void setQuotaUpdater(QuotaUpdater quotaUpdater) {
this.quotaUpdater = quotaUpdater; this.quotaUpdater = quotaUpdater;
} }


public SessionProvider getSessionProvider() {
return sessionProvider;
}

/** /**
* Init the {@link MailboxManager} * Init the {@link MailboxManager}
* *
Expand All @@ -174,7 +178,7 @@ public void init() throws MailboxException {
quotaManager = new NoQuotaManager(); quotaManager = new NoQuotaManager();
} }
if (quotaRootResolver == null) { if (quotaRootResolver == null) {
quotaRootResolver = new DefaultUserQuotaRootResolver(this, mailboxSessionMapperFactory); quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory);
} }
if (quotaUpdater != null && quotaUpdater instanceof MailboxListener) { if (quotaUpdater != null && quotaUpdater instanceof MailboxListener) {
this.addGlobalListener((MailboxListener) quotaUpdater, session); this.addGlobalListener((MailboxListener) quotaUpdater, session);
Expand Down
Expand Up @@ -25,7 +25,6 @@
import javax.inject.Inject; import javax.inject.Inject;


import org.apache.james.core.User; import org.apache.james.core.User;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailbox.model.MailboxConstants;
Expand All @@ -34,6 +33,7 @@
import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.model.QuotaRoot;
import org.apache.james.mailbox.quota.UserQuotaRootResolver; import org.apache.james.mailbox.quota.UserQuotaRootResolver;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.SessionProvider;
import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.Mailbox;


import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
Expand All @@ -44,12 +44,12 @@ public class DefaultUserQuotaRootResolver implements UserQuotaRootResolver {


public static final String SEPARATOR = "&"; // Character illegal for mailbox naming in regard of RFC 3501 section 5.1 public static final String SEPARATOR = "&"; // Character illegal for mailbox naming in regard of RFC 3501 section 5.1


private final MailboxManager mailboxManager; private final SessionProvider sessionProvider;
private final MailboxSessionMapperFactory factory; private final MailboxSessionMapperFactory factory;


@Inject @Inject
public DefaultUserQuotaRootResolver(MailboxManager mailboxManager, MailboxSessionMapperFactory factory) { public DefaultUserQuotaRootResolver(SessionProvider sessionProvider, MailboxSessionMapperFactory factory) {
this.mailboxManager = mailboxManager; this.sessionProvider = sessionProvider;
this.factory = factory; this.factory = factory;
} }


Expand All @@ -73,7 +73,7 @@ public QuotaRoot getQuotaRoot(MailboxPath mailboxPath) {


@Override @Override
public QuotaRoot getQuotaRoot(MailboxId mailboxId) throws MailboxException { public QuotaRoot getQuotaRoot(MailboxId mailboxId) throws MailboxException {
MailboxSession session = mailboxManager.createSystemSession("DefaultUserQuotaRootResolver"); MailboxSession session = sessionProvider.createSystemSession("DefaultUserQuotaRootResolver");
User user = User.fromUsername( User user = User.fromUsername(
factory.getMailboxMapper(session) factory.getMailboxMapper(session)
.findMailboxById(mailboxId) .findMailboxById(mailboxId)
Expand Down
Expand Up @@ -26,14 +26,14 @@


import java.util.Optional; import java.util.Optional;


import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.model.QuotaRoot;
import org.apache.james.mailbox.model.TestId; import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.SessionProvider;
import org.apache.james.mailbox.store.mail.MailboxMapper; import org.apache.james.mailbox.store.mail.MailboxMapper;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox; import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
import org.junit.Before; import org.junit.Before;
Expand All @@ -57,9 +57,8 @@ public class DefaultUserQuotaRootResolverTest {


@Before @Before
public void setUp() { public void setUp() {
MailboxManager mailboxManager = mock(MailboxManager.class);
mockedFactory = mock(MailboxSessionMapperFactory.class); mockedFactory = mock(MailboxSessionMapperFactory.class);
testee = new DefaultUserQuotaRootResolver(mailboxManager, mockedFactory); testee = new DefaultUserQuotaRootResolver(mock(SessionProvider.class), mockedFactory);
} }


@Test @Test
Expand Down
Expand Up @@ -90,10 +90,10 @@ public void beforeTest() throws Exception {


StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager); StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator); SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory);
mailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider, mailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory, new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT); delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory);


perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager( perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(
new CassandraPerUserMaxQuotaDao(session), new CassandraPerUserMaxQuotaDao(session),
Expand Down
Expand Up @@ -122,7 +122,7 @@ private void initFields() throws MailboxException {
DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager,
new StoreSubscriptionManager(mailboxManager.getMapperFactory()), new StoreSubscriptionManager(mailboxManager.getMapperFactory()),
new NoQuotaManager(), new NoQuotaManager(),
new DefaultUserQuotaRootResolver(mailboxManager, mailboxManager.getMapperFactory()), new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory()),
new DefaultMetricFactory()); new DefaultMetricFactory());
configure(new DefaultImapDecoderFactory().buildImapDecoder(), configure(new DefaultImapDecoderFactory().buildImapDecoder(),
new DefaultImapEncoderFactory().buildImapEncoder(), new DefaultImapEncoderFactory().buildImapEncoder(),
Expand Down
Expand Up @@ -103,7 +103,7 @@ public void beforeTest() throws Exception {
mailboxManager = new OpenJPAMailboxManager(mapperFactory, sessionProvider, mailboxManager = new OpenJPAMailboxManager(mapperFactory, sessionProvider,
messageParser, new DefaultMessageId.Factory(), delegatingListener, annotationManager, storeRightManager); messageParser, new DefaultMessageId.Factory(), delegatingListener, annotationManager, storeRightManager);


DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory); DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mapperFactory);
JpaCurrentQuotaManager currentQuotaManager = new JpaCurrentQuotaManager(entityManagerFactory); JpaCurrentQuotaManager currentQuotaManager = new JpaCurrentQuotaManager(entityManagerFactory);
maxQuotaManager = new JPAPerUserMaxQuotaManager(new JPAPerUserMaxQuotaDAO(entityManagerFactory)); maxQuotaManager = new JPAPerUserMaxQuotaManager(new JPAPerUserMaxQuotaDAO(entityManagerFactory));
StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager); StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);
Expand Down
Expand Up @@ -127,7 +127,7 @@ private void initFields() {
mailboxManager, mailboxManager,
subscriptionManager, subscriptionManager,
new NoQuotaManager(), new NoQuotaManager(),
new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory), new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory),
new DefaultMetricFactory()); new DefaultMetricFactory());


configure(new DefaultImapDecoderFactory().buildImapDecoder(), configure(new DefaultImapDecoderFactory().buildImapDecoder(),
Expand Down
Expand Up @@ -89,7 +89,7 @@ public void beforeTest() throws Exception {
mailboxManager, mailboxManager,
sm, sm,
new NoQuotaManager(), new NoQuotaManager(),
new DefaultUserQuotaRootResolver(mailboxManager, mailboxSessionMapperFactory), new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory),
new DefaultMetricFactory()); new DefaultMetricFactory());
configure(new DefaultImapDecoderFactory().buildImapDecoder(), configure(new DefaultImapDecoderFactory().buildImapDecoder(),
new DefaultImapEncoderFactory().buildImapEncoder(), new DefaultImapEncoderFactory().buildImapEncoder(),
Expand Down
Expand Up @@ -56,7 +56,7 @@ public class IsOverQuotaTest {
public void setUp() throws Exception { public void setUp() throws Exception {
mailboxManager = new InMemoryIntegrationResources().createMailboxManager(new SimpleGroupMembershipResolver()); mailboxManager = new InMemoryIntegrationResources().createMailboxManager(new SimpleGroupMembershipResolver());


quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mailboxManager.getMapperFactory()); quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory());
maxQuotaManager = new InMemoryPerUserMaxQuotaManager(); maxQuotaManager = new InMemoryPerUserMaxQuotaManager();
CurrentQuotaCalculator quotaCalculator = new CurrentQuotaCalculator(mailboxManager.getMapperFactory(), quotaRootResolver); CurrentQuotaCalculator quotaCalculator = new CurrentQuotaCalculator(mailboxManager.getMapperFactory(), quotaRootResolver);
InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(quotaCalculator, mailboxManager); InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(quotaCalculator, mailboxManager);
Expand Down

0 comments on commit c4be7f6

Please sign in to comment.