From 16756ab87f6fb6e72b2982cd59c0dcb517922d8e Mon Sep 17 00:00:00 2001 From: Nathan Voxland Date: Wed, 5 Jan 2022 17:04:04 -0600 Subject: [PATCH] - When running update-sql, the create and lock SQL is output multiple times. - When running in a headless environment, the lock table gets unlocked because HubService.register() thinks it can prompt when it really can't --- .../java/liquibase/lockservice/StandardLockService.java | 9 +++++++++ .../src/main/java/liquibase/ui/ConsoleUIService.java | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/liquibase-core/src/main/java/liquibase/lockservice/StandardLockService.java b/liquibase-core/src/main/java/liquibase/lockservice/StandardLockService.java index e8a4f448845..138ff5efef1 100644 --- a/liquibase-core/src/main/java/liquibase/lockservice/StandardLockService.java +++ b/liquibase-core/src/main/java/liquibase/lockservice/StandardLockService.java @@ -17,6 +17,7 @@ import liquibase.exception.UnexpectedLiquibaseException; import liquibase.executor.Executor; import liquibase.executor.ExecutorService; +import liquibase.executor.LoggingExecutor; import liquibase.snapshot.InvalidExampleException; import liquibase.snapshot.SnapshotGeneratorFactory; import liquibase.sql.Sql; @@ -99,6 +100,14 @@ public void init() throws DatabaseException { Executor executor = Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", database); int maxIterations = 10; + if (executor instanceof LoggingExecutor) { + //can't / don't have to re-check + if (hasDatabaseChangeLogLockTable()) { + maxIterations = 0; + } else { + maxIterations = 1; + } + } for (int i = 0; i < maxIterations; i++) { try { if (!hasDatabaseChangeLogLockTable(true)) { diff --git a/liquibase-core/src/main/java/liquibase/ui/ConsoleUIService.java b/liquibase-core/src/main/java/liquibase/ui/ConsoleUIService.java index ef4b7637c63..ed6f23143b9 100644 --- a/liquibase-core/src/main/java/liquibase/ui/ConsoleUIService.java +++ b/liquibase-core/src/main/java/liquibase/ui/ConsoleUIService.java @@ -64,7 +64,7 @@ public void setAllowPrompt(boolean allowPrompt) throws IllegalArgumentException @Override public boolean getAllowPrompt() { - return allowPrompt; + return getConsole().supportsInput() && allowPrompt; } @Override