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/04/02 04:32:16 UTC

[james-project] 09/15: JAMES-2648 Add a CassandraVersionManager::isBefore with initial state caching

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 <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org