[ https://issues.apache.org/jira/browse/AVRO-1743?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198259#comment-15198259 ]
ASF GitHub Bot commented on AVRO-1743: -------------------------------------- GitHub user tbobrovytsky opened a pull request: https://github.com/apache/avro/pull/78 AVRO-1743: override writeFixed in BlockingBinaryEncoder You can merge this pull request into a Git repository by running: $ git pull https://github.com/tbobrovytsky/avro master Alternatively you can review and apply these changes as the patch at: https://github.com/apache/avro/pull/78.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #78 ---- ---- > BlockingBinaryEncoder should override writeFixed(ByteBuffer bytes) > ------------------------------------------------------------------ > > Key: AVRO-1743 > URL: https://issues.apache.org/jira/browse/AVRO-1743 > Project: Avro > Issue Type: Bug > Components: java > Affects Versions: 1.7.6, 1.7.7 > Environment: All environments > Reporter: Dmitry Spikhalskiy > Labels: starter > > BlockingBinaryEncoder which extends BufferedBinaryEncoder should override > "public void writeFixed(ByteBuffer bytes) throws IOException" method. > Now if we use BlockingBinaryEncoder - all writeFixed(ByteBuffer bytes) are > addressed by BufferedBinaryEncoder. As a result, if "!bytes.hasArray() && > bytes.remaining() > bulkLimit", then in flushBuffer() we flush empty buffer > from BufferedBinaryEncoder and don't flush actual buffer from > BlockingBinaryEncoder. > I prepared localized unit tests to replicate bugs here: > https://github.com/Spikhalskiy/avro-blockingbinaryencoder-error > Bug could appears in silently incorrect serialization (We will read another > object) or in deserialization errors. Both replicated in provided tests. > Looks like BlockingBinaryEncoder which extends BufferedBinaryEncoder is > error-prone approach and mistake in class hierarchy. We mostly override > everything from BufferedBinaryEncoder, creating unused buffers and fields > (like double pos, buf, etc), and it's already not first bug relating to > "somebody forget to override method in BlockingBinaryEncoder from > BufferedBinaryEncoder" (ex. https://issues.apache.org/jira/browse/AVRO-88). > So, this classes should be separated at all or have common interface, or at > least work with same buffer and pos instances. But BlockingBinaryEncoder > shouldn't inherit method implementations, which work with another buffer > object. -- This message was sent by Atlassian JIRA (v6.3.4#6332)