Select lifecycle-manager based on environment variable (like in FoundationDbClusterExtension)
This commit is contained in:
parent
2abf55e395
commit
aa5ac70ad3
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user