From aa5ac70ad3291194470b7a87b30d1c66764a2580 Mon Sep 17 00:00:00 2001 From: Ravi Khadiwala Date: Thu, 25 Jun 2026 15:08:23 -0500 Subject: [PATCH] Select lifecycle-manager based on environment variable (like in FoundationDbClusterExtension) --- .../LocalFoundationDbDatabaseFactory.java | 18 +++++++++++------- .../FoundationDbDatabaseLifecycleManager.java | 2 +- ...erFoundationDbDatabaseLifecycleManager.java | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/configuration/LocalFoundationDbDatabaseFactory.java b/service/src/test/java/org/whispersystems/textsecuregcm/configuration/LocalFoundationDbDatabaseFactory.java index 12f3e5bc0..a55a14566 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/configuration/LocalFoundationDbDatabaseFactory.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/configuration/LocalFoundationDbDatabaseFactory.java @@ -10,27 +10,31 @@ import com.apple.foundationdb.FDB; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonTypeName; import java.io.IOException; +import org.whispersystems.textsecuregcm.storage.FoundationDbDatabaseLifecycleManager; +import org.whispersystems.textsecuregcm.storage.ServiceContainerFoundationDbDatabaseLifecycleManager; import org.whispersystems.textsecuregcm.storage.TestcontainersFoundationDbDatabaseLifecycleManager; @JsonTypeName("local") public class LocalFoundationDbDatabaseFactory implements FoundationDbDatabaseFactory { - @JsonIgnore - private final TestcontainersFoundationDbDatabaseLifecycleManager testcontainersFoundationDbDatabaseLifecycleManager; - @JsonIgnore private Database database; private LocalFoundationDbDatabaseFactory() { - this.testcontainersFoundationDbDatabaseLifecycleManager = new TestcontainersFoundationDbDatabaseLifecycleManager(); } @Override public synchronized Database build(final FDB fdb) throws IOException { if (database == null) { - Runtime.getRuntime().addShutdownHook(new Thread(testcontainersFoundationDbDatabaseLifecycleManager::closeDatabase)); - testcontainersFoundationDbDatabaseLifecycleManager.initializeDatabase(fdb); - database = testcontainersFoundationDbDatabaseLifecycleManager.getDatabase(); + final String serviceContainerNamePrefix = System.getProperty("foundationDb.serviceContainerNamePrefix"); + + final FoundationDbDatabaseLifecycleManager lifecycleManager = serviceContainerNamePrefix != null + ? new ServiceContainerFoundationDbDatabaseLifecycleManager(serviceContainerNamePrefix + "0") + : new TestcontainersFoundationDbDatabaseLifecycleManager(); + + Runtime.getRuntime().addShutdownHook(new Thread(lifecycleManager::closeDatabase)); + lifecycleManager.initializeDatabase(fdb); + database = lifecycleManager.getDatabase(); } return database; diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/FoundationDbDatabaseLifecycleManager.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/FoundationDbDatabaseLifecycleManager.java index 96bfa113c..03338ce79 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/FoundationDbDatabaseLifecycleManager.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/FoundationDbDatabaseLifecycleManager.java @@ -9,7 +9,7 @@ import com.apple.foundationdb.Database; import com.apple.foundationdb.FDB; import java.io.IOException; -interface FoundationDbDatabaseLifecycleManager { +public interface FoundationDbDatabaseLifecycleManager { void initializeDatabase(final FDB fdb) throws IOException; diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/ServiceContainerFoundationDbDatabaseLifecycleManager.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/ServiceContainerFoundationDbDatabaseLifecycleManager.java index 0ed9dc4c7..9cea6f53a 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/ServiceContainerFoundationDbDatabaseLifecycleManager.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/ServiceContainerFoundationDbDatabaseLifecycleManager.java @@ -16,7 +16,7 @@ import org.slf4j.LoggerFactory; /** * Manages the lifecycle of a database connected to a FoundationDB instance running as an external service container. */ -class ServiceContainerFoundationDbDatabaseLifecycleManager implements FoundationDbDatabaseLifecycleManager { +public class ServiceContainerFoundationDbDatabaseLifecycleManager implements FoundationDbDatabaseLifecycleManager { private final String foundationDbServiceContainerName; @@ -24,7 +24,7 @@ class ServiceContainerFoundationDbDatabaseLifecycleManager implements Foundation private static final Logger log = LoggerFactory.getLogger(ServiceContainerFoundationDbDatabaseLifecycleManager.class); - ServiceContainerFoundationDbDatabaseLifecycleManager(final String foundationDbServiceContainerName) { + public ServiceContainerFoundationDbDatabaseLifecycleManager(final String foundationDbServiceContainerName) { log.info("Using FoundationDB service container: {}", foundationDbServiceContainerName); this.foundationDbServiceContainerName = foundationDbServiceContainerName; }