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 2018/07/26 07:02:33 UTC
[15/27] james-project git commit: MAILBOX-342 Use
CassandraModule.Builder for Cassandra mailbox
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 <bt...@linagora.com>
Authored: Tue Jul 24 15:10:14 2018 +0700
Committer: benwa <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org