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]

Reply via email to