hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "stack (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-11875) Referencing external package com/google/protobuf/ inside hbase-protcol module won't work in OSGI environment
Date Tue, 02 Sep 2014 19:14:21 GMT

    [ https://issues.apache.org/jira/browse/HBASE-11875?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14118564#comment-14118564

stack commented on HBASE-11875:

bq. It doesn't offend, and that's what I have implemented as workaround see below .

You are copying what is in the ByteStringer.java hbase class?

We could add a google-protobuf-util module.  How you think that would help?

We added ByteStringer because we ran into classloader issues.

We had HBaseZeroCopyByteString in com.google.protobuf package in hbase-protocol module.  It
worked except for some mapreduce corner cases where the hadoop cluster had already loaded
the pb jar with its classloader and then a fat mapreduce jar that included hbase tried load
HBaseZeroCopyByteString from the "com.google.protobuf" package and classloader would scream
violation. See HBASE-11118  How would we avoid this scenario doing a google.protobuf.util

Thanks for jumping in here.  The help is appreciated.

> Referencing external package com/google/protobuf/ inside hbase-protcol module won't work
in OSGI environment
> ------------------------------------------------------------------------------------------------------------
>                 Key: HBASE-11875
>                 URL: https://issues.apache.org/jira/browse/HBASE-11875
>             Project: HBase
>          Issue Type: Improvement
>          Components: Protobufs
>    Affects Versions: 0.98.6
>         Environment: OSGI container
>            Reporter: ayache khettar
> Hi
> HbaseZeroCopyByteString class isn't accessible in OSGI based environment. The reason
is that it ends up in a separate route package within an OSGI bundle. As such the class isn't
viewable by the classLoader.
> I understand that the hbase-module isn't an osgi bundle, but there is another project
which makes use of this module to generate an osgi bundle for the OSGI container: https://github.com/apache/servicemix4-bundles/tree/trunk/hbase-0.98.0-hadoop2.
If you get hold of the binary or source artefact from maven, unzip the jar and you will see
the structure of the project:
> com/google/ (classes defined in this package are not visible by the classLoader).
> org/apache/hbase
> I understand the reason of having a foreign package, because  LiteralByteString is package
protected. It would be nice to work out another way of extending google protobuf classes.
I would recommend going for composition as opposed to inheritance that will solve the problem.
> Regards,
> Ayache
> Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/HBaseZeroCopyByteString
> 	at org.apache.hadoop.hbase.protobuf.RequestConverter.buildRegionSpecifier(RequestConverter.java:908)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
> 	at org.apache.hadoop.hbase.protobuf.RequestConverter.buildGetRowOrBeforeRequest(RequestConverter.java:132)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
> 	at org.apache.hadoop.hbase.protobuf.ProtobufUtil.getRowOrBefore(ProtobufUtil.java:1466)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
> 	at org.apache.hadoop.hbase.client.HTable$2.call(HTable.java:701)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
> 	at org.apache.hadoop.hbase.client.HTable$2.call(HTable.java:699)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
> 	at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:121)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
> 	... 56 more

This message was sent by Atlassian JIRA

View raw message