Sounds reasonable to me to just go to 2.x On Mon, Sep 16, 2024 at 1:10 PM rdb...@gmail.com <rdb...@gmail.com> wrote:
> If I understand the SLF4J announcement correctly, it sounds like the best > option is to rely on binary compatibility between the 1.x and 2.x clients. > > As long as we don't use the newer API, then the compiled code can use > either a 1.7.x or 2.0.x API Jar. The API Jar needs to match the provider > version, so it should be supplied by downstream code instead of Iceberg. > Luckily, it doesn't look like we ship the SLF4J API in our runtime > binaries, so we already have a situation where downstream projects can > choose the SLF4J version of both the API and provider Jars. > > In that case, I think the best path forward is to upgrade to 2.x but not > use the new API features that will cause problems if downstream libraries > are not already on 2.x. > > Does that sound reasonable? > > On Wed, Sep 11, 2024 at 11:17 AM Steven Wu <stevenz...@gmail.com> wrote: > >> Following up on the discussion from the community sync meeting. Right >> now, Iceberg test code is in the 3rd row in the table pasted below. With >> the recent Avro 1.12 upgrade (and slf4j 2.x), the main code is also >> affected. That means downstream applications (Spark, Trino, Flink, ...) may >> run into the same situation when upgrading to the next Iceberg 1.7 release. >> >> [image: image.png] >> >> From the slf4j doc, it seems that *slf4j 2.x API is backward compatible >> as long as provider/binding is updated to 2.x too*. >> https://www.slf4j.org/faq.html#changesInVersion200 >> >> We have two options >> 1. Exclude the slf4j 2.x transitive dependency from Avro 1.12. but we >> would need to be comprehensive on forcing the slf4j dependency version >> resolution to 1.x everywhere until Iceberg is ready to move forward to >> slf4j 2.x. >> 2. Move forward with slf4j 2.x now with a clear callout in the 1.7 >> release notes. >> >> First option is the more conservative approach and defer the slf4j 2.x >> upgrade decision to the downstream applications. But it will add a little >> burden to make sure future dependency upgrades don't bring in slf4j 2.x >> transitively. Maybe we can leverage the force resolution from Gradle? >> >> configurations.all { >> resolutionStrategy { >> force 'org.slf4j:slf4j-api:1.7.35' >> } >> } >> >> >> Thanks, >> Steven >> >> SLF4J 2.0 stable release was announced *2 years ago*: >> https://mailman.qos.ch/pipermail/announce/2022/000176.html. It explained >> binary compatibility. >> >> "Mixing different versions of slf4j-api.jar and SLF4J provider can cause >> problems. For example, if you are usingslf4j-api-2.0.0.jar, then you should >> also use slf4j-simple-2.0.0.jar, using slf4j-simple-1.5.5.jar will not >> work." >> >> More notes from slf4j FAQ page. >> >> "SLF4J 2.0.0 incorporates an optional fluent api >> <https://www.slf4j.org/manual.html#fluent>. Otherwise, there are no >> client facing API changes in 2.0.x. For most users, upgrading to version >> 2.0..x should be a drop-in replacement, as long as the logging provider is >> updated as well. >> >> From the clients perspective, the SLF4J API, more specifically the >> org.slf4j package, is backward compatible for all versions. This means >> that you can upgrade from SLF4J version 1.0 to any later version without >> problems. Code compiled with *slf4j-api-versionN.jar* will work with >> *slf4j-api-versionM.jar* for any versionN and any versionM. *To date, >> binary compatibility in slf4j-api has never been broken."* >> >> >> On Mon, Sep 9, 2024 at 9:22 AM Steven Wu <stevenz...@gmail.com> wrote: >> >>> Bump the thread to bring the awareness of the issue and implication of >>> slf4j 2.x upgrade. >>> >>> On Mon, Aug 26, 2024 at 12:24 PM Steve Zhang >>> <hongyue_zh...@apple.com.invalid> wrote: >>> >>>> I believe dependabot tried to upgrade self4j to 2.x in [1] but JB >>>> mentioned there's -1 on this upgrade, maybe he has more context. >>>> >>>> [1]https://github.com/apache/iceberg/pull/9688 >>>> >>>> Thanks, >>>> Steve Zhang >>>> >>>> >>>> >>>> On Aug 24, 2024, at 7:37 PM, Steven Wu <stevenz...@gmail.com> wrote: >>>> >>>> Hi, >>>> >>>> It seems that test logging is broken in many modules (like core, flink) >>>> because slf4j-api was upgraded to 2.x while slf4j-simple provider is still >>>> on 1.7. I created a PR that upgraded slf4j-simple testImplementation to 2.x >>>> for all subprojects. >>>> >>>> https://github.com/apache/iceberg/pull/11001 >>>> >>>> That fixed the test logging problem (e.g. TestInMemoryCatalog). You >>>> can find more details in the PR description. Test logging seems to have >>>> been broken for a while (from 1.4). But those dep problems have been for >>>> *test >>>> runtime only*. >>>> >>>> Recent change [1] on Avro 1.12.0 introduced slf4j-api 2.x change for >>>> runtime, as verified by the cmd below on the *main branch*. >>>> >>>> ./gradlew -q :iceberg-core:dependencyInsight --dependency slf4j-api >>>> --configuration runtimeClasspath >>>> >>>> This thread is to raise awareness on the slf4j-api dep change to 2.x as >>>> downstream projects/applications can be affected. Looking forward to >>>> feedback on the path forward. >>>> >>>> 1. continue the current upgrade path and document the slf4j-api 2.x >>>> change in the next 1.7 release. But we need to be cautious of not >>>> porting >>>> the Avro 1.12.0 / slf4j-api 2.x change to the 1.6 branch. >>>> 2. exclude slf4j-api transitive deps from Avro and other test deps >>>> so that Iceberg stays on slf4j 1.7. If that is the direction to go, we >>>> won't need PR #11001. >>>> >>>> >>>> Thanks, >>>> Steven >>>> >>>> [1] https://github.com/apache/iceberg/pull/10879 >>>> >>>> >>>>