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