+1 (non-binding) Verified the source RC from https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-1.12.0-rc0
- SHA-512 checksum matches - GPG signature is good (signed by Amogh Jahagirdar; key in the published KEYS) - Tag apache-iceberg-1.12.0-rc0 points at dec392570a88e45ac3a417a487dd72f9bdb629d5 - Source tarball is reproducible from the tag (git archive matches; only the release-generated version.txt and iceberg-build.properties are added) - version.txt is 1.12.0 - RAT (dev/check-license) passed, no missing headers - All modules compile cleanly (Spark 3.4/3.5/4.0, Flink, Hive, Kafka Connect) with checkstyle/errorprone clean - iceberg-api (1287) and iceberg-core (8950) unit tests passed from the tarball Tested with JDK 17 on macOS. Thanks, Anoop On Sat, Sep 19, 2026 at 5:13 PM huaxin gao <[email protected]> wrote: > +1 (non-binding) > > Verified the source RC from > https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-1.12.0-rc0 > > - SHA-512 matches > - GPG signature is good > - Tag apache-iceberg-1.12.0-rc0 points at > dec392570a88e45ac3a417a487dd72f9bdb629d5 > - version.txt is 1.12.0 > - RAT (dev/check-license) passed > - iceberg-api and iceberg-core unit tests passed from the tarball > > Spark 4.2 (Scala 2.13) compiled from the tarball. I also ran iceberg-spark > and iceberg-spark-extensions tests locally; a small number failed with > BindException on sparkDriver and a couple of 5s snapshot-isolation > timeouts. Those look like this environment, not an RC issue. > > Thanks, > Huaxin > > > On Sat, Sep 19, 2026 at 3:06 PM huaxin gao <[email protected]> wrote: > >> I am fine with keeping the #16765 >> <https://github.com/apache/iceberg/pull/16765> toString() change in 1.12 >> and documenting it as a behavior change. >> >> Old metadata still loads: "geometry" and "geometry(OGC:CRS84)" parse to >> the same type. Writing the long form is clearer and matches Appendix C. >> >> As Szehon mentioned, this also helps the UDF work I am doing (#15994 >> <https://github.com/apache/iceberg/pull/15994>). A definition-id is >> built from parameter type strings. If omitted vs explicit default algorithm >> printed differently, two equal Geography types would look like two >> different overloads. With #16765 >> <https://github.com/apache/iceberg/pull/16765> they print the same, so >> we do not need a workaround for that case. >> >> Thanks, >> Huaxin >> >> On Fri, Sep 18, 2026 at 8:22 PM Neelesh Salian <[email protected]> >> wrote: >> >>> Based on Szehon's comments, it makes sense to keep the behavior change >>> for 1.12. If we are making a change, I can make sure this is in the Release >>> Notes + Release blog so users are aware. >>> At the end of the voting process for this RC thread here, we can see >>> where we land. >>> Please vote on the RC when you get a chance. >>> Thank you for all those who have voted thus far. >>> >>> On Fri, Sep 18, 2026 at 6:58 PM Anoop Johnson <[email protected]> wrote: >>> >>>> The API change behavior seems reasonable to me. If there are no >>>> objections from the community, we should probably just keep it. If not, the >>>> PR Xin prepared looks like a reasonable fallback. (thanks for turning that >>>> around so quickly!) >>>> >>>> Best, >>>> Anoop >>>> >>>> On Fri, Sep 18, 2026 at 6:06 PM Szehon Ho <[email protected]> >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> Thanks for the thorough review! Indeed, toString() of the >>>>> Geometry/Geography type is changed to include crs, >>>>> algorithm parameters, even if they are the same as default. >>>>> >>>>> I took a look, for me it seems ok to keep the API behavior change for >>>>> 1.12, and put it in the "Behavior Change" category of the release notes. >>>>> Some reasons: >>>>> >>>>> 1. It's just clearer overall. We found without this change, two >>>>> Geography type having the same default algorithm print differently >>>>> depending on whether the user sets it or not, which seemed like a bug. >>>>> 2. toString() now matches the serialization spec, which includes C >>>>> and A: >>>>> >>>>>> geometry(<C>) and geography(<C>, <A>) >>>>> >>>>> 3. It makes Iceberg JSON schema writer obey the spec as is (using >>>>> toString), avoiding the workaround. >>>>> 4. It makes the Iceberg UDF PR that Huaxin is working on easier: >>>>> https://github.com/apache/iceberg/pull/15994. A UDF overload has a >>>>> definition-id which includes the param type string, and we'd have to >>>>> workaround in that code as well, otherwise its a correctness issue if two >>>>> Geography types with the default algorithm have different definition-id >>>>> depending on whether the user set it explicitly. >>>>> >>>>> Happy to hear what others think though. >>>>> Thanks, >>>>> Szehon >>>>> >>>>> On Fri, Sep 18, 2026 at 2:56 PM Xin Huang via dev < >>>>> [email protected]> wrote: >>>>> >>>>>> 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. >>>>>>>> > >>>>>>>> >>>>>>>
