You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/08/22 03:32:02 UTC
[7/9] james-project git commit: JAMES-2111 Remove Message V1 related
code
JAMES-2111 Remove Message V1 related code
A new schema version 3 is created with table Message
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4e0f1310
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4e0f1310
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4e0f1310
Branch: refs/heads/master
Commit: 4e0f131028a608dbe2e53ad932f7a2ecc340cc4e
Parents: 55300fe
Author: benwa <bt...@linagora.com>
Authored: Fri Aug 18 09:08:57 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Aug 22 10:31:07 2017 +0700
----------------------------------------------------------------------
.../versions/CassandraSchemaVersionManager.java | 6 +-
.../CassandraMailboxSessionMapperFactory.java | 22 +-
.../cassandra/mail/CassandraMessageDAO.java | 418 -------------------
.../cassandra/mail/CassandraMessageDAOV2.java | 43 +-
.../mail/CassandraMessageIdMapper.java | 22 +-
.../cassandra/mail/CassandraMessageMapper.java | 27 +-
.../mail/migration/V1ToV2Migration.java | 154 -------
.../mail/migration/V1ToV2MigrationThread.java | 96 -----
.../modules/CassandraMessageModule.java | 39 +-
.../table/CassandraMessageV1Table.java | 54 ---
.../CassandraMailboxManagerProvider.java | 3 -
.../CassandraSubscriptionManagerTest.java | 5 +-
.../cassandra/CassandraTestSystemFixture.java | 5 +-
.../CassandraMailboxManagerAttachmentTest.java | 4 +-
.../cassandra/mail/CassandraMapperProvider.java | 4 +-
.../cassandra/mail/CassandraMessageDAOTest.java | 166 --------
.../mail/migration/V1ToV2MigrationTest.java | 304 --------------
.../cassandra/host/CassandraHostSystem.java | 5 +-
.../modules/mailbox/CassandraMailboxModule.java | 2 -
.../modules/server/CassandraRoutesModule.java | 9 +-
20 files changed, 44 insertions(+), 1344 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
index 45fa2a2..79072b7 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
@@ -33,9 +33,9 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
public class CassandraSchemaVersionManager {
- public static final int MIN_VERSION = 1;
- public static final int MAX_VERSION = 2;
- public static final int DEFAULT_VERSION = 1;
+ public static final int MIN_VERSION = 2;
+ public static final int MAX_VERSION = 3;
+ public static final int DEFAULT_VERSION = 2;
private static final Logger LOGGER = LoggerFactory.getLogger(CassandraSchemaVersionManager.class);
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
index cabd043..e02d5cd 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
@@ -27,6 +27,7 @@ import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.cassandra.mail.CassandraAnnotationMapper;
import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentMapper;
+import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraIndexTableHandler;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO;
@@ -34,15 +35,13 @@ import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxMapper;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxRecentsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
+import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAOV2;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdMapper;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageMapper;
import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
-import org.apache.james.mailbox.cassandra.mail.*;
-import org.apache.james.mailbox.cassandra.mail.migration.V1ToV2Migration;
import org.apache.james.mailbox.cassandra.user.CassandraSubscriptionMapper;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -64,7 +63,6 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
private final Session session;
private final CassandraUidProvider uidProvider;
private final CassandraModSeqProvider modSeqProvider;
- private final CassandraMessageDAO messageDAO;
private final CassandraMessageDAOV2 messageDAOV2;
private final CassandraMessageIdDAO messageIdDAO;
private final CassandraMessageIdToImapUidDAO imapUidDAO;
@@ -75,22 +73,20 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
private final CassandraMailboxPathDAO mailboxPathDAO;
private final CassandraFirstUnseenDAO firstUnseenDAO;
private final CassandraApplicableFlagDAO applicableFlagDAO;
- private final V1ToV2Migration v1ToV2Migration;
private CassandraUtils cassandraUtils;
private CassandraConfiguration cassandraConfiguration;
private final CassandraDeletedMessageDAO deletedMessageDAO;
@Inject
public CassandraMailboxSessionMapperFactory(CassandraUidProvider uidProvider, CassandraModSeqProvider modSeqProvider, Session session,
- CassandraMessageDAO messageDAO, CassandraMessageDAOV2 messageDAOV2,
+ CassandraMessageDAOV2 messageDAOV2,
CassandraMessageIdDAO messageIdDAO, CassandraMessageIdToImapUidDAO imapUidDAO,
CassandraMailboxCounterDAO mailboxCounterDAO, CassandraMailboxRecentsDAO mailboxRecentsDAO, CassandraMailboxDAO mailboxDAO,
CassandraMailboxPathDAO mailboxPathDAO, CassandraFirstUnseenDAO firstUnseenDAO, CassandraApplicableFlagDAO applicableFlagDAO,
- CassandraDeletedMessageDAO deletedMessageDAO, V1ToV2Migration v1ToV2Migration, CassandraUtils cassandraUtils, CassandraConfiguration cassandraConfiguration) {
+ CassandraDeletedMessageDAO deletedMessageDAO, CassandraUtils cassandraUtils, CassandraConfiguration cassandraConfiguration) {
this.uidProvider = uidProvider;
this.modSeqProvider = modSeqProvider;
this.session = session;
- this.messageDAO = messageDAO;
this.messageDAOV2 = messageDAOV2;
this.messageIdDAO = messageIdDAO;
this.imapUidDAO = imapUidDAO;
@@ -109,14 +105,12 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
firstUnseenDAO,
applicableFlagDAO,
deletedMessageDAO);
- this.v1ToV2Migration = v1ToV2Migration;
}
public CassandraMailboxSessionMapperFactory(
CassandraUidProvider uidProvider,
CassandraModSeqProvider modSeqProvider,
Session session,
- CassandraMessageDAO messageDAO,
CassandraMessageDAOV2 messageDAOV2,
CassandraMessageIdDAO messageIdDAO,
CassandraMessageIdToImapUidDAO imapUidDAO,
@@ -128,9 +122,8 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
CassandraApplicableFlagDAO applicableFlagDAO,
CassandraDeletedMessageDAO deletedMesageDAO) {
- this(uidProvider, modSeqProvider, session, messageDAO, messageDAOV2, messageIdDAO, imapUidDAO, mailboxCounterDAO,
+ this(uidProvider, modSeqProvider, session, messageDAOV2, messageIdDAO, imapUidDAO, mailboxCounterDAO,
mailboxRecentsDAO, mailboxDAO, mailboxPathDAO, firstUnseenDAO, applicableFlagDAO, deletedMesageDAO,
- new V1ToV2Migration(messageDAO, messageDAOV2, new CassandraAttachmentMapper(session), CassandraConfiguration.DEFAULT_CONFIGURATION),
CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION);
}
@@ -150,7 +143,6 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
indexTableHandler,
firstUnseenDAO,
deletedMessageDAO,
- v1ToV2Migration,
cassandraConfiguration);
}
@@ -158,8 +150,8 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
public MessageIdMapper createMessageIdMapper(MailboxSession mailboxSession) throws MailboxException {
return new CassandraMessageIdMapper(getMailboxMapper(mailboxSession), mailboxDAO,
(CassandraAttachmentMapper) getAttachmentMapper(mailboxSession),
- imapUidDAO, messageIdDAO, messageDAO, messageDAOV2, indexTableHandler, modSeqProvider, mailboxSession,
- v1ToV2Migration, cassandraConfiguration);
+ imapUidDAO, messageIdDAO, messageDAOV2, indexTableHandler, modSeqProvider, mailboxSession,
+ cassandraConfiguration);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
deleted file mode 100644
index 35c6a3f..0000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/****************************************************************
- * 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.mail;
-
-import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.ATTACHMENTS;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.BODY;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.BODY_CONTENT;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.BODY_OCTECTS;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.BODY_START_OCTET;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.FIELDS;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.FULL_CONTENT_OCTETS;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.HEADERS;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.HEADER_CONTENT;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.INTERNAL_DATE;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.METADATA;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.PROPERTIES;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.TABLE_NAME;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.TEXTUAL_LINE_COUNT;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.CompletableFuture;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import javax.inject.Inject;
-import javax.mail.util.SharedByteArrayInputStream;
-
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.james.backends.cassandra.CassandraConfiguration;
-import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
-import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
-import org.apache.james.backends.cassandra.utils.CassandraUtils;
-import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.cassandra.mail.utils.Limit;
-import org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.Attachments;
-import org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table.Properties;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.AttachmentId;
-import org.apache.james.mailbox.model.Cid;
-import org.apache.james.mailbox.model.ComposedMessageId;
-import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
-import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
-import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleProperty;
-import org.apache.james.util.CompletableFutureUtil;
-import org.apache.james.util.FluentFutureStream;
-import org.apache.james.util.OptionalConverter;
-import org.apache.james.util.streams.JamesCollectors;
-
-import com.datastax.driver.core.BoundStatement;
-import com.datastax.driver.core.PreparedStatement;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.UDTValue;
-import com.datastax.driver.core.querybuilder.QueryBuilder;
-import com.github.steveash.guavate.Guavate;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.io.ByteStreams;
-import com.google.common.primitives.Bytes;
-
-public class CassandraMessageDAO {
- private final CassandraAsyncExecutor cassandraAsyncExecutor;
- private final CassandraTypesProvider typesProvider;
- private final PreparedStatement insert;
- private final PreparedStatement delete;
- private final PreparedStatement selectMetadata;
- private final PreparedStatement selectHeaders;
- private final PreparedStatement selectFields;
- private final PreparedStatement selectBody;
- private final PreparedStatement selectByBatch;
- private CassandraUtils cassandraUtils;
- private final CassandraConfiguration cassandraConfiguration;
- private final Cid.CidParser cidParser;
-
- @Inject
- public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider, CassandraConfiguration cassandraConfiguration,
- CassandraUtils cassandraUtils) {
- this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
- this.typesProvider = typesProvider;
- this.insert = prepareInsert(session);
- this.delete = prepareDelete(session);
- this.selectMetadata = prepareSelect(session, METADATA);
- this.selectHeaders = prepareSelect(session, HEADERS);
- this.selectFields = prepareSelect(session, FIELDS);
- this.selectBody = prepareSelect(session, BODY);
- this.cassandraConfiguration = cassandraConfiguration;
- this.selectByBatch = prepareSelectBatch(session, cassandraConfiguration);
- this.cassandraUtils = cassandraUtils;
- this.cidParser = Cid.parser().relaxed();
- }
-
- @VisibleForTesting
- public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider) {
- this(session, typesProvider, CassandraConfiguration.DEFAULT_CONFIGURATION, CassandraUtils.WITH_DEFAULT_CONFIGURATION);
- }
-
- private PreparedStatement prepareSelectBatch(Session session, CassandraConfiguration cassandraConfiguration) {
- return session.prepare(select().from(TABLE_NAME)
- .limit(cassandraConfiguration.getFetchNextPageInAdvanceRow()));
- }
-
- private PreparedStatement prepareSelect(Session session, String[] fields) {
- return session.prepare(select(fields)
- .from(TABLE_NAME)
- .where(eq(MESSAGE_ID, bindMarker(MESSAGE_ID))));
- }
-
- private PreparedStatement prepareInsert(Session session) {
- return session.prepare(insertInto(TABLE_NAME)
- .value(MESSAGE_ID, bindMarker(MESSAGE_ID))
- .value(INTERNAL_DATE, bindMarker(INTERNAL_DATE))
- .value(BODY_START_OCTET, bindMarker(BODY_START_OCTET))
- .value(FULL_CONTENT_OCTETS, bindMarker(FULL_CONTENT_OCTETS))
- .value(BODY_OCTECTS, bindMarker(BODY_OCTECTS))
- .value(BODY_CONTENT, bindMarker(BODY_CONTENT))
- .value(HEADER_CONTENT, bindMarker(HEADER_CONTENT))
- .value(PROPERTIES, bindMarker(PROPERTIES))
- .value(TEXTUAL_LINE_COUNT, bindMarker(TEXTUAL_LINE_COUNT))
- .value(ATTACHMENTS, bindMarker(ATTACHMENTS)));
- }
-
- private PreparedStatement prepareDelete(Session session) {
- return session.prepare(QueryBuilder.delete()
- .from(TABLE_NAME)
- .where(eq(MESSAGE_ID, bindMarker(MESSAGE_ID))));
- }
-
- public List<RawMessage> readBatch() {
- return cassandraUtils.convertToStream(
- cassandraAsyncExecutor.execute(selectByBatch.bind()
- .setFetchSize(cassandraConfiguration.getV1ReadFetchSize()))
- .join())
- .map(this::fromRow)
- .collect(Guavate.toImmutableList());
- }
-
- public CompletableFuture<Void> save(MailboxMessage message) throws MailboxException {
- try {
- CassandraMessageId messageId = (CassandraMessageId) message.getMessageId();
- BoundStatement boundStatement = insert.bind()
- .setUUID(MESSAGE_ID, messageId.get())
- .setTimestamp(INTERNAL_DATE, message.getInternalDate())
- .setInt(BODY_START_OCTET, (int) (message.getHeaderOctets()))
- .setLong(FULL_CONTENT_OCTETS, message.getFullContentOctets())
- .setLong(BODY_OCTECTS, message.getBodyOctets())
- .setBytes(BODY_CONTENT, toByteBuffer(message.getBodyContent()))
- .setBytes(HEADER_CONTENT, toByteBuffer(message.getHeaderContent()))
- .setList(PROPERTIES, message.getProperties().stream()
- .map(x -> typesProvider.getDefinedUserType(PROPERTIES)
- .newValue()
- .setString(Properties.NAMESPACE, x.getNamespace())
- .setString(Properties.NAME, x.getLocalName())
- .setString(Properties.VALUE, x.getValue()))
- .collect(Collectors.toList()))
- .setList(ATTACHMENTS, message.getAttachments().stream()
- .map(this::toUDT)
- .collect(Collectors.toList()));
-
- return cassandraAsyncExecutor.executeVoid(setTextualLineCount(boundStatement, message.getTextualLineCount()));
-
- } catch (IOException e) {
- throw new MailboxException("Error saving mail", e);
- }
- }
-
- private BoundStatement setTextualLineCount(BoundStatement boundStatement, Long textualLineCount) {
- return Optional.ofNullable(textualLineCount)
- .map(value -> boundStatement.setLong(TEXTUAL_LINE_COUNT, value))
- .orElseGet(() -> boundStatement.setToNull(TEXTUAL_LINE_COUNT));
- }
-
- private UDTValue toUDT(org.apache.james.mailbox.model.MessageAttachment messageAttachment) {
- return typesProvider.getDefinedUserType(ATTACHMENTS)
- .newValue()
- .setString(Attachments.ID, messageAttachment.getAttachmentId().getId())
- .setString(Attachments.NAME, messageAttachment.getName().orNull())
- .setString(Attachments.CID, messageAttachment.getCid().transform(Cid::getValue).orNull())
- .setBool(Attachments.IS_INLINE, messageAttachment.isInline());
- }
-
- private ByteBuffer toByteBuffer(InputStream stream) throws IOException {
- return ByteBuffer.wrap(ByteStreams.toByteArray(stream));
- }
-
- public CompletableFuture<Stream<Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>>>> retrieveMessages(
- List<ComposedMessageIdWithMetaData> messageIds,
- FetchType fetchType,
- Limit limit
- ) {
- return CompletableFutureUtil.chainAll(
- limit.applyOnStream(messageIds.stream().distinct())
- .collect(JamesCollectors.chunker(cassandraConfiguration.getMessageReadChunkSize())),
- ids -> FluentFutureStream.of(
- ids.stream()
- .map(id -> retrieveRow(id, fetchType)
- .thenApply((ResultSet resultSet) ->
- message(resultSet.one(), id, fetchType))))
- .completableFuture())
- .thenApply(stream -> stream.flatMap(Function.identity()));
- }
-
- private CompletableFuture<ResultSet> retrieveRow(ComposedMessageIdWithMetaData messageId, FetchType fetchType) {
- CassandraMessageId cassandraMessageId = (CassandraMessageId) messageId.getComposedMessageId().getMessageId();
-
- return cassandraAsyncExecutor.execute(retrieveSelect(fetchType)
- .bind()
- .setUUID(MESSAGE_ID, cassandraMessageId.get()));
- }
-
- private Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>> message(Row row, ComposedMessageIdWithMetaData messageIdWithMetaData, FetchType fetchType) {
- ComposedMessageId messageId = messageIdWithMetaData.getComposedMessageId();
-
- MessageWithoutAttachment messageWithoutAttachment =
- new MessageWithoutAttachment(
- messageId.getMessageId(),
- row.getTimestamp(INTERNAL_DATE),
- row.getLong(FULL_CONTENT_OCTETS),
- row.getInt(BODY_START_OCTET),
- buildContent(row, fetchType),
- messageIdWithMetaData.getFlags(),
- retrievePropertyBuilder(row),
- messageId.getMailboxId(),
- messageId.getUid(),
- messageIdWithMetaData.getModSeq());
- return Pair.of(messageWithoutAttachment, retrieveAttachments(row, fetchType));
- }
-
- private PropertyBuilder retrievePropertyBuilder(Row row) {
- PropertyBuilder property = new PropertyBuilder(
- row.getList(PROPERTIES, UDTValue.class).stream()
- .map(x -> new SimpleProperty(x.getString(Properties.NAMESPACE), x.getString(Properties.NAME), x.getString(Properties.VALUE)))
- .collect(Collectors.toList()));
- property.setTextualLineCount(row.getLong(TEXTUAL_LINE_COUNT));
- return property;
- }
-
- private Stream<MessageAttachmentRepresentation> retrieveAttachments(Row row, FetchType fetchType) {
- switch (fetchType) {
- case Full:
- case Body:
- List<UDTValue> udtValues = row.getList(ATTACHMENTS, UDTValue.class);
-
- return attachmentByIds(udtValues);
- default:
- return Stream.of();
- }
- }
-
- private Stream<MessageAttachmentRepresentation> attachmentByIds(List<UDTValue> udtValues) {
- return udtValues.stream()
- .map(this::messageAttachmentByIdFrom);
- }
-
- private MessageAttachmentRepresentation messageAttachmentByIdFrom(UDTValue udtValue) {
- return MessageAttachmentRepresentation.builder()
- .attachmentId(AttachmentId.from(udtValue.getString(Attachments.ID)))
- .name(udtValue.getString(Attachments.NAME))
- .cid(OptionalConverter.fromGuava(
- cidParser.parse(udtValue.getString(Attachments.CID))))
- .isInline(udtValue.getBool(Attachments.IS_INLINE))
- .build();
- }
-
- private PreparedStatement retrieveSelect(FetchType fetchType) {
- switch (fetchType) {
- case Body:
- return selectBody;
- case Full:
- return selectFields;
- case Headers:
- return selectHeaders;
- case Metadata:
- return selectMetadata;
- default:
- throw new RuntimeException("Unknown FetchType " + fetchType);
- }
- }
-
- public CompletableFuture<Void> delete(CassandraMessageId messageId) {
- return cassandraAsyncExecutor.executeVoid(delete.bind()
- .setUUID(MESSAGE_ID, messageId.get()));
- }
-
- private SharedByteArrayInputStream buildContent(Row row, FetchType fetchType) {
- switch (fetchType) {
- case Full:
- return new SharedByteArrayInputStream(getFullContent(row));
- case Headers:
- return new SharedByteArrayInputStream(getFieldContent(HEADER_CONTENT, row));
- case Body:
- return new SharedByteArrayInputStream(getBodyContent(row));
- case Metadata:
- return new SharedByteArrayInputStream(new byte[]{});
- default:
- throw new RuntimeException("Unknown FetchType " + fetchType);
- }
- }
-
- private byte[] getFullContent(Row row) {
- return Bytes.concat(getFieldContent(HEADER_CONTENT, row), getFieldContent(BODY_CONTENT, row));
- }
-
- private byte[] getBodyContent(Row row) {
- return Bytes.concat(new byte[row.getInt(BODY_START_OCTET)], getFieldContent(BODY_CONTENT, row));
- }
-
- private byte[] getFieldContent(String field, Row row) {
- byte[] headerContent = new byte[row.getBytes(field).remaining()];
- row.getBytes(field).get(headerContent);
- return headerContent;
- }
-
- private RawMessage fromRow(Row row) {
- return new RawMessage(
- row.getTimestamp(INTERNAL_DATE),
- new CassandraMessageId.Factory().of(row.getUUID(MESSAGE_ID)),
- row.getInt(BODY_START_OCTET),
- row.getLong(FULL_CONTENT_OCTETS),
- getFieldContent(BODY_CONTENT, row),
- getFieldContent(HEADER_CONTENT, row),
- retrievePropertyBuilder(row),
- row.getLong(TEXTUAL_LINE_COUNT),
- retrieveAttachments(row, FetchType.Full).collect(Guavate.toImmutableList()));
- }
-
- public static class RawMessage {
- private final Date internalDate;
- private final MessageId messageId;
- private final int bodyStartOctet;
- private final long fullContentOctet;
- private final byte[] bodyContent;
- private final byte[] headerContent;
- private final PropertyBuilder propertyBuilder;
- private final long textuaLineCount;
- private final List<MessageAttachmentRepresentation> attachments;
-
- private RawMessage(Date internalDate, MessageId messageId, int bodyStartOctet, long fullContentOctet, byte[] bodyContent,
- byte[] headerContent, PropertyBuilder propertyBuilder, long textuaLineCount,
- List<MessageAttachmentRepresentation> attachments) {
- this.internalDate = internalDate;
- this.messageId = messageId;
- this.bodyStartOctet = bodyStartOctet;
- this.fullContentOctet = fullContentOctet;
- this.bodyContent = bodyContent;
- this.headerContent = headerContent;
- this.propertyBuilder = propertyBuilder;
- this.textuaLineCount = textuaLineCount;
- this.attachments = attachments;
- }
-
- public Date getInternalDate() {
- return internalDate;
- }
-
- public MessageId getMessageId() {
- return messageId;
- }
-
- public int getBodyStartOctet() {
- return bodyStartOctet;
- }
-
- public long getFullContentOctet() {
- return fullContentOctet;
- }
-
- public byte[] getBodyContent() {
- return bodyContent;
- }
-
- public byte[] getHeaderContent() {
- return headerContent;
- }
-
- public PropertyBuilder getPropertyBuilder() {
- return propertyBuilder;
- }
-
- public long getTextuaLineCount() {
- return textuaLineCount;
- }
-
- public List<MessageAttachmentRepresentation> getAttachments() {
- return attachments;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV2.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV2.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV2.java
index b44bd8c..ae86d59 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV2.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV2.java
@@ -59,7 +59,7 @@ import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
import org.apache.james.mailbox.cassandra.ids.BlobId;
import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
import org.apache.james.mailbox.cassandra.mail.utils.Limit;
-import org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table;
+import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table;
import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table.Attachments;
import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table.Properties;
import org.apache.james.mailbox.exception.MailboxException;
@@ -213,30 +213,6 @@ public class CassandraMessageDAOV2 {
.setBool(Attachments.IS_INLINE, messageAttachment.isInline());
}
- public CompletableFuture<Void> save(CassandraMessageDAO.RawMessage rawMessage) {
- return CompletableFutureUtil.combine(
- blobsDAO.save(rawMessage.getHeaderContent()),
- blobsDAO.save(rawMessage.getBodyContent()),
- Pair::of)
- .thenCompose(pair ->
- cassandraAsyncExecutor.executeVoid(boundWriteStatement(rawMessage, pair)));
- }
-
- private BoundStatement boundWriteStatement(CassandraMessageDAO.RawMessage message, Pair<Optional<BlobId>, Optional<BlobId>> pair) {
- CassandraMessageId messageId = (CassandraMessageId) message.getMessageId();
- return insert.bind()
- .setUUID(MESSAGE_ID, messageId.get())
- .setTimestamp(INTERNAL_DATE, message.getInternalDate())
- .setInt(BODY_START_OCTET, message.getBodyStartOctet())
- .setLong(FULL_CONTENT_OCTETS, message.getFullContentOctet())
- .setLong(BODY_OCTECTS, message.getFullContentOctet() - message.getBodyStartOctet())
- .setString(BODY_CONTENT, pair.getRight().map(BlobId::getId).orElse(DEFAULT_OBJECT_VALUE))
- .setString(HEADER_CONTENT, pair.getLeft().map(BlobId::getId).orElse(DEFAULT_OBJECT_VALUE))
- .setLong(TEXTUAL_LINE_COUNT, message.getTextuaLineCount())
- .setList(PROPERTIES, buildPropertiesUdt(message.getPropertyBuilder().toProperties()))
- .setList(ATTACHMENTS, buildAttachmentUdt(message));
- }
-
private List<UDTValue> buildPropertiesUdt(MailboxMessage message) {
return message.getProperties().stream()
.map(x -> typesProvider.getDefinedUserType(PROPERTIES)
@@ -247,21 +223,6 @@ public class CassandraMessageDAOV2 {
.collect(Guavate.toImmutableList());
}
- private ImmutableList<UDTValue> buildAttachmentUdt(CassandraMessageDAO.RawMessage message) {
- return message.getAttachments().stream()
- .map(this::toUDT)
- .collect(Guavate.toImmutableList());
- }
-
- private UDTValue toUDT(MessageAttachmentRepresentation messageAttachment) {
- return typesProvider.getDefinedUserType(ATTACHMENTS)
- .newValue()
- .setString(Attachments.ID, messageAttachment.getAttachmentId().getId())
- .setString(Attachments.NAME, messageAttachment.getName().orElse(null))
- .setString(Attachments.CID, messageAttachment.getCid().map(Cid::getValue).orElse(null))
- .setBool(Attachments.IS_INLINE, messageAttachment.isInline());
- }
-
public CompletableFuture<Stream<MessageResult>> retrieveMessages(List<ComposedMessageIdWithMetaData> messageIds, FetchType fetchType, Limit limit) {
return CompletableFutureUtil.chainAll(
limit.applyOnStream(messageIds.stream().distinct())
@@ -345,7 +306,7 @@ public class CassandraMessageDAOV2 {
.attachmentId(AttachmentId.from(udtValue.getString(Attachments.ID)))
.name(udtValue.getString(Attachments.NAME))
.cid(OptionalConverter.fromGuava(
- cidParser.parse(udtValue.getString(CassandraMessageV1Table.Attachments.CID))))
+ cidParser.parse(udtValue.getString(CassandraMessageV2Table.Attachments.CID))))
.isInline(udtValue.getBool(Attachments.IS_INLINE))
.build();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
index 0af8c74..868b382 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
@@ -35,7 +35,6 @@ import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.cassandra.ids.CassandraId;
import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.cassandra.mail.migration.V1ToV2Migration;
import org.apache.james.mailbox.cassandra.mail.utils.Limit;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.ComposedMessageId;
@@ -56,7 +55,6 @@ import org.slf4j.LoggerFactory;
import com.github.steveash.guavate.Guavate;
import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
public class CassandraMessageIdMapper implements MessageIdMapper {
private static final Logger LOGGER = LoggerFactory.getLogger(CassandraMessageIdMapper.class);
@@ -70,14 +68,12 @@ public class CassandraMessageIdMapper implements MessageIdMapper {
private final ModSeqProvider modSeqProvider;
private final MailboxSession mailboxSession;
private final AttachmentLoader attachmentLoader;
- private final V1ToV2Migration v1ToV2Migration;
private final CassandraConfiguration cassandraConfiguration;
public CassandraMessageIdMapper(MailboxMapper mailboxMapper, CassandraMailboxDAO mailboxDAO, CassandraAttachmentMapper attachmentMapper,
CassandraMessageIdToImapUidDAO imapUidDAO, CassandraMessageIdDAO messageIdDAO,
- CassandraMessageDAO messageDAOV1, CassandraMessageDAOV2 messageDAOV2,
- CassandraIndexTableHandler indexTableHandler, ModSeqProvider modSeqProvider, MailboxSession mailboxSession,
- V1ToV2Migration v1ToV2Migration, CassandraConfiguration cassandraConfiguration) {
+ CassandraMessageDAOV2 messageDAOV2, CassandraIndexTableHandler indexTableHandler,
+ ModSeqProvider modSeqProvider, MailboxSession mailboxSession, CassandraConfiguration cassandraConfiguration) {
this.mailboxMapper = mailboxMapper;
this.mailboxDAO = mailboxDAO;
@@ -89,7 +85,6 @@ public class CassandraMessageIdMapper implements MessageIdMapper {
this.mailboxSession = mailboxSession;
this.attachmentLoader = new AttachmentLoader(attachmentMapper);
this.cassandraConfiguration = cassandraConfiguration;
- this.v1ToV2Migration = v1ToV2Migration;
}
@Override
@@ -104,21 +99,16 @@ public class CassandraMessageIdMapper implements MessageIdMapper {
.map(messageId -> imapUidDAO.retrieve((CassandraMessageId) messageId, Optional.empty())))
.completableFuture()
.thenApply(stream -> stream.collect(Guavate.toImmutableList()))
- .thenCompose(composedMessageIds -> retrieveMessagesAndDoMigrationIfNeeded(fetchType, composedMessageIds))
+ .thenCompose(composedMessageIds -> messageDAOV2.retrieveMessages(composedMessageIds, fetchType, Limit.unlimited()))
+ .thenApply(stream -> stream
+ .filter(CassandraMessageDAOV2.MessageResult::isFound)
+ .map(CassandraMessageDAOV2.MessageResult::message))
.thenCompose(stream -> attachmentLoader.addAttachmentToMessages(stream, fetchType))
.thenCompose(this::filterMessagesWithExistingMailbox)
.join()
.sorted(Comparator.comparing(MailboxMessage::getUid));
}
- private CompletableFuture<Stream<Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>>>>
- retrieveMessagesAndDoMigrationIfNeeded(FetchType fetchType, ImmutableList<ComposedMessageIdWithMetaData> composedMessageIds) {
-
- return FluentFutureStream.of(messageDAOV2.retrieveMessages(composedMessageIds, fetchType, Limit.unlimited()))
- .thenComposeOnAll(v1ToV2Migration::getFromV2orElseFromV1AfterMigration)
- .completableFuture();
- }
-
private CompletableFuture<Stream<SimpleMailboxMessage>> filterMessagesWithExistingMailbox(Stream<SimpleMailboxMessage> stream) {
return FluentFutureStream.ofOptionals(stream.map(this::keepMessageIfMailboxExists))
.completableFuture();
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index 859f551..074f336 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -31,7 +31,6 @@ import java.util.stream.Stream;
import javax.mail.Flags;
import javax.mail.Flags.Flag;
-import org.apache.commons.lang3.tuple.Pair;
import org.apache.james.backends.cassandra.CassandraConfiguration;
import org.apache.james.mailbox.ApplicableFlagBuilder;
import org.apache.james.mailbox.FlagsBuilder;
@@ -39,7 +38,6 @@ import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.cassandra.ids.CassandraId;
import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.cassandra.mail.migration.V1ToV2Migration;
import org.apache.james.mailbox.cassandra.mail.utils.FlagsUpdateStageResult;
import org.apache.james.mailbox.cassandra.mail.utils.Limit;
import org.apache.james.mailbox.exception.MailboxException;
@@ -85,7 +83,6 @@ public class CassandraMessageMapper implements MessageMapper {
private final CassandraFirstUnseenDAO firstUnseenDAO;
private final AttachmentLoader attachmentLoader;
private final CassandraDeletedMessageDAO deletedMessageDAO;
- private final V1ToV2Migration v1ToV2Migration;
private final CassandraConfiguration cassandraConfiguration;
public CassandraMessageMapper(CassandraUidProvider uidProvider, CassandraModSeqProvider modSeqProvider,
@@ -94,8 +91,7 @@ public class CassandraMessageMapper implements MessageMapper {
CassandraMessageIdToImapUidDAO imapUidDAO, CassandraMailboxCounterDAO mailboxCounterDAO,
CassandraMailboxRecentsDAO mailboxRecentDAO, CassandraApplicableFlagDAO applicableFlagDAO,
CassandraIndexTableHandler indexTableHandler, CassandraFirstUnseenDAO firstUnseenDAO,
- CassandraDeletedMessageDAO deletedMessageDAO, V1ToV2Migration v1ToV2Migration,
- CassandraConfiguration cassandraConfiguration) {
+ CassandraDeletedMessageDAO deletedMessageDAO, CassandraConfiguration cassandraConfiguration) {
this.uidProvider = uidProvider;
this.modSeqProvider = modSeqProvider;
this.mailboxSession = mailboxSession;
@@ -109,7 +105,6 @@ public class CassandraMessageMapper implements MessageMapper {
this.attachmentLoader = new AttachmentLoader(attachmentMapper);
this.applicableFlagDAO = applicableFlagDAO;
this.deletedMessageDAO = deletedMessageDAO;
- this.v1ToV2Migration = v1ToV2Migration;
this.cassandraConfiguration = cassandraConfiguration;
}
@@ -183,10 +178,10 @@ public class CassandraMessageMapper implements MessageMapper {
}
private CompletableFuture<Stream<SimpleMailboxMessage>> retrieveMessages(List<ComposedMessageIdWithMetaData> messageIds, FetchType fetchType, Limit limit) {
- CompletableFuture<Stream<Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>>>>
- messageRepresentations = retrieveMessagesAndDoMigrationIfNeeded(messageIds, fetchType, limit);
-
- return messageRepresentations
+ return messageDAOV2.retrieveMessages(messageIds, fetchType, limit)
+ .thenApply(steam -> steam
+ .filter(CassandraMessageDAOV2.MessageResult::isFound)
+ .map(CassandraMessageDAOV2.MessageResult::message))
.thenCompose(stream -> attachmentLoader.addAttachmentToMessages(stream, fetchType));
}
@@ -222,7 +217,9 @@ public class CassandraMessageMapper implements MessageMapper {
return FluentFutureStream.ofOptionals(
uidChunk.stream().map(uid -> retrieveComposedId(mailboxId, uid)))
.performOnAll(this::deleteUsingMailboxId)
- .thenFlatCompose(idWithMetadata -> retrieveMessagesAndDoMigrationIfNeeded(ImmutableList.of(idWithMetadata), FetchType.Metadata, Limit.unlimited()))
+ .thenFlatCompose(idWithMetadata -> messageDAOV2.retrieveMessages(ImmutableList.of(idWithMetadata), FetchType.Metadata, Limit.unlimited()))
+ .filter(CassandraMessageDAOV2.MessageResult::isFound)
+ .map(CassandraMessageDAOV2.MessageResult::message)
.map(pair -> pair.getKey().toMailboxMessage(ImmutableList.of()))
.completableFuture();
}
@@ -233,14 +230,6 @@ public class CassandraMessageMapper implements MessageMapper {
() -> LOGGER.warn("Could not retrieve message {} {}", mailboxId, uid)));
}
- private CompletableFuture<Stream<Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>>>> retrieveMessagesAndDoMigrationIfNeeded(
- List<ComposedMessageIdWithMetaData> messageIds, FetchType fetchType, Limit limit) {
-
- return FluentFutureStream.of(messageDAOV2.retrieveMessages(messageIds, fetchType, limit))
- .thenComposeOnAll(v1ToV2Migration::getFromV2orElseFromV1AfterMigration)
- .completableFuture();
- }
-
@Override
public MessageMetaData move(Mailbox destinationMailbox, MailboxMessage original) throws MailboxException {
ComposedMessageIdWithMetaData composedMessageIdWithMetaData = original.getComposedMessageIdWithMetaData();
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java
deleted file mode 100644
index db87065..0000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/****************************************************************
- * 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.mail.migration;
-
-import java.util.List;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.stream.IntStream;
-import java.util.stream.Stream;
-
-import javax.annotation.PreDestroy;
-import javax.inject.Inject;
-
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.james.backends.cassandra.CassandraConfiguration;
-import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.cassandra.mail.AttachmentLoader;
-import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentMapper;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAOV2;
-import org.apache.james.mailbox.cassandra.mail.MessageAttachmentRepresentation;
-import org.apache.james.mailbox.cassandra.mail.MessageWithoutAttachment;
-import org.apache.james.mailbox.cassandra.mail.utils.Limit;
-import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.github.fge.lambdas.Throwing;
-import com.github.steveash.guavate.Guavate;
-import com.google.common.collect.ImmutableList;
-
-public class V1ToV2Migration implements Migration {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(V1ToV2MigrationThread.class);
-
- private final CassandraMessageDAO messageDAOV1;
- private final CassandraMessageDAOV2 messageDAOV2;
- private final AttachmentLoader attachmentLoader;
- private final CassandraConfiguration cassandraConfiguration;
- private final ExecutorService migrationExecutor;
- private final ArrayBlockingQueue<Pair<MessageWithoutAttachment, List<MessageAttachmentRepresentation>>> messagesToBeMigrated;
-
- @Inject
- public V1ToV2Migration(CassandraMessageDAO messageDAOV1, CassandraMessageDAOV2 messageDAOV2,
- CassandraAttachmentMapper attachmentMapper, CassandraConfiguration cassandraConfiguration) {
- this.messageDAOV1 = messageDAOV1;
- this.messageDAOV2 = messageDAOV2;
- this.attachmentLoader = new AttachmentLoader(attachmentMapper);
- this.cassandraConfiguration = cassandraConfiguration;
- this.migrationExecutor = Executors.newFixedThreadPool(cassandraConfiguration.getV1ToV2ThreadCount());
- boolean ensureFifoOrder = false;
- this.messagesToBeMigrated = new ArrayBlockingQueue<>(cassandraConfiguration.getV1ToV2QueueLength(), ensureFifoOrder);
- executeMigrationThread(messageDAOV1, messageDAOV2, cassandraConfiguration);
- }
-
- private void executeMigrationThread(CassandraMessageDAO messageDAOV1, CassandraMessageDAOV2 messageDAOV2, CassandraConfiguration cassandraConfiguration) {
- if (cassandraConfiguration.isOnTheFlyV1ToV2Migration()) {
- IntStream.range(0, cassandraConfiguration.getV1ToV2ThreadCount())
- .mapToObj(i -> new V1ToV2MigrationThread(messagesToBeMigrated, messageDAOV1, messageDAOV2, attachmentLoader))
- .forEach(migrationExecutor::execute);
- }
- }
-
- @PreDestroy
- public void stop() {
- migrationExecutor.shutdownNow();
- }
-
- public CompletableFuture<Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>>>
- getFromV2orElseFromV1AfterMigration(CassandraMessageDAOV2.MessageResult result) {
-
- if (result.isFound()) {
- return CompletableFuture.completedFuture(result.message());
- }
-
- return messageDAOV1.retrieveMessages(ImmutableList.of(result.getMetadata()), MessageMapper.FetchType.Full, Limit.unlimited())
- .thenApply(
- Throwing.function(results -> results.findAny()
- .orElseThrow(() -> new IllegalArgumentException("Message not found in DAO V1" + result.getMetadata()))))
- .thenApply(this::submitMigration);
- }
-
- private Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>> submitMigration(Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>> messageV1) {
- if (cassandraConfiguration.isOnTheFlyV1ToV2Migration()) {
- Pair<MessageWithoutAttachment, List<MessageAttachmentRepresentation>> messageV1WithAttachmentCopied =
- Pair.of(messageV1.getLeft(), messageV1.getRight().collect(Guavate.toImmutableList()));
- synchronized (messagesToBeMigrated) {
-
- if (!messagesToBeMigrated.offer(messageV1WithAttachmentCopied)) {
- LOGGER.info("Migration queue is full message {} is ignored", messageV1.getLeft().getMessageId());
- }
- }
- return Pair.of(messageV1.getLeft(), messageV1WithAttachmentCopied.getRight().stream());
- }
- return messageV1;
- }
-
- @Override
- public MigrationResult run() {
- boolean allResultFetched = false;
- MigrationResult result = MigrationResult.COMPLETED;
-
- while (!allResultFetched) {
- List<CassandraMessageDAO.RawMessage> batch = messageDAOV1.readBatch();
- allResultFetched = batch.isEmpty();
- result = Migration.combine(result, migrateBatch(batch));
- }
- return result;
- }
-
- private MigrationResult migrateBatch(List<CassandraMessageDAO.RawMessage> batch) {
- return batch
- .stream()
- .map(this::migrate)
- .reduce(MigrationResult.COMPLETED, Migration::combine);
- }
-
- private MigrationResult migrate(CassandraMessageDAO.RawMessage rawMessage) {
- try {
- CassandraMessageId messageId = (CassandraMessageId) rawMessage.getMessageId();
-
- messageDAOV2.save(rawMessage)
- .thenCompose(any -> messageDAOV1.delete(messageId))
- .join();
-
- LOGGER.debug("{} migrated", rawMessage.getMessageId());
-
- return MigrationResult.COMPLETED;
- } catch (Exception e) {
- LOGGER.warn("Error while migrating {}", rawMessage.getMessageId(), e);
-
- return MigrationResult.PARTIAL;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationThread.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationThread.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationThread.java
deleted file mode 100644
index c65a521..0000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationThread.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************
- * 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.mail.migration;
-
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.CompletableFuture;
-import java.util.stream.Stream;
-
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.cassandra.mail.AttachmentLoader;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAOV2;
-import org.apache.james.mailbox.cassandra.mail.MessageAttachmentRepresentation;
-import org.apache.james.mailbox.cassandra.mail.MessageWithoutAttachment;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class V1ToV2MigrationThread implements Runnable {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(V1ToV2MigrationThread.class);
-
- private final BlockingQueue<Pair<MessageWithoutAttachment, List<MessageAttachmentRepresentation>>> messagesToBeMigrated;
- private final CassandraMessageDAO messageDAOV1;
- private final CassandraMessageDAOV2 messageDAOV2;
- private final AttachmentLoader attachmentLoader;
-
- public V1ToV2MigrationThread(BlockingQueue<Pair<MessageWithoutAttachment, List<MessageAttachmentRepresentation>>> messagesToBeMigrated,
- CassandraMessageDAO messageDAOV1, CassandraMessageDAOV2 messageDAOV2, AttachmentLoader attachmentLoader) {
- this.messagesToBeMigrated = messagesToBeMigrated;
- this.messageDAOV1 = messageDAOV1;
- this.messageDAOV2 = messageDAOV2;
- this.attachmentLoader = attachmentLoader;
- }
-
- @Override
- public void run() {
- while (true) {
- try {
- Pair<MessageWithoutAttachment, List<MessageAttachmentRepresentation>> message = messagesToBeMigrated.take();
- performV1ToV2Migration(Pair.of(message.getLeft(), message.getRight().stream())).join();
- } catch (Exception e) {
- LOGGER.error("Error occured in migration thread", e);
- }
- }
- }
-
- private CompletableFuture<Void> performV1ToV2Migration(Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>> messageV1) {
- return attachmentLoader.addAttachmentToMessages(Stream.of(messageV1), MessageMapper.FetchType.Full)
- .thenApply(stream -> stream.findAny().get())
- .thenCompose(this::performV1ToV2Migration);
- }
-
- private CompletableFuture<Void> performV1ToV2Migration(SimpleMailboxMessage message) {
- return saveInV2FromV1(message)
- .thenCompose(this::deleteInV1);
- }
-
- private CompletableFuture<Void> deleteInV1(Optional<SimpleMailboxMessage> optional) {
- return optional.map(SimpleMailboxMessage::getMessageId)
- .map(messageId -> (CassandraMessageId) messageId)
- .map(messageDAOV1::delete)
- .orElse(CompletableFuture.completedFuture(null));
- }
-
- private CompletableFuture<Optional<SimpleMailboxMessage>> saveInV2FromV1(SimpleMailboxMessage message) {
- try {
- return messageDAOV2.save(message).thenApply(any -> Optional.of(message));
- } catch (MailboxException e) {
- LOGGER.error("Exception while saving message during migration", e);
- return CompletableFuture.completedFuture(Optional.<SimpleMailboxMessage>empty());
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
index 9284d9e..428a45a 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
@@ -20,7 +20,6 @@
package org.apache.james.mailbox.cassandra.modules;
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.set;
@@ -35,7 +34,6 @@ import org.apache.james.backends.cassandra.components.CassandraTable;
import org.apache.james.backends.cassandra.components.CassandraType;
import org.apache.james.mailbox.cassandra.table.CassandraMessageIdTable;
import org.apache.james.mailbox.cassandra.table.CassandraMessageIds;
-import org.apache.james.mailbox.cassandra.table.CassandraMessageV1Table;
import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table;
import org.apache.james.mailbox.cassandra.table.Flag;
import org.apache.james.mailbox.cassandra.table.MessageIdToImapUid;
@@ -92,21 +90,6 @@ public class CassandraMessageModule implements CassandraModule {
.compactionOptions(SchemaBuilder.leveledStrategy())
.caching(SchemaBuilder.KeyCaching.ALL,
SchemaBuilder.rows(CACHED_MESSAGE_ID_ROWS))),
- new CassandraTable(CassandraMessageV1Table.TABLE_NAME,
- SchemaBuilder.createTable(CassandraMessageV1Table.TABLE_NAME)
- .ifNotExists()
- .addPartitionKey(CassandraMessageIds.MESSAGE_ID, timeuuid())
- .addColumn(CassandraMessageV1Table.INTERNAL_DATE, timestamp())
- .addColumn(CassandraMessageV1Table.BODY_START_OCTET, cint())
- .addColumn(CassandraMessageV1Table.BODY_OCTECTS, bigint())
- .addColumn(CassandraMessageV1Table.TEXTUAL_LINE_COUNT, bigint())
- .addColumn(CassandraMessageV1Table.FULL_CONTENT_OCTETS, bigint())
- .addColumn(CassandraMessageV1Table.BODY_CONTENT, blob())
- .addColumn(CassandraMessageV1Table.HEADER_CONTENT, blob())
- .addUDTListColumn(CassandraMessageV1Table.ATTACHMENTS, SchemaBuilder.frozen(CassandraMessageV1Table.ATTACHMENTS))
- .addUDTListColumn(CassandraMessageV1Table.PROPERTIES, SchemaBuilder.frozen(CassandraMessageV1Table.PROPERTIES))
- .withOptions()
- .comment("Deprecated table. Was used to store messages. See `messagev2` instead.")),
new CassandraTable(CassandraMessageV2Table.TABLE_NAME,
SchemaBuilder.createTable(CassandraMessageV2Table.TABLE_NAME)
.ifNotExists()
@@ -124,19 +107,19 @@ public class CassandraMessageModule implements CassandraModule {
.comment("Holds message metadata, independently of any mailboxes. Content of messages is stored " +
"in `blobs` and `blobparts` tables.")));
types = ImmutableList.of(
- new CassandraType(CassandraMessageV1Table.PROPERTIES,
- SchemaBuilder.createType(CassandraMessageV1Table.PROPERTIES)
+ new CassandraType(CassandraMessageV2Table.PROPERTIES,
+ SchemaBuilder.createType(CassandraMessageV2Table.PROPERTIES)
.ifNotExists()
- .addColumn(CassandraMessageV1Table.Properties.NAMESPACE, text())
- .addColumn(CassandraMessageV1Table.Properties.NAME, text())
- .addColumn(CassandraMessageV1Table.Properties.VALUE, text())),
- new CassandraType(CassandraMessageV1Table.ATTACHMENTS,
- SchemaBuilder.createType(CassandraMessageV1Table.ATTACHMENTS)
+ .addColumn(CassandraMessageV2Table.Properties.NAMESPACE, text())
+ .addColumn(CassandraMessageV2Table.Properties.NAME, text())
+ .addColumn(CassandraMessageV2Table.Properties.VALUE, text())),
+ new CassandraType(CassandraMessageV2Table.ATTACHMENTS,
+ SchemaBuilder.createType(CassandraMessageV2Table.ATTACHMENTS)
.ifNotExists()
- .addColumn(CassandraMessageV1Table.Attachments.ID, text())
- .addColumn(CassandraMessageV1Table.Attachments.NAME, text())
- .addColumn(CassandraMessageV1Table.Attachments.CID, text())
- .addColumn(CassandraMessageV1Table.Attachments.IS_INLINE, cboolean())));
+ .addColumn(CassandraMessageV2Table.Attachments.ID, text())
+ .addColumn(CassandraMessageV2Table.Attachments.NAME, text())
+ .addColumn(CassandraMessageV2Table.Attachments.CID, text())
+ .addColumn(CassandraMessageV2Table.Attachments.IS_INLINE, cboolean())));
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV1Table.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV1Table.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV1Table.java
deleted file mode 100644
index d932807..0000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV1Table.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************
- * 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.table;
-
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID;
-
-public interface CassandraMessageV1Table {
-
- String TABLE_NAME = "message";
- String INTERNAL_DATE = "internalDate";
- String BODY_START_OCTET = "bodyStartOctet";
- String FULL_CONTENT_OCTETS = "fullContentOctets";
- String BODY_OCTECTS = "bodyOctets";
- String TEXTUAL_LINE_COUNT = "textualLineCount";
- String BODY_CONTENT = "bodyContent";
- String HEADER_CONTENT = "headerContent";
- String PROPERTIES = "properties";
- String ATTACHMENTS = "attachments";
-
- String[] FIELDS = { MESSAGE_ID, INTERNAL_DATE, BODY_START_OCTET, FULL_CONTENT_OCTETS, BODY_OCTECTS, BODY_CONTENT, HEADER_CONTENT, TEXTUAL_LINE_COUNT, PROPERTIES, ATTACHMENTS };
- String[] METADATA = { MESSAGE_ID, INTERNAL_DATE, BODY_START_OCTET, FULL_CONTENT_OCTETS, BODY_OCTECTS, TEXTUAL_LINE_COUNT, PROPERTIES };
- String[] HEADERS = { MESSAGE_ID, INTERNAL_DATE, BODY_START_OCTET, FULL_CONTENT_OCTETS, BODY_OCTECTS, HEADER_CONTENT, TEXTUAL_LINE_COUNT, PROPERTIES };
- String[] BODY = { MESSAGE_ID, INTERNAL_DATE, BODY_START_OCTET, FULL_CONTENT_OCTETS, BODY_OCTECTS, BODY_CONTENT, TEXTUAL_LINE_COUNT, PROPERTIES, ATTACHMENTS };
-
- interface Properties {
- String NAMESPACE = "namespace";
- String NAME = "name";
- String VALUE = "value";
- }
-
- interface Attachments {
- String ID = "id";
- String NAME = "name";
- String CID = "cid";
- String IS_INLINE = "isInline";
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
index 8640cf9..3fcbe7f 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
@@ -33,7 +33,6 @@ import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxRecentsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAOV2;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
@@ -59,7 +58,6 @@ public class CassandraMailboxManagerProvider {
CassandraMessageIdDAO messageIdDAO = new CassandraMessageIdDAO(session, messageIdFactory);
CassandraMessageIdToImapUidDAO imapUidDAO = new CassandraMessageIdToImapUidDAO(session, messageIdFactory);
CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(session);
- CassandraMessageDAO messageDAO = new CassandraMessageDAO(session, cassandraTypesProvider);
CassandraMessageDAOV2 messageDAOV2 = new CassandraMessageDAOV2(session, cassandraTypesProvider, blobsDAO);
CassandraMailboxCounterDAO mailboxCounterDAO = new CassandraMailboxCounterDAO(session);
CassandraMailboxRecentsDAO mailboxRecentsDAO = new CassandraMailboxRecentsDAO(session);
@@ -72,7 +70,6 @@ public class CassandraMailboxManagerProvider {
CassandraMailboxSessionMapperFactory mapperFactory = new CassandraMailboxSessionMapperFactory(uidProvider,
modSeqProvider,
session,
- messageDAO,
messageDAOV2,
messageIdDAO,
imapUidDAO,
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
index c2c89bf..c945204 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
@@ -23,14 +23,13 @@ import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
import org.apache.james.mailbox.AbstractSubscriptionManagerTest;
import org.apache.james.mailbox.SubscriptionManager;
+import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxRecentsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAOV2;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
@@ -68,7 +67,6 @@ public class CassandraSubscriptionManagerTest extends AbstractSubscriptionManage
@Override
public SubscriptionManager createSubscriptionManager() {
CassandraMessageIdToImapUidDAO imapUidDAO = null;
- CassandraMessageDAO messageDAO = null;
CassandraMessageDAOV2 messageDAOV2 = null;
CassandraMessageIdDAO messageIdDAO = null;
CassandraMailboxCounterDAO mailboxCounterDAO = null;
@@ -83,7 +81,6 @@ public class CassandraSubscriptionManagerTest extends AbstractSubscriptionManage
new CassandraUidProvider(cassandra.getConf()),
new CassandraModSeqProvider(cassandra.getConf()),
cassandra.getConf(),
- messageDAO,
messageDAOV2,
messageIdDAO,
imapUidDAO,
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index 8e1a5bd..24895ed 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -24,15 +24,14 @@ import static org.mockito.Mockito.mock;
import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
+import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxRecentsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAOV2;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdDAO;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
@@ -93,7 +92,6 @@ public class CassandraTestSystemFixture {
CassandraMessageIdDAO messageIdDAO = new CassandraMessageIdDAO(cassandra.getConf(), messageIdFactory);
CassandraMessageIdToImapUidDAO imapUidDAO = new CassandraMessageIdToImapUidDAO(cassandra.getConf(), messageIdFactory);
CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(cassandra.getConf());
- CassandraMessageDAO messageDAO = new CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider());
CassandraMessageDAOV2 messageDAOV2 = new CassandraMessageDAOV2(cassandra.getConf(), cassandra.getTypesProvider(), blobsDAO);
CassandraMailboxCounterDAO mailboxCounterDAO = new CassandraMailboxCounterDAO(cassandra.getConf());
CassandraMailboxRecentsDAO mailboxRecentsDAO = new CassandraMailboxRecentsDAO(cassandra.getConf());
@@ -106,7 +104,6 @@ public class CassandraTestSystemFixture {
return new CassandraMailboxSessionMapperFactory(uidProvider,
modSeqProvider,
cassandra.getConf(),
- messageDAO,
messageDAOV2,
messageIdDAO,
imapUidDAO,
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index a14ab52..9bfe467 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -89,14 +89,12 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
CassandraDeletedMessageDAO deletedMessageDAO = new CassandraDeletedMessageDAO(cassandra.getConf());
CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(cassandra.getConf());
- CassandraMessageDAO messageDAO = new CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider());
CassandraMessageDAOV2 messageDAOV2 = new CassandraMessageDAOV2(cassandra.getConf(), cassandra.getTypesProvider(), blobsDAO);
mailboxSessionMapperFactory = new CassandraMailboxSessionMapperFactory(
new CassandraUidProvider(cassandra.getConf()),
new CassandraModSeqProvider(cassandra.getConf()),
cassandra.getConf(),
- messageDAO,
- messageDAOV2,
+ messageDAOV2,
new CassandraMessageIdDAO(cassandra.getConf(), messageIdFactory),
new CassandraMessageIdToImapUidDAO(cassandra.getConf(), messageIdFactory),
new CassandraMailboxCounterDAO(cassandra.getConf()),
http://git-wip-us.apache.org/repos/asf/james-project/blob/4e0f1310/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
index b600bab..1d1f9c9 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
@@ -24,8 +24,8 @@ import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.cassandra.ids.CassandraId;
import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory;
+import org.apache.james.mailbox.cassandra.ids.CassandraId;
import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
import org.apache.james.mailbox.cassandra.ids.CassandraMessageId.Factory;
import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
@@ -112,13 +112,11 @@ public class CassandraMapperProvider implements MapperProvider {
CassandraFirstUnseenDAO firstUnseenDAO = new CassandraFirstUnseenDAO(cassandra.getConf());
CassandraDeletedMessageDAO deletedMessageDAO = new CassandraDeletedMessageDAO(cassandra.getConf());
CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(cassandra.getConf());
- CassandraMessageDAO messageDAO = new CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider());
CassandraMessageDAOV2 messageDAOV2 = new CassandraMessageDAOV2(cassandra.getConf(), cassandra.getTypesProvider(), blobsDAO);
return new CassandraMailboxSessionMapperFactory(
new CassandraUidProvider(cassandra.getConf()),
cassandraModSeqProvider,
cassandra.getConf(),
- messageDAO,
messageDAOV2,
new CassandraMessageIdDAO(cassandra.getConf(), MESSAGE_ID_FACTORY),
new CassandraMessageIdToImapUidDAO(cassandra.getConf(), MESSAGE_ID_FACTORY),
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org