-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update SmallRye Config to 3.4.4 #36917
Conversation
radcortez
commented
Nov 7, 2023
•
edited
Loading
edited
- Fixes SmallRye Config error message suggests strange enum values when a bad value is passed #36847
- Fixes Lowercase env vars with hyphens are no picked up anymore in Quarkus 3.5.0 (e.g. in docker compose or Hashicorp Nomad) #36856
- Fixes SmallRye Config property mapping mismatches from the property name in the generated config documentation #36884
- Fixes Native binary generated using quarkus, graalvm and picocli trying to read from .env folder in working directory #36868
fa5747e
to
6dd9cc2
Compare
This comment has been minimized.
This comment has been minimized.
6dd9cc2
to
3d5849c
Compare
@radcortez I just tried to take this new version (3.4.3) and apply it to quarkusio/quarkus-super-heroes#404 in order to see if it fixes the problem I was seeing there. When I deploy with these changes I actually find that other properties don't seem to work...When I go back to the current version (3.4.1 I think), the app starts up just fine (although the stork/hypen properties don't work). With this kind: ConfigMap
apiVersion: v1
metadata:
name: rest-fights-config
labels:
app: rest-fights
application: fights-service
system: quarkus-super-heroes
data:
# should map to quarkus.stork.hero-service.service-discovery.port-name
QUARKUS_STORK_HERO_SERVICE_SERVICE_DISCOVERY_PORT_NAME: http
# should map to quarkus.otel.exporter.otlp.traces.endpoint
QUARKUS_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: 'http://otel-collector:4317'
# should map to quarkus.stork.narration-service.service-discovery.port-name
QUARKUS_STORK_NARRATION_SERVICE_SERVICE_DISCOVERY_PORT_NAME: http
# should map to kafka.bootstrap.servers
KAFKA_BOOTSTRAP_SERVERS: 'PLAINTEXT://fights-kafka:9092'
# should map to mp.messaging.connector.smallrye-kafka.apicurio.registry.url
MP_MESSAGING_CONNECTOR_SMALLRYE_KAFKA_APICURIO_REGISTRY_URL: 'http://apicurio:8080/apis/registry/v2'
# should map to quarkus.liquibase-mongodb.migrate-at-start
QUARKUS_LIQUIBASE_MONGODB_MIGRATE_AT_START: 'false'
# should map to quarkus.stork.narration-service.service-discovery.refresh-period
QUARKUS_STORK_NARRATION_SERVICE_SERVICE_DISCOVERY_REFRESH_PERIOD: 1H
# should map to quarkus.stork.hero-service.service-discovery.refresh-period
QUARKUS_STORK_HERO_SERVICE_SERVICE_DISCOVERY_REFRESH_PERIOD: 1H
# should map to quarkus.stork.hero-service.service-discovery.application
QUARKUS_STORK_HERO_SERVICE_SERVICE_DISCOVERY_APPLICATION: rest-heroes
# should map to quarkus.stork.villain-service.service-discovery.type
QUARKUS_STORK_VILLAIN_SERVICE_SERVICE_DISCOVERY_TYPE: kubernetes
# should map to quarkus.stork.narration-service.service-discovery.application
QUARKUS_STORK_NARRATION_SERVICE_SERVICE_DISCOVERY_APPLICATION: rest-narration
# should map to quarkus.grpc.clients.locations.port
QUARKUS_GRPC_CLIENTS_LOCATIONS_PORT: '80'
# should map to quarkus.mongodb.hosts
QUARKUS_MONGODB_HOSTS: 'fights-db:27017'
# should map to quarkus.grpc.clients.locations.host
QUARKUS_GRPC_CLIENTS_LOCATIONS_HOST: grpc-locations
# should map to quarkus.stork.villain-service.service-discovery.refresh-period
QUARKUS_STORK_VILLAIN_SERVICE_SERVICE_DISCOVERY_REFRESH_PERIOD: 1H
# should map to quarkus.stork.villain-service.service-discovery.port-name
QUARKUS_STORK_VILLAIN_SERVICE_SERVICE_DISCOVERY_PORT_NAME: http
# should map to quarkus.stork.narration-service.service-discovery.type
QUARKUS_STORK_NARRATION_SERVICE_SERVICE_DISCOVERY_TYPE: kubernetes
# should map to quarkus.stork.villain-service.service-discovery.application
QUARKUS_STORK_VILLAIN_SERVICE_SERVICE_DISCOVERY_APPLICATION: rest-villains
# should map to quarkus.stork.hero-service.service-discovery.type
QUARKUS_STORK_HERO_SERVICE_SERVICE_DISCOVERY_TYPE: kubernetes upon startup, I'm seeing this:
|
Thanks, I'll have a look. |
I cloned smallrye-config locally ( assertTrue(EnvProperty.equals("MP_MESSAGING_CONNECTOR_SMALLRYE_KAFKA_APICURIO_REGISTRY_URL", new String("mp.messaging.connector.smallrye-kafka.apicurio.registry.url"))); and that test fails, yet assertTrue(envSourceEquals("MP_MESSAGING_CONNECTOR_SMALLRYE_KAFKA_APICURIO_REGISTRY_URL", new String("mp.messaging.connector.smallrye-kafka.apicurio.registry.url"))); passes. Of course, I don't know that project and am not sure if both of those should pass :) |
This comment has been minimized.
This comment has been minimized.
Yes, this is expected.
Yes, this is expected. The explanation: As you and some people noticed, I completely rewrote the matching of environment variables (which, unfortunately, is causing some issues). The main reason is due to #35322 (comment). The previous environment variable matching code was noticeable in our flame graphs (both CPU and memory) due to all the String conversions required and missing values (the source is very high on the list, so pretty much any configuration lookup requires a query to the EnvSource). Instead of blinding converting names: We moved to a plain equals and hashcode reverse match, which significantly boosted the performance (as seen in some of the measurements). Unfortunately, I was unaware that Docker could set dotted environment variable names, which complicated things a bit. Usually, UNIX terminals like bash only accept names in the POSIX convention, meaning that you cannot set something like But, if you can set a dotted name, now it means that both Moving forward, that support should reenable the dotted names as environment variables again, which I recommend that you to move back (I'm sorry for the inconvenience :(). The current failure of application.properties mp.messaging.connector.smallrye-kafka.apicurio.registry.url= Please, check https://quarkus.io/guides/config-reference#environment-variables |
Thank you for the detailed explanation! Given this information, how would you expect setting an environment variable of |
This is precisely how environment variables should be used. They tend to be used to set the configuration instead of overriding configuration. While it is certainly possible to set most of the configuration, there are certain names / patterns that due to the lossy format of POSIX conventions cannot be expressed as they should. To use a more straightforward example, think about a named datasource, which is expressed as the dotted name This is frustrating for the used, because it is expect to work. It is also frustrating to us, because probably, this is the most opened issue / thread about configuration, and we were not able to find a good way to support this, and no amount of documentation / explanation seem to work. I'm also already biased on this, so maybe you can help with a new perspective. How can we make this work?
Any other ideas?
Adding an empty |
I see where you are coming from. I would, however, disagree with the statement that only dynamic keys are separated by dashes. That is not the case. There are plenty of configuration keys that aren't dynamic yet that use dashes. I'm not sure of the specific implementation, but Spring does have the concept of relaxed binding and seems it follows a lot of the same rules, although they follow a slightly different convention when binding environment variables. They just drop the hypens completely and don't replace with underscores.
Having to do this for every property like this in an application would make for having a section in
I can't do that with Quarkus 3.5.0. Binding lowercase with |
The other thing I could do to get around this is to not use environment variables at all. I could create my apiVersion: v1
kind: ConfigMap
metadata:
name: rest-fights-config
labels:
app: rest-fights
application: fights-service
system: quarkus-super-heroes
data:
application.properties: |
quarkus.liquibase-mongodb.migrate-at-start=false
quarkus.mongodb.hosts=fights-db:27017
quarkus.stork.hero-service.service-discovery.type=kubernetes
quarkus.stork.hero-service.service-discovery.application=rest-heroes
quarkus.stork.hero-service.service-discovery.refresh-period=1H
quarkus.stork.hero-service.service-discovery.port-name=http
quarkus.stork.villain-service.service-discovery.type=kubernetes
quarkus.stork.villain-service.service-discovery.application=rest-villains
quarkus.stork.villain-service.service-discovery.refresh-period=1H
quarkus.stork.villain-service.service-discovery.port-name=http
quarkus.stork.narration-service.service-discovery.type=kubernetes
quarkus.stork.narration-service.service-discovery.application=rest-narration
quarkus.stork.narration-service.service-discovery.refresh-period=1H
quarkus.stork.narration-service.service-discovery.port-name=http
quarkus.grpc.clients.locations.host=grpc-locations
quarkus.grpc.clients.locations.port=80
quarkus.otel.exporter.otlp.traces.endpoint=http://otel-collector:4317
kafka.bootstrap.servers=PLAINTEXT://fights-kafka:9092
mp.messaging.connector.smallrye-kafka.apicurio.registry.url=http://apicurio:8080/apis/registry/v2 and then in This will mount the But while that approach does work (I just tested it), I feel like there is an issue here with configuration resolution that still needs to be resolved. That approach also won't work for those using docker compose, where you have to pass configuration as environment variables. A property like |
I haven't checked the details if if things that were working previously are broken, we need to be extra cautious and document it properly in the migration guide (if we are sure we actually want to break them). |
@gsmet As it stands right now, smallrye-config 3.4.3 breaks existing applications that use environment variables that have hyphens in them (which is a lot of things). Furthermore, Quarkus 3.5.0 made it so that applications that were using lowercase with So for applications that are affected, the only current available solution is to downgrade back to 3.4.x. I haven't checked 3.5.1 though, so maybe there is a fix in there? |
The change is breaking reactive messaging "weird" environment variable handling. We need to see if we merge it and consider it as a breaking change, or if we try to change how it's handled. |
Its not just reactive messaging that this breaks. Its more wirespread than that. |
I didn't mean to say that only dynamic keys are separated by dashes, but the issue is that dynamic keys are the ones that we cannot infer properly (for instance a datasource name). I've been improving the support and dashed names that are static parts of a
I can check if they are doing something different, but I can't see how a dynamic dashed name can be supported with an environment variable alone, without some sort of representation. I mean, maybe we just introduce a triple Going back to the datasource name example, I don't think this can be relaxed in any form. The name has to match the injection point to retrieve the correct datasource as
This is not for every property. It is for properties that contain dynamic segments which are separated by dashes. A good alternative is not to use dashes if you want to also use the same configuration name as an environment variable :)
It will work again with this update. That was my bad because I was not aware that Docker or K8s were able to bind environment variable names without any restriction (as used dotted formats and characters not defined in the POSIX standard). Every time I've had to set such variables, I've naturally converted them to a bash-style accepted syntax :) Can you please try it with the dotted format and the dependency update (required both common and core)? I've tried it locally, and the app starts, but I'm not fully aware of all the functionality, so I have no idea if all the pieces are working. Sorry for the inconvenience, and thanks! |
Correct. While I did claim in my previous comment that this now works out of the box, it does require the Quarkus extension to use |
I meant for every property that contains dynamic segments, which for the application in question is about 15, so definitely a pain. And some I have no control over whether the dynamic segment uses a hyphen (i.e. the smallrye-kafka example).
As a baseline, I reverted back to Quarkus 3.4.3 and everything works as expected. Then I ran a few scenarios that all ended up the same, where the specific apicurio error mentioned above went away, but other lowercase configuration that has hyphens in it are not respected, resulting in the application not working as expected:
I can describe how I ran my test(s) if you're interested. |
This is the same break, which I would have to argue that is not a break at all :) RM was able to properly discover configuration with some really weird combinations, that shouldn't be supported in the first place. For instance, if you have the attribute
(which are the listed formats for our documentation) But RM is actually looking up for The problem with this, is that on a Docker container env source you could set both
While this was initially intended, I've realized that it is going to be a major inconvenience for a lot of users, and this PR readds such support.
For applications that use dotted format configuration names as environment variables names, if they want to upgrade to 3.5.0, must change them to POSIX compatible names and follow any dissabiguation rules documented here: https://quarkus.io/guides/config-reference#environment-variables. If they want to keep using their dotted format names, there is no Quarkus version for it yet. They would need to update SR Config manually to 3.4.3. |
Sure. How do you determine if the app is behaving as expected? Just a clean startup is ok? Or do you need to execute a specific action? |
I'm using the Superheroes application on an OpenShift cluster that I have set up. First, I deployed the entire system as a whole by doing If you look at https://raw.githubusercontent.com/quarkusio/quarkus-super-heroes/main/deploy/k8s/java17-openshift.yml and find the Once the app is deployed, I open the UI (Super heroes UI) and see that I am getting fallback hero & villains. Then, I clone the apiVersion: v1
kind: ConfigMap
metadata:
name: rest-fights-config
labels:
app: rest-fights
application: fights-service
system: quarkus-super-heroes
data:
quarkus.liquibase-mongodb.migrate-at-start: false
quarkus.mongodb.hosts: fights-db:27017
quarkus.stork.hero-service.service-discovery.type: kubernetes
quarkus.stork.hero-service.service-discovery.application: rest-heroes
quarkus.stork.hero-service.service-discovery.refresh-period: 1H
quarkus.stork.hero-service.service-discovery.port-name: http
quarkus.stork.villain-service.service-discovery.type: kubernetes
quarkus.stork.villain-service.service-discovery.application: rest-villains
quarkus.stork.villain-service.service-discovery.refresh-period: 1H
quarkus.stork.villain-service.service-discovery.port-name: http
quarkus.stork.narration-service.service-discovery.type: kubernetes
quarkus.stork.narration-service.service-discovery.application: rest-narration
quarkus.stork.narration-service.service-discovery.refresh-period: 1H
quarkus.stork.narration-service.service-discovery.port-name: http
quarkus.grpc.clients.locations.host: grpc-locations
quarkus.grpc.clients.locations.port: 80
quarkus.otel.exporter.otlp.traces.endpoint: http://otel-collector:4317
kafka.bootstrap.servers: PLAINTEXT://fights-kafka:9092
mp.messaging.connector.smallrye-kafka.apicurio.registry.url: http://apicurio:8080/apis/registry/v2 I do an But then the So then in <dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config-core</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config-common</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config-validator</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config-source-yaml</artifactId>
<version>3.4.3</version>
</dependency> Then I re-do The app actually starts up this time, but I still see fallback hero/villain I know some of the config is good though, because if I perform a fight it persists when I refresh the page I see the result in the table below. Then I go back to Then I re-do Then I go back to |
Thanks, but I think that is not going to work for me. I don't have an Openshift instance, so I must run this locally on my Minikube. |
instead of using https://raw.githubusercontent.com/quarkusio/quarkus-super-heroes/main/deploy/k8s/java17-openshift.yml you can use https://raw.githubusercontent.com/quarkusio/quarkus-super-heroes/main/deploy/k8s/java17-minikube.yml, and when deploying you can use And instead of modifying I can also provide you an OpenShift cluster if you'd like where I have all of this stuff already deployed. I could also try to replicate using docker compose if you'd like, although I'm less convinced that will show the problem, because some of the default properties specified in |
No worries, I'll figure it out. I just needed to know what are the conditions to consider the app to be running as expected. Thanks. |
BTW, in these cases, which properties are not working? |
|
I can reproduce it using docker compose if that is more helpful. Here's how to do it. 1-time setup
quarkus.application.name=rest-fights
## HTTP configuration
quarkus.http.port=8082
quarkus.jackson.serialization-inclusion=non-empty
## Mongo
quarkus.mongodb.metrics.enabled=true
quarkus.mongodb.database=fights
## Liquibase Mongo
quarkus.liquibase-mongodb.migrate-at-start=true
## CORS
quarkus.http.cors=true
quarkus.http.cors.origins=*
## Rest clients
quarkus.rest-client.hero-client.url=stork://hero-service
quarkus.rest-client.narration-client.url=stork://narration-service
fight.villain.client-base-url=stork://villain-service
## gRPC clients
quarkus.grpc.dev-mode.force-server-start=false
quarkus.grpc.clients.locations.use-quarkus-grpc-client=true
quarkus.grpc.clients.locations.host=localhost
quarkus.grpc.clients.locations.port=8089
quarkus.grpc.clients.locations.load-balancing-policy=round_robin
## Microcks
quarkus.microcks.devservices.enabled=false
## Fight configuration
fight.hero.fallback.name=Fallback hero
fight.hero.fallback.picture=https://dummyimage.com/280x380/1e8fff/ffffff&text=Fallback+Hero
fight.hero.fallback.powers=Fallback hero powers
fight.hero.fallback.level=1
fight.villain.fallback.name=Fallback villain
fight.villain.fallback.picture=https://dummyimage.com/280x380/b22222/ffffff&text=Fallback+Villain
fight.villain.fallback.powers=Fallback villain powers
fight.villain.fallback.level=45
fight.fallback-narration=High above a bustling city, a symbol of hope and justice soared through the sky, while chaos reigned below, with malevolent laughter echoing through the streets.\nWith unwavering determination, the figure swiftly descended, effortlessly evading explosive attacks, closing the gap, and delivering a decisive blow that silenced the wicked laughter.\n\nIn the end, the battle concluded with a clear victory for the forces of good, as their commitment to peace triumphed over the chaos and villainy that had threatened the city.\nThe people knew that their protector had once again ensured their safety.\n
fight.location.fallback.name=Fallback location
fight.location.fallback.description=This is a fallback location. Not generally someplace you'd like to visit.
fight.location.fallback.picture=https://dummyimage.com/280x380/b22222/ffffff&text=Fallback+Location
## Kafka configuration
mp.messaging.outgoing.fights.connector=smallrye-kafka
mp.messaging.outgoing.fights.topic=fights
mp.messaging.outgoing.fights.apicurio.registry.auto-register=true
# Container image
quarkus.container-image.builder=docker
quarkus.container-image.group=quarkus-super-heroes
quarkus.container-image.name=${quarkus.application.name}
#######################################################################
# THIS FILE IS AUTOMATICALLY GENERATED DURING CI/CD.
# ANY LOCAL CHANGES YOU MAKE SHOULD NOT BE COMMITTED TO SOURCE CONTROL.
#######################################################################
version: "3"
services:
fights-db:
image: mongo:5.0
container_name: fights-db
ports:
- "27017"
environment:
MONGO_INITDB_DATABASE: fights
MONGO_INITDB_ROOT_USERNAME: super
MONGO_INITDB_ROOT_PASSWORD: super
volumes:
- ../../../rest-fights/deploy/db-init/initialize-database.js:/docker-entrypoint-initdb.d/1-init-db.js
fights-kafka:
image: quay.io/strimzi/kafka:0.34.0-kafka-3.4.0
container_name: fights-kafka
command:
- "sh"
- "-c"
- "export CLUSTER_ID=$$(bin/kafka-storage.sh random-uuid) && bin/kafka-storage.sh format -t $${CLUSTER_ID} -c config/kraft/server.properties && bin/kafka-server-start.sh config/kraft/server.properties --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS}"
ports:
- "9092:9092"
environment:
LOG_DIR: /tmp/logs
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://fights-kafka:9092
rest-fights:
image: quarkus-super-heroes/rest-fights:1.0
container_name: rest-fights
depends_on:
- fights-db
- fights-kafka
ports:
- "8082:8082"
environment:
quarkus.mongodb.hosts: fights-db:27017
kafka.bootstrap.servers: PLAINTEXT://fights-kafka:9092
quarkus.liquibase-mongodb.migrate-at-start: "false"
quarkus.mongodb.credentials.username: superfight
quarkus.mongodb.credentials.password: superfight
quarkus.stork.hero-service.service-discovery.type: static
quarkus.stork.hero-service.service-discovery.address-list: http://rest-heroes-another-test.apps.cluster-hx5gs.hx5gs.sandbox1297.opentlc.com
quarkus.stork.villain-service.service-discovery.type: static
quarkus.stork.villain-service.service-discovery.address-list: http://rest-villains-another-test.apps.cluster-hx5gs.hx5gs.sandbox1297.opentlc.com
quarkus.stork.narration-service.service-discovery.type: static
quarkus.stork.narration-service.service-discovery.address-list: http://rest-narration-another-test.apps.cluster-hx5gs.hx5gs.sandbox1297.opentlc.com
quarkus.grpc.clients.locations.host: grpc-locations-another-test.apps.cluster-hx5gs.hx5gs.sandbox1297.opentlc.com
quarkus.grpc.clients.locations.port: 80
mp.messaging.connector.smallrye-kafka.apicurio.registry.url: http://apicurio-another-test.apps.cluster-hx5gs.hx5gs.sandbox1297.opentlc.com/apis/registry/v2
restart: on-failure
networks:
default:
aliases:
- rest-fights
deploy:
resources:
limits:
memory: 1G
cpus: '1'
reservations:
memory: 256M
cpus: '0.5'
Test scenariosBaseline test with Quarkus 3.4.3
Upgrade to Quarkus 3.5.1
Add Smallrye Config 3.4.3
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config-core</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config-common</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config-validator</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config-source-yaml</artifactId>
<version>3.4.3</version>
</dependency>
{"hero":{"name":"Fallback hero","level":1,"picture":"https://dummyimage.com/280x380/1e8fff/ffffff&text=Fallback+Hero","powers":"Fallback hero powers"},"villain":{"name":"Fallback villain","level":45,"picture":"https://dummyimage.com/280x380/b22222/ffffff&text=Fallback+Villain","powers":"Fallback villain powers"}}%
The stork configuration is not being set properly. My guess is that the If you go back to the compose file and change the |
Thanks! Can you please try out this patch? smallrye/smallrye-config#1050 |
That patch seems to work! I tried it with Quarkus 3.5.1, both in my "on-openshift" & docker compose tests. |
Great. Thanks! |
3d5849c
to
785433f
Compare
Failing Jobs - Building 785433f
Full information is available in the Build summary check run. Failures⚙️ Gradle Tests - JDK 11 Windows #- Failing: integration-tests/gradle
📦 integration-tests/gradle✖
|
@radcortez @edeandrea do I understand things correctly, this patch makes everyone happy? |
FWIW, my case (#36856) is fixed with SR-Config 3.4.4. Thanks @radcortez! |
Yes this, along with reverting quarkusio/quarkus-super-heroes@2f5ed77 fixes quarkusio/quarkus-super-heroes#404 |
Look good to merge so that it can be included in 3.5.2, no? |
Not totally happy myself, but as long as everyone else is happy, I will be happy :) |
Well for me, happy = it works :) |
This MR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [flow-bin](https://github.com/flowtype/flow-bin) ([changelog](https://github.com/facebook/flow/blob/master/Changelog.md)) | devDependencies | minor | [`^0.220.0` -> `^0.222.0`](https://renovatebot.com/diffs/npm/flow-bin/0.220.0/0.222.0) | | [org.postgresql:postgresql](https://jdbc.postgresql.org) ([source](https://github.com/pgjdbc/pgjdbc)) | build | minor | `42.6.0` -> `42.7.0` | | [org.liquibase.ext:liquibase-hibernate5](https://github.com/liquibase/liquibase-hibernate/wiki) ([source](https://github.com/liquibase/liquibase-hibernate)) | build | minor | `4.24.0` -> `4.25.0` | | [org.liquibase:liquibase-maven-plugin](http://www.liquibase.org/liquibase-maven-plugin) ([source](https://github.com/liquibase/liquibase)) | build | minor | `4.24.0` -> `4.25.0` | | [org.jsoup:jsoup](https://jsoup.org/) ([source](https://github.com/jhy/jsoup)) | compile | minor | `1.16.2` -> `1.17.1` | | [io.hypersistence:hypersistence-utils-hibernate-62](https://github.com/vladmihalcea/hypersistence-utils) | compile | patch | `3.6.0` -> `3.6.1` | | [org.hibernate.orm:hibernate-envers](https://hibernate.org/orm) ([source](https://github.com/hibernate/hibernate-orm)) | build | minor | `6.3.1.Final` -> `6.4.0.Final` | | [org.hibernate.orm:hibernate-core](https://hibernate.org/orm) ([source](https://github.com/hibernate/hibernate-orm)) | build | minor | `6.3.1.Final` -> `6.4.0.Final` | | [com.blazebit:blaze-persistence-bom](https://persistence.blazebit.com) ([source](https://github.com/Blazebit/blaze-persistence)) | import | patch | `1.6.9` -> `1.6.10` | | [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) | build | minor | `2.40.0` -> `2.41.0` | | [io.quarkus:quarkus-maven-plugin](https://github.com/quarkusio/quarkus) | build | minor | `3.5.1` -> `3.6.0` | | [io.quarkus:quarkus-universe-bom](https://github.com/quarkusio/quarkus-platform) | import | patch | `3.5.1` -> `3.5.3` | --- ### Release Notes <details> <summary>flowtype/flow-bin</summary> ### [`v0.222.0`](flow/flow-bin@543cad7...84a68f1) [Compare Source](flow/flow-bin@543cad7...84a68f1) ### [`v0.221.0`](flow/flow-bin@e8b3a2e...543cad7) [Compare Source](flow/flow-bin@e8b3a2e...543cad7) ### [`v0.220.1`](flow/flow-bin@030bfc6...e8b3a2e) [Compare Source](flow/flow-bin@030bfc6...e8b3a2e) </details> <details> <summary>pgjdbc/pgjdbc</summary> ### [`v42.7.0`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#​4270-2023-11-20-093300--0500) ##### Changed - fix: Deprecate for removal PGPoint.setLocation(java.awt.Point) to cut dependency to `java.desktop` module. [MR #​2967](pgjdbc/pgjdbc#2967) - feat: return all catalogs for getCatalogs metadata query closes [ISSUE #​2949](pgjdbc/pgjdbc#2949) [MR #​2953](pgjdbc/pgjdbc#2953) - feat: support SET statements combining with other queries with semicolon in PreparedStatement [MR ##​2973](pgjdbc/pgjdbc#2973) ##### Fixed - chore: add styleCheck Gradle task to report style violations [MR #​2980](pgjdbc/pgjdbc#2980) - fix: Include currentXid in "Error rolling back prepared transaction" exception message [MR #​2978](pgjdbc/pgjdbc#2978) - fix: add varbit as a basic type inside the TypeInfoCache [MR #​2960](pgjdbc/pgjdbc#2960) - fix: Fix failing tests for version 16. [MR #​2962](pgjdbc/pgjdbc#2962) - fix: allow setting arrays with ANSI type name [MR #​2952](pgjdbc/pgjdbc#2952) - feat: Use KeepAlive to confirm LSNs [MR #​2941](pgjdbc/pgjdbc#2941) - fix: put double ' around log parameter [MR #​2936](pgjdbc/pgjdbc#2936) fixes [ISSUE #​2935](pgjdbc/pgjdbc#2935) - fix: Fix Issue [#​2928](pgjdbc/pgjdbc#2928) number of ports not equal to number of servers in datasource [MR #​2929](pgjdbc/pgjdbc#2929) - fix: Use canonical DateStyle name ([#​2925](pgjdbc/pgjdbc#2925)) fixes [pgbouncer issue](pgbouncer/pgbouncer#776) - fix: Method getFastLong should be able to parse all longs [MR #​2881](pgjdbc/pgjdbc#2881) - docs: Fix typos in info.html [MR #​2860](pgjdbc/pgjdbc#2860) - fix: Return correct default from PgDatabaseMetaData.getDefaultTransactionIsolation [MR #​2992](pgjdbc/pgjdbc#2992) fixes [Issue #​2991](pgjdbc/pgjdbc#2991) - test: fix assertion in RefCursorFetchTestultFetchSize rows - test: use try-with-resources in LogicalReplicationStatusTest </details> <details> <summary>liquibase/liquibase-hibernate</summary> ### [`v4.25.0`](https://github.com/liquibase/liquibase-hibernate/releases/tag/v4.25.0): Support for Liquibase Hibernate 6 Extension v4.25.0 [Compare Source](liquibase/liquibase-hibernate@v4.24.0...v4.25.0) #### Changes #### What's Changed - DAT-15993 - liquibase-hibernate using Liquibase Parent POM by [@​jandroav](https://github.com/jandroav) in liquibase/liquibase-hibernate#587 - Update README.md by [@​vivekBoii](https://github.com/vivekBoii) in liquibase/liquibase-hibernate#585 - Update pom.xml by [@​jandroav](https://github.com/jandroav) in liquibase/liquibase-hibernate#596 - chore(deps): bump liquibase/build-logic from 0.4.7 to 0.5.5 by [@​dependabot](https://github.com/dependabot) in liquibase/liquibase-hibernate#609 - Fixed a typo in ReadMe by [@​smty2018](https://github.com/smty2018) in liquibase/liquibase-hibernate#600 #### New Contributors - [@​vivekBoii](https://github.com/vivekBoii) made their first contribution in liquibase/liquibase-hibernate#585 - [@​smty2018](https://github.com/smty2018) made their first contribution in liquibase/liquibase-hibernate#600 - [@​sayaliM0412](https://github.com/sayaliM0412) made their first contribution in liquibase/liquibase-hibernate#618 **Full Changelog**: liquibase/liquibase-hibernate@v4.24.0...v4.25.0 </details> <details> <summary>liquibase/liquibase</summary> ### [`v4.25.0`](https://github.com/liquibase/liquibase/blob/HEAD/changelog.txt#Liquibase-4250-is-a-major-release) [Compare Source](liquibase/liquibase@v4.24.0...v4.25.0) </details> <details> <summary>vladmihalcea/hypersistence-utils</summary> ### [`v3.6.1`](https://github.com/vladmihalcea/hypersistence-utils/blob/HEAD/changelog.txt#Version-361---November-11-2023) \================================================================================ Export the testing mechanism [#​676](vladmihalcea/hypersistence-utils#676) </details> <details> <summary>hibernate/hibernate-orm</summary> ### [`v6.4.0.Final`](https://github.com/hibernate/hibernate-orm/blob/HEAD/changelog.txt#Changes-in-640Final-November-23-2023) [Compare Source](hibernate/hibernate-orm@6.3.2...6.4.0) https://hibernate.atlassian.net/projects/HHH/versions/32212 \*\* Bug \* \[HHH-17454] - SemanticException caused by type check when comparing generic path to parameter expression \* \[HHH-17428] - Parameter place holder should start from 1 in StandardTemporaryTableExporter \* \[HHH-17415] - NullPointerException: EntityValuedPathInterpretation - getNavigablePath() \* \[HHH-17412] - Type comparison error due to surprising javac method selection \* \[HHH-17411] - Fetch join on treated join leads to owner not selected error \* \[HHH-17386] - Type inference source is not reset for top level predicates \* \[HHH-17384] - OneToMany association with [@​NotFound](https://github.com/NotFound) results in SQL with different JOIN-type for SELECT (LEFT JOIN) and COUNT (JOIN) \* \[HHH-17383] - Association is null in lazy initialized element collection \* \[HHH-17382] - Dynamic instantiation leads to superclass fields not found when using injection \* \[HHH-17381] - fix wrong groupId in Compatibility.adoc \* \[HHH-17380] - Persisting an entity with a non generated id and [@​MapsId](https://github.com/MapsId) throws PropertyValueException \* \[HHH-17370] - ServiceException: Unable to create requested service \[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Cannot invoke "org.hibernate.resource.jdbc.spi.JdbcObserver.jdbcConnectionAcquisitionEnd(java.sql.Connection)" because "this.observer" is null \* \[HHH-17344] - DB2zDialect NullPointerException \* \[HHH-17328] - Retrieve entity using entity graph not adding type in the where clause for [@​Inheritance](https://github.com/Inheritance)(strategy = InheritanceType.SINGLE_TABLE) \* \[HHH-17313] - Session#setDefaultReadOnly is ignored by named queries \* \[HHH-17308] - AssertionError when mixing [@​SQLSelect](https://github.com/SQLSelect) and composite ID \* \[HHH-17299] - AssertionError in DiscriminatorPathInterpretation when treating a path with the same subtype \* \[HHH-17294] - Non-Embeddable JSON objects are not marked as dirty when modified \* \[HHH-17292] - MappedSuperclass with more than 1 subclass level leads to "UnknownPathException: Could not resolve attribute" \* \[HHH-17102] - [@​SqlResultSetMapping](https://github.com/SqlResultSetMapping) doesn’t work with [@​Inheritance](https://github.com/Inheritance)(strategy = InheritanceType.JOINED) \*\* Deprecation \* \[HHH-17441] - Deprecate [@​Comment](https://github.com/Comment) \*\* Improvement \* \[HHH-17425] - Introduce new configuration parameters for offline Dialect initialization \* \[HHH-17424] - Have Dialect manage more of ExtractedDatabaseMetadata \* \[HHH-17417] - Workaround Oracle driver issue to reduce connection creation \* \[HHH-17409] - Support offset without limit in AbstractSimpleLimitHandler and Oracle12LimitHandler \* \[HHH-17389] - Add getQueryHintString() for PostgreSQLDialect \* \[HHH-17372] - Endless recursion between default implementations of SelectionQuery.getResultStream() and SelectionQuery.stream() \* \[HHH-17355] - Smoothen rough edges with array functions \* \[HHH-17340] - Fix typos in javadoc \* \[HHH-17023] - Add support for Altibase dialect \* \[HHH-15074] - Allow partial composite id generation for EmbeddedId \*\* New Feature \* \[HHH-17357] - Support pgvector types and functions \* \[HHH-17210] - Expose custom JFR events \*\* Sub-task \* \[HHH-17347] - Support for JDK which do not support JFR events \*\* Task \* \[HHH-17390] - Change scope of AbstyractEntityInitializer#resolveInstance \* \[HHH-17367] - Add links to tutorials in documentation \* \[HHH-17362] - Define dependencies of hibernate-jpamodelgen as api \* \[HHH-17350] - Work on hibernate-models, XSD and JAXB ### [`v6.3.2.Final`](hibernate/hibernate-orm@6.3.1...6.3.2) [Compare Source](hibernate/hibernate-orm@6.3.1...6.3.2) </details> <details> <summary>Blazebit/blaze-persistence</summary> ### [`v1.6.10`](https://github.com/Blazebit/blaze-persistence/blob/HEAD/CHANGELOG.md#​1610) [Compare Source](Blazebit/blaze-persistence@1.6.9...1.6.10) 12/11/2023 - [Release tag](https://github.com/Blazebit/blaze-persistence/releases/tag/1.6.10) [Resolved issues](https://github.com/Blazebit/blaze-persistence/issues?q=is%3Aissue+milestone%3A1.6.10+is%3Aclosed+sort%3Aupdated-desc) ##### New features - Support JDK 21 - Add CockroachDB function registrations - Support Hibernate 6.3 and 6.4 - Special case limit 1 in correlation builders to support old MySQL and MariaDB versions ##### Bug fixes - Fix parsing error for entity view limit mapping - Fix dropping of embeddable group by expression when nested property has same name as parent property - Fix SQL generation for lateral subqueries when correlated path has `@Where` predicate - Fix `ConcurrentModificationException` during metamodel determination for special Hibernate Envers mappings - Clear `EntityViewManager` static fields in entity view implementations to avoid possible memory leak - Ignore `@Any` mapped attributes in enum type scanning - Fix NPE caused by wrong order by expression during criteria builder copying - Workaround Hibernate 6 returning null java type for enum parameters - Add Entity View type test values for more Java types ##### Backwards-incompatible changes None yet </details> <details> <summary>diffplug/spotless</summary> ### [`v2.41.0`](https://github.com/diffplug/spotless/blob/HEAD/CHANGES.md#​2410---2023-08-29) ##### Added - Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#​1753](diffplug/spotless#1753)) - Support GJF own import order. ([#​1780](diffplug/spotless#1780)) ##### Fixed - Use latest versions of popular style guides for `eslint` tests to fix failing `useEslintXoStandardRules` test. ([#​1761](diffplug/spotless#1761), [#​1756](diffplug/spotless#1756)) - Add support for `prettier` version `3.0.0` and newer. ([#​1760](diffplug/spotless#1760), [#​1751](diffplug/spotless#1751)) - Fix npm install calls when npm cache is not up-to-date. ([#​1760](diffplug/spotless#1760), [#​1750](diffplug/spotless#1750)) ##### Changes - Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#​1761](diffplug/spotless#1761)) - Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#​1760](diffplug/spotless#1760)) - Bump default `greclipse` version to latest `4.27` -> `4.28`. ([#​1775](diffplug/spotless#1775)) </details> <details> <summary>quarkusio/quarkus</summary> ### [`v3.6.0`](quarkusio/quarkus@3.5.3...3.6.0) [Compare Source](quarkusio/quarkus@3.5.3...3.6.0) ### [`v3.5.3`](https://github.com/quarkusio/quarkus/releases/tag/3.5.3) [Compare Source](quarkusio/quarkus@3.5.2...3.5.3) ##### Complete changelog - [#​37215](quarkusio/quarkus#37215) - Use LinkedHashMap for parts map to ensure user input order - [#​37214](quarkusio/quarkus#37214) - MultipartFormDataOutput should use an ordered map instead of a HashMap - [#​37210](quarkusio/quarkus#37210) - \[3.5] Fix and adjust Quarkiverse extension template - [#​37209](quarkusio/quarkus#37209) - Build cache - Additional tweaks - [#​37206](quarkusio/quarkus#37206) - recognize quarkus.tls.trust-all property by keycloak-admin-client extension - [#​37174](quarkusio/quarkus#37174) - Ignore files coming from quarkus-ide-launcher jar - [#​37130](quarkusio/quarkus#37130) - Do not report unused deprecated runtime props with default value as used - [#​37102](quarkusio/quarkus#37102) - Fix filter per extension in dev ui - [#​37073](quarkusio/quarkus#37073) - Use 3.2 as the example stream for update-quarkus.adoc - [#​37072](quarkusio/quarkus#37072) - Deprecated runtime configuration properties with default value are reported even though never used - [#​37046](quarkusio/quarkus#37046) - Adjust Quarkiverse Antora doc templates a bit - [#​36961](quarkusio/quarkus#36961) - Fix GraphQL WebSocket handling occurring before authorization ### [`v3.5.2`](https://github.com/quarkusio/quarkus/releases/tag/3.5.2) [Compare Source](quarkusio/quarkus@3.5.1...3.5.2) ##### Complete changelog - [#​37120](quarkusio/quarkus#37120) - Bump Smallrye RM from 4.10.1 to 4.10.2 - [#​37104](quarkusio/quarkus#37104) - Make analytics tests more a bit more resilient - [#​37090](quarkusio/quarkus#37090) - Add the actual coordinates of the MySQL driver - [#​37070](quarkusio/quarkus#37070) - Security doc fix: Broken link and bad code snippet - [#​37069](quarkusio/quarkus#37069) - Tiny tweaks based on QE feedback for Datasource guide - [#​37068](quarkusio/quarkus#37068) - Updates infinispan client intelligence section - [#​37058](quarkusio/quarkus#37058) - Bump com.fasterxml.jackson:jackson-bom from 2.15.2 to 2.15.3 - [#​37055](quarkusio/quarkus#37055) - Bump io.smallrye.config:smallrye-config-source-yaml from 3.4.1 to 3.4.4 in /devtools/gradle - [#​37038](quarkusio/quarkus#37038) - Disable CustomManifestArgumentsTest on Windows - [#​37032](quarkusio/quarkus#37032) - OpenAPI make sure basic auth auto detection work - [#​37028](quarkusio/quarkus#37028) - Fix typos in reactive-sql-clients.adoc - [#​37025](quarkusio/quarkus#37025) - Document how to log authentication failures for RESTEasy Reactive users migrating from the RESTEasy Classic - [#​37019](quarkusio/quarkus#37019) - Address CVE-2023-21971 present in MySQL connector - [#​37018](quarkusio/quarkus#37018) - Address CVE-2023-21971 present in MySQL connector - [#​37015](quarkusio/quarkus#37015) - Bump org.eclipse.parsson:parsson from 1.1.4 to 1.1.5 - [#​37010](quarkusio/quarkus#37010) - Fix vale errors and some warnings in the OIDC Configuration Properties reference guide - [#​37006](quarkusio/quarkus#37006) - Never register server specific providers in REST Client (fixed) - [#​37003](quarkusio/quarkus#37003) - Small adjustments for documentation related content - [#​37001](quarkusio/quarkus#37001) - Revert "Unblock SmallRye Health exposed routes" - [#​36991](quarkusio/quarkus#36991) - Upgrade es-module-shims to 1.8.1 - [#​36985](quarkusio/quarkus#36985) - Generate a file with relations between guides - [#​36983](quarkusio/quarkus#36983) - Fix discarded ObjectMapper configuration - [#​36981](quarkusio/quarkus#36981) - Updates to Infinispan 14.0.20.Final - [#​36968](quarkusio/quarkus#36968) - Send host.name in all spans - [#​36953](quarkusio/quarkus#36953) - Workaround quarkusio/quarkus#36952 alias jboss/jboss-parent-pom#236 jboss-parent:40 still manages jdk-misc, but does not define version.jdk-misc anymore - [#​36942](quarkusio/quarkus#36942) - Option TraceServiceLoaderFeature removed in GraalVM 23.1 - [#​36941](quarkusio/quarkus#36941) - Fix OTel Resource Attributes - [#​36924](quarkusio/quarkus#36924) - Add keywords and topics for hibernate-search-orm-elasticsearch.adoc - [#​36917](quarkusio/quarkus#36917) - Update SmallRye Config to 3.4.4 - [#​36914](quarkusio/quarkus#36914) - Reset databases/users for each Hibernate ORM tenancy test module - [#​36912](quarkusio/quarkus#36912) - Avoid `@TempDir` in RestClientCDIDelegateBuilderTest - [#​36884](quarkusio/quarkus#36884) - SmallRye Config property mapping mismatches from the property name in the generated config documentation - [#​36868](quarkusio/quarkus#36868) - Native binary generated using quarkus, graalvm and picocli trying to read from .env folder in working directory - [#​36856](quarkusio/quarkus#36856) - Lowercase env vars with hyphens are no picked up anymore in Quarkus 3.5.0 (e.g. in docker compose or Hashicorp Nomad) - [#​36850](quarkusio/quarkus#36850) - ObjectMapper configuration is discarded in resteasy-reactive-jackson's JsonFactory - [#​36847](quarkusio/quarkus#36847) - SmallRye Config error message suggests strange enum values when a bad value is passed - [#​36753](quarkusio/quarkus#36753) - Fix order of defaults recording - [#​36742](quarkusio/quarkus#36742) - DevUI resource error on main - [#​36711](quarkusio/quarkus#36711) - Disable Http2RSTFloodProtectionTest on Windows - [#​36578](quarkusio/quarkus#36578) - Maven CLI: add startWith matching into recipes detection - [#​36573](quarkusio/quarkus#36573) - Maven CLI: add wildcard matching into recipes detection - [#​36570](quarkusio/quarkus#36570) - Maven CLI: use recipes for platform extensions - [#​36568](quarkusio/quarkus#36568) - Maven CLI: use recipes for platform extensions - [#​36129](quarkusio/quarkus#36129) - auto-service-loader-registration fails with GraalVM CE 21+35.1 - [#​32049](quarkusio/quarkus#32049) - resteasy-reactive Interceptors don't get executed after Authorization failure - [#​31024](quarkusio/quarkus#31024) - Resteasy Reactive client tries to use ContainerResponseFilter </details> <details> <summary>quarkusio/quarkus-platform</summary> ### [`v3.5.3`](quarkusio/quarkus-platform@3.5.2...3.5.3) [Compare Source](quarkusio/quarkus-platform@3.5.2...3.5.3) ### [`v3.5.2`](quarkusio/quarkus-platform@3.5.1...3.5.2) [Compare Source](quarkusio/quarkus-platform@3.5.1...3.5.2) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This MR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4yNC4wIiwidXBkYXRlZEluVmVyIjoiMzQuMjQuMCJ9-->