This is an automated email from the ASF dual-hosted git repository. rouazana pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 763ba7467af0d5d4812b1357785fa9129c94688b Author: Matthieu Baechler <[email protected]> AuthorDate: Mon Jul 22 17:01:07 2019 +0200 JAMES-2813 simplify transition handling by providing a list function in SchemaVersion --- .../migration/CassandraMigrationService.java | 20 +++++++-------- .../backends/cassandra/versions/SchemaVersion.java | 13 ++++++++++ .../cassandra/versions/SchemaVersionTest.java | 29 ++++++++++++++++++++++ 3 files changed, 51 insertions(+), 11 deletions(-) diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java index 003d42a..7c71cbd 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java @@ -21,7 +21,6 @@ package org.apache.james.backends.cassandra.migration; import static org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager.DEFAULT_VERSION; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; @@ -37,6 +36,8 @@ import org.apache.james.task.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.github.steveash.guavate.Guavate; + public class CassandraMigrationService { public static final String LATEST_VERSION = "latestVersion"; private final CassandraSchemaVersionDAO schemaVersionDAO; @@ -59,18 +60,15 @@ public class CassandraMigrationService { return Optional.of(latestVersion); } - public Task upgradeToVersion(SchemaVersion newVersion) { + public Task upgradeToVersion(SchemaVersion target) { SchemaVersion currentVersion = getCurrentVersion().orElse(DEFAULT_VERSION); - List<Migration> migrations = new ArrayList<>(); - SchemaVersion migrateTo = currentVersion.next(); - while (newVersion.isAfterOrEquals(migrateTo)) { - SchemaTransition transition = SchemaTransition.to(migrateTo); - validateTransitionExists(transition); - migrations.add(toMigration(transition)); - migrateTo = migrateTo.next(); - } - return new MigrationTask(migrations, newVersion); + List<Migration> migrations = currentVersion.listTransitionsForTarget(target) + .stream() + .map(this::validateTransitionExists) + .map(this::toMigration) + .collect(Guavate.toImmutableList()); + return new MigrationTask(migrations, target); } private SchemaTransition validateTransitionExists(SchemaTransition transition) { diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java index f1b3d41..dcf657b 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java @@ -19,6 +19,8 @@ package org.apache.james.backends.cassandra.versions; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import com.google.common.base.MoreObjects; @@ -52,6 +54,17 @@ public class SchemaVersion { return this.value < other.value; } + public List<SchemaTransition> listTransitionsForTarget(SchemaVersion target) { + List<SchemaTransition> transitions = new ArrayList<>(); + SchemaVersion migrateTo = next(); + while (target.isAfterOrEquals(migrateTo)) { + SchemaTransition transition = SchemaTransition.to(migrateTo); + transitions.add(transition); + migrateTo = migrateTo.next(); + } + return transitions; + } + @Override public final boolean equals(Object o) { if (o instanceof SchemaVersion) { diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaVersionTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaVersionTest.java new file mode 100644 index 0000000..f53085c --- /dev/null +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaVersionTest.java @@ -0,0 +1,29 @@ +package org.apache.james.backends.cassandra.versions; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class SchemaVersionTest { + + static final SchemaVersion VERSION_1 = new SchemaVersion(1); + static final SchemaVersion VERSION_2 = new SchemaVersion(2); + static final SchemaVersion VERSION_3 = new SchemaVersion(3); + static final SchemaVersion VERSION_4 = new SchemaVersion(4); + + @Test + void listTransitionsForTargetShouldReturnEmptyOnSameVersion() { + Assertions.assertThat(VERSION_2.listTransitionsForTarget(VERSION_2)).isEmpty(); + } + + @Test + void listTransitionsForTargetShouldReturnEmptyOnSmallerVersion() { + Assertions.assertThat(VERSION_2.listTransitionsForTarget(VERSION_1)).isEmpty(); + } + + @Test + void listTransitionsForTargetShouldReturnListOfVersionsWhenGreater() { + Assertions.assertThat(VERSION_2.listTransitionsForTarget(VERSION_4)) + .containsExactly(SchemaTransition.to(VERSION_3), SchemaTransition.to(VERSION_4)); + } + +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
