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 dcc7583119a4025ebc7b8d3ce3ddfaf7216562bc
Author: Benoit Tellier <[email protected]>
AuthorDate: Tue Mar 31 14:59:03 2020 +0700

    JAMES-2648 Add a CassandraVersionManager::isBefore with initial state 
caching
---
 .../versions/CassandraSchemaVersionManager.java    |  9 ++++
 .../CassandraSchemaVersionManagerTest.java         | 48 ++++++++++++++++++++++
 .../cassandra/CassandraRecipientRewriteTable.java  | 15 +------
 3 files changed, 58 insertions(+), 14 deletions(-)

diff --git 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
index 37a222d..ef56bdb 100644
--- 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
+++ 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
@@ -41,6 +41,7 @@ public class CassandraSchemaVersionManager {
 
     private final SchemaVersion minVersion;
     private final SchemaVersion maxVersion;
+    private final SchemaVersion initialSchemaVersion;
     private final CassandraSchemaVersionDAO schemaVersionDAO;
 
     public enum SchemaState {
@@ -63,6 +64,14 @@ public class CassandraSchemaVersionManager {
         this.schemaVersionDAO = schemaVersionDAO;
         this.minVersion = minVersion;
         this.maxVersion = maxVersion;
+
+        this.initialSchemaVersion = computeVersion();
+    }
+
+    public boolean isBefore(SchemaVersion minimum) {
+        return initialSchemaVersion.isBefore(minimum)
+            // If we started with a legacy james then maybe schema version had 
been updated since then
+            && computeVersion().isBefore(minimum);
     }
 
     public SchemaVersion computeVersion() {
diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManagerTest.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManagerTest.java
index 852fcce..64c498e 100644
--- 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManagerTest.java
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManagerTest.java
@@ -63,6 +63,54 @@ class CassandraSchemaVersionManagerTest {
     }
 
     @Test
+    void isBeforeShouldReturnTrueWhenBefore() {
+        SchemaVersion currentVersion = minVersion;
+
+        when(schemaVersionDAO.getCurrentSchemaVersion())
+            .thenReturn(Mono.just(Optional.of(currentVersion)));
+
+        CassandraSchemaVersionManager testee = new 
CassandraSchemaVersionManager(
+            schemaVersionDAO,
+            minVersion,
+            maxVersion);
+
+        assertThat(testee.isBefore(maxVersion)).isTrue();
+    }
+
+    @Test
+    void isBeforeShouldReturnFalseWhenEquals() {
+        SchemaVersion currentVersion = maxVersion;
+
+        when(schemaVersionDAO.getCurrentSchemaVersion())
+            .thenReturn(Mono.just(Optional.of(currentVersion)));
+
+        CassandraSchemaVersionManager testee = new 
CassandraSchemaVersionManager(
+            schemaVersionDAO,
+            minVersion,
+            maxVersion);
+
+        assertThat(testee.isBefore(maxVersion)).isFalse();
+    }
+
+    @Test
+    void isBeforeShouldReturnFalseWhenUpdatedToEquals() {
+        SchemaVersion currentVersion = maxVersion;
+
+        when(schemaVersionDAO.getCurrentSchemaVersion())
+            .thenReturn(Mono.just(Optional.of(minVersion)));
+
+        CassandraSchemaVersionManager testee = new 
CassandraSchemaVersionManager(
+            schemaVersionDAO,
+            minVersion,
+            maxVersion);
+
+        when(schemaVersionDAO.getCurrentSchemaVersion())
+            .thenReturn(Mono.just(Optional.of(maxVersion)));
+
+        assertThat(testee.isBefore(maxVersion)).isFalse();
+    }
+
+    @Test
     void computeSchemaStateShouldReturnTooOldWhenVersionIsMoreThanMaxVersion() 
{
         SchemaVersion currentVersion = maxVersion.next();
 
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 0eac424..6dc233b 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
@@ -43,7 +43,6 @@ public class CassandraRecipientRewriteTable extends 
AbstractRecipientRewriteTabl
     private final CassandraRecipientRewriteTableDAO 
cassandraRecipientRewriteTableDAO;
     private final CassandraMappingsSourcesDAO cassandraMappingsSourcesDAO;
     private final CassandraSchemaVersionManager versionManager;
-    private final SchemaVersion initialSchemaVersion;
 
     @Inject
     CassandraRecipientRewriteTable(CassandraRecipientRewriteTableDAO 
cassandraRecipientRewriteTableDAO,
@@ -52,8 +51,6 @@ public class CassandraRecipientRewriteTable extends 
AbstractRecipientRewriteTabl
         this.cassandraRecipientRewriteTableDAO = 
cassandraRecipientRewriteTableDAO;
         this.cassandraMappingsSourcesDAO = cassandraMappingsSourcesDAO;
         this.versionManager = versionManager;
-
-        initialSchemaVersion = versionManager.computeVersion();
     }
 
     @Override
@@ -100,20 +97,10 @@ public class CassandraRecipientRewriteTable extends 
AbstractRecipientRewriteTabl
         
Preconditions.checkArgument(listSourcesSupportedType.contains(mapping.getType()),
             "Not supported mapping of type %s", mapping.getType());
 
-        if (isLegacy()) {
+        if (versionManager.isBefore(MAPPINGS_SOURCES_SUPPORTED_VERSION)) {
             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(versionManager.computeVersion());
-    }
-
-    private boolean isLegacy(SchemaVersion schemaVersion) {
-        return schemaVersion.isBefore(MAPPINGS_SOURCES_SUPPORTED_VERSION);
-    }
 }


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

Reply via email to