From 64f4b4bd28807c4025aab04bd2351fe8bbcd7b2a Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Sat, 7 Jul 2018 23:04:31 +0200 Subject: [PATCH] Check database migration level on initialization --- .../java/de/thm/arsnova/dao/CouchDBDao.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index ff920df12..1e1b71a39 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -82,6 +82,7 @@ import java.util.concurrent.ConcurrentLinkedQueue; @Component("databaseDao") public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware { + private static final int EXPECTED_MIGRATION_LEVEL = 11; private static final int BULK_PARTITION_SIZE = 500; @Autowired @@ -542,12 +543,21 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware private Database getDatabase() { if (database == null) { try { + logger.info("Initializing database connection."); final com.fourspaces.couchdb.Session session = new com.fourspaces.couchdb.Session( databaseHost, databasePort ); database = session.getDatabase(databaseName); - } catch (final Exception e) { + final int migrationLevel = getExpectedMigrationLevel(); + if (migrationLevel < EXPECTED_MIGRATION_LEVEL) { + logger.warn("Database migration level is lower than expected. Please run the migration scripts."); + } else if (migrationLevel > EXPECTED_MIGRATION_LEVEL) { + logger.warn("Database migration level is higher than expected."); + } else { + logger.info("Database migration status: OK"); + } + } catch (final IOException e) { logger.error("Cannot connect to CouchDB database '{}' on host '{}' using port {}.", databaseName, databaseHost, databasePort, e); } @@ -556,6 +566,11 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware return database; } + private int getExpectedMigrationLevel() throws IOException { + Document d = database.getDocument("arsnova_migrations"); + return d.getInt("version"); + } + @Caching(evict = {@CacheEvict(value = "skillquestions", key = "#session"), @CacheEvict(value = "lecturequestions", key = "#session", condition = "#question.getQuestionVariant().equals('lecture')"), @CacheEvict(value = "preparationquestions", key = "#session", condition = "#question.getQuestionVariant().equals('preparation')"), -- GitLab