Skip to content

Commit 14ceabd

Browse files
committed
make all work
1 parent f2fa9b5 commit 14ceabd

File tree

18 files changed

+130
-60
lines changed

18 files changed

+130
-60
lines changed

bom/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ dependencies {
4747

4848
api(project(":polaris-quarkus-admin"))
4949
api(project(":polaris-quarkus-commons"))
50+
api(project(":polaris-quarkus-test-commons"))
5051
api(project(":polaris-quarkus-defaults"))
5152
api(project(":polaris-quarkus-server"))
5253
api(project(":polaris-quarkus-service"))

extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/RelationalJdbcConfiguration.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@
2020

2121
import io.smallrye.config.ConfigMapping;
2222
import java.util.Map;
23+
import java.util.Optional;
2324

24-
@ConfigMapping(prefix = "polaris.relation.jdbc")
25+
@ConfigMapping(prefix = "polaris.relation.jdbc.datasource")
2526
public interface RelationalJdbcConfiguration {
26-
Map<String, String> datasource();
27+
Map<String, String> realm();
28+
29+
Optional<String> defaultDatasource();
2730
}

gradle/projects.main.properties

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ polaris-quarkus-server=quarkus/server
3131
polaris-quarkus-spark-tests=quarkus/spark-tests
3232
polaris-quarkus-admin=quarkus/admin
3333
polaris-quarkus-commons=quarkus/commons
34+
polaris-quarkus-test-commons=quarkus/test-commons
3435
polaris-quarkus-run-script=quarkus/run-script
3536
polaris-eclipselink=extension/persistence/eclipselink
3637
polaris-jpa-model=extension/persistence/jpa-model

quarkus/admin/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ dependencies {
5454
implementation("org.jboss.slf4j:slf4j-jboss-logmanager")
5555

5656
implementation(project(":polaris-quarkus-commons"))
57+
testImplementation(project(":polaris-quarkus-test-commons"))
5758
testFixturesApi(project(":polaris-core"))
5859

5960
testFixturesApi(enforcedPlatform(libs.quarkus.bom))

quarkus/admin/src/test/java/org/apache/polaris/admintool/relational/jdbc/RelationalJdbcAdminProfile.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222

2323
import java.util.List;
2424
import java.util.Map;
25-
import org.apache.polaris.commons.PostgresRelationalJdbcLifeCycleManagement;
26-
import org.apache.polaris.commons.RelationalJdbcProfile;
25+
import org.apache.polaris.test.commons.PostgresRelationalJdbcLifeCycleManagement;
26+
import org.apache.polaris.test.commons.RelationalJdbcProfile;
2727

2828
public class RelationalJdbcAdminProfile extends RelationalJdbcProfile {
2929
@Override

quarkus/commons/build.gradle.kts

-4
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,4 @@ dependencies {
3737
implementation(enforcedPlatform(libs.quarkus.bom))
3838
implementation("io.quarkus:quarkus-arc")
3939
implementation(project(":polaris-relational-jdbc"))
40-
implementation("io.quarkus:quarkus-junit5")
41-
implementation(platform(libs.testcontainers.bom))
42-
implementation("org.testcontainers:testcontainers")
43-
implementation("org.testcontainers:postgresql")
4440
}

quarkus/commons/src/main/java/org/apache/polaris/commons/QuarkusDatasourceSupplier.java

+26-13
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@
2121
import io.quarkus.arc.InstanceHandle;
2222
import java.util.List;
2323
import javax.sql.DataSource;
24+
2425
import org.apache.polaris.extension.persistence.relational.jdbc.DatasourceSupplier;
2526
import org.apache.polaris.extension.persistence.relational.jdbc.RelationalJdbcConfiguration;
2627

2728
public class QuarkusDatasourceSupplier implements DatasourceSupplier {
28-
private List<InstanceHandle<DataSource>> dataSources;
29-
private RelationalJdbcConfiguration relationalJdbcConfiguration;
29+
private final List<InstanceHandle<DataSource>> dataSources;
30+
private final RelationalJdbcConfiguration relationalJdbcConfiguration;
3031

31-
public static final String DEFAULT_DATA_SOURCE_NAME = "<default>";
32+
private static final String DEFAULT_DATA_SOURCE_NAME = "default";
3233

3334
public QuarkusDatasourceSupplier(
3435
RelationalJdbcConfiguration relationalJdbcConfiguration,
@@ -39,16 +40,28 @@ public QuarkusDatasourceSupplier(
3940

4041
@Override
4142
public DataSource fromRealmId(String realmId) {
42-
String dataSourceName =
43-
relationalJdbcConfiguration.datasource().getOrDefault(realmId, DEFAULT_DATA_SOURCE_NAME);
44-
for (InstanceHandle<DataSource> handle : dataSources) {
45-
String name = handle.getBean().getName();
46-
name = name == null ? DEFAULT_DATA_SOURCE_NAME : name;
47-
// if realm isolation is DB then there should be only one DS configured.
48-
if (name.equals(dataSourceName)) {
49-
return handle.get();
50-
}
43+
// check if the mapping of realm to DS exists, otherwise fall back to default
44+
String dataSourceName = relationalJdbcConfiguration.realm().getOrDefault(
45+
realmId,
46+
relationalJdbcConfiguration.defaultDatasource().orElse(null)
47+
);
48+
49+
// if neither mapping exists nor default DS exists, fail
50+
if (dataSourceName == null) {
51+
throw new IllegalStateException(String.format(
52+
"No datasource configured with name: %s nor default datasource configured", realmId));
5153
}
52-
throw new IllegalStateException("No datasource configured with name: " + realmId);
54+
55+
// check if there is actually a datasource of that dataSourceName
56+
return dataSources.stream()
57+
.filter(ds -> {
58+
String name = ds.getBean().getName();
59+
name = name == null ? DEFAULT_DATA_SOURCE_NAME : name;
60+
return name.equals(dataSourceName);
61+
})
62+
.map(InstanceHandle::get)
63+
.findFirst()
64+
.orElseThrow(() -> new IllegalStateException(String.format(
65+
"No datasource configured with name: %s", dataSourceName)));
5366
}
5467
}

quarkus/defaults/src/main/resources/application-it.properties

+4-1
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,7 @@ polaris.realm-context.realms=POLARIS,OTHER
4646

4747
polaris.storage.gcp.token=token
4848
polaris.storage.gcp.lifespan=PT1H
49-
49+
quarkus.datasource.realm1_ds.db-kind=pgsql
50+
quarkus.datasource.realm1_ds.jdbc.url=polaris
51+
quarkus.datasource.realm1_ds.username=polaris
52+
quarkus.datasource.realm1_ds.password=polaris

quarkus/defaults/src/main/resources/application.properties

+5
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,8 @@ quarkus.index-dependency.protobuf.artifact-id=protobuf-java
173173
# force the locale, just in case the system's using another default locale
174174
quarkus.default-locale=en_US
175175

176+
# TODO: remove this, its there to make the custom ds work.
177+
quarkus.datasource.realm1_ds.db-kind=pgsql
178+
quarkus.datasource.realm1_ds.jdbc.url=polaris
179+
quarkus.datasource.realm1_ds.username=polaris
180+
quarkus.datasource.realm1_ds.password=polaris

quarkus/service/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ dependencies {
125125
testImplementation(libs.hawkular.agent.prometheus.scraper)
126126

127127
implementation(project(":polaris-quarkus-commons"))
128+
testImplementation(project(":polaris-quarkus-test-commons"))
128129
testImplementation("io.quarkus:quarkus-junit5")
129130
testImplementation(platform(libs.testcontainers.bom))
130131
testImplementation("org.testcontainers:testcontainers")

quarkus/service/src/intTest/java/org/apache/polaris/service/quarkus/it/relational/jdbc/JdbcQuarkusApplicationIT.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
import io.quarkus.test.junit.QuarkusIntegrationTest;
2222
import io.quarkus.test.junit.TestProfile;
23-
import org.apache.polaris.commons.RelationalJdbcProfile;
2423
import org.apache.polaris.service.it.test.PolarisApplicationIntegrationTest;
24+
import org.apache.polaris.test.commons.RelationalJdbcProfile;
2525

2626
@TestProfile(RelationalJdbcProfile.class)
2727
@QuarkusIntegrationTest

quarkus/service/src/intTest/java/org/apache/polaris/service/quarkus/it/relational/jdbc/JdbcQuarkusManagementServiceIT.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
import io.quarkus.test.junit.QuarkusIntegrationTest;
2222
import io.quarkus.test.junit.TestProfile;
23-
import org.apache.polaris.commons.RelationalJdbcProfile;
2423
import org.apache.polaris.service.it.test.PolarisManagementServiceIntegrationTest;
24+
import org.apache.polaris.test.commons.RelationalJdbcProfile;
2525

2626
@TestProfile(RelationalJdbcProfile.class)
2727
@QuarkusIntegrationTest

quarkus/service/src/intTest/java/org/apache/polaris/service/quarkus/it/relational/jdbc/JdbcQuarkusPolicyServiceIT.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
import io.quarkus.test.junit.QuarkusIntegrationTest;
2222
import io.quarkus.test.junit.TestProfile;
23-
import org.apache.polaris.commons.RelationalJdbcProfile;
2423
import org.apache.polaris.service.it.test.PolarisPolicyServiceIntegrationTest;
24+
import org.apache.polaris.test.commons.RelationalJdbcProfile;
2525

2626
@TestProfile(RelationalJdbcProfile.class)
2727
@QuarkusIntegrationTest

quarkus/service/src/intTest/java/org/apache/polaris/service/quarkus/it/relational/jdbc/JdbcQuarkusViewFileIT.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
import io.quarkus.test.junit.QuarkusIntegrationTest;
2222
import io.quarkus.test.junit.TestProfile;
23-
import org.apache.polaris.commons.RelationalJdbcProfile;
2423
import org.apache.polaris.service.it.test.PolarisRestCatalogViewFileIntegrationTest;
24+
import org.apache.polaris.test.commons.RelationalJdbcProfile;
2525

2626
@TestProfile(RelationalJdbcProfile.class)
2727
@QuarkusIntegrationTest

quarkus/service/src/intTest/java/org/apache/polaris/service/quarkus/it/relational/jdbc/JdbcRestCatalogIT.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
import io.quarkus.test.junit.QuarkusIntegrationTest;
2222
import io.quarkus.test.junit.TestProfile;
23-
import org.apache.polaris.commons.RelationalJdbcProfile;
2423
import org.apache.polaris.service.it.test.PolarisRestCatalogIntegrationTest;
24+
import org.apache.polaris.test.commons.RelationalJdbcProfile;
2525

2626
@TestProfile(RelationalJdbcProfile.class)
2727
@QuarkusIntegrationTest

quarkus/test-commons/build.gradle.kts

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
plugins {
21+
alias(libs.plugins.jandex)
22+
id("java-test-fixtures")
23+
}
24+
25+
configurations.all {
26+
exclude(group = "org.antlr", module = "antlr4-runtime")
27+
exclude(group = "org.scala-lang", module = "scala-library")
28+
exclude(group = "org.scala-lang", module = "scala-reflect")
29+
}
30+
31+
java {
32+
sourceCompatibility = JavaVersion.VERSION_21
33+
targetCompatibility = JavaVersion.VERSION_21
34+
}
35+
36+
dependencies {
37+
implementation(enforcedPlatform(libs.quarkus.bom))
38+
implementation("io.quarkus:quarkus-junit5")
39+
implementation(platform(libs.testcontainers.bom))
40+
implementation("org.testcontainers:testcontainers")
41+
implementation("org.testcontainers:postgresql")
42+
}

quarkus/commons/src/main/java/org/apache/polaris/commons/PostgresRelationalJdbcLifeCycleManagement.java renamed to quarkus/test-commons/src/main/java/org/apache/polaris/test/commons/PostgresRelationalJdbcLifeCycleManagement.java

+36-32
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
package org.apache.polaris.commons;
19+
package org.apache.polaris.test.commons;
2020

2121
import io.quarkus.test.common.DevServicesContext;
2222
import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
@@ -60,41 +60,45 @@ public Map<String, String> start() {
6060

6161
context.containerNetworkId().ifPresent(postgres::withNetworkMode);
6262
postgres.start();
63-
Map<String, String> props = new HashMap<>();
64-
props.put("polaris.persistence.type", "relational-jdbc");
6563

66-
if (!databases.isEmpty()) {
67-
for (String database : databases) {
68-
// polaris.relation.jdbc.datasource.realm=realm_ds
69-
props.put(String.format("polaris.relation.jdbc.datasource.%s", database), database + "_ds");
70-
props.put(String.format("quarkus.datasource.%s.db-kind", database + "_ds"), "pgsql");
71-
props.put(String.format("quarkus.datasource.%s.active", database + "_ds"), "true");
72-
props.put(
73-
String.format("quarkus.datasource.%s.jdbc.url", database + "_ds"),
74-
postgres.getJdbcUrl().replace("realm1", database));
75-
props.put(
76-
String.format("quarkus.datasource.%s.username", database + "_ds"),
77-
postgres.getUsername());
78-
props.put(
79-
String.format("quarkus.datasource.%s.password", database + "_ds"),
80-
postgres.getPassword());
81-
}
64+
if (databases.isEmpty()) {
65+
Map<String, String> props = generateDataSourceProps(List.of("realm1"));
66+
// make realm1_ds as the default ds
67+
props.put("polaris.relation.jdbc.datasource.default-datasource", "realm1_ds");
68+
return props;
8269
} else {
83-
return Map.of(
84-
"polaris.persistence.type",
85-
"relational-jdbc",
86-
"quarkus.datasource.db-kind",
87-
"pgsql",
88-
"quarkus.datasource.jdbc.url",
89-
postgres.getJdbcUrl(),
90-
"quarkus.datasource.username",
91-
postgres.getUsername(),
92-
"quarkus.datasource.password",
93-
postgres.getPassword(),
94-
"quarkus.datasource.jdbc.initial-size",
95-
"10");
70+
Map<String, String> allProps = new HashMap<>();
71+
allProps.putAll(generateDataSourceMappingProps(databases));
72+
allProps.putAll(generateDataSourceProps(databases));
73+
return allProps;
74+
}
75+
}
76+
77+
private Map<String, String> generateDataSourceProps(List<String> dataSources) {
78+
Map<String, String> props = new HashMap<>();
79+
props.put("polaris.persistence.type", "relational-jdbc");
80+
for (String database : dataSources) {
81+
props.put(String.format("quarkus.datasource.%s.db-kind", database + "_ds"), "pgsql");
82+
props.put(String.format("quarkus.datasource.%s.active", database + "_ds"), "true");
83+
props.put(
84+
String.format("quarkus.datasource.%s.jdbc.url", database + "_ds"),
85+
postgres.getJdbcUrl().replace("realm1", database));
86+
props.put(
87+
String.format("quarkus.datasource.%s.username", database + "_ds"),
88+
postgres.getUsername());
89+
props.put(
90+
String.format("quarkus.datasource.%s.password", database + "_ds"),
91+
postgres.getPassword());
9692
}
93+
return props;
94+
}
9795

96+
private Map<String, String> generateDataSourceMappingProps(List<String> realms) {
97+
Map<String, String> props = new HashMap<>();
98+
// polaris.relation.jdbc.datasource.realm=realm_ds
99+
for (String database : realms) {
100+
props.put(String.format("polaris.relation.jdbc.datasource.realm.%s", database), database + "_ds");
101+
}
98102
return props;
99103
}
100104

quarkus/commons/src/main/java/org/apache/polaris/commons/RelationalJdbcProfile.java renamed to quarkus/test-commons/src/main/java/org/apache/polaris/test/commons/RelationalJdbcProfile.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
package org.apache.polaris.commons;
19+
package org.apache.polaris.test.commons;
2020

2121
import io.quarkus.test.junit.QuarkusTestProfile;
2222
import java.util.List;

0 commit comments

Comments
 (0)