Skip to content

Commit 19b5de0

Browse files
committed
moves connection validation closer to startup
1 parent f2fdc00 commit 19b5de0

5 files changed

Lines changed: 28 additions & 20 deletions

File tree

backend/src/main/java/com/bakdata/conquery/commands/ManagerNode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ public void run(Manager manager) throws InterruptedException {
8585
formScanner = new FormScanner(config);
8686

8787
// TODO this could be implemented as a plugin tbh
88-
config.getSqlConnectorConfig().initialize(environment);
88+
if(config.getSqlConnectorConfig() != null) {
89+
config.getSqlConnectorConfig().initialize(environment);
90+
}
8991

9092
// Init all plugins
9193
config.getPlugins().forEach(pluginConfig -> pluginConfig.initialize(this));

backend/src/main/java/com/bakdata/conquery/models/config/DatabaseConnection.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.bakdata.conquery.models.config;
22

3-
import java.io.Closeable;
43
import java.io.IOException;
4+
import java.sql.SQLException;
55

66
import com.codahale.metrics.health.HealthCheckRegistry;
77
import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -34,7 +34,7 @@
3434
@NoArgsConstructor
3535
@AllArgsConstructor
3636
@Slf4j
37-
public class DatabaseConnection implements Closeable, Managed {
37+
public class DatabaseConnection implements Managed {
3838

3939
private static final String DEFAULT_PRIMARY_COLUMN = "pid";
4040

@@ -96,12 +96,16 @@ public void initializeDataSource() {
9696
dataSource = new HikariDataSource(hikariConfig);
9797

9898
try {
99-
log.debug("TESTING connection {}", getJdbcConnectionUrl());
100-
DSLContext dslContext = DSL.using(this.dataSource, getDialect().getJooqDialect());
101-
dslContext.execute(getDialect().getTestConnection());
102-
log.debug("SUCCESS connecting to {}", getJdbcConnectionUrl());
103-
}catch (Exception exception) {
104-
log.error("FAILED to connect to {}", getJdbcConnectionUrl(), exception);
99+
log.debug("TEST connecting to {}", getJdbcConnectionUrl());
100+
if (dataSource.getConnection().isValid(100)) {
101+
log.info("SUCCESS connecting to {}", getJdbcConnectionUrl());
102+
}
103+
else {
104+
log.error("FAILED connecting to {}. Connection did not become valid.", getJdbcConnectionUrl());
105+
}
106+
}
107+
catch (SQLException exception) {
108+
log.error("FAILED connecting to {}", getJdbcConnectionUrl(), exception);
105109
}
106110
}
107111

@@ -124,7 +128,7 @@ public DSLContext connect(SqlConnectorConfig connectorConfig) {
124128
}
125129

126130
@Override
127-
public void close() throws IOException {
131+
public void stop() throws IOException {
128132
dataSource.close();
129133
}
130134
}

backend/src/main/java/com/bakdata/conquery/models/config/SqlConnectorConfig.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,17 @@
44
import jakarta.validation.Valid;
55

66
import com.bakdata.conquery.models.datasets.Dataset;
7-
import com.codahale.metrics.health.HealthCheckRegistry;
7+
import com.bakdata.conquery.models.identifiable.ids.specific.DatasetId;
88
import com.fasterxml.jackson.annotation.JsonIgnore;
99
import io.dropwizard.core.setup.Environment;
1010
import io.dropwizard.lifecycle.Managed;
11-
import io.dropwizard.util.Duration;
1211
import io.dropwizard.validation.ValidationMethod;
1312
import lombok.AllArgsConstructor;
1413
import lombok.Builder;
1514
import lombok.Data;
1615
import lombok.NoArgsConstructor;
17-
import lombok.Setter;
1816
import lombok.extern.jackson.Jacksonized;
1917
import lombok.extern.slf4j.Slf4j;
20-
import org.jooq.DSLContext;
2118

2219
/**
2320
* Configuration for SQL databases to send dataset queries to.
@@ -32,7 +29,7 @@
3229
@NoArgsConstructor
3330
@AllArgsConstructor
3431
@Slf4j
35-
public class SqlConnectorConfig {
32+
public class SqlConnectorConfig implements Managed {
3633

3734
private boolean enabled;
3835

@@ -44,15 +41,19 @@ public class SqlConnectorConfig {
4441
/**
4542
* Keys must match the name of existing {@link Dataset}s.
4643
*/
47-
private Map<String, @Valid DatabaseConnection> databaseConfigs;
44+
private Map<DatasetId, @Valid DatabaseConnection> databaseConfigs;
4845

4946

5047
public DatabaseConnection getDatabaseConfig(Dataset dataset) {
51-
return databaseConfigs.get(dataset.getName());
48+
return databaseConfigs.get(dataset.getId());
5249
}
5350

5451

5552
public void initialize(Environment environment) {
53+
if(databaseConfigs == null || !enabled){
54+
return;
55+
}
56+
5657
for (DatabaseConnection connection : databaseConfigs.values()) {
5758
connection.setHealthCheckRegistry(environment.healthChecks());
5859
environment.lifecycle().manage(connection);

backend/src/test/java/com/bakdata/conquery/integration/sql/dialect/PostgreSqlIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ static void before() {
8181

8282
@AfterAll
8383
static void after() throws IOException {
84-
databaseConfig.close();
84+
databaseConfig.stop();
8585
}
8686

8787
@Test

backend/src/test/java/com/bakdata/conquery/integration/sql/dialect/TestSqlConnectorConfig.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.bakdata.conquery.models.config.DatabaseConnection;
66
import com.bakdata.conquery.models.config.SqlConnectorConfig;
77
import com.bakdata.conquery.models.datasets.Dataset;
8+
import com.bakdata.conquery.models.identifiable.ids.specific.DatasetId;
89
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
910
import lombok.NoArgsConstructor;
1011

@@ -15,12 +16,12 @@ public class TestSqlConnectorConfig extends SqlConnectorConfig {
1516
private static final String TEST_DATASET = "test";
1617

1718
public TestSqlConnectorConfig(DatabaseConnection databaseConfig) {
18-
super(true, true, Map.of(TEST_DATASET, databaseConfig));
19+
super(true, true, Map.of(new DatasetId(TEST_DATASET), databaseConfig));
1920
}
2021

2122
@Override
2223
public DatabaseConnection getDatabaseConfig(Dataset dataset) {
23-
return getDatabaseConfigs().get(TEST_DATASET);
24+
return getDatabaseConfigs().get(new DatasetId(TEST_DATASET));
2425
}
2526

2627
}

0 commit comments

Comments
 (0)