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 c84c807cc7210be2bcc35d65a44e7248676185c8
Author: Benoit Tellier <[email protected]>
AuthorDate: Mon Mar 30 11:00:02 2020 +0700

    JAMES-2648 Avoid reading schemaVersion upon each alias resolution
    
    Reading it once upon James startup is enough for up-to-date James server.
    
    We shall keep this pattern when James is not yet up to date.
---
 .../cassandra/CassandraRecipientRewriteTable.java  | 31 ++++++++++++++++------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
index 5b751a3..d28e2e2 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
@@ -44,14 +44,17 @@ public class CassandraRecipientRewriteTable extends 
AbstractRecipientRewriteTabl
     private final CassandraRecipientRewriteTableDAO 
cassandraRecipientRewriteTableDAO;
     private final CassandraMappingsSourcesDAO cassandraMappingsSourcesDAO;
     private final CassandraSchemaVersionDAO cassandraSchemaVersionDAO;
+    private final SchemaVersion initialSchemaVersion;
 
     @Inject
-    public CassandraRecipientRewriteTable(CassandraRecipientRewriteTableDAO 
cassandraRecipientRewriteTableDAO,
-                                          CassandraMappingsSourcesDAO 
cassandraMappingsSourcesDAO,
-                                          CassandraSchemaVersionDAO 
cassandraSchemaVersionDAO) {
+    CassandraRecipientRewriteTable(CassandraRecipientRewriteTableDAO 
cassandraRecipientRewriteTableDAO,
+                                   CassandraMappingsSourcesDAO 
cassandraMappingsSourcesDAO,
+                                   CassandraSchemaVersionDAO 
cassandraSchemaVersionDAO) {
         this.cassandraRecipientRewriteTableDAO = 
cassandraRecipientRewriteTableDAO;
         this.cassandraMappingsSourcesDAO = cassandraMappingsSourcesDAO;
         this.cassandraSchemaVersionDAO = cassandraSchemaVersionDAO;
+
+        initialSchemaVersion = retrieveCurrentSchemaVersion();
     }
 
     @Override
@@ -98,14 +101,26 @@ public class CassandraRecipientRewriteTable extends 
AbstractRecipientRewriteTabl
         
Preconditions.checkArgument(listSourcesSupportedType.contains(mapping.getType()),
             "Not supported mapping of type %s", mapping.getType());
 
-        SchemaVersion schemaVersion = 
cassandraSchemaVersionDAO.getCurrentSchemaVersion()
-            .block()
-            .orElse(CassandraSchemaVersionManager.MIN_VERSION);
-
-        if (schemaVersion.isBefore(MAPPINGS_SOURCES_SUPPORTED_VERSION)) {
+        if (isLegacy()) {
             return super.listSources(mapping);
         }
 
         return cassandraMappingsSourcesDAO.retrieveSources(mapping).toStream();
     }
+
+    private boolean isLegacy() {
+        return isLegacy(initialSchemaVersion)
+            // If we started with a legacy james then maybe schema version had 
been updated since then
+            || isLegacy(retrieveCurrentSchemaVersion());
+    }
+
+    private boolean isLegacy(SchemaVersion schemaVersion) {
+        return schemaVersion.isBefore(MAPPINGS_SOURCES_SUPPORTED_VERSION);
+    }
+
+    private SchemaVersion retrieveCurrentSchemaVersion() {
+        return cassandraSchemaVersionDAO.getCurrentSchemaVersion()
+            .block()
+            .orElse(CassandraSchemaVersionManager.MIN_VERSION);
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to