You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/03/23 02:29:32 UTC

[james-project] branch master updated (f49b5b0 -> c3e1cef)

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git.


    from f49b5b0  JAMES-3105 Limit concurrency of mailbox counters recomputation
     new 65b328a  JAMES-3122 Upgrade to log4J2 in server/app
     new 07cda85  JAMES-3122 Remove LogEnabled deprecated API
     new 2638f0d  JAMES-3121 Use TimeWindowCompationStrategy for Cassandra time serie tables (EnqueuedMail and DeletedMail)
     new 0a13608  JAMES-3121 Disable read_repair for Cassandra time serie tables (EnqueuedMail and DeletedMail)
     new fa8dfd9  JAMES-3121 Use SizeTieredCompationStrategy for Cassandra tables
     new db80e3e  JAMES-3121 Use LeveledCompationStrategy for Cassandra eventStore table
     new bd6074c  JAMES-3121 Increase bloom_filter_fp_chance for Cassandra tables
     new c3e1cef  JAMES-3121 Write Cassandra time serie tables improvements upgrade instructions

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGELOG.md                                       |   3 +-
 .../cassandra/CassandraEventStoreModule.scala      |   8 +-
 .../modules/CassandraApplicableFlagsModule.java    |   2 +-
 .../modules/CassandraAttachmentModule.java         |   5 +-
 .../modules/CassandraDeletedMessageModule.java     |   2 +-
 .../modules/CassandraFirstUnseenModule.java        |   3 +-
 .../modules/CassandraMailboxCounterModule.java     |   3 +-
 .../modules/CassandraMailboxRecentsModule.java     |   2 +-
 .../cassandra/modules/CassandraMessageModule.java  |   4 +-
 .../cassandra/modules/CassandraModSeqModule.java   |   2 +-
 .../cassandra/modules/CassandraUidModule.java      |   3 +-
 pom.xml                                            |  17 ++-
 server/app/pom.xml                                 |  10 +-
 .../org/apache/james/lifecycle/api/LogEnabled.java |  41 -------
 server/container/spring/pom.xml                    |  18 ++--
 .../lifecycle/LogEnabledBeanPostProcessor.java     |  52 ---------
 .../container/spring/lifecycle/LogProvider.java    |  47 --------
 .../spring/lifecycle/LogProviderImpl.java          | 120 ---------------------
 .../lifecycle/LogProviderManagementMBean.java      |  39 -------
 .../OsgiLifecycleBeanFactoryPostProcessor.java     |  90 ----------------
 .../META-INF/org/apache/james/spring-server.xml    |   3 +-
 .../resources/META-INF/spring/loaders-context.xml  |  10 --
 .../cassandra/CassandraMailQueueViewModule.java    |  17 ++-
 upgrade-instructions.md                            |  64 ++++++++++-
 24 files changed, 125 insertions(+), 440 deletions(-)
 delete mode 100644 server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/LogEnabled.java
 delete mode 100644 server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java
 delete mode 100644 server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProvider.java
 delete mode 100644 server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProviderImpl.java
 delete mode 100644 server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProviderManagementMBean.java
 delete mode 100644 server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/osgi/OsgiLifecycleBeanFactoryPostProcessor.java


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 05/08: JAMES-3121 Use SizeTieredCompationStrategy for Cassandra tables

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit fa8dfd93196f0274818f2d9cc569034b16f2fcf7
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Thu Mar 19 10:45:54 2020 +0100

    JAMES-3121 Use SizeTieredCompationStrategy for Cassandra tables
    
    According to https://docs.datastax.com/en/dse/5.1/dse-dev/datastax_enterprise/config/configChooseCompactStrategy.html
    
    Migrating some tables to SizeTieredCompationStrategy will be more
    efficient when data is not to frequent upsert or immutable.
---
 .../mailbox/cassandra/modules/CassandraApplicableFlagsModule.java     | 2 +-
 .../james/mailbox/cassandra/modules/CassandraAttachmentModule.java    | 4 ++--
 .../mailbox/cassandra/modules/CassandraDeletedMessageModule.java      | 2 +-
 .../james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java   | 2 +-
 .../mailbox/cassandra/modules/CassandraMailboxCounterModule.java      | 2 +-
 .../mailbox/cassandra/modules/CassandraMailboxRecentsModule.java      | 2 +-
 .../james/mailbox/cassandra/modules/CassandraMessageModule.java       | 4 ++--
 .../apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java | 2 +-
 .../apache/james/mailbox/cassandra/modules/CassandraUidModule.java    | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

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 afc7470..cbddba7 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
@@ -35,7 +35,7 @@ public interface CassandraApplicableFlagsModule {
         .comment("Holds flags being used on specific mailboxes. As system flags are implicit, this table " +
             "stores user flags.")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
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 4699cae..bb2604e 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
@@ -46,7 +46,7 @@ public interface CassandraAttachmentModule {
         .comment("Holds attachment for fast attachment retrieval. Content of messages is stored" +
             "in `blobs` and `blobparts` tables.")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
@@ -58,7 +58,7 @@ public interface CassandraAttachmentModule {
         .table(CassandraAttachmentMessageIdTable.TABLE_NAME)
         .comment("Holds ids of messages owning the attachment")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
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 2bd334b..aa7647d 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
@@ -33,7 +33,7 @@ public interface CassandraDeletedMessageModule {
     CassandraModule MODULE = CassandraModule.table(TABLE_NAME)
         .comment("Denormalisation table. Allows to retrieve UID marked as DELETED in specific mailboxes.")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
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 ec4a844..c7713a0 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
@@ -30,7 +30,7 @@ public interface CassandraFirstUnseenModule {
     CassandraModule MODULE = CassandraModule.table(CassandraFirstUnseenTable.TABLE_NAME)
         .comment("Denormalisation table. Allow to quickly retrieve the first UNSEEN UID of a specific mailbox.")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))
             .clusteringOrder(CassandraFirstUnseenTable.UID, SchemaBuilder.Direction.ASC))
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 74661c2..71dbff9 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
@@ -32,7 +32,7 @@ public interface CassandraMailboxCounterModule {
     CassandraModule MODULE = CassandraModule.table(CassandraMailboxCountersTable.TABLE_NAME)
         .comment("Holds messages count and unseen message count for each mailbox.")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
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 c81f4d0..16eb511 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
@@ -33,7 +33,7 @@ public interface CassandraMailboxRecentsModule {
         .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())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
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 f3193f5..280eee0 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
@@ -45,7 +45,7 @@ public interface CassandraMessageModule {
         .table(CassandraMessageIdTable.TABLE_NAME)
         .comment("Holds mailbox and flags for each message, lookup by mailbox ID + UID")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CACHED_MESSAGE_ID_ROWS)))
         .statement(statement -> statement
@@ -64,7 +64,7 @@ public interface CassandraMessageModule {
         .table(MessageIdToImapUid.TABLE_NAME)
         .comment("Holds mailbox and flags for each message, lookup by message ID")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CACHED_IMAP_UID_ROWS)))
         .statement(statement -> statement
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 459a03a..cf5c35b 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
@@ -32,7 +32,7 @@ public interface CassandraModSeqModule {
     CassandraModule MODULE = CassandraModule.table(CassandraMessageModseqTable.TABLE_NAME)
         .comment("Holds and is used to generate MODSEQ. A monotic counter is implemented on top of this table.")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
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 614f10d..5df1451 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
@@ -32,7 +32,7 @@ public interface CassandraUidModule {
     CassandraModule MODULE = CassandraModule.table(CassandraMessageUidTable.TABLE_NAME)
         .comment("Holds and is used to generate UID. A monotic counter is implemented on top of this table.")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .compactionOptions(SchemaBuilder.sizedTieredStategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 07/08: JAMES-3121 Increase bloom_filter_fp_chance for Cassandra tables

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit bd6074cb689517061ecef9ddca3ab7a88d133cda
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Thu Mar 19 11:05:00 2020 +0100

    JAMES-3121 Increase bloom_filter_fp_chance for Cassandra tables
---
 .../james/mailbox/cassandra/modules/CassandraAttachmentModule.java       | 1 +
 .../james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java      | 1 +
 .../james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java   | 1 +
 .../org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java   | 1 +
 .../queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java      | 1 +
 5 files changed, 5 insertions(+)

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 bb2604e..1db8dfc 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
@@ -69,6 +69,7 @@ public interface CassandraAttachmentModule {
         .comment("Holds explicit owners of some attachments")
         .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
+            .bloomFilterFPChance(0.01)
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
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 c7713a0..9b54e34 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
@@ -31,6 +31,7 @@ public interface CassandraFirstUnseenModule {
         .comment("Denormalisation table. Allow to quickly retrieve the first UNSEEN UID of a specific mailbox.")
         .options(options -> options
             .compactionOptions(SchemaBuilder.sizedTieredStategy())
+            .bloomFilterFPChance(0.01)
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))
             .clusteringOrder(CassandraFirstUnseenTable.UID, SchemaBuilder.Direction.ASC))
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 71dbff9..14ebc86 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
@@ -33,6 +33,7 @@ public interface CassandraMailboxCounterModule {
         .comment("Holds messages count and unseen message count for each mailbox.")
         .options(options -> options
             .compactionOptions(SchemaBuilder.sizedTieredStategy())
+            .bloomFilterFPChance(0.01)
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
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 5df1451..47fd98a 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
@@ -33,6 +33,7 @@ public interface CassandraUidModule {
         .comment("Holds and is used to generate UID. A monotic counter is implemented on top of this table.")
         .options(options -> options
             .compactionOptions(SchemaBuilder.sizedTieredStategy())
+            .bloomFilterFPChance(0.01)
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
index 518fe3b..fadd939 100644
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
@@ -126,6 +126,7 @@ public interface CassandraMailQueueViewModule {
             "existence in this table")
         .options(options -> options
             .compactionOptions(SchemaBuilder.timeWindowCompactionStrategy())
+            .bloomFilterFPChance(0.01)
             .readRepairChance(NO_READ_REPAIR))
         .statement(statement -> statement
             .addPartitionKey(DeletedMailTable.QUEUE_NAME, text())


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 08/08: JAMES-3121 Write Cassandra time serie tables improvements upgrade instructions

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit c3e1cef926a20cfd83089dc83e1a693d6ce1ba7a
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Wed Mar 18 16:58:06 2020 +0100

    JAMES-3121 Write Cassandra time serie tables improvements upgrade instructions
---
 upgrade-instructions.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 46 insertions(+), 2 deletions(-)

diff --git a/upgrade-instructions.md b/upgrade-instructions.md
index f634df0..ffdc651 100644
--- a/upgrade-instructions.md
+++ b/upgrade-instructions.md
@@ -31,6 +31,7 @@ Change list:
  - [UidValidity and JPA or Cassandra](#uid-validity-and-jpa-or-cassandra)
  - [Differentiation between domain alias and domain mapping](#differentiation-between-domain-alias-and-domain-mapping)
  - [ProtocolSession storng typing](#protocolsession-storng-typing)
+ - [Tune Cassandra time serie tables options](#tune-cassandra-time-serie-tables-options)
  - [LogEnabled removal](#logenabled-removal)
 
 ### LogEnabled removal
@@ -47,12 +48,55 @@ As Log4J 1.x is not compatible with Java 9+ runtime, we adopted Log4J2 as a logg
 
 As a consequence, the deprecated `LogEnabled` API will be removed. We recommend extension developers to obtain their
 Logger instance using the SLF4J `LoggerFactory` class instead.
- 
+
+### Tune Cassandra time serie tables options
+
+Date 18/03/2020
+
+SHA-1 XXX
+
+JIRA: https://issues.apache.org/jira/browse/JAMES-3121
+
+Impacted product: Guice distributed James
+
+Our usage of Cassandra for the time series have been improved by fine tuning the compaction strategy and
+the read repair option.
+
+#### Upgrade procedure
+
+In order to unlock these improvements we advise you running the following commands on existing instalations
+
+```
+ALTER TABLE james_keyspace.deletedMailsV2 WITH compaction = { 'class' :  'TimeWindowCompactionStrategy'  };
+ALTER TABLE james_keyspace.enqueuedMailsV3 WITH  compaction = {'compaction_window_size': '1',
+                                                               'compaction_window_unit': 'HOURS',
+                                                               'class': 'org.apache.cassandra.db.compaction.TimeWindowCompaction' };
+ALTER TABLE james_keyspace.applicableFlag WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.attachmentMessageId WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.attachmentV2 WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.firstUnseen WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.mailboxCounters WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.mailboxRecents WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.messageCounter WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.messageDeleted WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.modseq WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.imapUidTable WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.messageIdTable WITH compaction = { 'class' :  'SizeTieredCompactionStrategy'  };
+ALTER TABLE james_keyspace.eventStore WITH compaction = { 'class' :  'LeveledCompactionStrategy'  };
+ALTER TABLE james_keyspace.attachmentOwners WITH bloom_filter_fp_chance = 0.01;
+ALTER TABLE james_keyspace.deletedMailsV2 WITH bloom_filter_fp_chance = 0.01;
+ALTER TABLE james_keyspace.firstUnseen WITH bloom_filter_fp_chance = 0.01;
+ALTER TABLE james_keyspace.mailboxCounters WITH bloom_filter_fp_chance = 0.01;
+ALTER TABLE james_keyspace.messageCounter WITH bloom_filter_fp_chance = 0.01;
+ALTER TABLE james_keyspace.deletedMailsV2 WITH read_repair_chance = 0.0;
+ALTER TABLE james_keyspace.enqueuedMailsV3 WITH read_repair_chance = 0.0;
+```
+
 ### ProtocolSession storng typing
 
 Date 19/03/2020
 
-SHA-1 XXX
+SHA-1 58b1d879ab
 
 JIRA: https://issues.apache.org/jira/browse/JAMES-3119
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 06/08: JAMES-3121 Use LeveledCompationStrategy for Cassandra eventStore table

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit db80e3ee80864d38306ee1d059e1b0c80f49695f
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Thu Mar 19 10:50:06 2020 +0100

    JAMES-3121 Use LeveledCompationStrategy for Cassandra eventStore table
---
 .../eventstore/cassandra/CassandraEventStoreModule.scala          | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.scala b/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.scala
index 189be31..b366cb7 100644
--- a/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.scala
+++ b/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.scala
@@ -26,9 +26,11 @@ import com.datastax.driver.core.schemabuilder.{Create, SchemaBuilder}
 object CassandraEventStoreModule {
   val MODULE = CassandraModule.table(CassandraEventStoreTable.EVENTS_TABLE)
     .comment("Store events of a EventSourcing aggregate")
-    .options((options: Create.Options) => options.caching(
-      SchemaBuilder.KeyCaching.ALL,
-      SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+    .options((options: Create.Options) => options
+      .compactionOptions(SchemaBuilder.leveledStrategy())
+      .caching(
+        SchemaBuilder.KeyCaching.ALL,
+        SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
     .statement(_.addPartitionKey(CassandraEventStoreTable.AGGREGATE_ID, DataType.varchar)
       .addClusteringColumn(CassandraEventStoreTable.EVENT_ID, DataType.cint)
       .addColumn(CassandraEventStoreTable.EVENT, DataType.text))


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 03/08: JAMES-3121 Use TimeWindowCompationStrategy for Cassandra time serie tables (EnqueuedMail and DeletedMail)

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 2638f0db9efb386d02bb33ec561d2dbb5b5c4c55
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Wed Mar 18 16:32:24 2020 +0100

    JAMES-3121 Use TimeWindowCompationStrategy for Cassandra time serie tables (EnqueuedMail and DeletedMail)
---
 .../view/cassandra/CassandraMailQueueViewModule.java         | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
index 6f109fd..cfade20 100644
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
@@ -26,12 +26,14 @@ import static com.datastax.driver.core.DataType.map;
 import static com.datastax.driver.core.DataType.text;
 import static com.datastax.driver.core.DataType.timestamp;
 import static com.datastax.driver.core.DataType.uuid;
+import static com.datastax.driver.core.schemabuilder.TableOptions.CompactionOptions.TimeWindowCompactionStrategyOptions.CompactionWindowUnit.HOURS;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
 
 import com.datastax.driver.core.CodecRegistry;
 import com.datastax.driver.core.ProtocolVersion;
 import com.datastax.driver.core.TupleType;
+import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraMailQueueViewModule {
 
@@ -84,7 +86,10 @@ public interface CassandraMailQueueViewModule {
             " when a mail is dequeued from a mail queue, the record associated with that mail still available in this" +
             " table and will not be deleted immediately regarding to the performance impacts," +
             " but after some scheduled tasks")
-        .options(options -> options)
+        .options(options -> options
+            .compactionOptions(SchemaBuilder.timeWindowCompactionStrategy()
+                .compactionWindowSize(1)
+                .compactionWindowUnit(HOURS)))
         .statement(statement -> statement
             .addPartitionKey(EnqueuedMailsTable.QUEUE_NAME, text())
             .addPartitionKey(EnqueuedMailsTable.TIME_RANGE_START, timestamp())
@@ -114,9 +119,10 @@ public interface CassandraMailQueueViewModule {
 
         .table(DeletedMailTable.TABLE_NAME)
         .comment("this table stores the dequeued mails, while browsing mail from table: "
-            + EnqueuedMailsTable.TABLE_NAME + " we need to filter out mails have been dequeued by checking their " +
+            + DeletedMailTable.TABLE_NAME + " we need to filter out mails have been dequeued by checking their " +
             "existence in this table")
-        .options(options -> options)
+        .options(options -> options
+            .compactionOptions(SchemaBuilder.timeWindowCompactionStrategy()))
         .statement(statement -> statement
             .addPartitionKey(DeletedMailTable.QUEUE_NAME, text())
             .addPartitionKey(DeletedMailTable.ENQUEUE_ID, uuid()))


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 04/08: JAMES-3121 Disable read_repair for Cassandra time serie tables (EnqueuedMail and DeletedMail)

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 0a136080d09c3d2a207a1a0d6840620400fde0b6
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Wed Mar 18 16:35:21 2020 +0100

    JAMES-3121 Disable read_repair for Cassandra time serie tables (EnqueuedMail and DeletedMail)
    
    According to https://stackoverflow.com/a/43676007
    
    > Recommendations: if the table is for time series data, it can be set to 0 (zero).
    > For other tables, the more performant strategy is to set dc_local_read_repair_chance to 0.1
    >
    > Source : http://docs.datastax.com/en/cql/3.1/cql/cql_reference/tabProp.html#tabProp__cql_tabprop_more_read_repairs
---
 .../rabbitmq/view/cassandra/CassandraMailQueueViewModule.java     | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
index cfade20..518fe3b 100644
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
@@ -37,6 +37,8 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraMailQueueViewModule {
 
+    Double NO_READ_REPAIR = 0.0;
+
     interface EnqueuedMailsTable {
         String TABLE_NAME = "enqueuedMailsV3";
 
@@ -89,7 +91,8 @@ public interface CassandraMailQueueViewModule {
         .options(options -> options
             .compactionOptions(SchemaBuilder.timeWindowCompactionStrategy()
                 .compactionWindowSize(1)
-                .compactionWindowUnit(HOURS)))
+                .compactionWindowUnit(HOURS))
+            .readRepairChance(NO_READ_REPAIR))
         .statement(statement -> statement
             .addPartitionKey(EnqueuedMailsTable.QUEUE_NAME, text())
             .addPartitionKey(EnqueuedMailsTable.TIME_RANGE_START, timestamp())
@@ -122,7 +125,8 @@ public interface CassandraMailQueueViewModule {
             + DeletedMailTable.TABLE_NAME + " we need to filter out mails have been dequeued by checking their " +
             "existence in this table")
         .options(options -> options
-            .compactionOptions(SchemaBuilder.timeWindowCompactionStrategy()))
+            .compactionOptions(SchemaBuilder.timeWindowCompactionStrategy())
+            .readRepairChance(NO_READ_REPAIR))
         .statement(statement -> statement
             .addPartitionKey(DeletedMailTable.QUEUE_NAME, text())
             .addPartitionKey(DeletedMailTable.ENQUEUE_ID, uuid()))


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 01/08: JAMES-3122 Upgrade to log4J2 in server/app

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 65b328a40f11999bc3682e8531f2281786b9887c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Mar 19 14:16:49 2020 +0700

    JAMES-3122 Upgrade to log4J2 in server/app
    
    LOG4J 1 is deprecated and had been reported not to play well with Java 9+
    
    https://www.mail-archive.com/server-user@james.apache.org/msg16315.html
---
 pom.xml                         | 17 ++++++++++++-----
 server/app/pom.xml              | 10 +++++-----
 server/container/spring/pom.xml | 18 +++++++++---------
 3 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/pom.xml b/pom.xml
index 869e985..e987ecb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -592,6 +592,7 @@
         <apache.openjpa.version>3.1.0</apache.openjpa.version>
         <camel.version>2.24.1</camel.version>
         <derby.version>10.14.2.0</derby.version>
+        <log4j2.version>2.13.1</log4j2.version>
         <javax.inject.version>1</javax.inject.version>
         <javax.activation.groupId>javax.activation</javax.activation.groupId>
         <javax.activation.artifactId>activation</javax.activation.artifactId>
@@ -2416,6 +2417,17 @@
                 <type>test-jar</type>
             </dependency>
             <dependency>
+                <groupId>org.apache.logging.log4j</groupId>
+                <artifactId>log4j-slf4j-impl</artifactId>
+                <version>${log4j2.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.logging.log4j</groupId>
+                <artifactId>log4j</artifactId>
+                <version>${log4j2.version}</version>
+                <type>pom</type>
+            </dependency>
+            <dependency>
                 <groupId>org.apache.maven</groupId>
                 <artifactId>maven-plugin-api</artifactId>
                 <version>${maven-plugin-api.version}</version>
@@ -2587,11 +2599,6 @@
                 <version>${slf4j.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-log4j12</artifactId>
-                <version>${slf4j.version}</version>
-            </dependency>
-            <dependency>
                 <groupId>org.springframework</groupId>
                 <artifactId>spring-aop</artifactId>
                 <version>${spring.version}</version>
diff --git a/server/app/pom.xml b/server/app/pom.xml
index dbeebf2..4b4a87b 100644
--- a/server/app/pom.xml
+++ b/server/app/pom.xml
@@ -549,6 +549,11 @@
             <scope>runtime</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-slf4j-impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
             <scope>runtime</scope>
@@ -559,11 +564,6 @@
             <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-jdbc</artifactId>
             <scope>runtime</scope>
diff --git a/server/container/spring/pom.xml b/server/container/spring/pom.xml
index a1a9969..678c4f8 100644
--- a/server/container/spring/pom.xml
+++ b/server/container/spring/pom.xml
@@ -119,11 +119,6 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.17</version>
-        </dependency>
-        <dependency>
             <groupId>org.apache.activemq</groupId>
             <artifactId>activemq-spring</artifactId>
             <version>${activemq.version}</version>
@@ -153,6 +148,15 @@
             <artifactId>commons-configuration2</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <type>pom</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-slf4j-impl</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
         </dependency>
@@ -165,10 +169,6 @@
             <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-beans</artifactId>
         </dependency>


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 02/08: JAMES-3122 Remove LogEnabled deprecated API

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 07cda85c81ca8d486b996fbb4adb0c95a20840cb
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Mar 20 14:05:35 2020 +0700

    JAMES-3122 Remove LogEnabled deprecated API
---
 CHANGELOG.md                                       |   3 +-
 .../org/apache/james/lifecycle/api/LogEnabled.java |  41 -------
 .../lifecycle/LogEnabledBeanPostProcessor.java     |  52 ---------
 .../container/spring/lifecycle/LogProvider.java    |  47 --------
 .../spring/lifecycle/LogProviderImpl.java          | 120 ---------------------
 .../lifecycle/LogProviderManagementMBean.java      |  39 -------
 .../OsgiLifecycleBeanFactoryPostProcessor.java     |  90 ----------------
 .../META-INF/org/apache/james/spring-server.xml    |   3 +-
 .../resources/META-INF/spring/loaders-context.xml  |  10 --
 upgrade-instructions.md                            |  16 +++
 10 files changed, 19 insertions(+), 402 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6e5d8c1..ff57fdb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -65,7 +65,8 @@ of tasks being currently executed.
 - JAMES-3016 RemoteDelivery now doesn't enable `allow8bitmime` property by default. 
 This parameter could cause body content alteration leading to DKIM invalid DKIM signatures to be positioned. 
 Thanks to Sergey B. for the report. 
-More details about the property is at [java mail doc](https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html) 
+More details about the property is at [java mail doc](https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html)
+ - JAMES-3122 LogEnabled API in Spring product had been removed for Log4J2 adoption for Java 9+ runtime compatibility. 
  
 ### Third party softwares
  - The distributed James server product (relying on Guice, Cassandra, ElasticSearch, RabbitMQ and optionally Swift) now needs at least RabbitMQ 3.8.
diff --git a/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/LogEnabled.java b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/LogEnabled.java
deleted file mode 100644
index d829441..0000000
--- a/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/LogEnabled.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.lifecycle.api;
-
-import org.slf4j.Logger;
-
-/**
- * Indicates that a services requires general logging. Note that this log should
- * only be used for general service operations. A context sensitive log should
- * be preferred where that is available within the context of a call.
- *
- * @deprecated Prefer using SLF4J LoggingFactory to get a Logger in each class
- */
-@Deprecated
-public interface LogEnabled {
-
-    /**
-     * Sets the service log.
-     * 
-     * @param log
-     *            not null
-     */
-    void setLog(Logger log);
-}
diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java b/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java
deleted file mode 100644
index 6402211..0000000
--- a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.container.spring.lifecycle;
-
-import org.apache.james.lifecycle.api.LogEnabled;
-
-/**
- * Inject Commons Log to beans which implement LogEnabled.
- *
- * @deprecated Prefer using SLF4J LoggingFactory to get a Logger in each class
- */
-@Deprecated
-public class LogEnabledBeanPostProcessor extends AbstractLifecycleBeanPostProcessor<LogEnabled> {
-
-    private LogProvider provider;
-
-    public void setLogProvider(LogProvider provider) {
-        this.provider = provider;
-    }
-
-    @Override
-    protected Class<LogEnabled> getLifeCycleInterface() {
-        return LogEnabled.class;
-    }
-
-    @Override
-    protected void executeLifecycleMethodBeforeInit(LogEnabled bean, String beanname) throws Exception {
-        bean.setLog(provider.getLog(beanname));
-    }
-
-    @Override
-    protected void executeLifecycleMethodAfterInit(LogEnabled bean, String beanname) throws Exception {
-        // Do nothing.
-    }
-
-}
diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProvider.java b/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProvider.java
deleted file mode 100644
index 5826257..0000000
--- a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProvider.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.container.spring.lifecycle;
-
-import org.slf4j.Logger;
-
-/**
- * Provide {@link Logger} instances for Beans
- *
- * @deprecated Prefer using SLF4J LoggingFactory to get a Logger in each class
- */
-@Deprecated
-public interface LogProvider {
-
-    /**
-     * Return the Log for the bean with the given name
-     * 
-     * @param beanName
-     * @return log
-     */
-    Logger getLog(String beanName);
-
-    /**
-     * Register a {@link Logger} for a beanName. The registered Log will get
-     * returned by {@link #getLog(String)}
-     * 
-     * @param beanName
-     * @param log
-     */
-    void registerLog(String beanName, Logger log);
-}
diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProviderImpl.java b/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProviderImpl.java
deleted file mode 100644
index d2adee1..0000000
--- a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProviderImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.container.spring.lifecycle;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.log4j.Level;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-
-/**
- * Provide a Log object for components
- *
- * @deprecated Prefer using SLF4J LoggingFactory to get a Logger in each class
- */
-@Deprecated
-public class LogProviderImpl implements LogProvider, InitializingBean, LogProviderManagementMBean {
-
-    private final ConcurrentHashMap<String, Logger> logMap = new ConcurrentHashMap<>();
-    private Map<String, String> logs;
-    private static final String PREFIX = "james.";
-
-    /**
-     * Use {@link Logger} to create the Log
-     * 
-     * @param loggerName
-     * @return log
-     */
-    protected Logger createLog(String loggerName) {
-        return LoggerFactory.getLogger(loggerName);
-    }
-
-    public void setLogMappings(Map<String, String> logs) {
-        this.logs = logs;
-    }
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        if (logs != null) {
-            for (String key : logs.keySet()) {
-                String value = logs.get(key);
-                registerLog(key, createLog(PREFIX + value));
-            }
-        }
-    }
-
-    @Override
-    public Logger getLog(String name) {
-        logMap.putIfAbsent(name, createLog(PREFIX + name));
-        return logMap.get(name);
-    }
-
-    @Override
-    public void registerLog(String beanName, Logger log) {
-        logMap.put(beanName, log);
-    }
-
-    @Override
-    public List<String> getSupportedLogLevels() {
-        return Arrays.asList("DEBUG", "INFO", "WARN", "ERROR", "OFF");
-    }
-
-    @Override
-    public Map<String, String> getLogLevels() {
-        TreeMap<String, String> levels = new TreeMap<>();
-        for (String name : logMap.keySet()) {
-            String level = getLogLevel(name);
-            if (level != null) {
-                levels.put(name, level);
-            }
-        }
-        return levels;
-
-    }
-
-    @Override
-    public String getLogLevel(String component) {
-        Logger log = logMap.get(component);
-        if (log == null) {
-            throw new IllegalArgumentException("No Log for component " + component);
-        }
-        org.apache.log4j.Logger logger = org.apache.log4j.Logger.getRootLogger();
-        if (logger == null || logger.getLevel() == null) {
-            return null;
-        }
-        Level level = logger.getLevel();
-        return level.toString();
-    }
-
-    @Override
-    public void setLogLevel(String component, String loglevel) {
-        if (!getSupportedLogLevels().contains(loglevel)) {
-            throw new IllegalArgumentException("Not supported loglevel given");
-        } else {
-            ((org.apache.log4j.Logger) logMap.get(component)).setLevel(Level.toLevel(loglevel));
-        }
-    }
-
-}
diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProviderManagementMBean.java b/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProviderManagementMBean.java
deleted file mode 100644
index 605396c..0000000
--- a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/LogProviderManagementMBean.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.container.spring.lifecycle;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Allow to change loglevel via JMX
- * @deprecated static configuration via SLF4J implementation configuration file is advised
- */
-@Deprecated
-public interface LogProviderManagementMBean {
-
-    List<String> getSupportedLogLevels();
-
-    Map<String, String> getLogLevels();
-
-    String getLogLevel(String component);
-
-    void setLogLevel(String component, String loglevel);
-
-}
diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/osgi/OsgiLifecycleBeanFactoryPostProcessor.java b/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/osgi/OsgiLifecycleBeanFactoryPostProcessor.java
deleted file mode 100644
index 7fd8dca..0000000
--- a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/osgi/OsgiLifecycleBeanFactoryPostProcessor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.container.spring.lifecycle.osgi;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
-import org.apache.james.container.spring.lifecycle.ConfigurableBeanPostProcessor;
-import org.apache.james.container.spring.lifecycle.ConfigurationProvider;
-import org.apache.james.container.spring.lifecycle.LogEnabledBeanPostProcessor;
-import org.apache.james.container.spring.lifecycle.LogProvider;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.InvalidSyntaxException;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.osgi.extender.OsgiBeanFactoryPostProcessor;
-
-
-@SuppressWarnings("deprecation")
-public class OsgiLifecycleBeanFactoryPostProcessor implements OsgiBeanFactoryPostProcessor {
-
-
-    private ConfigurationProvider confProvider;
-    private LogProvider logProvider;
-
-    public void setConfigurationProvider(ConfigurationProvider confProvider) {
-        this.confProvider = confProvider;
-    }
-
-    public void setLogProvider(LogProvider logProvider) {
-        this.logProvider = logProvider;
-    }
-
-
-    @Override
-    public void postProcessBeanFactory(BundleContext context, ConfigurableListableBeanFactory factory) throws BeansException, InvalidSyntaxException, BundleException {
-        // We need to set the beanfactory by hand. This MAY be a bug in spring-dm but I'm not sure yet
-        LogEnabledBeanPostProcessor loggingProcessor = new LogEnabledBeanPostProcessor();
-        loggingProcessor.setBeanFactory(factory);
-        loggingProcessor.setLogProvider(logProvider);
-        loggingProcessor.setOrder(0);
-        factory.addBeanPostProcessor(loggingProcessor);
-        
-        OSGIResourceAnnotationBeanPostProcessor resourceProcessor = new OSGIResourceAnnotationBeanPostProcessor();
-        resourceProcessor.setBeanClassLoader(factory.getBeanClassLoader());
-        resourceProcessor.setBeanFactory(factory);
-        resourceProcessor.setBundleContext(context);
-        resourceProcessor.setTimeout(60 * 1000);
-        factory.addBeanPostProcessor(resourceProcessor);
-        
-        OSGIPersistenceUnitAnnotationBeanPostProcessor persistenceProcessor = new OSGIPersistenceUnitAnnotationBeanPostProcessor();
-        persistenceProcessor.setBeanClassLoader(factory.getBeanClassLoader());
-        persistenceProcessor.setBeanFactory(factory);
-        persistenceProcessor.setBundleContext(context);
-        persistenceProcessor.setTimeout(60 * 1000);
-        factory.addBeanPostProcessor(persistenceProcessor);
-        
-        ConfigurableBeanPostProcessor configurationProcessor = new ConfigurableBeanPostProcessor();
-        configurationProcessor.setBeanFactory(factory);
-        configurationProcessor.setConfigurationProvider(confProvider);
-        configurationProcessor.setOrder(2);
-        factory.addBeanPostProcessor(configurationProcessor);
-        
-        InitDestroyAnnotationBeanPostProcessor annotationProcessor = new InitDestroyAnnotationBeanPostProcessor();
-        annotationProcessor.setInitAnnotationType(PostConstruct.class);
-        annotationProcessor.setDestroyAnnotationType(PreDestroy.class);
-        factory.addBeanPostProcessor(annotationProcessor);
-
-
-    }
-
-}
diff --git a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
index b4a0753..92461ad 100644
--- a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
+++ b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
@@ -259,7 +259,6 @@
                 <!--
                           <entry key="org.apache.james:type=component,name=james23importer" value-ref="james23importermanagement"/>
                 -->
-                <entry key="org.apache.james:type=container,name=logprovider" value-ref="logprovider"/>
                 <entry key="org.apache.james:type=component,name=quotamanagerbean" value-ref="quotamanagermanagement"/>
                 <entry key="org.apache.james:type=component,name=reindexerbean" value-ref="reindexermanagement"/>
                 <entry key="org.apache.james:type=component,name=sievemanagerbean" value-ref="sievemanagerbean"/>
@@ -268,7 +267,7 @@
         <property name="assembler">
             <bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
                 <property name="managedInterfaces"
-                          value="org.apache.james.fetchmail.FetchSchedulerMBean,org.apache.james.domainlist.api.DomainListManagementMBean,org.apache.james.dnsservice.api.DNSServiceMBean,org.apache.james.rrt.api.RecipientRewriteTableManagementMBean,org.apache.james.user.api.UsersRepositoryManagementMBean,org.apache.james.adapter.mailbox.MailboxManagerManagementMBean,org.apache.james.adapter.mailbox.MailboxCopierManagementMBean,org.apache.james.mailetcontainer.api.jmx.MailSpoolerMBean,org. [...]
+                          value="org.apache.james.fetchmail.FetchSchedulerMBean,org.apache.james.domainlist.api.DomainListManagementMBean,org.apache.james.dnsservice.api.DNSServiceMBean,org.apache.james.rrt.api.RecipientRewriteTableManagementMBean,org.apache.james.user.api.UsersRepositoryManagementMBean,org.apache.james.adapter.mailbox.MailboxManagerManagementMBean,org.apache.james.adapter.mailbox.MailboxCopierManagementMBean,org.apache.james.mailetcontainer.api.jmx.MailSpoolerMBean,org. [...]
             </bean>
         </property>
     </bean>
diff --git a/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml b/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml
index 5f7b850..ccfc959 100644
--- a/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml
+++ b/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml
@@ -23,16 +23,6 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
     <!--
-      Spring "Bean-Post-Processor" for LogEnabled interface.
-     -->
-    <bean class="org.apache.james.container.spring.lifecycle.LogEnabledBeanPostProcessor">
-        <property name="logProvider" ref="logprovider"/>
-        <property name="order" value="0"/>
-    </bean>
-    <bean id="logprovider" class="org.apache.james.container.spring.lifecycle.LogProviderImpl">
-    </bean>
-
-    <!--
       Configuration "Bean-Factory-Post-Processor"
         responsible to register beans from James specific configuration files
     -->
diff --git a/upgrade-instructions.md b/upgrade-instructions.md
index 0853760..f634df0 100644
--- a/upgrade-instructions.md
+++ b/upgrade-instructions.md
@@ -31,6 +31,22 @@ Change list:
  - [UidValidity and JPA or Cassandra](#uid-validity-and-jpa-or-cassandra)
  - [Differentiation between domain alias and domain mapping](#differentiation-between-domain-alias-and-domain-mapping)
  - [ProtocolSession storng typing](#protocolsession-storng-typing)
+ - [LogEnabled removal](#logenabled-removal)
+
+### LogEnabled removal
+
+Date 20/03/2020
+
+SHA-1 XXX
+
+JIRA: https://issues.apache.org/jira/browse/JAMES-3122
+
+Concerned product: Spring
+
+As Log4J 1.x is not compatible with Java 9+ runtime, we adopted Log4J2 as a logging solution for the Spring product.
+
+As a consequence, the deprecated `LogEnabled` API will be removed. We recommend extension developers to obtain their
+Logger instance using the SLF4J `LoggerFactory` class instead.
  
 ### ProtocolSession storng typing
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org