From e0b371604e6cf2388c4f48768588aaedb40a392b Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Thu, 9 Aug 2018 22:08:03 +0200 Subject: [PATCH] Do not initialize V2ToV3Migration w/o migrate-from property Startup failed before if no second database for migration was available. Fixes #19. --- .../de/thm/arsnova/config/PersistanceConfig.java | 3 +++ .../migrations/MigrateFromLegacyCondition.java | 15 +++++++++++++++ .../couchdb/migrations/MigrationExecutor.java | 11 +++++++---- .../couchdb/migrations/V2ToV3Migration.java | 2 ++ 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java diff --git a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java b/src/main/java/de/thm/arsnova/config/PersistanceConfig.java index dd1b1e21e..13d31dc60 100644 --- a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java +++ b/src/main/java/de/thm/arsnova/config/PersistanceConfig.java @@ -34,6 +34,9 @@ public class PersistanceConfig { @Bean public MangoCouchDbConnector couchDbMigrationConnector() throws Exception { + if (couchDbMigrateFrom.isEmpty()) { + return null; + } return new MangoCouchDbConnector(couchDbMigrateFrom, couchDbInstance(), couchDbObjectMapperFactory()); } diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java new file mode 100644 index 000000000..0c2d1c681 --- /dev/null +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java @@ -0,0 +1,15 @@ +package de.thm.arsnova.persistance.couchdb.migrations; + +import org.springframework.context.annotation.Condition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; +import org.springframework.stereotype.Component; + +@Component +public class MigrateFromLegacyCondition implements Condition { + @Override + public boolean matches(final ConditionContext context, final AnnotatedTypeMetadata metadata) { + final String migrateFrom = context.getEnvironment().getProperty("couchdb.migrate-from"); + return migrateFrom != null && !migrateFrom.isEmpty(); + } +} diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java index 9d32a2018..68554e69c 100644 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java @@ -23,9 +23,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -37,11 +39,12 @@ import java.util.stream.Collectors; public class MigrationExecutor { private static final Logger logger = LoggerFactory.getLogger(MigrationExecutor.class); - private List<Migration> migrations; + private List<Migration> migrations = Collections.EMPTY_LIST; - public MigrationExecutor(List<Migration> migrations) { - this.migrations = migrations.stream() - .sorted(Comparator.comparing(Migration::getId)).collect(Collectors.toList()); + public MigrationExecutor(final Optional<List<Migration>> migrations) { + migrations.map(m -> this.migrations = m.stream() + .sorted(Comparator.comparing(Migration::getId)).collect(Collectors.toList())); + logger.debug("Initialized {} migration(s).", this.migrations.size()); } public boolean runMigrations(@NonNull final MigrationState migrationState) { diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java index 60647e2ed..c55c34720 100644 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java @@ -29,6 +29,7 @@ import de.thm.arsnova.persistance.UserRepository; import de.thm.arsnova.persistance.couchdb.support.MangoCouchDbConnector; import org.ektorp.DocumentNotFoundException; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -44,6 +45,7 @@ import java.util.Set; * * @author Daniel Gerhardt */ +@Conditional(MigrateFromLegacyCondition.class) @Service public class V2ToV3Migration implements Migration { private static final String ID = "20170914131300"; -- GitLab