Thanks for all the voting and checks. I've filed an issue to track the source archive bundling a few third-party doc-site assets under site/docs/assets/: https://github.com/apache/iceberg/issues/18191 We can decide how to move forward.
Separately, adding my own vote on this thread +1 (non-binding). Verified on macOS: - Source: GPG signature good, SHA-512 matches, tarball matches the signed tag, license-header (RAT) check passes, and it builds from source. - Staged Nexus convenience binaries are present and signed. - Spark smoke against all four staged Spark runtimes (iceberg-spark-runtime-3.5_2.12, 3.5_2.13, 4.0_2.13, 4.1_2.13): CREATE / INSERT / DELETE / SELECT return the expected results. - Flink smoke against all four staged Flink runtimes (iceberg-flink-runtime-1.20, 2.1, 2.2, 2.3): CREATE / INSERT / SELECT return the expected results. On Sun, Sep 20, 2026 at 9:02 AM Manu Zhang <[email protected]> wrote: > +1 (non-binding) > > Verified: > - Signature and SHA-512 checksum OK; signing key present in the project > KEYS file > - Source tarball matches tag apache-iceberg-1.12.0-rc0 > (dec392570a88e45ac3a417a487dd72f9bdb629d5) > - RAT license check passed; no binaries in the source release > - ./gradlew build succeeded (checkstyle + revapi included) > - api/core/parquet test suites: 10,991 tests, 0 failures > - Staged jars carry iceberg-build.properties pointing at the same commit > and tag > > Tested on macOS (aarch64), OpenJDK 21.0.1, Spark 4.2, Flink 2.3, Scala > 2.12. > > Thanks, > Manu > > On Sun, Sep 20, 2026 at 11:20 PM Anoop Johnson <[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 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. >>>>>>>>>> > >>>>>>>>>> >>>>>>>>>
