This is an automated email from the ASF dual-hosted git repository.
arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 7b45f3e4d5 FINERACT-2181: Liquibase migrations are stuck when
multi-threaded migrations are enabled and one tenant migration fails
7b45f3e4d5 is described below
commit 7b45f3e4d557f109943cfec4628d53373a0a5fa7
Author: Arnold Galovics <[email protected]>
AuthorDate: Thu Mar 6 13:26:15 2025 +0100
FINERACT-2181: Liquibase migrations are stuck when multi-threaded
migrations are enabled and one tenant migration fails
---
.../service/migration/TenantDatabaseUpgradeService.java | 13 +++++++++++--
.../infrastructure/core/LiquibaseStepDefinitions.java | 7 ++-----
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseUpgradeService.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseUpgradeService.java
index 14aae50394..e44523aa48 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseUpgradeService.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseUpgradeService.java
@@ -148,16 +148,23 @@ public class TenantDatabaseUpgradeService implements
InitializingBean {
}
}
+ List<Exception> exceptions = new ArrayList<>();
try {
for (Future<String> future : futures) {
future.get();
}
} catch (InterruptedException | ExecutionException exception) {
- throw new RuntimeException(exception);
+ exceptions.add(exception);
} finally {
tenantUpgradeThreadPoolTaskExecutor.shutdown();
}
- log.info("Tenant upgrades have finished");
+
+ if (exceptions.isEmpty()) {
+ log.info("Tenant upgrades have successfully finished");
+ } else {
+ exceptions.forEach(e -> log.error("Exception: ", e));
+ throw new RuntimeException("Tenant upgrades had exceptions");
+ }
}
private ThreadPoolTaskExecutor createTenantUpgradeThreadPoolTaskExecutor()
{
@@ -193,6 +200,8 @@ public class TenantDatabaseUpgradeService implements
InitializingBean {
tenant.getTenantIdentifier());
tenantLiquibase.afterPropertiesSet();
log.info("Upgrade for tenant {} has finished",
tenant.getTenantIdentifier());
+ } catch (Exception e) {
+ throw new RuntimeException("Exception while upgrading tenant " +
tenant.getTenantIdentifier(), e);
}
}
diff --git
a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/LiquibaseStepDefinitions.java
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/LiquibaseStepDefinitions.java
index e838b6e8e3..a22499905e 100644
---
a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/LiquibaseStepDefinitions.java
+++
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/LiquibaseStepDefinitions.java
@@ -40,7 +40,6 @@ import
org.apache.fineract.infrastructure.core.config.FineractProperties;
import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
import
org.apache.fineract.infrastructure.core.service.migration.ExtendedSpringLiquibase;
import
org.apache.fineract.infrastructure.core.service.migration.ExtendedSpringLiquibaseFactory;
-import
org.apache.fineract.infrastructure.core.service.migration.SchemaUpgradeNeededException;
import
org.apache.fineract.infrastructure.core.service.migration.TenantDataSourceFactory;
import
org.apache.fineract.infrastructure.core.service.migration.TenantDatabaseStateVerifier;
import
org.apache.fineract.infrastructure.core.service.migration.TenantDatabaseUpgradeService;
@@ -66,7 +65,7 @@ public class LiquibaseStepDefinitions implements En {
private DataSource tenantStoreDataSource;
private TenantDatabaseUpgradeService tenantDatabaseUpgradeService;
private List<FineractPlatformTenant> allTenants;
- private SchemaUpgradeNeededException executionException;
+ private RuntimeException executionException;
private HikariDataSource defaultTenantDataSource;
private Environment environment;
@@ -103,10 +102,8 @@ public class LiquibaseStepDefinitions implements En {
When("The database migration process is executed", () -> {
try {
tenantDatabaseUpgradeService.afterPropertiesSet();
- } catch (SchemaUpgradeNeededException e) {
- executionException = e;
} catch (RuntimeException e) {
- executionException = (SchemaUpgradeNeededException)
e.getCause().getCause();
+ executionException = e;
}
});