Thanks xxchan’s summary, we also reached consensus about msrv:

1 At least three months from latest rust release
2 Update msrv when we release iceberg-rust

On Fri, Feb 28, 2025 at 00:16 xxchan <xxchan...@gmail.com> wrote:

> Conclusion in today's meeting:
> - Test against latest version in CI  (by updating Cargo.lock with
> dependabot)
> - Have a wider range of versions support, to allow users to choose their
> dep version (by not updating Cargo.toml too often). Perhaps need to add a
> CI to test against oldest version.
>
> On Thu, Feb 27, 2025 at 2:03 PM Renjie Liu <liurenjie2...@gmail.com>
> wrote:
>
>> Hi, Xuanwo:
>>
>> If we detect that iceberg is not compatible with lib A 0.1.10, then we
>> could know that in advance, and we could figure out ways to fix it.
>>
>> Users have several choices, like using Cargo.lock to pin the version
>> used.
>>
>> We could have a discussion in this week's community sync.
>>
>> On Tue, Feb 25, 2025 at 12:05 PM Xuanwo <xua...@apache.org> wrote:
>>
>>> Hi, renjie
>>>
>>> > My point is still the same, if iceberg uses lib A 0.1.9, and the
>>> 0.1.10 version of lib A doesn't work with iceberg 0.3, the user of iceberg
>>> will face either of:
>>> > 1. Forced to use the old version of lib A, without enjoying the
>>> performance / bug fix of the new version of lib A.
>>> > 2. Upgrade to newer version of lib A, but surprised to fail in tests
>>> or production.
>>>
>>> I'm not sure what we can do about this.
>>>
>>> If Iceberg uses version 0.1.9, users can choose which version of lib A
>>> to use—either staying at 0.1.9 or upgrading to 0.1.10 (even it's broken).
>>> However, if Iceberg enforces the use of 0.1.10, users will always face
>>> issues, with no option to revert to 0.1.9.
>>>
>>> Regardless of the actions we take, we still need the upstream to fix it.
>>> Alternatively, we may need to migrate to other libraries.
>>>
>>> My point is to let users make this decision themselves. If we now know
>>> iceberg-rust doesn't work with lib A versions lower than 0.1.11. We can set
>>> it to 0.1.11 to prevent users from relying on the outdated 0.1.10 version.
>>>
>>> On Tue, Feb 25, 2025, at 10:53, Renjie Liu wrote:
>>>
>>> Hi, Xuanwo:
>>>
>>> Thanks for pointing that out, and you're right about the version used.
>>>
>>> However, if iceberg depends on lib A 0.1.10, but app B depends on lib A
>>> 0.1.9, users will finally get:
>>> - iceberg 0.3
>>> - lib A 0.1.10 (the biggest if all lib A 0.1.X)
>>>
>>>
>>> My point is still the same, if iceberg uses lib A 0.1.9, and the 0.1.10
>>> version of lib A doesn't work with iceberg 0.3, the user of iceberg will
>>> face either of:
>>> 1. Forced to use the old version of lib A, without enjoying the
>>> performance / bug fix of the new version of lib A.
>>> 2. Upgrade to newer version of lib A, but surprised to fail in tests or
>>> production.
>>>
>>>
>>>
>>> On Mon, Feb 24, 2025 at 6:38 PM Xuanwo <xua...@apache.org> wrote:
>>>
>>>
>>> Hi, renjie
>>>
>>> > 1. Iceberg 0.3 dependents library a 0.1
>>> > 2. Application b dependents on iceberg 0.3 and library a 0.2
>>> > 3. Library a 0.2 doesn't work with iceberg 0.3
>>> > 4. Application b crashed in production.
>>>
>>> This example can't happen in rust. In rust, every version within 0.X is
>>> considered a breaking change.
>>>
>>> So if iceberg 0.3 depends on lib A 0.1, and app B depends on iceberg 0.3
>>> and ;ib A 0.2, this user will finally get:
>>>
>>> - iceberg 0.3
>>> - lib A 0.1
>>> - lib A 0.2
>>>
>>> Which means the two version of lib A can coexists in the same app B.
>>>
>>> However, if iceberg depends on lib A 0.1.10, but app B depends on lib A
>>> 0.1.9, users will finally get:
>>>
>>> - iceberg 0.3
>>> - lib A 0.1.10 (the biggest if all lib A 0.1.X)
>>>
>>>
>>> On Mon, Feb 24, 2025, at 18:12, Renjie Liu wrote:
>>>
>>> Thanks to xxchan's explanation, it seems that we need to resolve the
>>> dependency version first.
>>>
>>> 2.1 Always use the latest dependency version in Cargo.toml, and force
>>> downstream applications to upgrade transitive dependencies at the same time.
>>> Benefits: let downstream enjoy latest bug fixes and performance
>>> improvements of deps
>>> Drawback: downstream is forced to upgrade deps together; They will need
>>> to audit the changes of all transitive deps, instead of upgrading 1 by 1.
>>>
>>>
>>> For the dependency version, I prefer this one. Though in theory the
>>> dependencies of iceberg are supposed to maintain compatibility if the major
>>> version is not changed, it would still be better to test against them.
>>> Using a dependent bot to upgrade the dependency version would help to avoid
>>> cases like this. For example:
>>> 1. Iceberg 0.3 dependents library a 0.1
>>> 2. Application b dependents on iceberg 0.3 and library a 0.2
>>> 3. Library a 0.2 doesn't work with iceberg 0.3
>>> 4. Application b crashed in production.
>>>
>>> I know this approach doesn't solve all problems, but at least it helps
>>> us to detect such a problem and save our time to fix it.
>>>
>>>
>>>
>>> On Mon, Feb 24, 2025 at 1:47 PM Xuanwo <xua...@apache.org> wrote:
>>>
>>>
>>> > 2.2 Do not upgrade Cargo.toml, and let the application be responsible
>>> for the transitive dependencies' version. Instead, we upgrade in Cargo.lock
>>> which means "we've tested the latest version".
>>>
>>> I prefer this approach. I believe we should disable dependabot from
>>> upgrading our patch versions, as it doesn't make sense to me. Users should
>>> be able to decide exactly which versions they want to use. As a library, we
>>> specify the lowest version that we are confident works well with
>>> iceberg-rust or includes all the APIs that iceberg-rust relies on.
>>>
>>> On Mon, Feb 24, 2025, at 13:28, xxchan wrote:
>>>
>>> Hi Renjie,
>>>
>>> Yes you are right that `datafusion-iceberg` will not break. I somehow
>>> mistakenly thought that we cannot compile `datafusion` with a newer rust
>>> toolchain... Sorry for the mistake.
>>>
>>> Regarding the motivations
>>>
>>> > 1. Use new(not latest) features in stable rust as rust is still
>>> evolving.
>>>
>>> In theory this can be done case by case, and we don't have a
>>> strong motivation yet.
>>> But +1 to upgrade periodically to avoid wasting time discussing whether
>>> a feature is "worth upgrading".
>>>
>>> > 2. Use newer versions of iceberg-rust's dependencies, which may
>>> include important bug fixes and performance improvements. I've seen
>>> dependent bot auto upgrading failed several times due to too old msrv.
>>>
>>> Dependencies is a complex problem. I want to clarify some points:
>>>
>>> 1. iceberg-rust is a library. The source of truth of the dependencies
>>> versions will be the consumer application's Cargo.lock. The version in
>>> iceberg-rust's Cargo.toml is a semver lower bound. MSRV or old dep version
>>> in Cargo.toml will not prevent applications using the latest version.
>>>
>>> 2. So there are different policies a library can do (ref:
>>> https://arc.net/l/quote/xghkkpqt)
>>>
>>> 2.1 Always use the latest dependency version in Cargo.toml, and force
>>> downstream applications to upgrade transitive dependencies at the same time.
>>> Benefits: let downstream enjoy latest bug fixes and performance
>>> improvements of deps
>>> Drawback: downstream is forced to upgrade deps together; They will need
>>> to audit the changes of all transitive deps, instead of upgrading 1 by 1.
>>>
>>> 2.2 Do not upgrade Cargo.toml, and let the application be responsible
>>> for the transitive dependencies' version. Instead, we upgrade in Cargo.lock
>>> which means "we've tested the latest version".
>>>
>>> I'm not sure which dependency upgrade policy we want to adopt. (BTW,
>>> we've once also discussed this in avro-rs, and they prefer the first one
>>> https://github.com/apache/avro-rs/issues/4)
>>> Although this is a little off-topic, but it seems similar to the MSRV
>>> problem. Dependency policy may also conflict with MSRV policy. e.g., as
>>> mentioned by Renjie, we cannot upgrade to latest version of a dep with a
>>> low MSRV. (So if we want to maintain low MSRV, we have to adopt the second
>>> dependency policy.)
>>>
>>> xxchan
>>>
>>> On Mon, Feb 24, 2025 at 11:45 AM Renjie Liu <liurenjie2...@gmail.com>
>>> wrote:
>>>
>>> Hi, xxchan:
>>>
>>> In fact, datafusion is not a consumer of iceberg-rust, in fact,
>>> `datafusion-iceberg` is a consumer  of both `iceberg` and `datafusion`,
>>> which is maintained in `iceberg-rust` repo, so a more aggressive msrv
>>> policy will not break `datafusion-iceberg`.
>>>
>>> On Sun, Feb 23, 2025 at 8:40 PM xxchan <xxchan...@gmail.com> wrote:
>>>
>>> Hi,
>>>
>>> To clarify, if we want to adopt the "at least three months" policy, we
>>> will need to wait for 3 months before upgrading to 1.85.
>>> And I believe we don't want to break Datafusion integration, so we will
>>> have to use the "at least six months" policy (or more conservative).
>>>
>>> xxchan
>>>
>>> On Sun, Feb 23, 2025 at 5:50 PM NOTME ZE <st810918...@gmail.com> wrote:
>>>
>>> Hi,
>>>
>>>
>>> As Xuanwo mentions the "at least three months," policy looks good to me.
>>> Also, it's time to upgrade to Rust 1.85 (the first version to support
>>> Edition 2024!). See: https://github.com/apache/iceberg-rust/pull/987
>>>
>>>
>>> Xuanwo
>>>
>>> https://xuanwo.io/
>>>
>>> Xuanwo
>>>
>>> https://xuanwo.io/
>>>
>>> Xuanwo
>>>
>>> https://xuanwo.io/
>>>
>>>

Reply via email to