Skip to content

Commit 1a2a9ea

Browse files
authoredNov 14, 2024··
Upgrade quarkus to 3.15 (#5488)
* Upgrade quarkus to 3 15 * Align operator sdk version with quarkus * Remove jitpack repository to fix jackson-coreutils * Add confluent repo * Refactor datasource to use quarkus properties instead of custom ones * Disable autocommit at the db connection level and activate the required datasource programatically
1 parent 7a88374 commit 1a2a9ea

File tree

16 files changed

+143
-82
lines changed

16 files changed

+143
-82
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.apicurio.registry.services;
2+
3+
import io.apicurio.registry.storage.impl.sql.RegistryDatabaseKind;
4+
import io.smallrye.config.ConfigSourceInterceptor;
5+
import io.smallrye.config.ConfigSourceInterceptorContext;
6+
import io.smallrye.config.ConfigValue;
7+
import jakarta.annotation.Priority;
8+
9+
@Priority(100)
10+
public class DatabaseConfigInterceptor implements ConfigSourceInterceptor {
11+
12+
@Override
13+
public ConfigValue getValue(ConfigSourceInterceptorContext context, String name) {
14+
ConfigValue storageKind = context.proceed("apicurio.storage.sql.kind");
15+
RegistryDatabaseKind databaseKind = RegistryDatabaseKind.valueOf(storageKind.getValue());
16+
17+
switch (name) {
18+
case "quarkus.datasource.postgresql.active" -> {
19+
if (databaseKind.equals(RegistryDatabaseKind.postgresql)) {
20+
return ConfigValue.builder().withName(name).withValue("true").build();
21+
} else {
22+
return ConfigValue.builder().withName(name).withValue("false").build();
23+
}
24+
}
25+
case "quarkus.datasource.mssql.active" -> {
26+
if (databaseKind.equals(RegistryDatabaseKind.mssql)) {
27+
return ConfigValue.builder().withName(name).withValue("true").build();
28+
} else {
29+
return ConfigValue.builder().withName(name).withValue("false").build();
30+
}
31+
}
32+
case "quarkus.datasource.mysql.active" -> {
33+
if (databaseKind.equals(RegistryDatabaseKind.mysql)) {
34+
return ConfigValue.builder().withName(name).withValue("true").build();
35+
} else {
36+
return ConfigValue.builder().withName(name).withValue("false").build();
37+
}
38+
}
39+
case "quarkus.datasource.h2.active" -> {
40+
if (databaseKind.equals(RegistryDatabaseKind.h2)) {
41+
return ConfigValue.builder().withName(name).withValue("true").build();
42+
} else {
43+
return ConfigValue.builder().withName(name).withValue("false").build();
44+
}
45+
}
46+
}
47+
48+
return context.proceed(name);
49+
}
50+
51+
}

‎app/src/main/java/io/apicurio/registry/services/RegistryConfigSource.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.apicurio.registry.services;
22

3-
import io.quarkus.runtime.configuration.ProfileManager;
3+
import io.quarkus.runtime.LaunchMode;
44
import org.eclipse.microprofile.config.spi.ConfigSource;
55

66
import java.util.HashMap;
@@ -21,7 +21,7 @@ public synchronized Map<String, String> getProperties() {
2121
properties = new HashMap<>();
2222
String prefix = System.getenv("REGISTRY_PROPERTIES_PREFIX");
2323
if (prefix != null) {
24-
String profile = ProfileManager.getLaunchMode().getProfileKey();
24+
String profile = LaunchMode.current().getProfileKey();
2525
String profilePrefix = "%" + profile + ".";
2626
Map<String, String> envMap = System.getenv();
2727
for (Map.Entry<String, String> entry : envMap.entrySet()) {

‎app/src/main/java/io/apicurio/registry/storage/impl/sql/AbstractHandleFactory.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.apicurio.registry.storage.impl.sql.jdb.HandleImpl;
88
import org.slf4j.Logger;
99

10+
import java.sql.Connection;
1011
import java.sql.SQLException;
1112
import java.util.HashMap;
1213
import java.util.Map;
@@ -34,7 +35,10 @@ public <R, X extends Exception> R withHandle(HandleCallback<R, X> callback) thro
3435
try {
3536
// Create a new handle if necessary. Increment the "level" if a handle already exists.
3637
if (state.handle == null) {
37-
state.handle = new HandleImpl(dataSource.getConnection());
38+
Connection connection = dataSource.getConnection();
39+
// We must disable autocommit since we're managing the transactions ourselves.
40+
connection.setAutoCommit(false);
41+
state.handle = new HandleImpl(connection);
3842
state.level = 0;
3943
} else {
4044
state.level++;

‎app/src/main/java/io/apicurio/registry/storage/impl/sql/AbstractSqlRegistryStorage.java

-2
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@
134134
import io.quarkus.security.identity.SecurityIdentity;
135135
import jakarta.enterprise.event.Event;
136136
import jakarta.inject.Inject;
137-
import jakarta.transaction.Transactional;
138137
import jakarta.validation.ValidationException;
139138
import org.apache.commons.lang3.tuple.ImmutablePair;
140139
import org.apache.commons.lang3.tuple.Pair;
@@ -2905,7 +2904,6 @@ public GroupSearchResultsDto searchGroups(Set<SearchFilter> filters, OrderBy ord
29052904
}
29062905

29072906
@Override
2908-
@Transactional
29092907
public ContentWrapperDto getContentByReference(ArtifactReferenceDto reference) {
29102908
try {
29112909
var meta = getArtifactVersionMetaData(reference.getGroupId(), reference.getArtifactId(),
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package io.apicurio.registry.storage.impl.sql;
22

33
import io.agroal.api.AgroalDataSource;
4-
import io.agroal.api.configuration.AgroalConnectionFactoryConfiguration.TransactionIsolation;
5-
import io.agroal.api.configuration.AgroalConnectionPoolConfiguration.TransactionRequirement;
6-
import io.agroal.api.configuration.supplier.AgroalPropertiesReader;
74
import io.apicurio.common.apps.config.Info;
85
import jakarta.enterprise.context.ApplicationScoped;
96
import jakarta.inject.Inject;
@@ -13,8 +10,6 @@
1310
import org.slf4j.Logger;
1411

1512
import java.sql.SQLException;
16-
import java.util.HashMap;
17-
import java.util.Map;
1813

1914
public class RegistryDatasourceProducer {
2015

@@ -25,29 +20,21 @@ public class RegistryDatasourceProducer {
2520
@Info(category = "storage", description = "Application datasource database type", availableSince = "3.0.0")
2621
String databaseType;
2722

28-
@ConfigProperty(name = "apicurio.datasource.url", defaultValue = "jdbc:h2:mem:registry_db")
29-
@Info(category = "storage", description = "Application datasource jdbc url", availableSince = "3.0.0")
30-
String jdbcUrl;
31-
32-
@ConfigProperty(name = "apicurio.datasource.username", defaultValue = "sa")
33-
@Info(category = "storage", description = "Application datasource username", availableSince = "3.0.0")
34-
String username;
35-
36-
@ConfigProperty(name = "apicurio.datasource.password", defaultValue = "sa")
37-
@Info(category = "storage", description = "Application datasource password", availableSince = "3.0.0")
38-
String password;
23+
@Inject
24+
@Named("h2")
25+
AgroalDataSource h2Datasource;
3926

40-
@ConfigProperty(name = "apicurio.datasource.jdbc.initial-size", defaultValue = "20")
41-
@Info(category = "storage", description = "Application datasource pool initial size", availableSince = "3.0.0")
42-
String initialSize;
27+
@Inject
28+
@Named("postgresql")
29+
AgroalDataSource postgresqlDatasource;
4330

44-
@ConfigProperty(name = "apicurio.datasource.jdbc.min-size", defaultValue = "20")
45-
@Info(category = "storage", description = "Application datasource pool minimum size", availableSince = "3.0.0")
46-
String minSize;
31+
@Inject
32+
@Named("mysql")
33+
AgroalDataSource mysqlDatasource;
4734

48-
@ConfigProperty(name = "apicurio.datasource.jdbc.max-size", defaultValue = "100")
49-
@Info(category = "storage", description = "Application datasource pool maximum size", availableSince = "3.0.0")
50-
String maxSize;
35+
@Inject
36+
@Named("mssql")
37+
AgroalDataSource mssqlDatasource;
5138

5239
@Produces
5340
@ApplicationScoped
@@ -57,30 +44,24 @@ public AgroalDataSource produceDatasource() throws SQLException {
5744

5845
final RegistryDatabaseKind databaseKind = RegistryDatabaseKind.valueOf(databaseType);
5946

60-
Map<String, String> props = new HashMap<>();
61-
62-
props.put(AgroalPropertiesReader.MAX_SIZE, maxSize);
63-
props.put(AgroalPropertiesReader.MIN_SIZE, minSize);
64-
props.put(AgroalPropertiesReader.INITIAL_SIZE, initialSize);
65-
props.put(AgroalPropertiesReader.JDBC_URL, jdbcUrl);
66-
props.put(AgroalPropertiesReader.PRINCIPAL, username);
67-
props.put(AgroalPropertiesReader.CREDENTIAL, password);
68-
props.put(AgroalPropertiesReader.PROVIDER_CLASS_NAME, databaseKind.getDriverClassName());
69-
70-
/*
71-
* We need to disable auto-commit to have proper transaction rollback, otherwise the data may be in an
72-
* inconsistent state (e.g. partial deletes), or operations would not be rolled back on exception.
73-
*/
74-
props.put(AgroalPropertiesReader.AUTO_COMMIT, "false");
75-
props.put(AgroalPropertiesReader.TRANSACTION_ISOLATION, TransactionIsolation.READ_COMMITTED.name());
76-
props.put(AgroalPropertiesReader.TRANSACTION_REQUIREMENT, TransactionRequirement.WARN.name());
77-
props.put(AgroalPropertiesReader.FLUSH_ON_CLOSE, "true");
78-
79-
AgroalDataSource datasource = AgroalDataSource
80-
.from(new AgroalPropertiesReader().readProperties(props).get());
81-
8247
log.info("Using {} SQL storage.", databaseType);
8348

84-
return datasource;
49+
switch (databaseKind) {
50+
case h2 -> {
51+
return h2Datasource;
52+
}
53+
case postgresql -> {
54+
return postgresqlDatasource;
55+
}
56+
case mysql -> {
57+
return mysqlDatasource;
58+
}
59+
case mssql -> {
60+
return mssqlDatasource;
61+
}
62+
default -> throw new IllegalStateException(
63+
String.format("unrecognized database type: %s", databaseKind.name()));
64+
}
65+
8566
}
8667
}

‎app/src/main/java/io/apicurio/registry/storage/impl/sql/SqlRegistryStorage.java

-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import io.apicurio.registry.storage.RegistryStorage;
88
import jakarta.enterprise.context.ApplicationScoped;
99
import jakarta.inject.Inject;
10-
import jakarta.transaction.Transactional;
1110

1211
/**
1312
* An in-memory SQL implementation of the {@link RegistryStorage} interface.
@@ -40,7 +39,6 @@ public void restoreFromSnapshot(String snapshotLocation) {
4039
.bind(0, snapshotLocation).execute());
4140
}
4241

43-
@Transactional
4442
public void executeSqlStatement(String sqlStatement) {
4543
handleFactory.withHandle(handle -> handle.createUpdate(sqlStatement).execute());
4644
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.apicurio.registry.services.DatabaseConfigInterceptor

‎app/src/main/resources/application.properties

+39-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ quarkus.native.additional-build-args=--initialize-at-run-time=org.apache.kafka.c
5353
--allow-incomplete-classpath
5454

5555
# Package
56-
quarkus.package.type=legacy-jar
56+
quarkus.package.jar.type=legacy-jar
5757
quarkus.index-dependency.jaxrs.group-id=jakarta.ws.rs
5858
quarkus.index-dependency.jaxrs.artifact-id=jakarta.ws.rs-api
5959

@@ -162,13 +162,50 @@ apicurio.import.work-dir=${java.io.tmpdir}
162162

163163
## SQL Storage
164164
apicurio.storage.sql.kind=h2
165+
apicurio.sql.init=true
166+
165167
apicurio.datasource.url=jdbc:h2:mem:db_${quarkus.uuid}
166168
apicurio.datasource.username=sa
167169
apicurio.datasource.password=sa
168170
apicurio.datasource.jdbc.initial-size=20
169171
apicurio.datasource.jdbc.min-size=20
170172
apicurio.datasource.jdbc.max-size=100
171-
apicurio.sql.init=true
173+
174+
## H2
175+
quarkus.datasource.h2.db-kind=h2
176+
quarkus.datasource.h2.jdbc.url=${apicurio.datasource.url}
177+
quarkus.datasource.h2.username=${apicurio.datasource.username}
178+
quarkus.datasource.h2.password=${apicurio.datasource.password}
179+
quarkus.datasource.h2.jdbc.initial-size=${apicurio.datasource.jdbc.initial-size}
180+
quarkus.datasource.h2.jdbc.min-size=${apicurio.datasource.jdbc.min-size}
181+
quarkus.datasource.h2.jdbc.max-size=${apicurio.datasource.jdbc.max-size}
182+
183+
## Postgresql
184+
quarkus.datasource.postgresql.db-kind=postgresql
185+
quarkus.datasource.postgresql.jdbc.url=${apicurio.datasource.url}
186+
quarkus.datasource.postgresql.username=${apicurio.datasource.username}
187+
quarkus.datasource.postgresql.password=${apicurio.datasource.password}
188+
quarkus.datasource.postgresql.jdbc.initial-size=${apicurio.datasource.jdbc.initial-size}
189+
quarkus.datasource.postgresql.jdbc.min-size=${apicurio.datasource.jdbc.min-size}
190+
quarkus.datasource.postgresql.jdbc.max-size=${apicurio.datasource.jdbc.max-size}
191+
192+
## Mysql
193+
quarkus.datasource.mysql.db-kind=mysql
194+
quarkus.datasource.mysql.jdbc.url=${apicurio.datasource.url}
195+
quarkus.datasource.mysql.username=${apicurio.datasource.username}
196+
quarkus.datasource.mysql.password=${apicurio.datasource.password}
197+
quarkus.datasource.mysql.jdbc.initial-size=${apicurio.datasource.jdbc.initial-size}
198+
quarkus.datasource.mysql.jdbc.min-size=${apicurio.datasource.jdbc.min-size}
199+
quarkus.datasource.mysql.jdbc.max-size=${apicurio.datasource.jdbc.max-size}
200+
201+
## Mssql
202+
quarkus.datasource.mssql.db-kind=mssql
203+
quarkus.datasource.mssql.jdbc.url=${apicurio.datasource.url}
204+
quarkus.datasource.mssql.username=${apicurio.datasource.username}
205+
quarkus.datasource.mssql.password=${apicurio.datasource.password}
206+
quarkus.datasource.mssql.jdbc.initial-size=${apicurio.datasource.jdbc.initial-size}
207+
quarkus.datasource.mssql.jdbc.min-size=${apicurio.datasource.jdbc.min-size}
208+
quarkus.datasource.mssql.jdbc.max-size=${apicurio.datasource.jdbc.max-size}
172209

173210
## Kafka SQL storage
174211
apicurio.kafkasql.bootstrap.servers=localhost:9092

‎app/src/test/java/io/apicurio/registry/storage/util/MssqlTestProfile.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class MssqlTestProfile implements QuarkusTestProfile {
1111

1212
@Override
1313
public Map<String, String> getConfigOverrides() {
14-
return Collections.singletonMap("apicurio.storage.sql.kind", "mssql");
14+
return Map.of("apicurio.storage.sql.kind", "mssql");
1515
}
1616

1717
@Override

‎app/src/test/java/io/apicurio/registry/storage/util/MysqlTestProfile.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class MysqlTestProfile implements QuarkusTestProfile {
1111

1212
@Override
1313
public Map<String, String> getConfigOverrides() {
14-
return Collections.singletonMap("apicurio.storage.sql.kind", "mysql");
14+
return Map.of("apicurio.storage.sql.kind", "mysql");
1515
}
1616

1717
@Override

‎app/src/test/java/io/apicurio/registry/storage/util/PostgresqlTestProfile.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class PostgresqlTestProfile implements QuarkusTestProfile {
1111

1212
@Override
1313
public Map<String, String> getConfigOverrides() {
14-
return Collections.singletonMap("apicurio.storage.sql.kind", "postgresql");
14+
return Map.of("apicurio.storage.sql.kind", "postgresql");
1515
}
1616

1717
@Override

‎examples/confluent-serdes/pom.xml

-4
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,6 @@
5959
<name>Confluent</name>
6060
<url>https://packages.confluent.io/maven/</url>
6161
</repository>
62-
<repository>
63-
<id>jitpack.io</id>
64-
<url>https://jitpack.io</url>
65-
</repository>
6662
</repositories>
6763

6864
</project>

‎operator/model/src/main/java/io/apicurio/registry/operator/api/v1/status/Conditions.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.apicurio.registry.operator.api.v1.status;
22

33
import com.fasterxml.jackson.annotation.JsonFormat;
4-
import com.fasterxml.jackson.annotation.JsonFormat.Shape;
54
import com.fasterxml.jackson.annotation.JsonInclude;
65
import com.fasterxml.jackson.annotation.JsonInclude.Include;
76
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -39,7 +38,7 @@ public class Conditions implements KubernetesResource {
3938
@Required()
4039
@JsonPropertyDescription("lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")
4140
@JsonSetter(nulls = Nulls.SKIP)
42-
@JsonFormat(shape = Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", timezone = "UTC")
41+
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", timezone = "UTC")
4342
@SchemaFrom(type = String.class)
4443
private Instant lastTransitionTime;
4544

‎pom.xml

+9-13
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,11 @@
144144
WARNING: The following group of dependencies has to be aligned with the corresponding Quarkus version.
145145
See notes for each entry.
146146
-->
147-
<quarkus.version>3.11.1</quarkus.version>
147+
<quarkus.version>3.15.1</quarkus.version>
148148
<!-- Go to `io.quarkiverse.operatorsdk:quarkus-operator-sdk-bom` and then to the parent `io.quarkiverse.operatorsdk:quarkus-operator-sdk-parent`. -->
149149
<!-- TODO: Fix: Currently, versions are not aligned exactly (3.11.1 vs 3.11.0), because there is no closer version supported by QOSDK. -->
150-
<quarkus-operator-sdk.version>6.7.1</quarkus-operator-sdk.version>
151-
<java-operator-sdk.version>4.9.6</java-operator-sdk.version>
150+
<quarkus-operator-sdk.version>6.8.4</quarkus-operator-sdk.version>
151+
<java-operator-sdk.version>4.9.5</java-operator-sdk.version>
152152
<!-- /WARNING -->
153153

154154
<!-- Jandex -->
@@ -688,8 +688,8 @@
688688
</dependency>
689689

690690
<dependency>
691-
<groupId>com.github.everit-org.json-schema</groupId>
692-
<artifactId>org.everit.json.schema</artifactId>
691+
<groupId>com.github.erosb</groupId>
692+
<artifactId>everit-json-schema</artifactId>
693693
<version>${org.everit.json.schema.version}</version>
694694
</dependency>
695695
<dependency>
@@ -1323,19 +1323,15 @@
13231323
</property>
13241324
</activation>
13251325
<repositories>
1326+
<repository>
1327+
<id>jgit-repository</id>
1328+
<url>https://repo.eclipse.org/content/groups/releases/</url>
1329+
</repository>
13261330
<repository>
13271331
<id>confluent</id>
13281332
<name>Confluent</name>
13291333
<url>https://packages.confluent.io/maven/</url>
13301334
</repository>
1331-
<repository>
1332-
<id>jitpack.io</id>
1333-
<url>https://jitpack.io</url>
1334-
</repository>
1335-
<repository>
1336-
<id>jgit-repository</id>
1337-
<url>https://repo.eclipse.org/content/groups/releases/</url>
1338-
</repository>
13391335
</repositories>
13401336
</profile>
13411337
</profiles>

‎schema-util/json/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
<artifactId>guava</artifactId>
4242
</dependency>
4343
<dependency>
44-
<groupId>com.github.everit-org.json-schema</groupId>
45-
<artifactId>org.everit.json.schema</artifactId>
44+
<groupId>com.github.erosb</groupId>
45+
<artifactId>everit-json-schema</artifactId>
4646
</dependency>
4747
<dependency>
4848
<groupId>com.fasterxml.jackson.datatype</groupId>
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
quarkus.package.main-class=ConfluentExport
22

33
quarkus.log.level=WARN
4-
quarkus.package.jar.type=uber-jar
4+
quarkus.package.jar.type=legacy-jar

0 commit comments

Comments
 (0)
Please sign in to comment.