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

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

                Author: ASF GitHub Bot
            Created on: 14/Dec/18 01:45
            Start Date: 14/Dec/18 01:45
    Worklog Time Spent: 10m 
      Work Description: kennknowles 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_r241622189
 
 

 ##########
 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 think this is safe, but weird. This will result in a `beam-io-cassandra` 
jar that contains relocated class files for most of Guava, plus a 
`ListenableFuture.class` at the normal package path but with all internal deps 
relocated to point to the rest of the bundled Guava classes.
   
   If another totally unmodified Guava takes precedence, then _that_ 
ListenableFuture will be used, and it will point at the unmodified other Guava 
classes. I think the result is indistinguishable, but it took me a bit to think 
that through so I might have got the details wrong.
   
   Overall, since the user is going to have Guava on their classpath, I would 
just not relocate it at all. Any uses of Guava that have nothing to do with 
Cassandra can be ported to `beam-vendored-guava-20` so they are even more 
obviously disjoint and unrelated.

----------------------------------------------------------------
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: 175139)
    Time Spent: 2h  (was: 1h 50m)

> 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: 2h
>  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