MAILBOX-342 CassandraModule.Builder should enforce comments
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f6fda76d Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f6fda76d Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f6fda76d Branch: refs/heads/master Commit: f6fda76d8d6ac7ad4137a2e020cfe446562ee2c4 Parents: 7ad4f42 Author: benwa <btell...@linagora.com> Authored: Wed Jul 25 10:57:16 2018 +0700 Committer: benwa <btell...@linagora.com> Committed: Thu Jul 26 13:47:57 2018 +0700 ---------------------------------------------------------------------- .../cassandra/components/CassandraModule.java | 33 ++++++++++++++--- .../backends/cassandra/utils/PaggingTest.java | 1 + .../cassandra/CassandraEventStoreModule.java | 10 ++--- .../cassandra/modules/CassandraAclModule.java | 20 +++++----- .../modules/CassandraAnnotationModule.java | 12 +++--- .../modules/CassandraApplicableFlagsModule.java | 12 +++--- .../modules/CassandraAttachmentModule.java | 39 ++++++++++---------- .../modules/CassandraDeletedMessageModule.java | 10 ++--- .../modules/CassandraFirstUnseenModule.java | 10 ++--- .../modules/CassandraMailboxCounterModule.java | 12 +++--- .../modules/CassandraMailboxModule.java | 30 +++++++-------- .../modules/CassandraMailboxRecentsModule.java | 12 +++--- .../modules/CassandraMessageModule.java | 29 +++++++-------- .../modules/CassandraModSeqModule.java | 10 ++--- .../cassandra/modules/CassandraQuotaModule.java | 34 ++++++++--------- .../modules/CassandraRegistrationModule.java | 7 ++-- .../modules/CassandraSubscriptionModule.java | 10 ++--- .../cassandra/modules/CassandraUidModule.java | 10 ++--- .../blob/cassandra/CassandraBlobModule.java | 14 +++---- .../cassandra/CassandraDomainListModule.java | 12 +++--- .../CassandraMailRepositoryUrlModule.java | 12 +++--- .../james/rrt/cassandra/CassandraRRTModule.java | 14 +++---- .../CassandraSieveRepositoryModule.java | 30 +++++++-------- .../CassandraUsersRepositoryModule.java | 11 ++---- .../cassandra/access/CassandraAccessModule.java | 14 +++---- .../CassandraNotificationRegistryModule.java | 14 +++---- .../vacation/CassandraVacationModule.java | 14 +++---- .../CassandraMailRepositoryModule.java | 9 +++-- 28 files changed, 232 insertions(+), 213 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java ---------------------------------------------------------------------- diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java index 63e2f89..7afb82f 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java @@ -20,12 +20,14 @@ package org.apache.james.backends.cassandra.components; import java.util.List; +import java.util.Optional; import java.util.function.Function; -import com.datastax.driver.core.Statement; import com.datastax.driver.core.schemabuilder.Create; import com.datastax.driver.core.schemabuilder.CreateType; import com.datastax.driver.core.schemabuilder.SchemaBuilder; +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; public interface CassandraModule { @@ -87,17 +89,38 @@ public interface CassandraModule { class TableBuilder { private final Builder originalBuilderReference; private final String tableName; + private Optional<String> comment; + private Optional<Function<Create.Options, Create.Options>> options; private TableBuilder(Builder originalBuilderReference, String tableName) { this.originalBuilderReference = originalBuilderReference; this.tableName = tableName; + comment = Optional.empty(); } - public Builder statement(Function<Create, Statement> createStatement) { + public TableBuilder comment(String comment) { + Preconditions.checkArgument(!Strings.isNullOrEmpty(comment), "`comment` can not be null or empty"); + + this.comment = Optional.of(comment); + return this; + } + + public TableBuilder options(Function<Create.Options, Create.Options> options) { + this.options = Optional.of(options); + return this; + } + + public Builder statement(Function<Create, Create> toCreateStatement) { + Preconditions.checkState(comment.isPresent(), "`comment` is compulsory"); + + Create createStatement = toCreateStatement.apply( + SchemaBuilder.createTable(tableName) + .ifNotExists()); + return originalBuilderReference.addTable( - new CassandraTable(tableName, createStatement.apply( - SchemaBuilder.createTable(tableName) - .ifNotExists()))); + new CassandraTable(tableName, + options.orElse(Function.identity()) + .apply(createStatement.withOptions().comment(comment.get())))); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java ---------------------------------------------------------------------- diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java index 946c338..f9049f9 100644 --- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java @@ -56,6 +56,7 @@ public class PaggingTest { @BeforeClass public static void setUpClass() { CassandraModule modules = CassandraModule.table(TABLE_NAME) + .comment("Testing table") .statement(statement -> statement .addPartitionKey(ID, DataType.timeuuid()) .addClusteringColumn(CLUSTERING, DataType.bigint())) http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java ---------------------------------------------------------------------- diff --git a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java index 194a0d4..17c147a 100644 --- a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java +++ b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java @@ -27,13 +27,13 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraEventStoreModule { CassandraModule MODULE = CassandraModule.table(CassandraEventStoreTable.EVENTS_TABLE) + .comment("Store events of a EventSourcing aggregate") + .options(options -> options + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) .statement(statement -> statement .addPartitionKey(CassandraEventStoreTable.AGGREGATE_ID, DataType.varchar()) .addClusteringColumn(CassandraEventStoreTable.EVENT_ID, DataType.cint()) - .addColumn(CassandraEventStoreTable.EVENT, DataType.text()) - .withOptions() - .comment("Store events of a EventSourcing aggregate") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .addColumn(CassandraEventStoreTable.EVENT, DataType.text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 acb2205..abdecab 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 @@ -34,23 +34,23 @@ public interface CassandraAclModule { CassandraModule MODULE = CassandraModule .builder() .table(CassandraACLTable.TABLE_NAME) + .comment("Holds mailbox ACLs") + .options(options -> options + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) .statement(statement -> statement .addPartitionKey(CassandraACLTable.ID, timeuuid()) .addColumn(CassandraACLTable.ACL, text()) - .addColumn(CassandraACLTable.VERSION, bigint()) - .withOptions() - .comment("Holds mailbox ACLs") + .addColumn(CassandraACLTable.VERSION, bigint())) + .table(CassandraUserMailboxRightsTable.TABLE_NAME) + .comment("Denormalisation table. Allow to retrieve non personal mailboxIds a user has right on") + .options(options -> options + .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) - .table(CassandraUserMailboxRightsTable.TABLE_NAME) .statement(statement -> statement .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")) + .addColumn(CassandraUserMailboxRightsTable.RIGHTS, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 88ccdab..fdd1a52 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 @@ -30,14 +30,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraAnnotationModule { CassandraModule MODULE = CassandraModule.table(CassandraAnnotationTable.TABLE_NAME) - .statement(statement -> statement - .addPartitionKey(CassandraAnnotationTable.MAILBOX_ID, timeuuid()) - .addClusteringColumn(CassandraAnnotationTable.KEY, text()) - .addColumn(CassandraAnnotationTable.VALUE, text()) - .withOptions() - .comment("Holds Cassandra mailbox annotations") + .comment("Holds Cassandra mailbox annotations") + .options(options -> options .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(CassandraAnnotationTable.MAILBOX_ID, timeuuid()) + .addClusteringColumn(CassandraAnnotationTable.KEY, text()) + .addColumn(CassandraAnnotationTable.VALUE, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 9dc2721..afc7470 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 @@ -32,14 +32,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraApplicableFlagsModule { CassandraModule MODULE = CassandraModule.table(CassandraApplicableFlagTable.TABLE_NAME) - .statement(statement -> statement - .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.") + .comment("Holds flags being used on specific mailboxes. As system flags are implicit, this table " + + "stores user flags.") + .options(options -> options .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(CassandraApplicableFlagTable.MAILBOX_ID, timeuuid()) + .addColumn(Flag.USER_FLAGS, set(text()))) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 8a94f1d..4699cae 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 @@ -36,44 +36,43 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraAttachmentModule { CassandraModule MODULE = CassandraModule.table(CassandraAttachmentTable.TABLE_NAME) + .comment("Holds attachment for fast attachment retrieval") .statement(statement -> statement .addPartitionKey(CassandraAttachmentTable.ID, text()) .addColumn(CassandraAttachmentTable.PAYLOAD, blob()) .addColumn(CassandraAttachmentTable.TYPE, text()) - .addColumn(CassandraAttachmentTable.SIZE, bigint()) - .withOptions() - .comment("Holds attachment for fast attachment retrieval")) + .addColumn(CassandraAttachmentTable.SIZE, bigint())) .table(CassandraAttachmentV2Table.TABLE_NAME) + .comment("Holds attachment for fast attachment retrieval. Content of messages is stored" + + "in `blobs` and `blobparts` tables.") + .options(options -> options + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) .statement(statement -> statement .addPartitionKey(CassandraAttachmentV2Table.ID_AS_UUID, uuid()) .addColumn(CassandraAttachmentV2Table.ID, text()) .addColumn(CassandraAttachmentV2Table.BLOB_ID, text()) .addColumn(CassandraAttachmentV2Table.TYPE, text()) - .addColumn(CassandraAttachmentV2Table.SIZE, bigint()) - .withOptions() + .addColumn(CassandraAttachmentV2Table.SIZE, bigint())) + .table(CassandraAttachmentMessageIdTable.TABLE_NAME) + .comment("Holds ids of messages owning the attachment") + .options(options -> options .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) + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) .statement(statement -> statement .addPartitionKey(CassandraAttachmentMessageIdTable.ATTACHMENT_ID_AS_UUID, uuid()) .addColumn(CassandraAttachmentMessageIdTable.ATTACHMENT_ID, text()) - .addClusteringColumn(CassandraAttachmentMessageIdTable.MESSAGE_ID, text()) - .withOptions() + .addClusteringColumn(CassandraAttachmentMessageIdTable.MESSAGE_ID, text())) + .table(CassandraAttachmentOwnerTable.TABLE_NAME) + .comment("Holds explicit owners of some attachments") + .options(options -> options .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) + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) .statement(statement -> statement .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")) + .addClusteringColumn(CassandraAttachmentOwnerTable.OWNER, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 4997417..2bd334b 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 @@ -31,13 +31,13 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraDeletedMessageModule { CassandraModule MODULE = CassandraModule.table(TABLE_NAME) - .statement(statement -> statement - .addPartitionKey(MAILBOX_ID, DataType.timeuuid()) - .addClusteringColumn(UID, DataType.bigint()) - .withOptions() - .comment("Denormalisation table. Allows to retrieve UID marked as DELETED in specific mailboxes.") + .comment("Denormalisation table. Allows to retrieve UID marked as DELETED in specific mailboxes.") + .options(options -> options .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(MAILBOX_ID, DataType.timeuuid()) + .addClusteringColumn(UID, DataType.bigint())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 75c1595..ec4a844 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 @@ -28,14 +28,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraFirstUnseenModule { CassandraModule MODULE = CassandraModule.table(CassandraFirstUnseenTable.TABLE_NAME) - .statement(statement -> statement - .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.") + .comment("Denormalisation table. Allow to quickly retrieve the first UNSEEN UID of a specific mailbox.") + .options(options -> options .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)) .clusteringOrder(CassandraFirstUnseenTable.UID, SchemaBuilder.Direction.ASC)) + .statement(statement -> statement + .addPartitionKey(CassandraFirstUnseenTable.MAILBOX_ID, DataType.timeuuid()) + .addClusteringColumn(CassandraFirstUnseenTable.UID, DataType.bigint())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 46d3798..74661c2 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 @@ -30,14 +30,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraMailboxCounterModule { CassandraModule MODULE = CassandraModule.table(CassandraMailboxCountersTable.TABLE_NAME) - .statement(statement -> statement - .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.") + .comment("Holds messages count and unseen message count for each mailbox.") + .options(options -> options .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(CassandraMailboxCountersTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraMailboxCountersTable.COUNT, counter()) + .addColumn(CassandraMailboxCountersTable.UNSEEN, counter())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 5e4e663..d4341aa 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 @@ -38,35 +38,35 @@ public interface CassandraMailboxModule { .addColumn(CassandraMailboxTable.MailboxBase.NAMESPACE, text()) .addColumn(CassandraMailboxTable.MailboxBase.USER, text())) .table(CassandraMailboxTable.TABLE_NAME) + .comment("Holds the mailboxes information.") + .options(options -> options + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) .statement(statement -> statement .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.") + .addColumn(CassandraMailboxTable.UIDVALIDITY, bigint())) + .table(CassandraMailboxPathTable.TABLE_NAME) + .comment("Denormalisation table. Allow to retrieve mailboxes belonging to a certain user. This is a " + + "LIST optimisation.") + .options(options -> options .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) - .table(CassandraMailboxPathTable.TABLE_NAME) .statement(statement -> statement .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.") + .addColumn(CassandraMailboxPathTable.MAILBOX_ID, timeuuid())) + .table(CassandraMailboxPathV2Table.TABLE_NAME) + .comment("Denormalisation table. Allow to retrieve mailboxes belonging to a certain user. This is a " + + "LIST optimisation.") + .options(options -> options .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) - .table(CassandraMailboxPathV2Table.TABLE_NAME) .statement(statement -> statement .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))) + .addColumn(CassandraMailboxPathV2Table.MAILBOX_ID, timeuuid())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 b79082c..c81f4d0 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 @@ -30,14 +30,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraMailboxRecentsModule { CassandraModule MODULE = CassandraModule.table(CassandraMailboxRecentsTable.TABLE_NAME) - .statement(statement -> statement - .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.") + .comment("Denormalisation table. This table holds for each mailbox the messages marked as RECENT. This" + + " is a SELECT optimisation.") + .options(options -> options .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(CassandraMailboxRecentsTable.MAILBOX_ID, timeuuid()) + .addClusteringColumn(CassandraMailboxRecentsTable.RECENT_MESSAGE_UID, bigint())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 da6dfb0..f3193f5 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 @@ -43,6 +43,11 @@ public interface CassandraMessageModule { CassandraModule MODULE = CassandraModule.builder() .table(CassandraMessageIdTable.TABLE_NAME) + .comment("Holds mailbox and flags for each message, lookup by mailbox ID + UID") + .options(options -> options + .compactionOptions(SchemaBuilder.leveledStrategy()) + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CACHED_MESSAGE_ID_ROWS))) .statement(statement -> statement .addPartitionKey(CassandraMessageIds.MAILBOX_ID, timeuuid()) .addClusteringColumn(CassandraMessageIds.IMAP_UID, bigint()) @@ -55,13 +60,13 @@ public interface CassandraMessageModule { .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") + .addColumn(Flag.USER_FLAGS, set(text()))) + .table(MessageIdToImapUid.TABLE_NAME) + .comment("Holds mailbox and flags for each message, lookup by message ID") + .options(options -> options .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CACHED_MESSAGE_ID_ROWS))) - .table(MessageIdToImapUid.TABLE_NAME) + SchemaBuilder.rows(CACHED_IMAP_UID_ROWS))) .statement(statement -> statement .addPartitionKey(CassandraMessageIds.MESSAGE_ID, timeuuid()) .addClusteringColumn(CassandraMessageIds.MAILBOX_ID, timeuuid()) @@ -74,13 +79,10 @@ public interface CassandraMessageModule { .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))) + .addColumn(Flag.USER_FLAGS, set(text()))) .table(CassandraMessageV2Table.TABLE_NAME) + .comment("Holds message metadata, independently of any mailboxes. Content of messages is stored " + + "in `blobs` and `blobparts` tables.") .statement(statement -> statement .addPartitionKey(CassandraMessageIds.MESSAGE_ID, timeuuid()) .addColumn(CassandraMessageV2Table.INTERNAL_DATE, timestamp()) @@ -91,10 +93,7 @@ public interface CassandraMessageModule { .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.")) + .addUDTListColumn(CassandraMessageV2Table.PROPERTIES, SchemaBuilder.frozen(CassandraMessageV2Table.PROPERTIES))) .type(CassandraMessageV2Table.PROPERTIES) .statement(statement -> statement .addColumn(CassandraMessageV2Table.Properties.NAMESPACE, text()) http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 b8cd359..459a03a 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 @@ -30,13 +30,13 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraModSeqModule { CassandraModule MODULE = CassandraModule.table(CassandraMessageModseqTable.TABLE_NAME) - .statement(statement -> statement - .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.") + .comment("Holds and is used to generate MODSEQ. A monotic counter is implemented on top of this table.") + .options(options -> options .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(CassandraMessageModseqTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraMessageModseqTable.NEXT_MODSEQ, bigint())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 59b8bd0..c6c0893 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 @@ -35,39 +35,39 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraQuotaModule { CassandraModule MODULE = CassandraModule.builder() .table(CassandraCurrentQuota.TABLE_NAME) + .comment("Holds per quota-root current values. Quota-roots defines groups of mailboxes which shares quotas limitations.") + .options(options -> options + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) .statement(statement -> statement .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.") + .addColumn(CassandraCurrentQuota.STORAGE, counter())) + .table(CassandraMaxQuota.TABLE_NAME) + .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.") + .options(options -> options .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) - .table(CassandraMaxQuota.TABLE_NAME) .statement(statement -> statement .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.") + .addColumn(CassandraMaxQuota.STORAGE, bigint())) + .table(CassandraDomainMaxQuota.TABLE_NAME) + .comment("Holds per domain limitations. Limitations can concern the number of messages in a quota-root or the total size of a quota-root.") + .options(options -> options .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) - .table(CassandraDomainMaxQuota.TABLE_NAME) .statement(statement -> statement .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.") + .addColumn(CassandraDomainMaxQuota.STORAGE, bigint())) + .table(CassandraGlobalMaxQuota.TABLE_NAME) + .comment("Holds defaults limitations definition.") + .options(options -> options .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) - .table(CassandraGlobalMaxQuota.TABLE_NAME) .statement(statement -> statement .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))) + .addColumn(CassandraGlobalMaxQuota.VALUE, bigint())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 94997c1..2f39dfb 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 @@ -34,10 +34,11 @@ public interface CassandraRegistrationModule { .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.NAME, text()) .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.USER, text())) .table(CassandraMailboxPathRegisterTable.TABLE_NAME) + .comment("Holds node mailboxPath registration for distributed events") + .options(options -> options + .compactionOptions(SchemaBuilder.dateTieredStrategy())) .statement(statement -> statement .addUDTPartitionKey(CassandraMailboxPathRegisterTable.MAILBOX_PATH, SchemaBuilder.frozen(CassandraMailboxPathRegisterTable.MAILBOX_PATH)) - .addClusteringColumn(CassandraMailboxPathRegisterTable.TOPIC, text()) - .withOptions() - .compactionOptions(SchemaBuilder.dateTieredStrategy())) + .addClusteringColumn(CassandraMailboxPathRegisterTable.TOPIC, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 e35e373..eb3cb8b 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 @@ -31,12 +31,12 @@ public interface CassandraSubscriptionModule { int PER_USER_CACHED_SUBSCRIPTIONS = 100; CassandraModule MODULE = CassandraModule.table(CassandraSubscriptionTable.TABLE_NAME) - .statement(statement -> statement - .addPartitionKey(CassandraSubscriptionTable.USER, text()) - .addClusteringColumn(CassandraSubscriptionTable.MAILBOX, text()) - .withOptions() - .comment("Holds per user list of IMAP subscriptions") + .comment("Holds per user list of IMAP subscriptions") + .options(options -> options .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(PER_USER_CACHED_SUBSCRIPTIONS))) + .statement(statement -> statement + .addPartitionKey(CassandraSubscriptionTable.USER, text()) + .addClusteringColumn(CassandraSubscriptionTable.MAILBOX, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 efa3bce..614f10d 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 @@ -30,13 +30,13 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder; public interface CassandraUidModule { CassandraModule MODULE = CassandraModule.table(CassandraMessageUidTable.TABLE_NAME) - .statement(statement -> statement - .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.") + .comment("Holds and is used to generate UID. A monotic counter is implemented on top of this table.") + .options(options -> options .compactionOptions(SchemaBuilder.leveledStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(CassandraMessageUidTable.MAILBOX_ID, timeuuid()) + .addColumn(CassandraMessageUidTable.NEXT_UID, bigint())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java ---------------------------------------------------------------------- diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java index fb3623a..df2424e 100644 --- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java +++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java @@ -27,19 +27,17 @@ public interface CassandraBlobModule { CassandraModule MODULE = CassandraModule .builder() .table(BlobTable.BlobParts.TABLE_NAME) + .comment("Holds blob parts composing blobs ." + + "Messages` headers and bodies are stored, chunked in blobparts.") .statement(statement -> statement .addPartitionKey(BlobTable.ID, DataType.text()) .addClusteringColumn(BlobTable.BlobParts.CHUNK_NUMBER, DataType.cint()) - .addColumn(BlobTable.BlobParts.DATA, DataType.blob()) - .withOptions() - .comment("Holds blob parts composing blobs ." + - "Messages` headers and bodies are stored, chunked in blobparts.")) + .addColumn(BlobTable.BlobParts.DATA, DataType.blob())) .table(BlobTable.TABLE_NAME) + .comment("Holds information for retrieving all blob parts composing this blob. " + + "Messages` headers and bodies are stored as blobparts.") .statement(statement -> statement .addPartitionKey(BlobTable.ID, DataType.text()) - .addClusteringColumn(BlobTable.NUMBER_OF_CHUNK, DataType.cint()) - .withOptions() - .comment("Holds information for retrieving all blob parts composing this blob. " + - "Messages` headers and bodies are stored as blobparts.")) + .addClusteringColumn(BlobTable.NUMBER_OF_CHUNK, DataType.cint())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java index 8d05add..e435a13 100644 --- a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java +++ b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java @@ -27,13 +27,13 @@ import org.apache.james.domainlist.cassandra.tables.CassandraDomainsTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -public class CassandraDomainListModule { - public static final CassandraModule MODULE = CassandraModule.table(CassandraDomainsTable.TABLE_NAME) - .statement(statement -> statement - .addPartitionKey(CassandraDomainsTable.DOMAIN, text()) - .withOptions() - .comment("Holds domains this James server is operating on.") +public interface CassandraDomainListModule { + CassandraModule MODULE = CassandraModule.table(CassandraDomainsTable.TABLE_NAME) + .comment("Holds domains this James server is operating on.") + .options(options -> options .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(CassandraDomainsTable.DOMAIN, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java b/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java index 7523451..6d7b17b 100644 --- a/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java +++ b/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java @@ -26,13 +26,13 @@ import org.apache.james.backends.cassandra.utils.CassandraConstants; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -public class CassandraMailRepositoryUrlModule { - public static final CassandraModule MODULE = CassandraModule.table(UrlsTable.TABLE_NAME) - .statement(statement -> statement - .addPartitionKey(UrlsTable.URL, text()) - .withOptions() - .comment("Holds the list of available mail repository") +public interface CassandraMailRepositoryUrlModule { + CassandraModule MODULE = CassandraModule.table(UrlsTable.TABLE_NAME) + .comment("Holds the list of available mail repository") + .options(options -> options .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(UrlsTable.URL, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java index 0970ce1..87a469b 100644 --- a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java +++ b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java @@ -27,15 +27,15 @@ import org.apache.james.rrt.cassandra.tables.CassandraRecipientRewriteTableTable import com.datastax.driver.core.schemabuilder.SchemaBuilder; -public class CassandraRRTModule { - public static final CassandraModule MODULE = CassandraModule.table(CassandraRecipientRewriteTableTable.TABLE_NAME) +public interface CassandraRRTModule { + CassandraModule MODULE = CassandraModule.table(CassandraRecipientRewriteTableTable.TABLE_NAME) + .comment("Holds address re-writing rules.") + .options(options -> options + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) .statement(statement -> statement .addPartitionKey(CassandraRecipientRewriteTableTable.USER, text()) .addClusteringColumn(CassandraRecipientRewriteTableTable.DOMAIN, text()) - .addClusteringColumn(CassandraRecipientRewriteTableTable.MAPPING, text()) - .withOptions() - .comment("Holds address re-writing rules.") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .addClusteringColumn(CassandraRecipientRewriteTableTable.MAPPING, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java index 799e972..0000dab 100644 --- a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java +++ b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java @@ -36,39 +36,39 @@ public interface CassandraSieveRepositoryModule { CassandraModule MODULE = CassandraModule.builder() .table(CassandraSieveTable.TABLE_NAME) + .comment("Holds SIEVE scripts.") + .options(options -> options) .statement(statement -> statement .addPartitionKey(CassandraSieveTable.USER_NAME, text()) .addClusteringColumn(CassandraSieveTable.SCRIPT_NAME, text()) .addColumn(CassandraSieveTable.SCRIPT_CONTENT, text()) .addColumn(CassandraSieveTable.IS_ACTIVE, cboolean()) - .addColumn(CassandraSieveTable.SIZE, bigint()) - .withOptions() - .comment("Holds SIEVE scripts.")) + .addColumn(CassandraSieveTable.SIZE, bigint())) .table(CassandraSieveSpaceTable.TABLE_NAME) + .comment("Holds per user current space occupied by SIEVE scripts.") + .options(options -> options) .statement(statement -> statement .addPartitionKey(CassandraSieveSpaceTable.USER_NAME, text()) - .addColumn(CassandraSieveSpaceTable.SPACE_USED, counter()) - .withOptions() - .comment("Holds per user current space occupied by SIEVE scripts.")) + .addColumn(CassandraSieveSpaceTable.SPACE_USED, counter())) .table(CassandraSieveQuotaTable.TABLE_NAME) + .comment("Holds per user size limitations for SIEVE script storage.") + .options(options -> options) .statement(statement -> statement .addPartitionKey(CassandraSieveQuotaTable.USER_NAME, text()) - .addColumn(CassandraSieveQuotaTable.QUOTA, bigint()) - .withOptions() - .comment("Holds per user size limitations for SIEVE script storage.")) + .addColumn(CassandraSieveQuotaTable.QUOTA, bigint())) .table(CassandraSieveClusterQuotaTable.TABLE_NAME) + .comment("Holds default size limitations for SIEVE script storage.") + .options(options -> options) .statement(statement -> statement .addPartitionKey(CassandraSieveClusterQuotaTable.NAME, text()) - .addColumn(CassandraSieveClusterQuotaTable.VALUE, bigint()) - .withOptions() - .comment("Holds default size limitations for SIEVE script storage.")) + .addColumn(CassandraSieveClusterQuotaTable.VALUE, bigint())) .table(CassandraSieveActiveTable.TABLE_NAME) + .comment("Denormalisation table. Allows per user direct active SIEVE script retrieval.") + .options(options -> options) .statement(statement -> statement .addPartitionKey(CassandraSieveActiveTable.USER_NAME, text()) .addColumn(CassandraSieveActiveTable.SCRIPT_NAME, text()) - .addColumn(CassandraSieveActiveTable.DATE, timestamp()) - .withOptions() - .comment("Denormalisation table. Allows per user direct active SIEVE script retrieval.")) + .addColumn(CassandraSieveActiveTable.DATE, timestamp())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java index 473cb02..0f04fb4 100644 --- a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java +++ b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java @@ -24,16 +24,13 @@ import static com.datastax.driver.core.DataType.text; import org.apache.james.backends.cassandra.components.CassandraModule; import org.apache.james.user.cassandra.tables.CassandraUserTable; -public class CassandraUsersRepositoryModule { - - public static final CassandraModule MODULE = CassandraModule.table(CassandraUserTable.TABLE_NAME) +public interface CassandraUsersRepositoryModule { + CassandraModule MODULE = CassandraModule.table(CassandraUserTable.TABLE_NAME) + .comment("Holds users of this James server.") .statement(statement -> statement .addPartitionKey(CassandraUserTable.NAME, text()) .addColumn(CassandraUserTable.REALNAME, text()) .addColumn(CassandraUserTable.PASSWORD, text()) - .addColumn(CassandraUserTable.ALGORITHM, text()) - .withOptions() - .comment("Holds users of this James server.")) + .addColumn(CassandraUserTable.ALGORITHM, text())) .build(); - } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java index 6fe4583..f7267fd 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java @@ -28,14 +28,14 @@ import org.apache.james.jmap.cassandra.access.table.CassandraAccessTokenTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -public class CassandraAccessModule { - public static final CassandraModule MODULE = CassandraModule.table(CassandraAccessTokenTable.TABLE_NAME) - .statement(statement -> statement - .addPartitionKey(CassandraAccessTokenTable.TOKEN, uuid()) - .addColumn(CassandraAccessTokenTable.USERNAME, text()) - .withOptions() - .comment("Holds JMAP access token required to process to authentication.") +public interface CassandraAccessModule { + CassandraModule MODULE = CassandraModule.table(CassandraAccessTokenTable.TABLE_NAME) + .comment("Holds JMAP access token required to process to authentication.") + .options(options -> options .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(CassandraAccessTokenTable.TOKEN, uuid()) + .addColumn(CassandraAccessTokenTable.USERNAME, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java index 0cb2abb..e73e0a1 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java @@ -27,15 +27,15 @@ import org.apache.james.jmap.cassandra.vacation.tables.CassandraNotificationTabl import com.datastax.driver.core.schemabuilder.SchemaBuilder; -public class CassandraNotificationRegistryModule { - public static final CassandraModule MODULE = CassandraModule.table(CassandraNotificationTable.TABLE_NAME) - .statement(statement -> statement - .addPartitionKey(CassandraNotificationTable.ACCOUNT_ID, text()) - .addClusteringColumn(CassandraNotificationTable.RECIPIENT_ID, text()) - .withOptions() - .comment("Stores registry of vacation notification being sent.") +public interface CassandraNotificationRegistryModule { + CassandraModule MODULE = CassandraModule.table(CassandraNotificationTable.TABLE_NAME) + .comment("Stores registry of vacation notification being sent.") + .options(options -> options .compactionOptions(SchemaBuilder.dateTieredStrategy()) .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .statement(statement -> statement + .addPartitionKey(CassandraNotificationTable.ACCOUNT_ID, text()) + .addClusteringColumn(CassandraNotificationTable.RECIPIENT_ID, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java index a55d71a..9fb922b 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java @@ -29,8 +29,12 @@ import org.apache.james.jmap.cassandra.vacation.tables.CassandraVacationTable; import com.datastax.driver.core.schemabuilder.SchemaBuilder; -public class CassandraVacationModule { - public static final CassandraModule MODULE = CassandraModule.table(CassandraVacationTable.TABLE_NAME) +public interface CassandraVacationModule { + CassandraModule MODULE = CassandraModule.table(CassandraVacationTable.TABLE_NAME) + .comment("Holds vacation definition. Allow one to automatically respond to emails with a custom message.") + .options(options -> options + .caching(SchemaBuilder.KeyCaching.ALL, + SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) .statement(statement -> statement .addPartitionKey(CassandraVacationTable.ACCOUNT_ID, text()) .addColumn(CassandraVacationTable.IS_ENABLED, cboolean()) @@ -38,10 +42,6 @@ public class CassandraVacationModule { .addUDTColumn(CassandraVacationTable.TO_DATE, SchemaBuilder.frozen(CassandraZonedDateTimeModule.ZONED_DATE_TIME)) .addColumn(CassandraVacationTable.TEXT, text()) .addColumn(CassandraVacationTable.SUBJECT, text()) - .addColumn(CassandraVacationTable.HTML, text()) - .withOptions() - .comment("Holds vacation definition. Allow one to automatically respond to emails with a custom message.") - .caching(SchemaBuilder.KeyCaching.ALL, - SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))) + .addColumn(CassandraVacationTable.HTML, text())) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java index a2b7661..cfbcdf4 100644 --- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java +++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java @@ -37,14 +37,18 @@ public interface CassandraMailRepositoryModule { .addColumn(MailRepositoryTable.HEADER_NAME, text()) .addColumn(MailRepositoryTable.HEADER_VALUE, text())) .table(MailRepositoryTable.COUNT_TABLE) + .comment("Projection maintaining per mail repository mail counter") .statement(statement -> statement .addPartitionKey(MailRepositoryTable.REPOSITORY_NAME, text()) .addColumn(MailRepositoryTable.COUNT, counter())) .table(MailRepositoryTable.KEYS_TABLE_NAME) + .comment("Per-mailRepository mail key list") .statement(statement -> statement .addPartitionKey(MailRepositoryTable.REPOSITORY_NAME, text()) .addClusteringColumn(MailRepositoryTable.MAIL_KEY, text())) .table(MailRepositoryTable.CONTENT_TABLE_NAME) + .comment("Stores the mails for a given repository. " + + "Content is stored with other blobs") .statement(statement -> statement .addPartitionKey(MailRepositoryTable.REPOSITORY_NAME, text()) .addPartitionKey(MailRepositoryTable.MAIL_KEY, text()) @@ -59,9 +63,6 @@ public interface CassandraMailRepositoryModule { .addColumn(MailRepositoryTable.REMOTE_HOST, text()) .addColumn(MailRepositoryTable.REMOTE_ADDR, text()) .addColumn(MailRepositoryTable.LAST_UPDATED, timestamp()) - .addUDTMapColumn(MailRepositoryTable.PER_RECIPIENT_SPECIFIC_HEADERS, text(), frozen(MailRepositoryTable.HEADER_TYPE)) - .withOptions() - .comment("Stores the mails for a given repository. " + - "Content is stored with other blobs")) + .addUDTMapColumn(MailRepositoryTable.PER_RECIPIENT_SPECIFIC_HEADERS, text(), frozen(MailRepositoryTable.HEADER_TYPE))) .build(); } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org