[ 
https://issues.apache.org/jira/browse/BEAM-5723?focusedWorklogId=175114&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-175114
 ]

ASF GitHub Bot logged work on BEAM-5723:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 14/Dec/18 00:23
            Start Date: 14/Dec/18 00:23
    Worklog Time Spent: 10m 
      Work Description: swegner commented on a change in pull request #7237: 
[BEAM-5723] Changed shadow plugin configuration to avoid relocating g…
URL: https://github.com/apache/beam/pull/7237#discussion_r241609404
 
 

 ##########
 File path: sdks/java/io/cassandra/build.gradle
 ##########
 @@ -17,7 +17,24 @@
  */
 
 apply plugin: org.apache.beam.gradle.BeamModulePlugin
-applyJavaNature()
+applyJavaNature(shadowClosure: {
+    dependencies {
+        include(dependency(project.library.java.guava))
+    }
+    // guava uses the com.google.common and com.google.thirdparty package 
namespaces
+    relocate("com.google.common", 
project.getJavaRelocatedPath("com.google.common")) {
+        // com.google.common is too generic, need to exclude guava-testlib
+        exclude "com.google.common.collect.testing.**"
+        exclude "com.google.common.escape.testing.**"
+        exclude "com.google.common.testing.**"
+        exclude "com.google.common.util.concurrent.testing.**"
+        // don't relocate because the cassandra driver's public API uses it
 
 Review comment:
   I worry about poking holes in our shading rules as we won't get the benefits 
of shading for those classes (solution to diamond dependency issues). I don't 
see other examples of projects excluding specific guava classes.
   
   I believe another solution would be to `include(..)` and `relocate` the 
cassandra dependency which is returning the `ListenableFuture`. This strategy 
seems to be used in a few other places:
   
   * 
[beam-sdks-java-core](https://github.com/apache/beam/blob/f8f9ca5884d2498e4d3082f75f2d9cf9aaf1dc87/sdks/java/core/build.gradle#L22)
 shades protobuf, bytebuddy, apache commons
   * 
[beam-sdks-java-extensions-kryo](https://github.com/apache/beam/blob/f8f9ca5884d2498e4d3082f75f2d9cf9aaf1dc87/sdks/java/extensions/kryo/build.gradle#L27)
 shades esotericsoftware and objectweb
   * 
[beam-sdks-java-extensions-sql](https://github.com/apache/beam/blob/f8f9ca5884d2498e4d3082f75f2d9cf9aaf1dc87/sdks/java/extensions/sql/build.gradle#L26)
 shades protobuf, calcite, and janino
   
   CC'ing a few folks attached to these changes who might be more familiar with 
shading strategies: 
   * @lukecwik, @kennknowles for java-core 
(e4951a240a585c4c20def8dcf810ce1be2118bbb) and sql 
(4fcee8547170e94123b343cbfe3045ca61eb9f79)
   * @dmvk for euphoria: 5df6feb8e072608830a53386b520983807bb5c43

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 175114)
    Time Spent: 1.5h  (was: 1h 20m)

> CassandraIO is broken because of use of bad relocation of guava
> ---------------------------------------------------------------
>
>                 Key: BEAM-5723
>                 URL: https://issues.apache.org/jira/browse/BEAM-5723
>             Project: Beam
>          Issue Type: Bug
>          Components: io-java-cassandra
>    Affects Versions: 2.5.0, 2.6.0, 2.7.0
>            Reporter: Arun sethia
>            Assignee: João Cabrita
>            Priority: Major
>             Fix For: 2.10.0
>
>          Time Spent: 1.5h
>  Remaining Estimate: 0h
>
> While using apache beam to run dataflow job to read data from BigQuery and 
> Store/Write to Cassandra with following libaries:
>  # beam-sdks-java-io-cassandra - 2.6.0
>  # beam-sdks-java-io-jdbc - 2.6.0
>  # beam-sdks-java-io-google-cloud-platform - 2.6.0
>  # beam-sdks-java-core - 2.6.0
>  # google-cloud-dataflow-java-sdk-all - 2.5.0
>  # google-api-client -1.25.0
>  
> I am getting following error at the time insert/save data to Cassandra.
> {code:java}
> [error] (run-main-0) org.apache.beam.sdk.Pipeline$PipelineExecutionException: 
> java.lang.NoSuchMethodError: 
> com.datastax.driver.mapping.Mapper.saveAsync(Ljava/lang/Object;)Lorg/apache/beam/repackaged/beam_sdks_java_io_cassandra/com/google/common/util/concurrent/ListenableFuture;
> org.apache.beam.sdk.Pipeline$PipelineExecutionException: 
> java.lang.NoSuchMethodError: 
> com.datastax.driver.mapping.Mapper.saveAsync(Ljava/lang/Object;)Lorg/apache/beam/repackaged/beam_sdks_java_io_cassandra/com/google/common/util/concurrent/ListenableFuture;
>  at 
> org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:332)
>  at 
> org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:302)
>  at org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:197)
>  at org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:64)
>  at org.apache.beam.sdk.Pipeline.run(Pipeline.java:313)
>  at org.apache.beam.sdk.Pipeline.run(Pipeline.java:299){code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to