This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit d02792264dc55dceb0643b5922c61b74092e9682 Author: Benoit Tellier <[email protected]> AuthorDate: Mon Apr 13 14:18:02 2020 +0700 [REFACTORING] Remove unused CassandraAttachmentDAO Also remove associated table. Since schema version 5 is required, this DAO is no longer required. --- .../cassandra/mail/CassandraAttachmentDAO.java | 138 --------------------- .../modules/CassandraAttachmentModule.java | 13 +- .../cassandra/table/CassandraAttachmentTable.java | 31 ----- 3 files changed, 3 insertions(+), 179 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java deleted file mode 100644 index f954ed7..0000000 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java +++ /dev/null @@ -1,138 +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.delete; -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.CassandraAttachmentTable.FIELDS; -import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.ID; -import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.PAYLOAD; -import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.SIZE; -import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.TABLE_NAME; -import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.TYPE; - -import java.io.IOException; -import java.nio.ByteBuffer; - -import javax.inject.Inject; - -import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; -import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; -import org.apache.james.mailbox.model.Attachment; -import org.apache.james.mailbox.model.AttachmentId; - -import com.datastax.driver.core.PreparedStatement; -import com.datastax.driver.core.Row; -import com.datastax.driver.core.Session; -import com.google.common.base.Preconditions; - -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -public class CassandraAttachmentDAO { - - private final CassandraAsyncExecutor cassandraAsyncExecutor; - private CassandraConfiguration configuration; - private final PreparedStatement insertStatement; - private final PreparedStatement deleteStatement; - private final PreparedStatement selectStatement; - private final PreparedStatement selectAllStatement; - - @Inject - public CassandraAttachmentDAO(Session session, CassandraConfiguration configuration) { - this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); - - this.selectStatement = prepareSelect(session); - this.selectAllStatement = prepareSelectAll(session); - this.deleteStatement = prepareDelete(session); - this.insertStatement = prepareInsert(session); - this.configuration = configuration; - } - - private PreparedStatement prepareDelete(Session session) { - return session.prepare( - delete() - .from(TABLE_NAME) - .where(eq(ID, bindMarker(ID)))); - } - - private PreparedStatement prepareInsert(Session session) { - return session.prepare( - insertInto(TABLE_NAME) - .value(ID, bindMarker(ID)) - .value(PAYLOAD, bindMarker(PAYLOAD)) - .value(TYPE, bindMarker(TYPE)) - .value(SIZE, bindMarker(SIZE))); - } - - private PreparedStatement prepareSelect(Session session) { - return session.prepare(select(FIELDS) - .from(TABLE_NAME) - .where(eq(ID, bindMarker(ID)))); - } - - private PreparedStatement prepareSelectAll(Session session) { - return session.prepare(select(FIELDS) - .from(TABLE_NAME)); - } - - public Mono<Attachment> getAttachment(AttachmentId attachmentId) { - Preconditions.checkArgument(attachmentId != null); - return cassandraAsyncExecutor.executeSingleRow( - selectStatement.bind() - .setString(ID, attachmentId.getId())) - .map(this::attachment); - } - - public Flux<Attachment> retrieveAll() { - return cassandraAsyncExecutor.executeRows( - selectAllStatement.bind() - .setReadTimeoutMillis(configuration.getAttachmentV2MigrationReadTimeout()) - .setFetchSize(1)) - .map(this::attachment); - } - - public Mono<Void> storeAttachment(Attachment attachment) throws IOException { - return cassandraAsyncExecutor.executeVoid( - insertStatement.bind() - .setString(ID, attachment.getAttachmentId().getId()) - .setLong(SIZE, attachment.getSize()) - .setString(TYPE, attachment.getType()) - .setBytes(PAYLOAD, ByteBuffer.wrap(attachment.getBytes()))); - } - - public Mono<Void> deleteAttachment(AttachmentId attachmentId) { - return cassandraAsyncExecutor.executeVoid( - deleteStatement - .bind() - .setString(ID, attachmentId.getId())); - } - - private Attachment attachment(Row row) { - return Attachment.builder() - .attachmentId(AttachmentId.from(row.getString(ID))) - .bytes(row.getBytes(PAYLOAD).array()) - .type(row.getString(TYPE)) - .build(); - } -} diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java index 1db8dfc..0442b37 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.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.text; import static com.datastax.driver.core.DataType.uuid; @@ -28,21 +27,13 @@ import org.apache.james.backends.cassandra.components.CassandraModule; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraAttachmentMessageIdTable; import org.apache.james.mailbox.cassandra.table.CassandraAttachmentOwnerTable; -import org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable; import org.apache.james.mailbox.cassandra.table.CassandraAttachmentV2Table; import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraAttachmentModule { - CassandraModule MODULE = CassandraModule.table(CassandraAttachmentTable.TABLE_NAME) - .comment("Holds attachment for fast attachment retrieval") - .statement(statement -> statement - .addPartitionKey(CassandraAttachmentTable.ID, text()) - .addColumn(CassandraAttachmentTable.PAYLOAD, blob()) - .addColumn(CassandraAttachmentTable.TYPE, text()) - .addColumn(CassandraAttachmentTable.SIZE, bigint())) - .table(CassandraAttachmentV2Table.TABLE_NAME) + CassandraModule MODULE = CassandraModule.table(CassandraAttachmentV2Table.TABLE_NAME) .comment("Holds attachment for fast attachment retrieval. Content of messages is stored" + "in `blobs` and `blobparts` tables.") .options(options -> options @@ -55,6 +46,7 @@ public interface CassandraAttachmentModule { .addColumn(CassandraAttachmentV2Table.BLOB_ID, text()) .addColumn(CassandraAttachmentV2Table.TYPE, text()) .addColumn(CassandraAttachmentV2Table.SIZE, bigint())) + .table(CassandraAttachmentMessageIdTable.TABLE_NAME) .comment("Holds ids of messages owning the attachment") .options(options -> options @@ -65,6 +57,7 @@ public interface CassandraAttachmentModule { .addPartitionKey(CassandraAttachmentMessageIdTable.ATTACHMENT_ID_AS_UUID, uuid()) .addColumn(CassandraAttachmentMessageIdTable.ATTACHMENT_ID, text()) .addClusteringColumn(CassandraAttachmentMessageIdTable.MESSAGE_ID, text())) + .table(CassandraAttachmentOwnerTable.TABLE_NAME) .comment("Holds explicit owners of some attachments") .options(options -> options diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentTable.java deleted file mode 100644 index a7115eb..0000000 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentTable.java +++ /dev/null @@ -1,31 +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; - -public interface CassandraAttachmentTable { - - String TABLE_NAME = "attachment"; - String ID = "id"; - String PAYLOAD = "payload"; - String TYPE = "type"; - String SIZE = "size"; - String[] FIELDS = { ID, PAYLOAD, TYPE, SIZE }; - -} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
