Hi Steven, Thanks for catching this and bringing it to the community’s attention.
The reason for the change in #16765 <http://urldefense.com/v3/__https://github.com/apache/iceberg/pull/16765__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZslwUNqdQ$> was to persist the resolved CRS and algorithm explicitly in metadata, including when they match the defaults. Changing toString() was a side effect that I didn’t recognize as a behavior change at the time. I double-checked Appendix C <https://iceberg.apache.org/spec/#schemas>, which lists geometry(<C>) and geography(<C>, <A>) as the canonical serialized forms. The spec also defines the meaning of omitted parameters, so existing metadata must continue to be interpreted using those defaults. I see three options: 1. Restore the pre-#16765 <http://urldefense.com/v3/__https://github.com/apache/iceberg/pull/16765__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZslwUNqdQ$> behavior. Both toString() and schema JSON use compact forms for default instances, although these differ from the canonical JSON forms listed in Appendix C. 2. Restore the old toString() output while serializing explicit parameters. For the same constructor inputs, toString() produces the pre-#16765 output, while schema JSON and Java serialization include the resolved CRS and algorithm. I’ve opened PR #18169 <https://github.com/apache/iceberg/pull/18169> with this approach. 3. Keep #16765 <http://urldefense.com/v3/__https://github.com/apache/iceberg/pull/16765__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZslwUNqdQ$> unchanged. Both toString() and serialization include explicit parameters, retaining the behavior change in 1.12. My preference is option 2, but I’m happy to follow the community’s preference. Thanks, Xin On Fri, Sep 18, 2026 at 11:12 AM Steven Wu <[email protected]> wrote: > I want to call out a behavior change in 1.12. > > PR #16765 > <https://urldefense.com/v3/__https://github.com/apache/iceberg/pull/16765__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZslwUNqdQ$> > changed GeometryType / GeographyType so toString() always writes the > resolved defaults instead of omitting them. > > *Before*: Default instances collapsed to the bare type name. Geometry > with no CRS printed geometry. Geography printed geography, geography(crs), > or geography(crs, algorithm) depending on what was stored as unset. > > *After*: the constructor stores omitted CRS / algorithm as the Iceberg > defaults, and toString() always includes them: > > - geometry → geometry(OGC:CRS84) > - geography → geography(OGC:CRS84, spherical) > > *Implications* > > - Read path is backward compatible, as SchemaParser or > Types.fromTypeName can parse the type string to the same Type object > - Write path is not string stable. > > *Question*: Do we consider the type's `toString()` change a breaking > change? Personally, I am okay with 1.12 moving forward with the changed > behavior since read is compatible. But I wanted to bring this to the > community attention. > > On Fri, Sep 18, 2026 at 9:57 AM Gianluca Graziadei <[email protected]> > wrote: > >> +1 (non-binding) >> >> Verified checksums, signature, source archive vs. tag, RAT, and ran >> smoke tests with the staged Spark 4.0 runtime. >> >> One follow-up, in the same spirit as Xuanwo's note: the source >> archive also bundles site/docs/assets/javascript/lottie-player.js >> (LottieFiles, MIT) without a license header or an entry in the root >> LICENSE. Not a blocker for this RC since both assets have shipped >> since 1.9.0; this issue is already tacked here >> https://lists.apache.org/thread/hstl6z6qp55hxgdlljpc5xg8wc3kq800 >> <https://urldefense.com/v3/__https://lists.apache.org/thread/hstl6z6qp55hxgdlljpc5xg8wc3kq800__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZucd-8rlQ$> >> >> Separately, while testing I hit a pre-existing NoSuchMethodError when >> reading variant columns with commons-lang3 < 3.13 on the classpath >> (iceberg-parquet uses Streams.of(Iterable) without declaring the >> dependency). Also present in 1.11.0, so not a regression; issue tracked >> here >> https://github.com/apache/iceberg/issues/18164 >> <https://urldefense.com/v3/__https://github.com/apache/iceberg/issues/18164__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZuvdhMbeg$> >> >> Cheers, >> Gianluca >> >> On 2026/09/18 00:22:06 Neelesh Salian wrote: >> > Hi Everyone, >> > >> > I propose that we release the following RC as the official Apache >> Iceberg >> > 1.12.0 release. >> > >> > The commit ID is dec392570a88e45ac3a417a487dd72f9bdb629d5 >> > * This corresponds to the tag: apache-iceberg-1.12.0-rc0 >> > * https://github.com/apache/iceberg/commits/apache-iceberg-1.12.0-rc0 >> <https://urldefense.com/v3/__https://github.com/apache/iceberg/commits/apache-iceberg-1.12.0-rc0__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZtNy1-EQg$> >> > * >> > >> https://github.com/apache/iceberg/tree/dec392570a88e45ac3a417a487dd72f9bdb629d5 >> <https://urldefense.com/v3/__https://github.com/apache/iceberg/tree/dec392570a88e45ac3a417a487dd72f9bdb629d5__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZsZEbwiNw$> >> > >> > The release tarball, signature, and checksums are here: >> > * >> https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-1.12.0-rc0 >> <https://urldefense.com/v3/__https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-1.12.0-rc0__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZstALTGmw$> >> > >> > You can find the KEYS file here: >> > * https://downloads.apache.org/iceberg/KEYS >> <https://urldefense.com/v3/__https://downloads.apache.org/iceberg/KEYS__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZsc5zcLsw$> >> > >> > Convenience binary artifacts are staged on Nexus. The Maven repository >> URL >> > is: >> > * >> https://repository.apache.org/content/repositories/orgapacheiceberg-1283/ >> <https://urldefense.com/v3/__https://repository.apache.org/content/repositories/orgapacheiceberg-1283/__;!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZsXi0VR9A$> >> > >> > Please download, verify, and test. >> > >> > Instructions for verifying a release can be found here: >> > * https://iceberg.apache.org/how-to-release/#how-to-verify-a-release >> <https://urldefense.com/v3/__https://iceberg.apache.org/how-to-release/*how-to-verify-a-release__;Iw!!LIr3w8kk_Xxm!tKhzW34uoygDezpDOWiLjy5JRZ97R3veb-YTd5dqkITpmgITiZxSurPnO4FkDvwQ20sDnl_lIPSBk-GmvZs5jtCNBQ$> >> > >> > As this vote spans the weekend, it will remain open until Monday, >> September >> > 21, 2026 at 2:00 PM Pacific Time. >> > >> > [ ] +1 Release this as Apache Iceberg 1.12.0 >> > [ ] +0 >> > [ ] -1 Do not release this because... >> > >> > Only PMC members have binding votes, but other community members are >> > encouraged to cast >> > non-binding votes. This vote will pass if there are 3 binding +1 votes >> and >> > more binding >> > +1 votes than -1 votes. >> > >> >
