diff --git a/airbyte-scheduler/persistence/src/main/java/io/airbyte/scheduler/persistence/JobPersistence.java b/airbyte-scheduler/persistence/src/main/java/io/airbyte/scheduler/persistence/JobPersistence.java index 068c871e1ab3..420f8fd566c7 100644 --- a/airbyte-scheduler/persistence/src/main/java/io/airbyte/scheduler/persistence/JobPersistence.java +++ b/airbyte-scheduler/persistence/src/main/java/io/airbyte/scheduler/persistence/JobPersistence.java @@ -38,6 +38,10 @@ import java.util.UUID; import java.util.stream.Stream; +/** + * TODO Introduce a locking mechanism so that no DB operation is allowed when automatic migration is + * running + */ public interface JobPersistence { Job getJob(long jobId) throws IOException; diff --git a/airbyte-server/src/main/java/io/airbyte/server/ConfigDumpImport.java b/airbyte-server/src/main/java/io/airbyte/server/ConfigDumpImport.java index 94bca93f3b0b..2eaee3bfd985 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/ConfigDumpImport.java +++ b/airbyte-server/src/main/java/io/airbyte/server/ConfigDumpImport.java @@ -117,11 +117,7 @@ public ImportRead importData(File archive) { // 1. Unzip source Archives.extractArchive(archive.toPath(), sourceRoot); - // 2. Set DB version - LOGGER.info("Setting the DB Airbyte version to : " + targetVersion); - postgresPersistence.setVersion(targetVersion); - - // 3. dry run + // 2. dry run try { checkImport(sourceRoot); } catch (Exception e) { @@ -130,11 +126,18 @@ public ImportRead importData(File archive) { throw e; } - // 4. Import Postgres content + // 3. Import Postgres content importDatabaseFromArchive(sourceRoot, targetVersion); - // 5. Import Configs + // 4. Import Configs importConfigsFromArchive(sourceRoot, false); + + // 5. Set DB version + LOGGER.info("Setting the DB Airbyte version to : " + targetVersion); + postgresPersistence.setVersion(targetVersion); + + // 6. check db version + checkDBVersion(targetVersion); result = new ImportRead().status(StatusEnum.SUCCEEDED); } finally { FileUtils.deleteDirectory(sourceRoot.toFile()); @@ -164,7 +167,6 @@ private void checkImport(Path tempFolder) throws IOException, JsonValidationExce "Please upgrade your Airbyte Archive, see more at https://docs.airbyte.io/tutorials/upgrading-airbyte\n", importVersion, targetVersion)); } - checkDBVersion(targetVersion); importConfigsFromArchive(tempFolder, true); } diff --git a/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java b/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java index c1dd7b69dc48..ef68ad34271a 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java +++ b/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java @@ -240,6 +240,10 @@ public static void main(String[] args) throws Exception { } } + /** + * Ideally when automatic migration runs, we should make sure that we acquire a lock on database and + * no other operation is allowed + */ private static void runAutomaticMigration(ConfigRepository configRepository, JobPersistence jobPersistence, String airbyteVersion,