Skip to content

Conversation

@XN137
Copy link
Contributor

@XN137 XN137 commented Jul 21, 2025

PolarisEntityManager.prepareResolver was the only place that used the
EntityCache.
By introducing an application-scoped ResolverFactory the creation of
an EntityCache is decided only once in QuarkusProducers, which will become
the only place where MetaStoreManagerFactory.getOrCreateEntityCache gets called.

Note that the little left-over functionality of PolarisEntityManager can
be split out to smaller but more dedicated interfaces in a follow-up most likely.

Copy link
Contributor

@dimas-b dimas-b left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR LGTM as a general refactoring to isolate resolver lifecycle concerns into a dedicated factory.

@dimas-b dimas-b requested a review from eric-maynard July 21, 2025 15:10
@XN137 XN137 force-pushed the add-ResolverFactory branch from 8a61fb9 to f4ce8f7 Compare July 21, 2025 15:50
`PolarisEntityManager.prepareResolver` was the only place that used the
`EntityCache`.
By introducing an application-scoped `ResolverFactory` the creation of
an `EntityCache` is decided only once in `QuarkusProducers`, which will become
the only place where `MetaStoreManagerFactory.getOrCreateEntityCache` gets called.

Note that the little left-over functionality of `PolarisEntityManager` can
be split out to more dedicated interfaces in a follow-up most likely.
@XN137 XN137 force-pushed the add-ResolverFactory branch from f4ce8f7 to e7ff61e Compare July 22, 2025 05:48
@XN137 XN137 marked this pull request as ready for review July 22, 2025 05:49
@XN137 XN137 requested a review from dimas-b July 22, 2025 05:49
Copy link
Member

@snazy snazy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Minor comments

*/
public PolarisEntityManager(
@Nonnull PolarisMetaStoreManager metaStoreManager, @Nullable EntityCache entityCache) {
@Nonnull PolarisMetaStoreManager metaStoreManager, @Nonnull ResolverFactory resolverFactory) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit:

Suggested change
@Nonnull PolarisMetaStoreManager metaStoreManager, @Nonnull ResolverFactory resolverFactory) {
@Nonnull PolarisMetaStoreManager metaStoreManager, ResolverFactory resolverFactory) {

We kind-of agreed that parameters a not-null by default. But I don't mind having it explicit.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

while i agree that assuming non-null would be the best default it would seem weird to have only 1 of the parameters annotated like that.
also it would be unjustified to remove the annotation from the 1st parameter as part of this PR, so i add it to the 2nd parameter for consistency.

long term we should starting using https://jspecify.dev/docs/applying/#2-add-nullmarked

@github-project-automation github-project-automation bot moved this from PRs In Progress to Ready to merge in Basic Kanban Board Jul 22, 2025
@snazy snazy merged commit 95358a9 into apache:main Jul 23, 2025
12 checks passed
@github-project-automation github-project-automation bot moved this from Ready to merge to Done in Basic Kanban Board Jul 23, 2025
@XN137 XN137 deleted the add-ResolverFactory branch July 23, 2025 15:21
snazy added a commit to snazy/polaris that referenced this pull request Nov 20, 2025
* Extract ResolverFactory from PolarisEntityManager (apache#2148)

`PolarisEntityManager.prepareResolver` was the only place that used the `EntityCache`. By introducing an application-scoped `ResolverFactory` the creation of an `EntityCache` is decided only once in `QuarkusProducers`, which will become the only place where `MetaStoreManagerFactory.getOrCreateEntityCache` gets called.

Note that the little left-over functionality of `PolarisEntityManager` can
be split out to more dedicated interfaces in a follow-up most likely.

* Run standard (sharable) REST Catalog integrations tests with MinIO (apache#2158)

* Run standard (sharable) REST Catalog integrations tests with MinIO

Keep special edge case tests (path style, STS endpoint and
client-side FileIO) in `QuarkusRestCatalogMinIoSpecialIT`.

* fix(deps): update quarkus platform and group (apache#2166)

* fix(deps): update dependency io.smallrye.config:smallrye-config-core to v3.13.4 (apache#2165)

* Simplify checkPolarisServiceBootstrappedForRealm (apache#2162)

* fix(deps): update dependency boto3 to v1.39.12 (apache#2169)

* Improve Realm ID resolution for Quarkus 3.24+ (apache#2163)

In Quarkus 3.24, it is now possible to retrieve context locals inside HttpServerMetricsTagsContributor. This greatly simplifies our RealmIdTagContributor implementation.

It is also now possible to return null from ValueExpressionResolver. This is not a big deal, but still better than returning "".

* chore(deps): update plugin jandex to v2.2.0 (apache#2175)

* Add muti-platform Docker images staging in the release guide (apache#2039)

* fix(deps): update dependency org.apache.commons:commons-text to v1.14.0 (apache#2178)

* Rework getOrCreateSessionSupplier (apache#2161)

note how all the caller immediately called `get` on the returned `Supplier`.
it seems like the `Supplier` was an leaking implementation detail of the
`MetaStoreManagerFactor` implementations.

* Respond with 409 in case of concurrent Namespace update failures instead of 500 (apache#1989)

* NoSQL adoptions

* Last merged commit e9267b6

---------

Co-authored-by: Christopher Lambert <xn137@gmx.de>
Co-authored-by: Dmitri Bourlatchkov <dmitri.bourlatchkov@gmail.com>
Co-authored-by: Mend Renovate <bot@renovateapp.com>
Co-authored-by: Alexandre Dutra <adutra@apache.org>
Co-authored-by: JB Onofré <jbonofre@apache.org>
Co-authored-by: fabio-rizzo-01 <fabio.rizzocascio@jpmorgan.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants