Author: matthieu Date: Thu Oct 29 14:17:52 2015 New Revision: 1711274 URL: http://svn.apache.org/viewvc?rev=1711274&view=rev Log: JAMES-1588 Use cassandra backend
Added: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java Removed: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraConstants.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTypesProvider.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ClusterFactory.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ClusterWithKeyspaceCreatedFactory.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/SessionFactory.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/FunctionRunnerWithRetry.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraClusterSingleton.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTypeProviderTest.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/FunctionRunnerWithRetryTest.java Modified: james/project/trunk/mailbox/cassandra/pom.xml james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java james/project/trunk/mailbox/hbase/pom.xml james/project/trunk/mailbox/pom.xml james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java james/project/trunk/mpt/pom.xml james/project/trunk/server/app/pom.xml james/project/trunk/server/pom.xml Modified: james/project/trunk/mailbox/cassandra/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/pom.xml (original) +++ james/project/trunk/mailbox/cassandra/pom.xml Thu Oct 29 14:17:52 2015 @@ -176,6 +176,10 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>apache-james-mailbox-api</artifactId> </dependency> <dependency> @@ -195,6 +199,12 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + <scope>test</scope> + <type>test-jar</type> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>apache-james-mailbox-store</artifactId> <scope>test</scope> <type>test-jar</type> Added: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java?rev=1711274&view=auto ============================================================================== --- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java (added) +++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java Thu Oct 29 14:17:52 2015 @@ -0,0 +1,191 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailbox.cassandra; + +import java.util.Arrays; +import java.util.List; + +import com.datastax.driver.core.schemabuilder.SchemaBuilder; +import org.apache.james.backends.cassandra.components.CassandraIndex; +import org.apache.james.backends.cassandra.components.CassandraModule; +import org.apache.james.backends.cassandra.components.CassandraTable; +import org.apache.james.backends.cassandra.components.CassandraType; +import org.apache.james.mailbox.cassandra.table.CassandraACLTable; +import org.apache.james.mailbox.cassandra.table.CassandraCurrentQuota; +import org.apache.james.mailbox.cassandra.table.CassandraDefaultMaxQuota; +import org.apache.james.mailbox.cassandra.table.CassandraMailboxCountersTable; +import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable; +import org.apache.james.mailbox.cassandra.table.CassandraMaxQuota; +import org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable; +import org.apache.james.mailbox.cassandra.table.CassandraMessageTable; +import org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable; +import org.apache.james.mailbox.cassandra.table.CassandraSubscriptionTable; +import static com.datastax.driver.core.DataType.bigint; +import static com.datastax.driver.core.DataType.blob; +import static com.datastax.driver.core.DataType.cboolean; +import static com.datastax.driver.core.DataType.cint; +import static com.datastax.driver.core.DataType.counter; +import static com.datastax.driver.core.DataType.set; +import static com.datastax.driver.core.DataType.text; +import static com.datastax.driver.core.DataType.timestamp; +import static com.datastax.driver.core.DataType.timeuuid; + +public class CassandraMailboxModule implements CassandraModule { + + private final List<CassandraTable> tables; + private final List<CassandraIndex> index; + private final List<CassandraType> types; + + public CassandraMailboxModule() { + tables = Arrays.asList( + new CassandraTable(CassandraMailboxTable.TABLE_NAME, + SchemaBuilder.createTable(CassandraMailboxTable.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraMailboxTable.ID, timeuuid()) + .addUDTColumn(CassandraMailboxTable.MAILBOX_BASE, SchemaBuilder.frozen(CassandraMailboxTable.MAILBOX_BASE)) + .addColumn(CassandraMailboxTable.NAME, text()) + .addColumn(CassandraMailboxTable.PATH, text()) + .addColumn(CassandraMailboxTable.UIDVALIDITY, bigint())), + new CassandraTable(CassandraMailboxCountersTable.TABLE_NAME, + SchemaBuilder.createTable(CassandraMailboxCountersTable.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraMailboxCountersTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraMailboxCountersTable.COUNT, counter()) + .addColumn(CassandraMailboxCountersTable.UNSEEN, counter())), + new CassandraTable(CassandraMessageUidTable.TABLE_NAME, + SchemaBuilder.createTable(CassandraMessageUidTable.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraMessageUidTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraMessageUidTable.NEXT_UID, bigint())), + new CassandraTable(CassandraMessageTable.TABLE_NAME, + SchemaBuilder.createTable(CassandraMessageTable.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraMessageTable.MAILBOX_ID, timeuuid()) + .addClusteringColumn(CassandraMessageTable.IMAP_UID, bigint()) + .addColumn(CassandraMessageTable.INTERNAL_DATE, timestamp()) + .addColumn(CassandraMessageTable.BODY_START_OCTET, cint()) + .addColumn(CassandraMessageTable.BODY_OCTECTS, cint()) + .addColumn(CassandraMessageTable.TEXTUAL_LINE_COUNT, bigint()) + .addColumn(CassandraMessageTable.MOD_SEQ, bigint()) + .addColumn(CassandraMessageTable.FULL_CONTENT_OCTETS, cint()) + .addColumn(CassandraMessageTable.BODY_CONTENT, blob()) + .addColumn(CassandraMessageTable.HEADER_CONTENT, blob()) + .addColumn(CassandraMessageTable.Flag.ANSWERED, cboolean()) + .addColumn(CassandraMessageTable.Flag.DELETED, cboolean()) + .addColumn(CassandraMessageTable.Flag.DRAFT, cboolean()) + .addColumn(CassandraMessageTable.Flag.FLAGGED, cboolean()) + .addColumn(CassandraMessageTable.Flag.RECENT, cboolean()) + .addColumn(CassandraMessageTable.Flag.SEEN, cboolean()) + .addColumn(CassandraMessageTable.Flag.USER, cboolean()) + .addColumn(CassandraMessageTable.Flag.USER_FLAGS, set(text())) + .addUDTListColumn(CassandraMessageTable.PROPERTIES, SchemaBuilder.frozen(CassandraMessageTable.PROPERTIES))), + new CassandraTable(CassandraSubscriptionTable.TABLE_NAME, + SchemaBuilder.createTable(CassandraSubscriptionTable.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraSubscriptionTable.MAILBOX, text()) + .addClusteringColumn(CassandraSubscriptionTable.USER, text())), + new CassandraTable(CassandraACLTable.TABLE_NAME, + SchemaBuilder.createTable(CassandraACLTable.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraACLTable.ID, timeuuid()) + .addColumn(CassandraACLTable.ACL, text()) + .addColumn(CassandraACLTable.VERSION, bigint())), + new CassandraTable(CassandraMessageModseqTable.TABLE_NAME, + SchemaBuilder.createTable(CassandraMessageModseqTable.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraMessageModseqTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraMessageModseqTable.NEXT_MODSEQ, bigint())), + new CassandraTable(CassandraCurrentQuota.TABLE_NAME, + SchemaBuilder.createTable(CassandraCurrentQuota.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraCurrentQuota.QUOTA_ROOT, text()) + .addColumn(CassandraCurrentQuota.MESSAGE_COUNT, counter()) + .addColumn(CassandraCurrentQuota.STORAGE, counter())), + new CassandraTable(CassandraMaxQuota.TABLE_NAME, + SchemaBuilder.createTable(CassandraMaxQuota.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraMaxQuota.QUOTA_ROOT, text()) + .addColumn(CassandraMaxQuota.MESSAGE_COUNT, bigint()) + .addColumn(CassandraMaxQuota.STORAGE, bigint())), + new CassandraTable(CassandraDefaultMaxQuota.TABLE_NAME, + SchemaBuilder.createTable(CassandraDefaultMaxQuota.TABLE_NAME) + .ifNotExists() + .addPartitionKey(CassandraDefaultMaxQuota.TYPE, text()) + .addColumn(CassandraDefaultMaxQuota.VALUE, bigint()))); + index = Arrays.asList( + new CassandraIndex( + SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMailboxTable.TABLE_NAME) + .ifNotExists() + .onTable(CassandraMailboxTable.TABLE_NAME) + .andColumn(CassandraMailboxTable.PATH)), + new CassandraIndex( + SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMailboxTable.MAILBOX_BASE) + .ifNotExists() + .onTable(CassandraMailboxTable.TABLE_NAME) + .andColumn(CassandraMailboxTable.MAILBOX_BASE)), + new CassandraIndex( + SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraSubscriptionTable.USER) + .ifNotExists() + .onTable(CassandraSubscriptionTable.TABLE_NAME) + .andColumn(CassandraSubscriptionTable.USER)), + new CassandraIndex( + SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMessageTable.Flag.RECENT) + .ifNotExists() + .onTable(CassandraMessageTable.TABLE_NAME) + .andColumn(CassandraMessageTable.Flag.RECENT)), + new CassandraIndex( + SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMessageTable.Flag.SEEN) + .ifNotExists() + .onTable(CassandraMessageTable.TABLE_NAME) + .andColumn(CassandraMessageTable.Flag.SEEN)), + new CassandraIndex( + SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMessageTable.Flag.DELETED) + .ifNotExists() + .onTable(CassandraMessageTable.TABLE_NAME) + .andColumn(CassandraMessageTable.Flag.DELETED))); + types = Arrays.asList( + new CassandraType(CassandraMailboxTable.MAILBOX_BASE, + SchemaBuilder.createType(CassandraMailboxTable.MAILBOX_BASE) + .ifNotExists() + .addColumn(CassandraMailboxTable.MailboxBase.NAMESPACE, text()) + .addColumn(CassandraMailboxTable.MailboxBase.USER, text())), + new CassandraType(CassandraMessageTable.PROPERTIES, + SchemaBuilder.createType(CassandraMessageTable.PROPERTIES) + .ifNotExists() + .addColumn(CassandraMessageTable.Properties.NAMESPACE, text()) + .addColumn(CassandraMessageTable.Properties.NAME, text()) + .addColumn(CassandraMessageTable.Properties.VALUE, text()))); + } + + @Override + public List<CassandraTable> moduleTables() { + return tables; + } + + @Override + public List<CassandraIndex> moduleIndex() { + return index; + } + + @Override + public List<CassandraType> moduleTypes() { + return types; + } +} Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java (original) +++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java Thu Oct 29 14:17:52 2015 @@ -19,6 +19,7 @@ package org.apache.james.mailbox.cassandra; +import org.apache.james.backends.cassandra.init.CassandraTypesProvider; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.cassandra.mail.CassandraMailboxMapper; import org.apache.james.mailbox.cassandra.mail.CassandraMessageMapper; Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java (original) +++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java Thu Oct 29 14:17:52 2015 @@ -28,9 +28,10 @@ import static com.datastax.driver.core.q import java.io.IOException; import java.util.Optional; -import org.apache.james.mailbox.cassandra.CassandraConstants; +import org.apache.james.backends.cassandra.utils.CassandraConstants; +import org.apache.james.backends.cassandra.utils.LightweightTransactionException; import org.apache.james.mailbox.cassandra.CassandraId; -import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry; +import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry; import org.apache.james.mailbox.cassandra.mail.utils.SimpleMailboxACLJsonConverter; import org.apache.james.mailbox.cassandra.table.CassandraACLTable; import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable; @@ -86,16 +87,20 @@ public class CassandraACLMapper { } public void updateACL(final MailboxACL.MailboxACLCommand command) throws MailboxException { - new FunctionRunnerWithRetry(maxRetry).execute( - () -> { - codeInjector.inject(); - ResultSet resultSet = getAclWithVersion() + try { + new FunctionRunnerWithRetry(maxRetry).execute( + () -> { + codeInjector.inject(); + ResultSet resultSet = getAclWithVersion() .map((x) -> x.apply(command)) .map(this::updateStoredACL) .orElseGet(() -> insertACL(applyCommandOnEmptyACL(command))); - return resultSet.one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED); - } - ); + return resultSet.one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED); + } + ); + } catch (LightweightTransactionException e) { + throw new MailboxException("Exception during lightweight transaction", e); + } } private MailboxACL applyCommandOnEmptyACL(MailboxACL.MailboxACLCommand command) { Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java (original) +++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java Thu Oct 29 14:17:52 2015 @@ -36,11 +36,11 @@ import java.util.StringTokenizer; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; -import java.util.stream.StreamSupport; +import org.apache.james.backends.cassandra.init.CassandraTypesProvider; +import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.mailbox.cassandra.CassandraId; -import org.apache.james.mailbox.cassandra.CassandraTypesProvider; -import org.apache.james.mailbox.cassandra.CassandraTypesProvider.TYPE; +import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable; import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.MailboxBase; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; @@ -118,9 +118,9 @@ public class CassandraMailboxMapper impl @Override public List<Mailbox<CassandraId>> list() throws MailboxException { - return convertToStream( - session.execute(select(FIELDS) - .from(TABLE_NAME))) + return CassandraUtils.convertToStream( + session.execute( + select(FIELDS).from(TABLE_NAME))) .map(this::mailbox) .collect(Collectors.toList()); } @@ -172,7 +172,7 @@ public class CassandraMailboxMapper impl .value(ID, mailbox.getMailboxId().asUuid()) .value(NAME, mailbox.getName()) .value(UIDVALIDITY, mailbox.getUidValidity()) - .value(MAILBOX_BASE, typesProvider.getDefinedUserType(TYPE.MailboxBase) + .value(MAILBOX_BASE, typesProvider.getDefinedUserType(CassandraMailboxTable.MAILBOX_BASE) .newValue() .setString(MailboxBase.NAMESPACE, mailbox.getNamespace()) .setString(MailboxBase.USER, mailbox.getUser())) @@ -184,18 +184,11 @@ public class CassandraMailboxMapper impl return new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), mailbox.getName()); } - private Stream<Row> convertToStream(ResultSet resultSet) { - return StreamSupport.stream(resultSet.spliterator(), true); - } - private Stream<Row> getMailboxFilteredByNamespaceAndUserStream (String namespace, String user) { - return convertToStream(session.execute( + return CassandraUtils.convertToStream(session.execute( select(FIELDS) .from(TABLE_NAME) - .where(eq(MAILBOX_BASE, typesProvider.getDefinedUserType(TYPE.MailboxBase) - .newValue() - .setString(MailboxBase.NAMESPACE, namespace) - .setString(MailboxBase.USER, user))))); + .where(eq(MAILBOX_BASE, typesProvider.getDefinedUserType(CassandraMailboxTable.MAILBOX_BASE).newValue().setString(MailboxBase.NAMESPACE, namespace).setString(MailboxBase.USER, user))))); } } Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java (original) +++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java Thu Oct 29 14:17:52 2015 @@ -62,21 +62,19 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; import javax.mail.Flags; import javax.mail.Flags.Flag; import javax.mail.util.SharedByteArrayInputStream; import com.google.common.base.Throwables; +import org.apache.james.backends.cassandra.init.CassandraTypesProvider; +import org.apache.james.backends.cassandra.utils.CassandraConstants; +import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.mailbox.FlagsBuilder; import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.cassandra.CassandraConstants; import org.apache.james.mailbox.cassandra.CassandraId; -import org.apache.james.mailbox.cassandra.CassandraTypesProvider; -import org.apache.james.mailbox.cassandra.CassandraTypesProvider.TYPE; -import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry; +import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry; import org.apache.james.mailbox.cassandra.mail.utils.MessageDeletedDuringFlagsUpdateException; import org.apache.james.mailbox.cassandra.table.CassandraMailboxCountersTable; import org.apache.james.mailbox.cassandra.table.CassandraMessageTable; @@ -166,7 +164,7 @@ public class CassandraMessageMapper impl @Override public Iterator<Message<CassandraId>> findInMailbox(Mailbox<CassandraId> mailbox, MessageRange set, FetchType ftype, int max) throws MailboxException { - return convertToStream(session.execute(buildQuery(mailbox, set))) + return CassandraUtils.convertToStream(session.execute(buildQuery(mailbox, set))) .map(this::message) .sorted(Comparator.comparingLong(Message::getUid)) .iterator(); @@ -174,7 +172,7 @@ public class CassandraMessageMapper impl @Override public List<Long> findRecentMessageUidsInMailbox(Mailbox<CassandraId> mailbox) throws MailboxException { - return convertToStream(session.execute(selectAll(mailbox).and((eq(RECENT, true))))) + return CassandraUtils.convertToStream(session.execute(selectAll(mailbox).and((eq(RECENT, true))))) .map((row) -> row.getLong(IMAP_UID)) .sorted() .collect(Collectors.toList()); @@ -182,7 +180,7 @@ public class CassandraMessageMapper impl @Override public Long findFirstUnseenMessageUid(Mailbox<CassandraId> mailbox) throws MailboxException { - return convertToStream(session.execute(selectAll(mailbox).and((eq(SEEN, false))))) + return CassandraUtils.convertToStream(session.execute(selectAll(mailbox).and((eq(SEEN, false))))) .map((row) -> row.getLong(IMAP_UID)) .sorted() .findFirst() @@ -191,7 +189,7 @@ public class CassandraMessageMapper impl @Override public Map<Long, MessageMetaData> expungeMarkedForDeletionInMailbox(final Mailbox<CassandraId> mailbox, MessageRange set) throws MailboxException { - return convertToStream(session.execute(buildQuery(mailbox, set).and(eq(DELETED, true)))) + return CassandraUtils.convertToStream(session.execute(buildQuery(mailbox, set).and(eq(DELETED, true)))) .map(this::message) .peek((message) -> delete(mailbox, message)) .collect(Collectors.toMap(Message::getUid, SimpleMessageMetaData::new)); @@ -226,7 +224,7 @@ public class CassandraMessageMapper impl @Override public Iterator<UpdatedFlags> updateFlags(Mailbox<CassandraId> mailbox, FlagsUpdateCalculator flagUpdateCalculator, MessageRange set) throws MailboxException { - return convertToStream(session.execute(buildQuery(mailbox, set))) + return CassandraUtils.convertToStream(session.execute(buildQuery(mailbox, set))) .map((row) -> updateFlagsOnMessage(mailbox, flagUpdateCalculator, row)) .filter(Optional::isPresent) .map(Optional::get) @@ -344,7 +342,7 @@ public class CassandraMessageMapper impl .value(BODY_CONTENT, bindMarker()) .value(HEADER_CONTENT, bindMarker()) .value(PROPERTIES, message.getProperties().stream() - .map(x -> typesProvider.getDefinedUserType(TYPE.Property) + .map(x -> typesProvider.getDefinedUserType(PROPERTIES) .newValue() .setString(Properties.NAMESPACE, x.getNamespace()) .setString(Properties.NAME, x.getLocalName()) @@ -406,16 +404,13 @@ public class CassandraMessageMapper impl } catch (MessageDeletedDuringFlagsUpdateException e) { mailboxSession.getLog().warn(e.getMessage()); return Optional.empty(); - } catch (MailboxException e) { + } catch (Exception e) { throw Throwables.propagate(e); } } private Optional<UpdatedFlags> retryMessageFlagsUpdate(Mailbox<CassandraId> mailbox, long uid, FlagsUpdateCalculator flagUpdateCalculator) { - return tryMessageFlagsUpdate(flagUpdateCalculator, - mailbox, - message(Optional.ofNullable(session.execute(selectMessage(mailbox, uid)).one()) - .orElseThrow(() -> new MessageDeletedDuringFlagsUpdateException(mailbox.getMailboxId(), uid)))); + return tryMessageFlagsUpdate(flagUpdateCalculator, mailbox, message(Optional.ofNullable(session.execute(selectMessage(mailbox, uid)).one()).orElseThrow(() -> new MessageDeletedDuringFlagsUpdateException(mailbox.getMailboxId(), uid)))); } private boolean conditionalSave(Message<CassandraId> message, long oldModSeq) { @@ -483,8 +478,4 @@ public class CassandraMessageMapper impl .and(eq(IMAP_UID, uid)); } - private Stream<Row> convertToStream(ResultSet resultSet) { - return StreamSupport.stream(resultSet.spliterator(), true); - } - } Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java (original) +++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java Thu Oct 29 14:17:52 2015 @@ -24,16 +24,17 @@ import static com.datastax.driver.core.q import static com.datastax.driver.core.querybuilder.QueryBuilder.select; import static com.datastax.driver.core.querybuilder.QueryBuilder.set; import static com.datastax.driver.core.querybuilder.QueryBuilder.update; -import static org.apache.james.mailbox.cassandra.CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED; import static org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable.MAILBOX_ID; import static org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable.NEXT_MODSEQ; import static org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable.TABLE_NAME; import java.util.Optional; +import org.apache.james.backends.cassandra.utils.CassandraConstants; +import org.apache.james.backends.cassandra.utils.LightweightTransactionException; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.cassandra.CassandraId; -import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry; +import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.store.mail.ModSeqProvider; import org.apache.james.mailbox.store.mail.model.Mailbox; @@ -71,17 +72,21 @@ public class CassandraModSeqProvider imp return optional.get().getValue(); } } - - return runner.executeAndRetrieveObject( - () -> { - try { - return tryUpdateModSeq(mailbox, findHighestModSeq(mailboxSession, mailbox)) - .map(ModSeq::getValue); - } catch (Exception exception) { - LOG.error("Can not retrieve next ModSeq", exception); - throw Throwables.propagate(exception); - } - }); + + try { + return runner.executeAndRetrieveObject( + () -> { + try { + return tryUpdateModSeq(mailbox, findHighestModSeq(mailboxSession, mailbox)) + .map(ModSeq::getValue); + } catch (Exception exception) { + LOG.error("Can not retrieve next ModSeq", exception); + throw Throwables.propagate(exception); + } + }); + } catch (LightweightTransactionException e) { + throw new MailboxException("Error during ModSeq update", e); + } } @Override @@ -120,7 +125,7 @@ public class CassandraModSeqProvider imp } private Optional<ModSeq> transactionalStatementToOptionalModSeq(ModSeq modSeq, BuiltStatement statement) { - if(session.execute(statement).one().getBool(LIGHTWEIGHT_TRANSACTION_APPLIED)) { + if(session.execute(statement).one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED)) { return Optional.of(modSeq); } return Optional.empty(); Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java (original) +++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java Thu Oct 29 14:17:52 2015 @@ -26,14 +26,15 @@ import static com.datastax.driver.core.q import static com.datastax.driver.core.querybuilder.QueryBuilder.select; import static com.datastax.driver.core.querybuilder.QueryBuilder.set; import static com.datastax.driver.core.querybuilder.QueryBuilder.update; -import static org.apache.james.mailbox.cassandra.CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED; +import org.apache.james.backends.cassandra.utils.CassandraConstants; import static org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable.NEXT_UID; import com.datastax.driver.core.querybuilder.BuiltStatement; import com.google.common.base.Throwables; +import org.apache.james.backends.cassandra.utils.LightweightTransactionException; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.cassandra.CassandraId; -import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry; +import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry; import org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.store.mail.UidProvider; @@ -70,16 +71,20 @@ public class CassandraUidProvider implem } } - return runner.executeAndRetrieveObject( - () -> { - try { - return tryUpdateUid(mailbox, findHighestUid(mailbox)) - .map(Uid::getValue); - } catch (Exception exception) { - LOG.error("Can not retrieve next Uid", exception); - throw Throwables.propagate(exception); - } - }); + try { + return runner.executeAndRetrieveObject( + () -> { + try { + return tryUpdateUid(mailbox, findHighestUid(mailbox)) + .map(Uid::getValue); + } catch (Exception exception) { + LOG.error("Can not retrieve next Uid", exception); + throw Throwables.propagate(exception); + } + }); + } catch (LightweightTransactionException e) { + throw new MailboxException("Error during Uid update", e); + } } @Override @@ -118,7 +123,7 @@ public class CassandraUidProvider implem } private Optional<Uid> transactionalStatementToOptionalUid(Uid uid, BuiltStatement statement) { - if(session.execute(statement).one().getBool(LIGHTWEIGHT_TRANSACTION_APPLIED)) { + if(session.execute(statement).one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED)) { return Optional.of(uid); } return Optional.empty(); Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java (original) +++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java Thu Oct 29 14:17:52 2015 @@ -29,16 +29,14 @@ import static org.apache.james.mailbox.c import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; +import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.mailbox.store.transaction.NonTransactionalMapper; import org.apache.james.mailbox.store.user.SubscriptionMapper; import org.apache.james.mailbox.store.user.model.Subscription; import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription; import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; import com.datastax.driver.core.querybuilder.QueryBuilder; @@ -68,7 +66,7 @@ public class CassandraSubscriptionMapper @Override public List<Subscription> findSubscriptionsForUser(String user) { - return convertToStream( + return CassandraUtils.convertToStream( session.execute(select(MAILBOX) .from(TABLE_NAME) .where(eq(USER, user)))) @@ -84,7 +82,7 @@ public class CassandraSubscriptionMapper } public List<SimpleSubscription> list() { - return convertToStream( + return CassandraUtils.convertToStream( session.execute(select(FIELDS) .from(TABLE_NAME))) .map((row) -> new SimpleSubscription(row.getString(USER), row.getString(MAILBOX))) @@ -96,8 +94,4 @@ public class CassandraSubscriptionMapper // nothing to do } - private Stream<Row> convertToStream(ResultSet resultSet) { - return StreamSupport.stream(resultSet.spliterator(), true); - } - } Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java (original) +++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java Thu Oct 29 14:17:52 2015 @@ -18,6 +18,7 @@ ****************************************************************/ package org.apache.james.mailbox.cassandra; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; import org.apache.james.mailbox.AbstractMailboxManagerTest; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider; @@ -35,7 +36,7 @@ import org.slf4j.LoggerFactory; */ public class CassandraMailboxManagerTest extends AbstractMailboxManagerTest { - private static final CassandraClusterSingleton CASSANDRA = CassandraClusterSingleton.build(); + private static final CassandraClusterSingleton CASSANDRA = CassandraClusterSingleton.create(new CassandraMailboxModule()); /** * Setup the mailboxManager. Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java (original) +++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java Thu Oct 29 14:17:52 2015 @@ -22,6 +22,7 @@ import static org.junit.Assert.assertEqu import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider; import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider; @@ -40,7 +41,7 @@ import org.slf4j.LoggerFactory; * */ public class CassandraMailboxSessionMapperFactoryTest { - private static final CassandraClusterSingleton CLUSTER = CassandraClusterSingleton.build(); + private static final CassandraClusterSingleton CLUSTER = CassandraClusterSingleton.create(new CassandraMailboxModule()); private final static Logger LOG = LoggerFactory.getLogger(CassandraMailboxSessionMapperFactoryTest.class); @Before Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java (original) +++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java Thu Oct 29 14:17:52 2015 @@ -19,6 +19,7 @@ package org.apache.james.mailbox.cassandra; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; import org.apache.james.mailbox.AbstractSubscriptionManagerTest; import org.apache.james.mailbox.SubscriptionManager; import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider; @@ -29,7 +30,7 @@ import org.apache.james.mailbox.cassandr */ public class CassandraSubscriptionManagerTest extends AbstractSubscriptionManagerTest { - private static final CassandraClusterSingleton cassandra = CassandraClusterSingleton.build(); + private static final CassandraClusterSingleton cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule()); @Override public SubscriptionManager createSubscriptionManager() { Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java (original) +++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java Thu Oct 29 14:17:52 2015 @@ -30,8 +30,9 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import org.apache.james.mailbox.cassandra.CassandraClusterSingleton; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; import org.apache.james.mailbox.cassandra.CassandraId; +import org.apache.james.mailbox.cassandra.CassandraMailboxModule; import org.apache.james.mailbox.cassandra.table.CassandraACLTable; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxACL; @@ -55,7 +56,7 @@ public class CassandraACLMapperTest { @Before public void setUp() { - cassandra = CassandraClusterSingleton.build(); + cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule()); cassandra.ensureAllTables(); uidValidity = 10; mailbox = new SimpleMailbox<>(new MailboxPath("#private", "be...@linagora.com", "INBOX"), uidValidity); Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java (original) +++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java Thu Oct 29 14:17:52 2015 @@ -1,7 +1,8 @@ package org.apache.james.mailbox.cassandra.mail; -import org.apache.james.mailbox.cassandra.CassandraClusterSingleton; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; import org.apache.james.mailbox.cassandra.CassandraId; +import org.apache.james.mailbox.cassandra.CassandraMailboxModule; import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.mock.MockMailboxSession; @@ -11,7 +12,7 @@ import org.apache.james.mailbox.store.ma public class CassandraMapperProvider implements MapperProvider<CassandraId> { - private static final CassandraClusterSingleton cassandra = CassandraClusterSingleton.build(); + private static final CassandraClusterSingleton cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule()); @Override public MailboxMapper<CassandraId> createMailboxMapper() throws MailboxException { Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java (original) +++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java Thu Oct 29 14:17:52 2015 @@ -27,8 +27,9 @@ import java.util.concurrent.atomic.Atomi import java.util.function.LongConsumer; import java.util.stream.LongStream; -import org.apache.james.mailbox.cassandra.CassandraClusterSingleton; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; import org.apache.james.mailbox.cassandra.CassandraId; +import org.apache.james.mailbox.cassandra.CassandraMailboxModule; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox; @@ -44,7 +45,7 @@ import com.google.common.base.Throwables */ public class CassandraUidAndModSeqProviderTest { - private static final CassandraClusterSingleton CASSANDRA = CassandraClusterSingleton.build(); + private static final CassandraClusterSingleton CASSANDRA = CassandraClusterSingleton.create(new CassandraMailboxModule()); private static final int NAMESPACES = 5; private static final int USERS = 5; private static final int MAILBOX_NO = 5; Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java (original) +++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java Thu Oct 29 14:17:52 2015 @@ -21,7 +21,8 @@ package org.apache.james.mailbox.cassand import static org.assertj.core.api.Assertions.assertThat; -import org.apache.james.mailbox.cassandra.CassandraClusterSingleton; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; +import org.apache.james.mailbox.cassandra.CassandraMailboxModule; import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.store.quota.QuotaRootImpl; import org.junit.After; @@ -37,7 +38,7 @@ public class CassandraCurrentQuotaManage @Before public void setUp() { - cassandra = CassandraClusterSingleton.build(); + cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule()); cassandra.ensureAllTables(); currentQuotaManager = new CassandraCurrentQuotaManager(cassandra.getConf()); } Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java (original) +++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java Thu Oct 29 14:17:52 2015 @@ -19,7 +19,8 @@ package org.apache.james.mailbox.cassandra.quota; -import org.apache.james.mailbox.cassandra.CassandraClusterSingleton; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; +import org.apache.james.mailbox.cassandra.CassandraMailboxModule; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.store.quota.GenericMaxQuotaManagerTest; import org.junit.After; @@ -30,7 +31,7 @@ public class CassandraPerUserMaxQuotaMan @Override protected MaxQuotaManager provideMaxQuotaManager() { - cassandra = CassandraClusterSingleton.build(); + cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule()); cassandra.ensureAllTables(); return new CassandraPerUserMaxQuotaManager(cassandra.getConf()); } Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java (original) +++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java Thu Oct 29 14:17:52 2015 @@ -28,7 +28,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.james.mailbox.cassandra.CassandraClusterSingleton; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; +import org.apache.james.mailbox.cassandra.CassandraMailboxModule; import org.apache.james.mailbox.store.user.model.Subscription; import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription; import org.junit.Before; @@ -45,7 +46,7 @@ import com.datastax.driver.core.Session; public class CassandraSubscriptionMapperTest { private static final Logger LOG = LoggerFactory.getLogger(CassandraSubscriptionMapperTest.class); - private static final CassandraClusterSingleton CLUSTER = CassandraClusterSingleton.build(); + private static final CassandraClusterSingleton CLUSTER = CassandraClusterSingleton.create(new CassandraMailboxModule()); private static Session session; private static CassandraSubscriptionMapper mapper; private static Map<String, List<SimpleSubscription>> subscriptionList; Modified: james/project/trunk/mailbox/hbase/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/hbase/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/hbase/pom.xml (original) +++ james/project/trunk/mailbox/hbase/pom.xml Thu Oct 29 14:17:52 2015 @@ -92,6 +92,12 @@ </exclusions> </dependency> <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <scope>test</scope> + <version>13.0</version> + </dependency> + <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase</artifactId> <type>test-jar</type> Modified: james/project/trunk/mailbox/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mailbox/pom.xml (original) +++ james/project/trunk/mailbox/pom.xml Thu Oct 29 14:17:52 2015 @@ -125,6 +125,7 @@ <jackson-databinding.version>2.3.3</jackson-databinding.version> <cassandra-driver-core.version>2.1.5</cassandra-driver-core.version> <cassandra-unit.version>2.0.2.2</cassandra-unit.version> + <apache-backends-cassandra.version>1.8.3-SNAPSHOT</apache-backends-cassandra.version> </properties> <dependencyManagement> @@ -283,6 +284,21 @@ </dependency> <!-- + + --> + <dependency> + <groupId>org.apache.james</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + <version>${apache-backends-cassandra.version}</version> + </dependency> + <dependency> + <groupId>org.apache.james</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + <version>${apache-backends-cassandra.version}</version> + <type>test-jar</type> + </dependency> + + <!-- START Logging --> <dependency> Modified: james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml (original) +++ james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml Thu Oct 29 14:17:52 2015 @@ -150,15 +150,20 @@ <dependencies> <dependency> <groupId>org.apache.james</groupId> - <artifactId>apache-james-mailbox-cassandra</artifactId> + <artifactId>apache-james-backends-cassandra</artifactId> </dependency> <dependency> <groupId>org.apache.james</groupId> - <artifactId>apache-james-mailbox-cassandra</artifactId> + <artifactId>apache-james-backends-cassandra</artifactId> + <scope>test</scope> <type>test-jar</type> </dependency> <dependency> <groupId>org.apache.james</groupId> + <artifactId>apache-james-mailbox-cassandra</artifactId> + </dependency> + <dependency> + <groupId>org.apache.james</groupId> <artifactId>apache-james-mpt-imapmailbox-core</artifactId> </dependency> <dependency> @@ -215,5 +220,8 @@ </build> </profile> </profiles> + <build> + + </build> </project> Modified: james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java URL: http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java (original) +++ james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java Thu Oct 29 14:17:52 2015 @@ -18,14 +18,16 @@ ****************************************************************/ package org.apache.james.mpt.imapmailbox.cassandra.host; +import org.apache.james.backends.cassandra.CassandraClusterSingleton; +import org.apache.james.backends.cassandra.components.CassandraModule; +import org.apache.james.backends.cassandra.init.CassandraTypesProvider; import org.apache.james.imap.encode.main.DefaultImapEncoderFactory; import org.apache.james.imap.main.DefaultImapDecoderFactory; import org.apache.james.imap.processor.main.DefaultImapProcessorFactory; import org.apache.james.mailbox.SubscriptionManager; -import org.apache.james.mailbox.cassandra.CassandraClusterSingleton; import org.apache.james.mailbox.cassandra.CassandraMailboxManager; +import org.apache.james.mailbox.cassandra.CassandraMailboxModule; import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory; -import org.apache.james.mailbox.cassandra.CassandraTypesProvider; import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider; import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider; import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager; @@ -49,17 +51,18 @@ public class CassandraHostSystem extends private final CassandraMailboxManager mailboxManager; private final MockAuthenticator userManager; + private final CassandraModule mailboxModule; private CassandraClusterSingleton cassandraClusterSingleton; public CassandraHostSystem() throws Exception { - cassandraClusterSingleton = CassandraClusterSingleton.build(); + mailboxModule = new CassandraMailboxModule(); + cassandraClusterSingleton = CassandraClusterSingleton.create(mailboxModule); userManager = new MockAuthenticator(); - com.datastax.driver.core.Session session = cassandraClusterSingleton.getConf(); CassandraModSeqProvider modSeqProvider = new CassandraModSeqProvider(session); CassandraUidProvider uidProvider = new CassandraUidProvider(session); - CassandraMailboxSessionMapperFactory mapperFactory = new CassandraMailboxSessionMapperFactory(uidProvider, modSeqProvider, session, new CassandraTypesProvider(session)); + CassandraMailboxSessionMapperFactory mapperFactory = new CassandraMailboxSessionMapperFactory(uidProvider, modSeqProvider, session, new CassandraTypesProvider(mailboxModule, session)); mailboxManager = new CassandraMailboxManager(mapperFactory, userManager, new JVMMailboxPathLocker()); QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mapperFactory); Modified: james/project/trunk/mpt/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/mpt/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/mpt/pom.xml (original) +++ james/project/trunk/mpt/pom.xml Thu Oct 29 14:17:52 2015 @@ -113,6 +113,7 @@ <javax.mail.groupId>javax.mail</javax.mail.groupId> <javax.mail.artifactId>mail</javax.mail.artifactId> + <backends.version>1.8.3-SNAPSHOT</backends.version> </properties> @@ -161,6 +162,17 @@ <!-- Other Apache James sub projects --> <dependency> <groupId>org.apache.james</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + <version>${backends.version}</version> + </dependency> + <dependency> + <groupId>org.apache.james</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + <type>test-jar</type> + <version>${backends.version}</version> + </dependency> + <dependency> + <groupId>org.apache.james</groupId> <artifactId>apache-james-mailbox-api</artifactId> <version>${james-mailbox.version}</version> </dependency> Modified: james/project/trunk/server/app/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/server/app/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/server/app/pom.xml (original) +++ james/project/trunk/server/app/pom.xml Thu Oct 29 14:17:52 2015 @@ -378,6 +378,10 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.apache.james</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + </dependency> <!-- Comment jackrabbit dependency to avoid lucene version clash with mailbox-lucene (JAMES-1297) <dependency> <groupId>org.apache.jackrabbit</groupId> Modified: james/project/trunk/server/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/server/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff ============================================================================== --- james/project/trunk/server/pom.xml (original) +++ james/project/trunk/server/pom.xml Thu Oct 29 14:17:52 2015 @@ -176,6 +176,7 @@ <karaf.tooling.exam.container.version>2.3.0</karaf.tooling.exam.container.version> <pax-logging-api.version>1.6.4</pax-logging-api.version> <mockito-core.version>1.9.0</mockito-core.version> + <backends.version>1.8.3-SNAPSHOT</backends.version> </properties> <dependencyManagement> @@ -286,6 +287,11 @@ </dependency> <dependency> <groupId>org.apache.james</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + <version>${backends.version}</version> + </dependency> + <dependency> + <groupId>org.apache.james</groupId> <artifactId>apache-mailet-api</artifactId> <version>${mailet.version}</version> <exclusions> --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org