[ 
https://issues.apache.org/jira/browse/HDDS-14778?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18063607#comment-18063607
 ] 

Attila Doroszlai commented on HDDS-14778:
-----------------------------------------

FYI HDDS-12462 changed shading to use exclude rules (which doesn't fix this 
problem, but changes the possible solution) in 2.1.0.

> ozone-filesystem-hadoop3 shading corrupts protobuf descriptor binary causing 
> InvalidProtocolBufferException with TRACE logging
> ------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HDDS-14778
>                 URL: https://issues.apache.org/jira/browse/HDDS-14778
>             Project: Apache Ozone
>          Issue Type: Bug
>    Affects Versions: 1.4.0
>            Reporter: Jason O'Sullivan
>            Priority: Major
>
> h3. Problem
> When TRACE logging is enabled, any Ozone client operation via ofs:// fails 
> with:
> {code}
> java.lang.ExceptionInInitializerError
>     at 
> org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.<clinit>
> Caused by: com.google.protobuf.InvalidProtocolBufferException: 
>     Protocol message tag had invalid wire type
>     at 
> com.google.protobuf.Descriptors$FileDescriptor.internalBuildGeneratedFileFrom
> {code}
> h3. Root Cause
> The io relocation rule in ozonefs-shaded/pom.xml has no <includes> guard, so 
> the shade plugin's startsWith("io") check matches binary protobuf descriptor 
> chunks that happen to start with the bytes "io".
> {code}
> <relocation>
>   <pattern>io</pattern>
>   <shadedPattern>${ozone.shaded.prefix}.io</shadedPattern>
>   <excludes>
>     <exclude>io!netty!*</exclude>
>   </excludes>
> </relocation>
> {code}
> This corrupts the descriptor data stored as string constants in 
> OzoneManagerProtocolProtos.class. When TRACE logging triggers the first 
> access to that class, protobuf fails to parse the corrupted descriptor.
> This is a latent bug — it fires whenever a proto change shifts a descriptor 
> chunk boundary onto bytes starting with "io". The same issue exists for the 
> info, kotlin, picocli, okio, and okhttp3 rules.
> h3. Potential Fix
> Add <includes> to the io rule, consistent with how the org and com rules are 
> already configured:
> {code}
> <relocation>
>   <pattern>io</pattern>
>   <shadedPattern>${ozone.shaded.prefix}.io</shadedPattern>
>   <includes>
>     <include>io.grpc.**.*</include>
>     <include>io.opentelemetry.**.*</include>
>   </includes>
>   <excludes>
>     <exclude>io!netty!*</exclude>
>   </excludes>
> </relocation>
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to