Thanks Nanda for the explanation.

I seem able to fix the io.opencensus shading problem.  Just have
posted a patch on RATIS-237.

Tsz-Wo

On Mon, May 7, 2018 at 8:28 PM, Nandakumar Vadivelu
<nvadiv...@hortonworks.com> wrote:
> Hi Tsz-Wo,
>
> True, there is only one version of opencensus in Ratis. Since we do shading 
> of io.grpc we end up with new shaded class of ContextUtils (same fully 
> qualified class name, but the reference of io.grpc inside the class is 
> modified/relocated), we also have non shaded ContextUtils. Both are referred 
> through Ratis dependency.
>
> The below is dependency tree of Ratis:
>
> [INFO] +- 
> org.apache.ratis:ratis-proto-shaded:jar:0.1.1-alpha-SNAPSHOT:compile          
>   =========> Modified opencensus packed with proto-shaded
> [INFO] |  +- com.google.auto.value:auto-value-annotations:jar:1.6:compile
> [INFO] |  +- com.google.guava:guava:jar:24.1-jre:compile
> [INFO] |  |  +- com.google.code.findbugs:jsr305:jar:1.3.9:compile
> [INFO] |  |  +- org.checkerframework:checker-compat-qual:jar:2.0.0:compile
> [INFO] |  |  +- 
> com.google.errorprone:error_prone_annotations:jar:2.1.3:compile
> [INFO] |  |  +- com.google.j2objc:j2objc-annotations:jar:1.1:compile
> [INFO] |  |  \- org.codehaus.mojo:animal-sniffer-annotations:jar:1.14:compile
> [INFO] |  \- com.squareup:javapoet:jar:1.10.0:compile
> [INFO] +- org.apache.ratis:ratis-common:jar:0.1.1-alpha-SNAPSHOT:compile
> [INFO] |  +- org.slf4j:slf4j-api:jar:1.7.10:compile
> [INFO] |  +- org.slf4j:slf4j-log4j12:jar:1.7.10:compile
> [INFO] |  |  \- log4j:log4j:jar:1.2.17:compile
> [INFO] |  \- io.dropwizard.metrics:metrics-core:jar:3.2.5:compile
> [INFO] +- org.apache.ratis:ratis-client:jar:0.1.1-alpha-SNAPSHOT:compile
> [INFO] +- org.apache.ratis:ratis-server:jar:0.1.1-alpha-SNAPSHOT:compile
> [INFO] +- org.apache.ratis:ratis-netty:jar:0.1.1-alpha-SNAPSHOT:compile
> [INFO] |  \- org.jctools:jctools-core:jar:2.1.2:compile
> [INFO] \- org.apache.ratis:ratis-grpc:jar:0.1.1-alpha-SNAPSHOT:compile
> [INFO]    +- io.opencensus:opencensus-api:jar:0.12.2:compile                  
>           =========> Original jar
> [INFO]    |  \- io.grpc:grpc-context:jar:1.9.0:compile
> [INFO]    \- io.opencensus:opencensus-contrib-grpc-metrics:jar:0.12.2:compile
>
>
> nvadivelu@HW12726 ~/w/t/p/o/t/dependency> javap -classpath 
> ".:./opencensus-api-0.12.2.jar" io.opencensus.trace.unsafe.ContextUtils
> Compiled from "ContextUtils.java"
> public final class io.opencensus.trace.unsafe.ContextUtils {
>   public static final io.grpc.Context$Key<io.opencensus.trace.Span> 
> CONTEXT_SPAN_KEY;
>   static {};
> }
>
> nvadivelu@HW12726 ~/w/t/p/o/t/dependency> javap -classpath 
> ".:./ratis-proto-shaded-0.1.1-alpha-SNAPSHOT.jar" 
> io.opencensus.trace.unsafe.ContextUtils
> Compiled from "ContextUtils.java"
> public final class io.opencensus.trace.unsafe.ContextUtils {
>   public static final 
> org.apache.ratis.shaded.io.grpc.Context$Key<io.opencensus.trace.Span> 
> CONTEXT_SPAN_KEY;
>   static {};
> }
>
>
> -Nanda
>
> On 5/8/18, 4:16 AM, "Tsz Wo Sze" <szets...@gmail.com> wrote:
>
>     > The problem is because of two different definition of 
> io.opencensus.trace.unsafe.ContextUtils class present in the classpath. The 
> reason for having two different definition of ContextUtils in classpath is 
> due to the fact that we are shading/relocating io.grpc and not io.opencensus.
>
>     Nanda, in Ratis, there is only one version (0.12.2) of opencensus.  It
>     seems that another version of opencensus is pulled outside Ratis.
>
>     Tsz-Wo
>
>
>     On Mon, May 7, 2018 at 11:58 AM, Nandakumar Vadivelu
>     <nvadiv...@hortonworks.com> wrote:
>     > I'm not sure why the file is missing, I can see the attachment in my 
> "sent items".
>     >
>     > Patch content for reference
>     >
>     > diff --git a/ratis-grpc/pom.xml b/ratis-grpc/pom.xml
>     > index a3c3cc1..ebb73cc 100644
>     > --- a/ratis-grpc/pom.xml
>     > +++ b/ratis-grpc/pom.xml
>     > @@ -85,15 +85,5 @@
>     >        <artifactId>jctools-core</artifactId>
>     >      </dependency>
>     >
>     > -    <dependency>
>     > -      <groupId>io.opencensus</groupId>
>     > -      <artifactId>opencensus-api</artifactId>
>     > -      <version>${io.opencensus.version}</version>
>     > -    </dependency>
>     > -    <dependency>
>     > -      <groupId>io.opencensus</groupId>
>     > -      <artifactId>opencensus-contrib-grpc-metrics</artifactId>
>     > -      <version>${io.opencensus.version}</version>
>     > -    </dependency>
>     >    </dependencies>
>     >  </project>
>     >
>     > I will also create a jira under RATIS
>     >
>     > -Nanda
>     >
>     > On 5/8/18, 12:23 AM, "Ted Yu" <yuzhih...@gmail.com> wrote:
>     >
>     >     I don't see patch attached.
>     >
>     >     Please create RATIS JIRA and attach there.
>     >
>     >     Thanks
>     >
>     >     On Mon, May 7, 2018 at 10:24 AM, Nandakumar Vadivelu <
>     >     nvadiv...@hortonworks.com> wrote:
>     >
>     >     > Hi All,
>     >     >
>     >     > Below is the exception which we get with Ratis 0.2.0
>     >     >
>     >     > java.lang.NoSuchFieldError: CONTEXT_SPAN_KEY
>     >     >   at org.apache.ratis.shaded.io.grpc.internal.CensusTracingModule$
>     >     > ServerTracer.filterContext(CensusTracingModule.java:340)
>     >     >   at org.apache.ratis.shaded.io.grpc.internal.StatsTraceContext.
>     >     > serverFilterContext(StatsTraceContext.java:121)
>     >     >   at org.apache.ratis.shaded.io.grpc.internal.ServerImpl$
>     >     > ServerTransportListenerImpl.createContext(ServerImpl.java:482)
>     >     >   at org.apache.ratis.shaded.io.grpc.internal.ServerImpl$
>     >     > ServerTransportListenerImpl.streamCreated(ServerImpl.java:416)
>     >     > <stack trace truncated>
>     >     >
>     >     >
>     >     > The problem is because of two different definition of
>     >     > io.opencensus.trace.unsafe.ContextUtils class present in the 
> classpath.
>     >     > The reason for having two different definition of ContextUtils in 
> classpath
>     >     > is due to the fact that we are shading/relocating io.grpc and not
>     >     > io.opencensus.
>     >     >
>     >     >
>     >     > With shading we are generating the below definition which ends up 
> in
>     >     > ratis-proto-shaded jar
>     >     >
>     >     > package io.opencensus.trace.unsafe;
>     >     >
>     >     > import org.apache.ratis.shaded.io.grpc.Context;
>     >     > import io.opencensus.trace.Span;
>     >     >
>     >     > /**
>     >     >  * Util methods/functionality to interact with the {@link
>     >     > org.apache.ratis.shaded.io.grpc.Context}.
>     >     >  *
>     >     >  * <p>Users must interact with the current Context via the public 
> APIs in
>     >     > {@link
>     >     >  * io.opencensus.trace.Tracer} and avoid usages of the {@link
>     >     > #CONTEXT_SPAN_KEY} directly.
>     >     >  *
>     >     >  * @since 0.5
>     >     >  */
>     >     > public final class ContextUtils {
>     >     >   // No instance of this class.
>     >     >   private ContextUtils() {}
>     >     >
>     >     >   /**
>     >     >    * The {@link org.apache.ratis.shaded.io.grpc.Context.Key} used 
> to
>     >     > interact with {@link org.apache.ratis.shaded.io.grpc.Context}.
>     >     >    *
>     >     >    * @since 0.5
>     >     >    */
>     >     >   public static final Context.Key<Span> CONTEXT_SPAN_KEY =
>     >     > Context.key("opencensus-trace-span-key");
>     >     > }
>     >     >
>     >     >
>     >     > Since we have added io.opencensus as direct dependency in 
> ratis-grpc we
>     >     > get the below definition in io.opencensus:opencensus-api:jar
>     >     >
>     >     > package io.opencensus.trace.unsafe;
>     >     >
>     >     > import io.grpc.Context;
>     >     > import io.opencensus.trace.Span;
>     >     >
>     >     > /**
>     >     >  * Util methods/functionality to interact with the {@link 
> io.grpc.Context}.
>     >     >  *
>     >     >  * <p>Users must interact with the current Context via the public 
> APIs in
>     >     > {@link
>     >     >  * io.opencensus.trace.Tracer} and avoid usages of the {@link
>     >     > #CONTEXT_SPAN_KEY} directly.
>     >     >  *
>     >     >  * @since 0.5
>     >     >  */
>     >     > public final class ContextUtils {
>     >     >   // No instance of this class.
>     >     >   private ContextUtils() {}
>     >     >
>     >     >   /**
>     >     >    * The {@link io.grpc.Context.Key} used to interact with {@link
>     >     > io.grpc.Context}.
>     >     >    *
>     >     >    * @since 0.5
>     >     >    */
>     >     >   public static final Context.Key<Span> CONTEXT_SPAN_KEY =
>     >     > Context.key("opencensus-trace-span-key");
>     >     > }
>     >     >
>     >     > Both of the jars end up in classpath and ContextUtils is getting 
> loaded
>     >     > from io.opencensus:opencensus-api:jar which is causing the 
> problem.
>     >     >
>     >     > The simple fix would be to remove the dependency of io.opencensus 
> from
>     >     > ratis-grpc/pom.xml (patch for the same is attached in this mail). 
> This is
>     >     > not a permanent fix, as any application might bring in
>     >     > io.opencensus:opencensus-api:jar of its own.
>     >     >
>     >     > We have to find a way to shade io.opencensus:opencensus-api:jar.
>     >     >
>     >     > Note: from the comment in ratis-proto-shaded/pom.xml: Cannot 
> relocate
>     >     > io.opencensus due to AutoValue code generation
>     >     >
>     >     >
>     >     > -Nanda
>     >     >
>     >     > On 5/7/18, 3:28 PM, "Lokesh Jain" <lj...@hortonworks.com> wrote:
>     >     >
>     >     >     We found an issue while updating ozone to Ratis snapshot build
>     >     > 0.1.1-alpha-4309324-SNAPSHOT (https://issues.apache.org/
>     >     > jira/browse/HDDS-19). I feel we should hold the release till this 
> is
>     >     > fixed. Please let us know of your opinion as well.
>     >     >
>     >     >     Thanks
>     >     >     Lokesh
>     >     >
>     >     >
>     >     >
>     >     >
>     >
>     >
>
>
>

Reply via email to