JAMES-2096 Use an enum to describe migration result
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/74fcb6ad Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/74fcb6ad Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/74fcb6ad Branch: refs/heads/master Commit: 74fcb6ada0b15a1c40af1c06a2dd8d67604001fc Parents: 8ec5e96 Author: benwa <[email protected]> Authored: Wed Jul 26 09:04:01 2017 +0700 Committer: benwa <[email protected]> Committed: Wed Jul 26 14:03:59 2017 +0700 ---------------------------------------------------------------------- .../mailbox/cassandra/mail/migration/Migration.java | 16 +++++++++++++++- .../cassandra/mail/migration/V1ToV2Migration.java | 10 +++++----- .../mail/migration/V1ToV2MigrationTest.java | 4 ++-- .../webadmin/service/CassandraMigrationService.java | 4 ++-- .../routes/CassandraMigrationRoutesTest.java | 7 +++---- .../service/CassandraMigrationServiceTest.java | 12 +++++------- 6 files changed, 32 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/74fcb6ad/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/Migration.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/Migration.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/Migration.java index cac3fd7..247c72a 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/Migration.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/Migration.java @@ -20,10 +20,24 @@ package org.apache.james.mailbox.cassandra.mail.migration; public interface Migration { + + enum MigrationResult { + COMPLETED, + PARTIAL + } + + static MigrationResult combine(MigrationResult result1, MigrationResult result2) { + if (result1 == MigrationResult.COMPLETED + && result2 == MigrationResult.COMPLETED) { + return MigrationResult.COMPLETED; + } + return MigrationResult.PARTIAL; + } + /** * Runs the migration * * @return Return true if fully migrated. Returns false otherwise. */ - boolean run(); + MigrationResult run(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/74fcb6ad/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java index 0e1885c..7cb85bf 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java @@ -109,13 +109,13 @@ public class V1ToV2Migration implements Migration { } @Override - public boolean run() { + public MigrationResult run() { return messageDAOV1.readAll() .map(this::migrate) - .reduce(true, (b1, b2) -> b1 && b2); + .reduce(MigrationResult.COMPLETED, Migration::combine); } - private boolean migrate(CassandraMessageDAO.RawMessage rawMessage) { + private MigrationResult migrate(CassandraMessageDAO.RawMessage rawMessage) { try { CassandraMessageId messageId = (CassandraMessageId) rawMessage.getMessageId(); @@ -125,11 +125,11 @@ public class V1ToV2Migration implements Migration { LOGGER.debug("{} migrated", rawMessage.getMessageId()); - return true; + return MigrationResult.COMPLETED; } catch (Exception e) { LOGGER.warn("Error while migrating {}", rawMessage.getMessageId(), e); - return false; + return MigrationResult.PARTIAL; } } } http://git-wip-us.apache.org/repos/asf/james-project/blob/74fcb6ad/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationTest.java index dff0aad..5825a92 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationTest.java @@ -203,12 +203,12 @@ public class V1ToV2MigrationTest { new PropertyBuilder(), ImmutableList.of()); messageDAOV1.save(originalMessage).join(); - assertThat(testee.run()).isTrue(); + assertThat(testee.run()).isEqualTo(Migration.MigrationResult.COMPLETED); } @Test public void runShouldSucceedWhenNoMessages() throws Exception { - assertThat(testee.run()).isTrue(); + assertThat(testee.run()).isEqualTo(Migration.MigrationResult.COMPLETED); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/74fcb6ad/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/service/CassandraMigrationService.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/service/CassandraMigrationService.java b/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/service/CassandraMigrationService.java index b18770f..2876f38 100644 --- a/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/service/CassandraMigrationService.java +++ b/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/service/CassandraMigrationService.java @@ -77,8 +77,8 @@ public class CassandraMigrationService { private void doMigration(Integer version) { if (allMigrationClazz.containsKey(version)) { LOG.info("Migrating to version {} ", version + 1); - boolean migrationSuccess = allMigrationClazz.get(version).run(); - if (migrationSuccess) { + Migration.MigrationResult migrationResult = allMigrationClazz.get(version).run(); + if (migrationResult == Migration.MigrationResult.COMPLETED) { schemaVersionDAO.updateVersion(version + 1); LOG.info("Migrating to version {} done", version + 1); } else { http://git-wip-us.apache.org/repos/asf/james-project/blob/74fcb6ad/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java index 5944044..17aaa2b 100644 --- a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java +++ b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java @@ -55,17 +55,16 @@ import org.junit.Test; public class CassandraMigrationRoutesTest { - public static final boolean MIGRATED = true; private static final Integer LATEST_VERSION = 3; private static final Integer CURRENT_VERSION = 2; private static final Integer OLDER_VERSION = 1; private WebAdminServer webAdminServer; private CassandraSchemaVersionDAO schemaVersionDAO; - private Migration successfulMigration; private void createServer() throws Exception { - successfulMigration = mock(Migration.class); - when(successfulMigration.run()).thenReturn(MIGRATED); + Migration successfulMigration = mock(Migration.class); + when(successfulMigration.run()).thenReturn(Migration.MigrationResult.COMPLETED); + Map<Integer, Migration> allMigrationClazz = ImmutableMap.<Integer, Migration>builder() .put(OLDER_VERSION, successfulMigration) .put(CURRENT_VERSION, successfulMigration) http://git-wip-us.apache.org/repos/asf/james-project/blob/74fcb6ad/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/service/CassandraMigrationServiceTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/service/CassandraMigrationServiceTest.java b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/service/CassandraMigrationServiceTest.java index 7134e70..677f5d8 100644 --- a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/service/CassandraMigrationServiceTest.java +++ b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/service/CassandraMigrationServiceTest.java @@ -54,8 +54,6 @@ public class CassandraMigrationServiceTest { private static final int LATEST_VERSION = 3; private static final int CURRENT_VERSION = 2; private static final int OLDER_VERSION = 1; - private static final boolean MIGRATED = true; - private static final boolean MIGRATION_FAILED = false; private CassandraMigrationService testee; private CassandraSchemaVersionDAO schemaVersionDAO; private ExecutorService executorService; @@ -68,7 +66,7 @@ public class CassandraMigrationServiceTest { public void setUp() throws Exception { schemaVersionDAO = mock(CassandraSchemaVersionDAO.class); successfulMigration = mock(Migration.class); - when(successfulMigration.run()).thenReturn(MIGRATED); + when(successfulMigration.run()).thenReturn(Migration.MigrationResult.COMPLETED); Map<Integer, Migration> allMigrationClazz = ImmutableMap.<Integer, Migration>builder() .put(OLDER_VERSION, successfulMigration) .put(CURRENT_VERSION, successfulMigration) @@ -169,7 +167,7 @@ public class CassandraMigrationServiceTest { Migration wait1SecondMigration = mock(Migration.class); doAnswer(invocation -> { Thread.sleep(1000); - return MIGRATED; + return Migration.MigrationResult.COMPLETED; }).when(wait1SecondMigration).run(); Map<Integer, Migration> allMigrationClazz = ImmutableMap.<Integer, Migration>builder() .put(OLDER_VERSION, wait1SecondMigration) @@ -203,7 +201,7 @@ public class CassandraMigrationServiceTest { @Test public void partialMigrationShouldThrow() throws Exception { Migration migration1 = mock(Migration.class); - when(migration1.run()).thenReturn(MIGRATION_FAILED); + when(migration1.run()).thenReturn(Migration.MigrationResult.PARTIAL); Migration migration2 = successfulMigration; Map<Integer, Migration> allMigrationClazz = ImmutableMap.<Integer, Migration>builder() @@ -220,9 +218,9 @@ public class CassandraMigrationServiceTest { @Test public void partialMigrationShouldAbortMigrations() throws Exception { Migration migration1 = mock(Migration.class); - when(migration1.run()).thenReturn(MIGRATION_FAILED); + when(migration1.run()).thenReturn(Migration.MigrationResult.PARTIAL); Migration migration2 = mock(Migration.class); - when(migration2.run()).thenReturn(MIGRATED); + when(migration2.run()).thenReturn(Migration.MigrationResult.COMPLETED); Map<Integer, Migration> allMigrationClazz = ImmutableMap.<Integer, Migration>builder() .put(OLDER_VERSION, migration1) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
