Shawyeok opened a new pull request, #4526:
URL: https://github.com/apache/bookkeeper/pull/4526

   ### Motivation
   
   There is a potential jar shading issue introduced in #4426 that causes 
`NoClassDefFoundError` when connecting to an etcd metadata store.
   
   The `jetcd-core-shaded` module was introduced in #4426 to address the 
compatibility issues between jetcd-core’s grpc-java dependency and Netty. You 
can find more details [here][1] and in the [grpc-java documentation][2].
   
   [1]: https://github.com/apache/bookkeeper/pull/4426#issuecomment-2162348232
   [2]: https://github.com/grpc/grpc-java/blob/master/SECURITY.md#netty
   
   Currently, we use `unpack-shaded-jar` execution unpacks the shaded jar 
produced by `maven-shade-plugin:shade` into the 
`jetcd-core-shaded/target/classes` directory. However, the classes in this 
directory conflict with its dependencies. If the `maven-shade-plugin:shade` 
runs again without cleaning this directory, it can produce an incorrect shaded 
jar. You can replicate and verify this issue with the following commands:
   ```shell
   # Step 1: Clean the build directory
   mvn clean
   
   # Step 2: Perform an install and unpack the shaded jar into a directory.
   # Verify the import statement for `io.netty.handler.logging.ByteBufFormat` 
in 
   # `org/apache/pulsar/jetcd/shaded/io/vertx/core/net/NetClientOptions.class`. 
   # The correct import should be: 
   # `import io.grpc.netty.shaded.io.netty.handler.logging.ByteBufFormat;`.
   mvn install
   unzip 
$M2_REPO/org/apache/bookkeeper/metadata/drivers/jetcd-core-shaded/4.18.0-SNAPSHOT/jetcd-core-shaded-4.18.0-SNAPSHOT-shaded.jar
 \
     -d metadata-drivers/jetcd-core-shaded/target/first-classes
   
   # Step 3: Run the install command again without cleaning.
   # The unpacked jar from the previous step will persist in `target/classes`. 
   # Unpack the shaded jar into a different directory (e.g., second-classes) 
and check the import.
   # The incorrect import will be: 
   # `import 
io.grpc.netty.shaded.io.grpc.netty.shaded.io.netty.handler.logging.ByteBufFormat;`.
   mvn install
   unzip 
$M2_REPO/org/apache/bookkeeper/metadata/drivers/jetcd-core-shaded/4.18.0-SNAPSHOT/jetcd-core-shaded-4.18.0-SNAPSHOT-shaded.jar
 \
     -d metadata-drivers/jetcd-core-shaded/target/second-classes
   
   # Step 4: Use IntelliJ IDEA's "Compare Directories" tool to compare the 
`first-classes` 
   # and `second-classes` directories. The differences in imports should become 
apparent.
   ```
   
   We can remove the attach and unpack configurations, and it should work fine.
   
   This issue has already been [reported][3] in apache/pulsar, and a similar 
[patch][patch] has addressed it.
   
   [3]: https://github.com/apache/pulsar/issues/23513
   [patch]: https://github.com/apache/pulsar/pull/23604


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to