MAILBOX-342 Use CassandraModule.Builder for Cassandra mailbox
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/45318db5 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/45318db5 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/45318db5 Branch: refs/heads/master Commit: 45318db56b2f726eebbb6c3cf34c152811667741 Parents: c675522 Author: benwa <[email protected]> Authored: Tue Jul 24 15:10:14 2018 +0700 Committer: benwa <[email protected]> Committed: Thu Jul 26 13:47:39 2018 +0700 ---------------------------------------------------------------------- .../cassandra/modules/CassandraAclModule.java | 70 +++----- .../modules/CassandraAnnotationModule.java | 48 ++---- .../modules/CassandraApplicableFlagsModule.java | 48 ++---- .../modules/CassandraAttachmentModule.java | 113 +++++-------- .../modules/CassandraDeletedMessageModule.java | 46 ++--- .../modules/CassandraFirstUnseenModule.java | 47 ++---- .../modules/CassandraMailboxCounterModule.java | 48 ++---- .../modules/CassandraMailboxModule.java | 105 +++++------- .../modules/CassandraMailboxRecentsModule.java | 48 ++---- .../modules/CassandraMessageModule.java | 167 ++++++++----------- .../modules/CassandraModSeqModule.java | 46 ++--- .../cassandra/modules/CassandraQuotaModule.java | 105 +++++------- .../modules/CassandraRegistrationModule.java | 53 ++---- .../modules/CassandraSubscriptionModule.java | 44 ++--- .../cassandra/modules/CassandraUidModule.java | 46 ++--- .../CassandraCombinationManagerTest.java | 33 +--- .../CassandraMailboxManagerStressTest.java | 35 +--- .../cassandra/CassandraMailboxManagerTest.java | 35 +--- .../CassandraMessageIdManagerQuotaTest.java | 35 +--- ...CassandraMessageIdManagerSideEffectTest.java | 31 +--- .../CassandraMessageIdManagerStorageTest.java | 31 +--- .../CassandraSubscriptionManagerTest.java | 7 +- ...istributedMailboxDelegatingListenerTest.java | 2 +- ...CassandraMailboxPathRegistrerMapperTest.java | 4 +- .../cassandra/mail/CassandraACLMapperTest.java | 2 +- .../mail/CassandraAnnotationMapperTest.java | 2 +- .../mail/CassandraApplicableFlagDAOTest.java | 2 +- .../mail/CassandraAttachmentDAOTest.java | 2 +- .../mail/CassandraAttachmentDAOV2Test.java | 2 +- .../mail/CassandraAttachmentFallbackTest.java | 8 +- .../mail/CassandraAttachmentMapperTest.java | 8 +- .../mail/CassandraAttachmentOwnerDAOTest.java | 2 +- .../mail/CassandraDeletedMessageDAOTest.java | 2 +- .../mail/CassandraFirstUnseenDAOTest.java | 2 +- .../mail/CassandraGenericMailboxMapperTest.java | 12 +- .../mail/CassandraIndexTableHandlerTest.java | 14 +- .../mail/CassandraMailboxCounterDAOTest.java | 2 +- .../cassandra/mail/CassandraMailboxDAOTest.java | 4 +- .../CassandraMailboxManagerAttachmentTest.java | 29 +--- .../mail/CassandraMailboxMapperAclTest.java | 8 +- .../CassandraMailboxMapperConcurrencyTest.java | 4 +- .../mail/CassandraMailboxMapperTest.java | 4 +- .../mail/CassandraMailboxPathDAOTest.java | 2 +- .../mail/CassandraMailboxPathV2DAOTest.java | 1 - .../mail/CassandraMailboxRecentDAOTest.java | 2 +- .../cassandra/mail/CassandraMessageDAOTest.java | 4 +- .../mail/CassandraMessageIdDAOTest.java | 2 +- .../mail/CassandraMessageIdMapperTest.java | 30 +--- .../CassandraMessageIdToImapUidDAOTest.java | 2 +- .../mail/CassandraMessageMapperTest.java | 30 +--- .../mail/CassandraMessageMoveTest.java | 30 +--- ...assandraMessageWithAttachmentMapperTest.java | 30 +--- .../mail/CassandraModSeqProviderTest.java | 2 +- .../mail/CassandraUidProviderTest.java | 2 +- .../mail/CassandraUserMailboxRightsDAOTest.java | 10 +- .../cassandra/mail/MailboxAggregateModule.java | 55 ++++++ .../AttachmentMessageIdCreationTest.java | 10 +- .../migration/AttachmentV2MigrationTest.java | 8 +- .../migration/MailboxPathV2MigrationTest.java | 8 +- .../quota/CassandraCurrentQuotaManagerTest.java | 2 +- .../CassandraPerUserMaxQuotaManagerTest.java | 2 +- .../user/CassandraSubscriptionMapperTest.java | 2 +- .../cassandra/host/CassandraHostSystem.java | 32 +--- .../modules/mailbox/CassandraMailboxModule.java | 38 +++-- .../modules/mailbox/CassandraQuotaModule.java | 2 +- 65 files changed, 532 insertions(+), 1130 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java index a26fb18..c6da2a5 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java @@ -23,56 +23,36 @@ import static com.datastax.driver.core.DataType.bigint; import static com.datastax.driver.core.DataType.text; import static com.datastax.driver.core.DataType.timeuuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraACLTable; import org.apache.james.mailbox.cassandra.table.CassandraUserMailboxRightsTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraAclModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraAclModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraACLTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraACLTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraACLTable.ID, timeuuid()) - .addColumn(CassandraACLTable.ACL, text()) - .addColumn(CassandraACLTable.VERSION, bigint()) - .withOptions() - .comment("Holds mailbox ACLs") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))), - new CassandraTable(CassandraUserMailboxRightsTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraUserMailboxRightsTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraUserMailboxRightsTable.USER_NAME, text()) - .addClusteringColumn(CassandraUserMailboxRightsTable.MAILBOX_ID, timeuuid()) - .addColumn(CassandraUserMailboxRightsTable.RIGHTS, text()) - .withOptions() - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) - .comment("Denormalisation table. Allow to retrieve non personal mailboxIds a user has right on"))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraAclModule { + CassandraModule MODULE = CassandraModule + .builder() + .table(CassandraACLTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraACLTable.ID, timeuuid()) + .addColumn(CassandraACLTable.ACL, text()) + .addColumn(CassandraACLTable.VERSION, bigint()) + .withOptions() + .comment("Holds mailbox ACLs") + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .table(CassandraUserMailboxRightsTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraUserMailboxRightsTable.USER_NAME, text()) + .addClusteringColumn(CassandraUserMailboxRightsTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraUserMailboxRightsTable.RIGHTS, text()) + .withOptions() + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) + .comment("Denormalisation table. Allow to retrieve non personal mailboxIds a user has right on")) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java index 98af388..032ac3a 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java @@ -22,45 +22,23 @@ package org.apache.james.mailbox.cassandra.modules; import static com.datastax.driver.core.DataType.text; import static com.datastax.driver.core.DataType.timeuuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraAnnotationTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraAnnotationModule implements CassandraModule { - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraAnnotationModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraAnnotationTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraAnnotationTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraAnnotationTable.MAILBOX_ID, timeuuid()) - .addClusteringColumn(CassandraAnnotationTable.KEY, text()) - .addColumn(CassandraAnnotationTable.VALUE, text()) - .withOptions() - .comment("Holds Cassandra mailbox annotations") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraAnnotationModule { + CassandraModule MODULE = CassandraModule.table(CassandraAnnotationTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraAnnotationTable.MAILBOX_ID, timeuuid()) + .addClusteringColumn(CassandraAnnotationTable.KEY, text()) + .addColumn(CassandraAnnotationTable.VALUE, text()) + .withOptions() + .comment("Holds Cassandra mailbox annotations") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java index 46dea02..11e5538 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java @@ -23,46 +23,24 @@ import static com.datastax.driver.core.DataType.set; import static com.datastax.driver.core.DataType.text; import static com.datastax.driver.core.DataType.timeuuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraApplicableFlagTable; import org.apache.james.mailbox.cassandra.table.Flag; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraApplicableFlagsModule implements CassandraModule { - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraApplicableFlagsModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraApplicableFlagTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraApplicableFlagTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraApplicableFlagTable.MAILBOX_ID, timeuuid()) - .addColumn(Flag.USER_FLAGS, set(text())) - .withOptions() - .comment("Holds flags being used on specific mailboxes. As system flags are implicit, this table " + - "stores user flags.") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraApplicableFlagsModule { + CassandraModule MODULE = CassandraModule.table(CassandraApplicableFlagTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraApplicableFlagTable.MAILBOX_ID, timeuuid()) + .addColumn(Flag.USER_FLAGS, set(text())) + .withOptions() + .comment("Holds flags being used on specific mailboxes. As system flags are implicit, this table " + + "stores user flags.") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java ---------------------------------------------------------------------- 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 ffaa49a..acee1f1 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 @@ -24,11 +24,7 @@ import static com.datastax.driver.core.DataType.blob; import static com.datastax.driver.core.DataType.text; import static com.datastax.driver.core.DataType.uuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraAttachmentMessageIdTable; import org.apache.james.mailbox.cassandra.table.CassandraAttachmentOwnerTable; @@ -36,69 +32,52 @@ import org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable; import org.apache.james.mailbox.cassandra.table.CassandraAttachmentV2Table; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraAttachmentModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraAttachmentModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraAttachmentTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraAttachmentTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraAttachmentTable.ID, text()) - .addColumn(CassandraAttachmentTable.PAYLOAD, blob()) - .addColumn(CassandraAttachmentTable.TYPE, text()) - .addColumn(CassandraAttachmentTable.SIZE, bigint()) - .withOptions() - .comment("Holds attachment for fast attachment retrieval")), - new CassandraTable(CassandraAttachmentV2Table.TABLE_NAME, - SchemaBuilder.createTable(CassandraAttachmentV2Table.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraAttachmentV2Table.ID_AS_UUID, uuid()) - .addColumn(CassandraAttachmentV2Table.ID, text()) - .addColumn(CassandraAttachmentV2Table.BLOB_ID, text()) - .addColumn(CassandraAttachmentV2Table.TYPE, text()) - .addColumn(CassandraAttachmentV2Table.SIZE, bigint()) - .withOptions() - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) - .comment("Holds attachment for fast attachment retrieval. Content of messages is stored" + - "in `blobs` and `blobparts` tables.")), - new CassandraTable(CassandraAttachmentMessageIdTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraAttachmentMessageIdTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraAttachmentMessageIdTable.ATTACHMENT_ID_AS_UUID, uuid()) - .addColumn(CassandraAttachmentMessageIdTable.ATTACHMENT_ID, text()) - .addClusteringColumn(CassandraAttachmentMessageIdTable.MESSAGE_ID, text()) - .withOptions() - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) - .comment("Holds ids of messages owning the attachment")), - new CassandraTable(CassandraAttachmentOwnerTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraAttachmentOwnerTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraAttachmentOwnerTable.ID, uuid()) - .addClusteringColumn(CassandraAttachmentOwnerTable.OWNER, text()) - .withOptions() - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) - .comment("Holds explicit owners of some attachments"))); - types = ImmutableList.of(); - } - @Override - public List<CassandraTable> moduleTables() { - return tables; - } +public interface CassandraAttachmentModule { - @Override - public List<CassandraType> moduleTypes() { - return types; - } + CassandraModule MODULE = CassandraModule.table(CassandraAttachmentTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraAttachmentTable.ID, text()) + .addColumn(CassandraAttachmentTable.PAYLOAD, blob()) + .addColumn(CassandraAttachmentTable.TYPE, text()) + .addColumn(CassandraAttachmentTable.SIZE, bigint()) + .withOptions() + .comment("Holds attachment for fast attachment retrieval")) + .table(CassandraAttachmentV2Table.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraAttachmentV2Table.ID_AS_UUID, uuid()) + .addColumn(CassandraAttachmentV2Table.ID, text()) + .addColumn(CassandraAttachmentV2Table.BLOB_ID, text()) + .addColumn(CassandraAttachmentV2Table.TYPE, text()) + .addColumn(CassandraAttachmentV2Table.SIZE, bigint()) + .withOptions() + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) + .comment("Holds attachment for fast attachment retrieval. Content of messages is stored" + + "in `blobs` and `blobparts` tables.")) + .table(CassandraAttachmentMessageIdTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraAttachmentMessageIdTable.ATTACHMENT_ID_AS_UUID, uuid()) + .addColumn(CassandraAttachmentMessageIdTable.ATTACHMENT_ID, text()) + .addClusteringColumn(CassandraAttachmentMessageIdTable.MESSAGE_ID, text()) + .withOptions() + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) + .comment("Holds ids of messages owning the attachment")) + .table(CassandraAttachmentOwnerTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraAttachmentOwnerTable.ID, uuid()) + .addClusteringColumn(CassandraAttachmentOwnerTable.OWNER, text()) + .withOptions() + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) + .comment("Holds explicit owners of some attachments")) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java index 46e99fb..b2689d9 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java @@ -23,44 +23,22 @@ import static org.apache.james.mailbox.cassandra.table.CassandraDeletedMessageTa import static org.apache.james.mailbox.cassandra.table.CassandraDeletedMessageTable.TABLE_NAME; import static org.apache.james.mailbox.cassandra.table.CassandraDeletedMessageTable.UID; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import com.datastax.driver.core.DataType; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraDeletedMessageModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraDeletedMessageModule() { - tables = ImmutableList.of(new CassandraTable(TABLE_NAME, - SchemaBuilder.createTable(TABLE_NAME) - .ifNotExists() - .addPartitionKey(MAILBOX_ID, DataType.timeuuid()) - .addClusteringColumn(UID, DataType.bigint()) - .withOptions() - .comment("Denormalisation table. Allows to retrieve UID marked as DELETED in specific mailboxes.") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraDeletedMessageModule { + CassandraModule MODULE = CassandraModule.table(TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(MAILBOX_ID, DataType.timeuuid()) + .addClusteringColumn(UID, DataType.bigint()) + .withOptions() + .comment("Denormalisation table. Allows to retrieve UID marked as DELETED in specific mailboxes.") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java index 1af9c0f..aec22b2 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java @@ -19,45 +19,24 @@ package org.apache.james.mailbox.cassandra.modules; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraFirstUnseenTable; import com.datastax.driver.core.DataType; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraFirstUnseenModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraFirstUnseenModule() { - tables = ImmutableList.of(new CassandraTable(CassandraFirstUnseenTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraFirstUnseenTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraFirstUnseenTable.MAILBOX_ID, DataType.timeuuid()) - .addClusteringColumn(CassandraFirstUnseenTable.UID, DataType.bigint()) - .withOptions() - .comment("Denormalisation table. Allow to quickly retrieve the first UNSEEN UID of a specific mailbox.") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) - .clusteringOrder(CassandraFirstUnseenTable.UID, SchemaBuilder.Direction.ASC))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraFirstUnseenModule { + CassandraModule MODULE = CassandraModule.table(CassandraFirstUnseenTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraFirstUnseenTable.MAILBOX_ID, DataType.timeuuid()) + .addClusteringColumn(CassandraFirstUnseenTable.UID, DataType.bigint()) + .withOptions() + .comment("Denormalisation table. Allow to quickly retrieve the first UNSEEN UID of a specific mailbox.") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) + .clusteringOrder(CassandraFirstUnseenTable.UID, SchemaBuilder.Direction.ASC)) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java index 5a402f3..fdeb187 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java @@ -22,45 +22,23 @@ package org.apache.james.mailbox.cassandra.modules; import static com.datastax.driver.core.DataType.counter; import static com.datastax.driver.core.DataType.timeuuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraMailboxCountersTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraMailboxCounterModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraMailboxCounterModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraMailboxCountersTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraMailboxCountersTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMailboxCountersTable.MAILBOX_ID, timeuuid()) - .addColumn(CassandraMailboxCountersTable.COUNT, counter()) - .addColumn(CassandraMailboxCountersTable.UNSEEN, counter()) - .withOptions() - .comment("Holds messages count and unseen message count for each mailbox.") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraMailboxCounterModule { + CassandraModule MODULE = CassandraModule.table(CassandraMailboxCountersTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMailboxCountersTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraMailboxCountersTable.COUNT, counter()) + .addColumn(CassandraMailboxCountersTable.UNSEEN, counter()) + .withOptions() + .comment("Holds messages count and unseen message count for each mailbox.") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java index 85fd62d..c9e79dd 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java @@ -23,75 +23,54 @@ import static com.datastax.driver.core.DataType.bigint; import static com.datastax.driver.core.DataType.text; import static com.datastax.driver.core.DataType.timeuuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraMailboxPathTable; import org.apache.james.mailbox.cassandra.table.CassandraMailboxPathV2Table; import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraMailboxModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraMailboxModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraMailboxTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraMailboxTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMailboxTable.ID, timeuuid()) - .addUDTColumn(CassandraMailboxTable.MAILBOX_BASE, SchemaBuilder.frozen(CassandraMailboxTable.MAILBOX_BASE)) - .addColumn(CassandraMailboxTable.NAME, text()) - .addColumn(CassandraMailboxTable.UIDVALIDITY, bigint()) - .withOptions() - .comment("Holds the mailboxes information.") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))), - new CassandraTable(CassandraMailboxPathTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraMailboxPathTable.TABLE_NAME) - .ifNotExists() - .addUDTPartitionKey(CassandraMailboxPathTable.NAMESPACE_AND_USER, SchemaBuilder.frozen(CassandraMailboxTable.MAILBOX_BASE)) - .addClusteringColumn(CassandraMailboxPathTable.MAILBOX_NAME, text()) - .addColumn(CassandraMailboxPathTable.MAILBOX_ID, timeuuid()) - .withOptions() - .comment("Denormalisation table. Allow to retrieve mailboxes belonging to a certain user. This is a " + - "LIST optimisation.") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))), - new CassandraTable(CassandraMailboxPathV2Table.TABLE_NAME, - SchemaBuilder.createTable(CassandraMailboxPathV2Table.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMailboxPathV2Table.NAMESPACE, text()) - .addPartitionKey(CassandraMailboxPathV2Table.USER, text()) - .addClusteringColumn(CassandraMailboxPathV2Table.MAILBOX_NAME, text()) - .addColumn(CassandraMailboxPathV2Table.MAILBOX_ID, timeuuid()) - .withOptions() - .comment("Denormalisation table. Allow to retrieve mailboxes belonging to a certain user. This is a " + - "LIST optimisation.") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))); - types = ImmutableList.of( - new CassandraType(CassandraMailboxTable.MAILBOX_BASE, - SchemaBuilder.createType(CassandraMailboxTable.MAILBOX_BASE) - .ifNotExists() - .addColumn(CassandraMailboxTable.MailboxBase.NAMESPACE, text()) - .addColumn(CassandraMailboxTable.MailboxBase.USER, text()))); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraMailboxModule { + CassandraModule MODULE = CassandraModule.builder() + .type(CassandraMailboxTable.MAILBOX_BASE) + .statement(statement -> statement + .ifNotExists() + .addColumn(CassandraMailboxTable.MailboxBase.NAMESPACE, text()) + .addColumn(CassandraMailboxTable.MailboxBase.USER, text())) + .table(CassandraMailboxTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMailboxTable.ID, timeuuid()) + .addUDTColumn(CassandraMailboxTable.MAILBOX_BASE, SchemaBuilder.frozen(CassandraMailboxTable.MAILBOX_BASE)) + .addColumn(CassandraMailboxTable.NAME, text()) + .addColumn(CassandraMailboxTable.UIDVALIDITY, bigint()) + .withOptions() + .comment("Holds the mailboxes information.") + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .table(CassandraMailboxPathTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addUDTPartitionKey(CassandraMailboxPathTable.NAMESPACE_AND_USER, SchemaBuilder.frozen(CassandraMailboxTable.MAILBOX_BASE)) + .addClusteringColumn(CassandraMailboxPathTable.MAILBOX_NAME, text()) + .addColumn(CassandraMailboxPathTable.MAILBOX_ID, timeuuid()) + .withOptions() + .comment("Denormalisation table. Allow to retrieve mailboxes belonging to a certain user. This is a " + + "LIST optimisation.") + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .table(CassandraMailboxPathV2Table.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMailboxPathV2Table.NAMESPACE, text()) + .addPartitionKey(CassandraMailboxPathV2Table.USER, text()) + .addClusteringColumn(CassandraMailboxPathV2Table.MAILBOX_NAME, text()) + .addColumn(CassandraMailboxPathV2Table.MAILBOX_ID, timeuuid()) + .withOptions() + .comment("Denormalisation table. Allow to retrieve mailboxes belonging to a certain user. This is a " + + "LIST optimisation.") + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java index da37060..9193470 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java @@ -22,45 +22,23 @@ package org.apache.james.mailbox.cassandra.modules; import static com.datastax.driver.core.DataType.bigint; import static com.datastax.driver.core.DataType.timeuuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraMailboxRecentsTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraMailboxRecentsModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraMailboxRecentsModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraMailboxRecentsTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraMailboxRecentsTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMailboxRecentsTable.MAILBOX_ID, timeuuid()) - .addClusteringColumn(CassandraMailboxRecentsTable.RECENT_MESSAGE_UID, bigint()) - .withOptions() - .comment("Denormalisation table. This table holds for each mailbox the messages marked as RECENT. This" + - " is a SELECT optimisation.") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraMailboxRecentsModule { + CassandraModule MODULE = CassandraModule.table(CassandraMailboxRecentsTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMailboxRecentsTable.MAILBOX_ID, timeuuid()) + .addClusteringColumn(CassandraMailboxRecentsTable.RECENT_MESSAGE_UID, bigint()) + .withOptions() + .comment("Denormalisation table. This table holds for each mailbox the messages marked as RECENT. This" + + " is a SELECT optimisation.") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/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 428a45a..856736a 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 @@ -27,11 +27,7 @@ import static com.datastax.driver.core.DataType.text; import static com.datastax.driver.core.DataType.timestamp; import static com.datastax.driver.core.DataType.timeuuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.mailbox.cassandra.table.CassandraMessageIdTable; import org.apache.james.mailbox.cassandra.table.CassandraMessageIds; import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table; @@ -39,96 +35,81 @@ import org.apache.james.mailbox.cassandra.table.Flag; import org.apache.james.mailbox.cassandra.table.MessageIdToImapUid; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraMessageModule implements CassandraModule { - - public static final int CACHED_MESSAGE_ID_ROWS = 1000; - public static final int CACHED_IMAP_UID_ROWS = 100; - private final List<CassandraTable> tables; - private final List<CassandraType> types; - public CassandraMessageModule() { - tables = ImmutableList.of( - new CassandraTable(MessageIdToImapUid.TABLE_NAME, - SchemaBuilder.createTable(MessageIdToImapUid.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMessageIds.MESSAGE_ID, timeuuid()) - .addClusteringColumn(CassandraMessageIds.MAILBOX_ID, timeuuid()) - .addClusteringColumn(CassandraMessageIds.IMAP_UID, bigint()) - .addColumn(MessageIdToImapUid.MOD_SEQ, bigint()) - .addColumn(Flag.ANSWERED, cboolean()) - .addColumn(Flag.DELETED, cboolean()) - .addColumn(Flag.DRAFT, cboolean()) - .addColumn(Flag.FLAGGED, cboolean()) - .addColumn(Flag.RECENT, cboolean()) - .addColumn(Flag.SEEN, cboolean()) - .addColumn(Flag.USER, cboolean()) - .addColumn(Flag.USER_FLAGS, set(text())) - .withOptions() - .comment("Holds mailbox and flags for each message, lookup by message ID") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CACHED_IMAP_UID_ROWS))), - new CassandraTable(CassandraMessageIdTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraMessageIdTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMessageIds.MAILBOX_ID, timeuuid()) - .addClusteringColumn(CassandraMessageIds.IMAP_UID, bigint()) - .addColumn(CassandraMessageIds.MESSAGE_ID, timeuuid()) - .addColumn(CassandraMessageIdTable.MOD_SEQ, bigint()) - .addColumn(Flag.ANSWERED, cboolean()) - .addColumn(Flag.DELETED, cboolean()) - .addColumn(Flag.DRAFT, cboolean()) - .addColumn(Flag.FLAGGED, cboolean()) - .addColumn(Flag.RECENT, cboolean()) - .addColumn(Flag.SEEN, cboolean()) - .addColumn(Flag.USER, cboolean()) - .addColumn(Flag.USER_FLAGS, set(text())) - .withOptions() - .comment("Holds mailbox and flags for each message, lookup by mailbox ID + UID") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CACHED_MESSAGE_ID_ROWS))), - new CassandraTable(CassandraMessageV2Table.TABLE_NAME, - SchemaBuilder.createTable(CassandraMessageV2Table.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMessageIds.MESSAGE_ID, timeuuid()) - .addColumn(CassandraMessageV2Table.INTERNAL_DATE, timestamp()) - .addColumn(CassandraMessageV2Table.BODY_START_OCTET, cint()) - .addColumn(CassandraMessageV2Table.BODY_OCTECTS, bigint()) - .addColumn(CassandraMessageV2Table.TEXTUAL_LINE_COUNT, bigint()) - .addColumn(CassandraMessageV2Table.FULL_CONTENT_OCTETS, bigint()) - .addColumn(CassandraMessageV2Table.BODY_CONTENT, text()) - .addColumn(CassandraMessageV2Table.HEADER_CONTENT, text()) - .addUDTListColumn(CassandraMessageV2Table.ATTACHMENTS, SchemaBuilder.frozen(CassandraMessageV2Table.ATTACHMENTS)) - .addUDTListColumn(CassandraMessageV2Table.PROPERTIES, SchemaBuilder.frozen(CassandraMessageV2Table.PROPERTIES)) - .withOptions() - .comment("Holds message metadata, independently of any mailboxes. Content of messages is stored " + - "in `blobs` and `blobparts` tables."))); - types = ImmutableList.of( - new CassandraType(CassandraMessageV2Table.PROPERTIES, - SchemaBuilder.createType(CassandraMessageV2Table.PROPERTIES) - .ifNotExists() - .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(CassandraMessageV2Table.Attachments.ID, text()) - .addColumn(CassandraMessageV2Table.Attachments.NAME, text()) - .addColumn(CassandraMessageV2Table.Attachments.CID, text()) - .addColumn(CassandraMessageV2Table.Attachments.IS_INLINE, cboolean()))); - } +public interface CassandraMessageModule { - @Override - public List<CassandraTable> moduleTables() { - return tables; - } + int CACHED_MESSAGE_ID_ROWS = 1000; + int CACHED_IMAP_UID_ROWS = 100; - @Override - public List<CassandraType> moduleTypes() { - return types; - } + CassandraModule MODULE = CassandraModule.builder() + .table(CassandraMessageIdTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMessageIds.MAILBOX_ID, timeuuid()) + .addClusteringColumn(CassandraMessageIds.IMAP_UID, bigint()) + .addColumn(CassandraMessageIds.MESSAGE_ID, timeuuid()) + .addColumn(CassandraMessageIdTable.MOD_SEQ, bigint()) + .addColumn(Flag.ANSWERED, cboolean()) + .addColumn(Flag.DELETED, cboolean()) + .addColumn(Flag.DRAFT, cboolean()) + .addColumn(Flag.FLAGGED, cboolean()) + .addColumn(Flag.RECENT, cboolean()) + .addColumn(Flag.SEEN, cboolean()) + .addColumn(Flag.USER, cboolean()) + .addColumn(Flag.USER_FLAGS, set(text())) + .withOptions() + .comment("Holds mailbox and flags for each message, lookup by mailbox ID + UID") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CACHED_MESSAGE_ID_ROWS))) + .table(MessageIdToImapUid.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMessageIds.MESSAGE_ID, timeuuid()) + .addClusteringColumn(CassandraMessageIds.MAILBOX_ID, timeuuid()) + .addClusteringColumn(CassandraMessageIds.IMAP_UID, bigint()) + .addColumn(MessageIdToImapUid.MOD_SEQ, bigint()) + .addColumn(Flag.ANSWERED, cboolean()) + .addColumn(Flag.DELETED, cboolean()) + .addColumn(Flag.DRAFT, cboolean()) + .addColumn(Flag.FLAGGED, cboolean()) + .addColumn(Flag.RECENT, cboolean()) + .addColumn(Flag.SEEN, cboolean()) + .addColumn(Flag.USER, cboolean()) + .addColumn(Flag.USER_FLAGS, set(text())) + .withOptions() + .comment("Holds mailbox and flags for each message, lookup by message ID") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CACHED_IMAP_UID_ROWS))) + .table(CassandraMessageV2Table.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMessageIds.MESSAGE_ID, timeuuid()) + .addColumn(CassandraMessageV2Table.INTERNAL_DATE, timestamp()) + .addColumn(CassandraMessageV2Table.BODY_START_OCTET, cint()) + .addColumn(CassandraMessageV2Table.BODY_OCTECTS, bigint()) + .addColumn(CassandraMessageV2Table.TEXTUAL_LINE_COUNT, bigint()) + .addColumn(CassandraMessageV2Table.FULL_CONTENT_OCTETS, bigint()) + .addColumn(CassandraMessageV2Table.BODY_CONTENT, text()) + .addColumn(CassandraMessageV2Table.HEADER_CONTENT, text()) + .addUDTListColumn(CassandraMessageV2Table.ATTACHMENTS, SchemaBuilder.frozen(CassandraMessageV2Table.ATTACHMENTS)) + .addUDTListColumn(CassandraMessageV2Table.PROPERTIES, SchemaBuilder.frozen(CassandraMessageV2Table.PROPERTIES)) + .withOptions() + .comment("Holds message metadata, independently of any mailboxes. Content of messages is stored " + + "in `blobs` and `blobparts` tables.")) + .type(CassandraMessageV2Table.PROPERTIES) + .statement(statement -> statement + .ifNotExists() + .addColumn(CassandraMessageV2Table.Properties.NAMESPACE, text()) + .addColumn(CassandraMessageV2Table.Properties.NAME, text()) + .addColumn(CassandraMessageV2Table.Properties.VALUE, text())) + .type(CassandraMessageV2Table.ATTACHMENTS) + .statement(statement -> statement + .ifNotExists() + .addColumn(CassandraMessageV2Table.Attachments.ID, text()) + .addColumn(CassandraMessageV2Table.Attachments.NAME, text()) + .addColumn(CassandraMessageV2Table.Attachments.CID, text()) + .addColumn(CassandraMessageV2Table.Attachments.IS_INLINE, cboolean())) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java index 49013ab..2e0169e 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java @@ -22,44 +22,22 @@ package org.apache.james.mailbox.cassandra.modules; import static com.datastax.driver.core.DataType.bigint; import static com.datastax.driver.core.DataType.timeuuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraModSeqModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraModSeqModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraMessageModseqTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraMessageModseqTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMessageModseqTable.MAILBOX_ID, timeuuid()) - .addColumn(CassandraMessageModseqTable.NEXT_MODSEQ, bigint()) - .withOptions() - .comment("Holds and is used to generate MODSEQ. A monotic counter is implemented on top of this table.") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraModSeqModule { + CassandraModule MODULE = CassandraModule.table(CassandraMessageModseqTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMessageModseqTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraMessageModseqTable.NEXT_MODSEQ, bigint()) + .withOptions() + .comment("Holds and is used to generate MODSEQ. A monotic counter is implemented on top of this table.") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java index 73c7353..3f50395 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java @@ -23,11 +23,7 @@ import static com.datastax.driver.core.DataType.bigint; import static com.datastax.driver.core.DataType.counter; import static com.datastax.driver.core.DataType.text; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraCurrentQuota; import org.apache.james.mailbox.cassandra.table.CassandraDomainMaxQuota; @@ -35,64 +31,47 @@ import org.apache.james.mailbox.cassandra.table.CassandraGlobalMaxQuota; import org.apache.james.mailbox.cassandra.table.CassandraMaxQuota; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraQuotaModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraQuotaModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraCurrentQuota.TABLE_NAME, - SchemaBuilder.createTable(CassandraCurrentQuota.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraCurrentQuota.QUOTA_ROOT, text()) - .addColumn(CassandraCurrentQuota.MESSAGE_COUNT, counter()) - .addColumn(CassandraCurrentQuota.STORAGE, counter()) - .withOptions() - .comment("Holds per quota-root current values. Quota-roots defines groups of mailboxes which shares quotas limitations.") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))), - new CassandraTable(CassandraMaxQuota.TABLE_NAME, - SchemaBuilder.createTable(CassandraMaxQuota.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMaxQuota.QUOTA_ROOT, text()) - .addColumn(CassandraMaxQuota.MESSAGE_COUNT, bigint()) - .addColumn(CassandraMaxQuota.STORAGE, bigint()) - .withOptions() - .comment("Holds per quota-root limitations. Limitations can concern the number of messages in a quota-root or the total size of a quota-root.") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))), - new CassandraTable(CassandraDomainMaxQuota.TABLE_NAME, - SchemaBuilder.createTable(CassandraDomainMaxQuota.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraDomainMaxQuota.DOMAIN, text()) - .addColumn(CassandraDomainMaxQuota.MESSAGE_COUNT, bigint()) - .addColumn(CassandraDomainMaxQuota.STORAGE, bigint()) - .withOptions() - .comment("Holds per domain limitations. Limitations can concern the number of messages in a quota-root or the total size of a quota-root.") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))), - new CassandraTable(CassandraGlobalMaxQuota.TABLE_NAME, - SchemaBuilder.createTable(CassandraGlobalMaxQuota.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraGlobalMaxQuota.TYPE, text()) - .addColumn(CassandraGlobalMaxQuota.VALUE, bigint()) - .withOptions() - .comment("Holds defaults limitations definition.") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraQuotaModule { + CassandraModule MODULE = CassandraModule.builder() + .table(CassandraCurrentQuota.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraCurrentQuota.QUOTA_ROOT, text()) + .addColumn(CassandraCurrentQuota.MESSAGE_COUNT, counter()) + .addColumn(CassandraCurrentQuota.STORAGE, counter()) + .withOptions() + .comment("Holds per quota-root current values. Quota-roots defines groups of mailboxes which shares quotas limitations.") + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .table(CassandraMaxQuota.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMaxQuota.QUOTA_ROOT, text()) + .addColumn(CassandraMaxQuota.MESSAGE_COUNT, bigint()) + .addColumn(CassandraMaxQuota.STORAGE, bigint()) + .withOptions() + .comment("Holds per quota-root limitations. Limitations can concern the number of messages in a quota-root or the total size of a quota-root.") + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .table(CassandraDomainMaxQuota.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraDomainMaxQuota.DOMAIN, text()) + .addColumn(CassandraDomainMaxQuota.MESSAGE_COUNT, bigint()) + .addColumn(CassandraDomainMaxQuota.STORAGE, bigint()) + .withOptions() + .comment("Holds per domain limitations. Limitations can concern the number of messages in a quota-root or the total size of a quota-root.") + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .table(CassandraGlobalMaxQuota.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraGlobalMaxQuota.TYPE, text()) + .addColumn(CassandraGlobalMaxQuota.VALUE, bigint()) + .withOptions() + .comment("Holds defaults limitations definition.") + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java index bb91fd4..97e6714 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java @@ -21,46 +21,25 @@ package org.apache.james.mailbox.cassandra.modules; import static com.datastax.driver.core.DataType.text; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.mailbox.cassandra.table.CassandraMailboxPathRegisterTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraRegistrationModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraRegistrationModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraMailboxPathRegisterTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraMailboxPathRegisterTable.TABLE_NAME) - .ifNotExists() - .addUDTPartitionKey(CassandraMailboxPathRegisterTable.MAILBOX_PATH, SchemaBuilder.frozen(CassandraMailboxPathRegisterTable.MAILBOX_PATH)) - .addClusteringColumn(CassandraMailboxPathRegisterTable.TOPIC, text()) - .withOptions() - .compactionOptions(SchemaBuilder.dateTieredStrategy()))); - types = ImmutableList.of( - new CassandraType(CassandraMailboxPathRegisterTable.MAILBOX_PATH, - SchemaBuilder.createType(CassandraMailboxPathRegisterTable.MAILBOX_PATH) - .ifNotExists() - .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.NAMESPACE, text()) - .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.NAME, text()) - .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.USER, text()))); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraRegistrationModule { + CassandraModule MODULE = CassandraModule.builder() + .type(CassandraMailboxPathRegisterTable.MAILBOX_PATH) + .statement(statement -> statement + .ifNotExists() + .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.NAMESPACE, text()) + .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.NAME, text()) + .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.USER, text())) + .table(CassandraMailboxPathRegisterTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addUDTPartitionKey(CassandraMailboxPathRegisterTable.MAILBOX_PATH, SchemaBuilder.frozen(CassandraMailboxPathRegisterTable.MAILBOX_PATH)) + .addClusteringColumn(CassandraMailboxPathRegisterTable.TOPIC, text()) + .withOptions() + .compactionOptions(SchemaBuilder.dateTieredStrategy())) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java index f85fe53..068da26 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java @@ -21,43 +21,23 @@ package org.apache.james.mailbox.cassandra.modules; import static com.datastax.driver.core.DataType.text; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.mailbox.cassandra.table.CassandraSubscriptionTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraSubscriptionModule implements CassandraModule { - - public static final int PER_USER_CACHED_SUBSCRIPTIONS = 100; - private final List<CassandraTable> tables; - private final List<CassandraType> types; - public CassandraSubscriptionModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraSubscriptionTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraSubscriptionTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraSubscriptionTable.USER, text()) - .addClusteringColumn(CassandraSubscriptionTable.MAILBOX, text()) - .withOptions() - .comment("Holds per user list of IMAP subscriptions") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(PER_USER_CACHED_SUBSCRIPTIONS)))); - types = ImmutableList.of(); - } +public interface CassandraSubscriptionModule { - @Override - public List<CassandraTable> moduleTables() { - return tables; - } + int PER_USER_CACHED_SUBSCRIPTIONS = 100; - @Override - public List<CassandraType> moduleTypes() { - return types; - } + CassandraModule MODULE = CassandraModule.table(CassandraSubscriptionTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraSubscriptionTable.USER, text()) + .addClusteringColumn(CassandraSubscriptionTable.MAILBOX, text()) + .withOptions() + .comment("Holds per user list of IMAP subscriptions") + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(PER_USER_CACHED_SUBSCRIPTIONS))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java index 49dc902..e32d8f0 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java @@ -22,44 +22,22 @@ package org.apache.james.mailbox.cassandra.modules; import static com.datastax.driver.core.DataType.bigint; import static com.datastax.driver.core.DataType.timeuuid; -import java.util.List; - import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; import org.apache.james.backends.cassandra.utils.CassandraConstants; import org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraUidModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraUidModule() { - tables = ImmutableList.of( - new CassandraTable(CassandraMessageUidTable.TABLE_NAME, - SchemaBuilder.createTable(CassandraMessageUidTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(CassandraMessageUidTable.MAILBOX_ID, timeuuid()) - .addColumn(CassandraMessageUidTable.NEXT_UID, bigint()) - .withOptions() - .comment("Holds and is used to generate UID. A monotic counter is implemented on top of this table.") - .compactionOptions(SchemaBuilder.leveledStrategy()) - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - @Override - public List<CassandraType> moduleTypes() { - return types; - } +public interface CassandraUidModule { + CassandraModule MODULE = CassandraModule.table(CassandraMessageUidTable.TABLE_NAME) + .statement(statement -> statement + .ifNotExists() + .addPartitionKey(CassandraMessageUidTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraMessageUidTable.NEXT_UID, bigint()) + .withOptions() + .comment("Holds and is used to generate UID. A monotic counter is implemented on top of this table.") + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java index 2ad6deb..f20e7fc 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java @@ -23,22 +23,8 @@ import static org.mockito.Mockito.mock; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; -import org.apache.james.backends.cassandra.init.CassandraModuleComposite; -import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.MailboxListener; -import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; -import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; -import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; -import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; -import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxRecentsModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule; -import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule; -import org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule; -import org.apache.james.mailbox.cassandra.modules.CassandraUidModule; +import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule; import org.apache.james.mailbox.store.AbstractCombinationManagerTest; import org.apache.james.mailbox.store.CombinationManagerTestSystem; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; @@ -57,22 +43,7 @@ public class CassandraCombinationManagerTest extends AbstractCombinationManagerT @BeforeClass public static void setUpClass() { - CassandraModuleComposite modules = new CassandraModuleComposite( - new CassandraAclModule(), - new CassandraMailboxModule(), - new CassandraMessageModule(), - new CassandraBlobModule(), - new CassandraMailboxCounterModule(), - new CassandraMailboxRecentsModule(), - new CassandraFirstUnseenModule(), - new CassandraUidModule(), - new CassandraModSeqModule(), - new CassandraSubscriptionModule(), - new CassandraAttachmentModule(), - new CassandraDeletedMessageModule(), - new CassandraAnnotationModule(), - new CassandraApplicableFlagsModule()); - cassandra = CassandraCluster.create(modules, cassandraServer.getHost()); + cassandra = CassandraCluster.create(MailboxAggregateModule.MODULE, cassandraServer.getHost()); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java index 33c263c..75b7b3c 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java @@ -21,24 +21,9 @@ package org.apache.james.mailbox.cassandra; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; -import org.apache.james.backends.cassandra.init.CassandraModuleComposite; -import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxManagerStressTest; -import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; -import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; -import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; -import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; -import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxRecentsModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule; -import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule; -import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule; -import org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule; -import org.apache.james.mailbox.cassandra.modules.CassandraUidModule; +import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -53,23 +38,7 @@ public class CassandraMailboxManagerStressTest extends MailboxManagerStressTest @BeforeClass public static void setUpClass() { - CassandraModuleComposite modules = new CassandraModuleComposite( - new CassandraAclModule(), - new CassandraMailboxModule(), - new CassandraMessageModule(), - new CassandraBlobModule(), - new CassandraMailboxCounterModule(), - new CassandraMailboxRecentsModule(), - new CassandraFirstUnseenModule(), - new CassandraUidModule(), - new CassandraModSeqModule(), - new CassandraSubscriptionModule(), - new CassandraAttachmentModule(), - new CassandraDeletedMessageModule(), - new CassandraAnnotationModule(), - new CassandraApplicableFlagsModule(), - new CassandraQuotaModule()); - cassandra = CassandraCluster.create(modules, cassandraServer.getHost()); + cassandra = CassandraCluster.create(MailboxAggregateModule.MODULE_WITH_QUOTA, cassandraServer.getHost()); } @Before http://git-wip-us.apache.org/repos/asf/james-project/blob/45318db5/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java index 9e7e2e0..8193bca 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java @@ -20,24 +20,9 @@ package org.apache.james.mailbox.cassandra; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; -import org.apache.james.backends.cassandra.init.CassandraModuleComposite; -import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxManagerTest; -import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; -import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; -import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; -import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; -import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxRecentsModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule; -import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule; -import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule; -import org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule; -import org.apache.james.mailbox.cassandra.modules.CassandraUidModule; +import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -52,23 +37,7 @@ public class CassandraMailboxManagerTest extends MailboxManagerTest { @BeforeClass public static void setUpClass() { - CassandraModuleComposite modules = new CassandraModuleComposite( - new CassandraAclModule(), - new CassandraMailboxModule(), - new CassandraMessageModule(), - new CassandraBlobModule(), - new CassandraMailboxCounterModule(), - new CassandraMailboxRecentsModule(), - new CassandraFirstUnseenModule(), - new CassandraUidModule(), - new CassandraModSeqModule(), - new CassandraSubscriptionModule(), - new CassandraAttachmentModule(), - new CassandraDeletedMessageModule(), - new CassandraAnnotationModule(), - new CassandraApplicableFlagsModule(), - new CassandraQuotaModule()); - cassandra = CassandraCluster.create(modules, cassandraServer.getHost()); + cassandra = CassandraCluster.create(MailboxAggregateModule.MODULE_WITH_QUOTA, cassandraServer.getHost()); } @Before --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
