+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.
>>>>>>> >
>>>>>>>
>>>>>>

Reply via email to