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 2020/04/17 15:30:48 UTC
[james-project] 14/16: [REFACTORING] Remove unused
CassandraAttachmentDAO
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 <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org