Hi all, The 2-track approach looks good to me.
For the Iceberg track: should we engage with the Iceberg community now? I'm happy to start that conversation if no one has done so yet. Thanks, Alex On Fri, Jun 26, 2026 at 8:15 PM Yufei Gu <[email protected]> wrote: > > Robert, two tracks make sense to me. > > I'd also suggest documenting that the user cannot enable > reflection-free-serializers, or provide a production ready check if > possible. > quarkus.rest.jackson.optimization.enable-reflection-free-serializers=false > > Yufei > > > On Fri, Jun 26, 2026 at 12:30 AM Robert Stupp <[email protected]> wrote: > > > Thanks Yufei. > > > > I agree that keeping > > > > > > quarkus.rest.jackson.optimization.enable-reflection-free-serializers=false > > > > is a reasonable workaround for the Quarkus 3.37 upgrade. > > > > I do not think we should treat that as the Quarkus 4 / Jackson 3 readiness > > answer, though. > > That flag disables one generated Quarkus REST JSON path in the current > > Quarkus 3.x line. > > It does not make Iceberg's Jackson 2 serializers, parser APIs, or > > ObjectMapper integration usable with a Jackson 3 runtime path. > > > > That is the distinction I wanted to make with the reflection-free > > serializer example. > > It is not the same issue as Jackson 3, nor is it proof of a Jackson 3 bug. > > It is evidence that Polaris' REST correctness depends on the exact > > Quarkus/Jackson integration path and on preserving Iceberg's > > registered ObjectMapper module behavior. > > > > So I think there are still two separate tracks: > > > > 1. For Polaris-owned JSON usage, keep migrating isolated code paths to > > Jackson 3 > > when the wire contract is covered by tests. > > 2. For Iceberg REST model handling, track it as dependency-constrained for > > Polaris' eventual Quarkus 4 readiness. > > > > I agree that the Iceberg-side migration timeline is an Iceberg project > > decision. > > From the Polaris side, I do not think we should leave that as an implicit > > unknown. > > We should record it as a readiness blocker/category, even if the action is > > only "needs upstream discussion" for now. > > > > For the reflection-free serializers specifically, I would not frame the > > desired future as "Polaris must use this optimization." > > The more important point is that ordinary REST model mapping should not > > depend on every downstream framework preserving one exact manually > > registered ObjectMapper path. > > Where Iceberg needs custom parser logic for versioning, compatibility, > > polymorphism, or parser context, that should stay explicit. > > But where REST request/response models are ordinary property mappings, > > making those models more self-describing would make framework-managed HTTP > > runtimes less fragile. > > > > Robert > > > > On Fri, Jun 26, 2026 at 2:38 AM Yufei Gu <[email protected]> wrote: > > > > > Hi Robert, > > > > > > Thanks for raising this thread. I shared Alex's concern about how > > Jackson 3 > > > will work with Iceberg REST serializers that are still based on Jackson > > 2. > > > > > > I believe the reflection-free serializers are a separate issue since they > > > already exist in the current Quarkus release. We can simply keep that > > > optimization disabled: > > > > > > > > quarkus.rest.jackson.optimization.enable-reflection-free-serializers=false > > > > > > > > > Let me know if I missed anything. > > > > > > Waiting for Iceberg to migrate to Jackson 3 before moving Polaris to > > > Quarkus 4 makes sense to me. We should thoroughly test the HTTP request > > and > > > response paths once everything is in place, but that seems like a way to > > > move forward. The Iceberg Jackson 3 migration timeline is unknown to me, > > we > > > could get started now or we could just wait. > > > > > > Yufei > > > > > > > > > On Thu, Jun 25, 2026 at 1:30 AM Jean-Baptiste Onofré <[email protected]> > > > wrote: > > > > > > > Hi > > > > > > > > I think it’s two related efforts: > > > > - first Jackson 3. Robert’s proposal looks good to me, especially > > > avoiding > > > > Quarkus 4 major upgrade. > > > > - json-b is interesting indeed, especially using Johnson. For instance > > > > Karaf-decanter can support both Jackson and Johnson thanks to json-b. > > > > However I think it’s another discussion. > > > > > > > > I would suggest to start with jackson3 upgrade now and investigate > > json-b > > > > api use as a follow up. > > > > > > > > Regards > > > > JB > > > > > > > > Le jeu. 25 juin 2026 à 10:01, Romain Manni-Bucau < > > [email protected]> > > > a > > > > écrit : > > > > > > > > > (from the phone) > > > > > > > > > > Neat thing with jsonb as an api is you can décorateur it - even with > > > CDI > > > > > and abstract decorator or interceptors - and migrate class by class, > > > some > > > > > backed by jackson, other by whatever works > > > > > > > > > > > > > > > Romain Manni-Bucau > > > > > @rmannibucau <https://x.com/rmannibucau> | .NET Blog > > > > > <https://dotnetbirdie.github.io/> | Blog < > > > https://rmannibucau.github.io/ > > > > > > > > > > | Old > > > > > Blog <http://rmannibucau.wordpress.com> | Github > > > > > <https://github.com/rmannibucau> | LinkedIn > > > > > <https://www.linkedin.com/in/rmannibucau> | Book > > > > > < > > > > > > > > > > > > > > https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064 > > > > > > > > > > > Javaccino founder (Java/.NET service - contact via linkedin) > > > > > > > > > > Le jeu. 25 juin 2026, 09:42, Robert Stupp <[email protected]> a écrit : > > > > > > > > > > > Hi Alex, Romain, > > > > > > > > > > > > Thanks, both. > > > > > > > > > > > > Alex, yes, I think we should eventually have the corresponding > > > > discussion > > > > > > on the Iceberg side as well. > > > > > > I would just prefer to first make the Polaris impact clear here: > > > > > > which Jackson usage is Polaris-owned, which usage is only > > > > > test/distribution > > > > > > surface, and which usage is constrained by dependency APIs. > > > > > > > > > > > > On the Quarkus HTTP path: today Polaris registers Iceberg's REST > > > > > > serializers via the Quarkus ObjectMapper customizer: > > > > > > > > > > > > RESTSerializers.registerAll(objectMapper) > > > > > > > > > > > > For the normal Quarkus REST Jackson path, I would expect Iceberg > > > types > > > > > such > > > > > > as ConfigResponse to go through that customized ObjectMapper path. > > > > > > > > > > > > The issue is that this is also the fragile part. > > > > > > With Quarkus REST's reflection-free serializer/deserializer > > > > optimization, > > > > > > Quarkus can use generated handling for request/response body types. > > > > > > We already saw that this is not equivalent for some Iceberg REST > > > > request > > > > > > types: > > > > > > create-namespace was one concrete case where the request body was > > not > > > > > > deserialized correctly. > > > > > > > > > > > > So I think there are two different milestones here: > > > > > > > > > > > > 1. Iceberg JSON support can run on Jackson 3. > > > > > > 2. Iceberg REST model types are self-describing enough that Quarkus > > > > > > generated > > > > > > REST serializers/deserializers can handle them correctly without > > > > > relying > > > > > > on > > > > > > externally registered ObjectMapper modules for the core wire > > > format. > > > > > > > > > > > > Those are related, but not the same. > > > > > > > > > > > > Romain, I agree that JSON-B/JSON-P is an interesting API-boundary > > > > > direction > > > > > > in general. > > > > > > But I do not think it is the practical near-term answer for this > > > issue. > > > > > > JSON-B helps when the runtime uses a JSON-B provider. > > > > > > JSON-P is lower-level JSON processing. > > > > > > Neither directly helps existing Iceberg code paths that use Jackson > > > > > > ObjectMapper/JsonMapper, nor consumers that rely on Iceberg's > > > > > Jackson-based > > > > > > REST parsers and serializers. > > > > > > > > > > > > For this specific problem, I think the cleaner long-term shape is > > > that > > > > > the > > > > > > Iceberg REST model types become Jackson-self-describing: > > > > > > mostly regular Jackson annotations for properties/builders/naming, > > > and > > > > > only > > > > > > custom serializers where the wire format actually cannot be > > > represented > > > > > > otherwise. > > > > > > > > > > > > That should also be compatible with a transition period. > > > > > > Many core Jackson annotations are still in > > > > > > `com.fasterxml.jackson.annotation` and work across Jackson 2/3. > > > > > > Where databind-specific annotations differ, the Jackson 2 and > > > Jackson 3 > > > > > > annotations can be duplicated on the model types if needed. > > > > > > > > > > > > Polaris could work around this with local wrapper DTOs/adapters. > > > > > > Nessie has a model like that and it works with Quarkus 3.37 and > > > > > > reflection-free serializers. > > > > > > The difference is that Nessie owns that path end-to-end and can > > > handle > > > > > > those types directly. > > > > > > Polaris is much more tied to Iceberg's REST model types and > > services, > > > > so > > > > > > introducing a local shadow model here would be a bigger local > > > ownership > > > > > > decision. > > > > > > > > > > > > The drift argument is still real: if Polaris re-implements Iceberg > > > REST > > > > > > payload types locally, we have to keep that model aligned with > > > > Iceberg's > > > > > > REST API over time. > > > > > > That may be doable, but I would rather not make it the default > > answer > > > > if > > > > > > the Iceberg REST model types can become self-describing instead. > > > > > > > > > > > > So my current view is: > > > > > > > > > > > > - short term: keep migrating Polaris-owned JSON usage where it is > > > > > isolated > > > > > > and > > > > > > testable > > > > > > - short term: track Iceberg REST model handling as > > > > dependency-constrained > > > > > > - longer term: discuss in Iceberg whether the REST model types can > > > move > > > > > > toward a > > > > > > self-describing Jackson annotation model, so consumers do not > > need > > > > > > externally > > > > > > registered manual serializers for basic REST request/response > > > > > > correctness. > > > > > > > > > > > > That would make a future Quarkus 4/Jackson 3 upgrade much less > > risky > > > > for > > > > > > Polaris. > > > > > > > > > > > > Robert > > > > > > > > > > > > On Wed, Jun 24, 2026 at 11:06 PM Romain Manni-Bucau < > > > > > [email protected] > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > Hi guys, > > > > > > > > > > > > > > maybe encouraging JSON-P+JSON-B as API then any vendor/impl can > > > pick > > > > > its > > > > > > > preferred vendor can be a neat choice for the future instead of > > > > relying > > > > > > > deeply on jackson? > > > > > > > quarkus already supports it and work in iceberg is not crazy - > > not > > > > > > speaking > > > > > > > of the community discussion not spark and friends integrations ;) > > > > > > > > > > > > > > Romain Manni-Bucau > > > > > > > @rmannibucau <https://x.com/rmannibucau> | .NET Blog > > > > > > > <https://dotnetbirdie.github.io/> | Blog < > > > > > https://rmannibucau.github.io/ > > > > > > > > > > > > > > | Old > > > > > > > Blog <http://rmannibucau.wordpress.com> | Github > > > > > > > <https://github.com/rmannibucau> | LinkedIn > > > > > > > <https://www.linkedin.com/in/rmannibucau> | Book > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064 > > > > > > > > > > > > > > > Javaccino founder (Java/.NET service - contact via linkedin) > > > > > > > > > > > > > > > > > > > > > Le mer. 24 juin 2026 à 18:03, Alexandre Dutra <[email protected] > > > > > > a > > > > > > écrit > > > > > > > : > > > > > > > > > > > > > > > Hi Robert, > > > > > > > > > > > > > > > > Your approach looks good to me. If we can avoid the giant > > > Quarkus-4 > > > > > PR > > > > > > > > and introduce the changes gradually, that's a very valuable > > > option. > > > > > > > > > > > > > > > > I would like though to have a better understanding of the > > > situation > > > > > > > > regarding Iceberg REST serializers, which are still Jackson 2: > > > > > > > > > > > > > > > > - Should we engage with the Iceberg community and start a > > > migration > > > > > > > > discussion there as well? > > > > > > > > > > > > > > > > - How would the HTTP layer in Quarkus 4 serialize an Iceberg > > > type, > > > > > > > > e.g. ConfigResponse? Would it use Iceberg's > > > > ConfigResponseSerializer, > > > > > > > > or something else? > > > > > > > > > > > > > > > > Thanks, > > > > > > > > Alex > > > > > > > > > > > > > > > > On Wed, Jun 24, 2026 at 4:42 PM Robert Stupp <[email protected]> > > > > wrote: > > > > > > > > > > > > > > > > > > Hi everyone, > > > > > > > > > > > > > > > > > > I would like to start a discussion about Jackson 3 readiness > > > for > > > > > > > Polaris. > > > > > > > > > > > > > > > > > > This is not about upgrading Polaris to Quarkus 4 right now. > > > > > > > > > Polaris is still on Quarkus 3, and I do not think we should > > > turn > > > > > this > > > > > > > > into > > > > > > > > > a big platform-upgrade thread. > > > > > > > > > > > > > > > > > > But Quarkus 4 is expected to move to Jackson 3. > > > > > > > > > The current public roadmap mentions Jackson 3 as part of > > > Quarkus > > > > 4, > > > > > > > with > > > > > > > > > Beta 1 tentatively around September 2026 and GA around > > November > > > > > 2026. > > > > > > > > > > > > > > > > > > I think that matters for Polaris because Jackson is not only > > > used > > > > > in > > > > > > > > > isolated helper code. > > > > > > > > > Quarkus also owns important runtime paths for us, including > > > REST > > > > > > > > > request/response mapping. > > > > > > > > > Once we move to Quarkus 4, Jackson 3 is expected to be on > > that > > > > > path. > > > > > > > > > > > > > > > > > > We already have a smaller example showing why this is not > > just > > > a > > > > > > > > > theoretical dependency cleanup. > > > > > > > > > In the Quarkus 3.37 work, Polaris currently has to keep the > > > > Quarkus > > > > > > > REST > > > > > > > > > Jackson reflection-free serializer optimization disabled. > > > > > > > > > With that optimization enabled, the generated REST JSON path > > > does > > > > > not > > > > > > > > > behave the same as the customized ObjectMapper path for some > > > > > Iceberg > > > > > > > REST > > > > > > > > > request types. > > > > > > > > > One concrete symptom was namespace creation deserializing > > > > > > incorrectly. > > > > > > > > > > > > > > > > > > That is not a Jackson 3 bug by itself. > > > > > > > > > But it is a good reminder that the exact Quarkus/Jackson REST > > > > > > > integration > > > > > > > > > path matters for Polaris correctness. > > > > > > > > > > > > > > > > > > I have started splitting out a few smaller Jackson 3 > > > preparation > > > > > PRs > > > > > > > > > already. > > > > > > > > > The idea is to reduce the local migration surface where we > > can > > > do > > > > > > that > > > > > > > > > safely: > > > > > > > > > > > > > > > > > > - migrate small Polaris-internal serializers/deserializers > > > first; > > > > > > > > > - keep the JSON wire format stable and covered by tests; > > > > > > > > > - avoid mixing behavior changes into the migration; > > > > > > > > > - leave dependency-constrained areas on Jackson 2 until the > > > > > > dependency > > > > > > > > path > > > > > > > > > is clear. > > > > > > > > > > > > > > > > > > I think this is lower risk than waiting until a future > > Quarkus > > > 4 > > > > > > > upgrade > > > > > > > > PR > > > > > > > > > has to solve everything at once. > > > > > > > > > > > > > > > > > > There are still areas where Polaris depends on libraries that > > > > > expose > > > > > > or > > > > > > > > use > > > > > > > > > Jackson 2 JSON mapping APIs. > > > > > > > > > Iceberg is one important example, because Polaris relies on > > > > Iceberg > > > > > > > types > > > > > > > > > and REST-related model handling. > > > > > > > > > > > > > > > > > > I do not think the Polaris dev list is the place to decide > > > > > Iceberg's > > > > > > > > > dependency policy. > > > > > > > > > But I do think Polaris should track this as a Quarkus 4 > > > readiness > > > > > > > > > constraint, so we know which parts are Polaris-owned and > > which > > > > > parts > > > > > > > are > > > > > > > > > blocked on dependency APIs. > > > > > > > > > > > > > > > > > > My proposed direction is: > > > > > > > > > > > > > > > > > > 1. Treat Jackson 3 readiness as encouraged for new > > > > Polaris-internal > > > > > > > JSON > > > > > > > > > code. > > > > > > > > > 2. Accept focused PRs that migrate isolated Polaris code > > paths > > > to > > > > > > > > Jackson 3 > > > > > > > > > when tests show the JSON contract stays stable. > > > > > > > > > 3. Avoid introducing new Jackson 2 usage unless a dependency > > > API > > > > > > > requires > > > > > > > > > it. > > > > > > > > > 4. Track remaining Jackson 2 usage by category: > > Polaris-owned, > > > > > > > > > dependency-constrained, test-only, and > > > > > distribution/license-only. > > > > > > > > > 5. Use that tracking to identify what must be resolved > > before a > > > > > > > Quarkus 4 > > > > > > > > > upgrade > > > > > > > > > becomes practical. > > > > > > > > > > > > > > > > > > This does not need to be a vote. > > > > > > > > > I am mostly looking for agreement on the direction and on how > > > we > > > > > want > > > > > > > to > > > > > > > > > track the remaining blockers. > > > > > > > > > > > > > > > > > > Does this sound like the right approach? > > > > > > > > > > > > > > > > > > Robert > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
