[ https://issues.apache.org/jira/browse/GORA-170?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13471924#comment-13471924 ]
Kazuomi Kashii commented on GORA-170: ------------------------------------- How can we re-produce this bug ? I have set up Ubuntu environment to investigate. (Sorry, I have had no time to check the status for a couple of months.) > Getting a BufferUnderflowException in class CassandraColumn, method > fromByteBuffer() > ------------------------------------------------------------------------------------ > > Key: GORA-170 > URL: https://issues.apache.org/jira/browse/GORA-170 > Project: Apache Gora > Issue Type: Bug > Components: storage-cassandra > Affects Versions: 0.2.1 > Environment: Not sure environment matters for this one but Ubuntu > Reporter: Chris Gerken > Priority: Blocker > > When using CassandraStore and GoraMapper to retrieve data previously stored > in Cassandra, a BufferUnderflowException is being thrown in method > fromByteBuffer() in class CassandraColumn. This results in a complete > failure of the hadoop job trying to use the Cassandra data. > The problem seems to be caused by an invalid assumption in the (de) > Serializer logic. Serializers assume that the bytes in a ByteBuffer to be > deserialized start at offset 0 (zero) in the ByteBuffer's internal buffer. > In fact, there are times when a ByteBuffer passed back from the > Hector/Thrift API will have its data start at a non-zero offset in its > buffer. When serializers are given these non-zero offset ByteBuffers an > exception, usually BufferUnderflowException, is thrown. > The suggested fix is to use the TbaseHelper class from Cassandra/Thrift: > import org.apache.thrift.TBaseHelper; > protected Object fromByteBuffer(Schema schema, ByteBuffer byteBuffer) { > Object value = null; > Serializer serializer = GoraSerializerTypeInferer.getSerializer(schema); > if (serializer == null) { > LOG.info("Schema is not supported: " + schema.toString()); > } else { > ByteBuffer corrected = TBaseHelper.rightSize(byteBuffer); > value = serializer.fromByteBuffer(corrected); > } > return value; > } > -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira