Github user aweisberg commented on a diff in the pull request:

    https://github.com/apache/cassandra/pull/239#discussion_r202490979
  
    --- Diff: 
src/java/org/apache/cassandra/net/async/RebufferingByteBufDataInputPlus.java ---
    @@ -249,4 +250,42 @@ public ByteBufAllocator getAllocator()
         {
             return channelConfig.getAllocator();
         }
    +
    +    /**
    +     * Consumes bytes in the stream until the given length
    +     *
    +     * @param writer
    +     * @param len
    +     * @return
    +     * @throws IOException
    +     */
    +    public long consumeUntil(BufferedDataOutputStreamPlus writer, long 
len) throws IOException
    +    {
    +        long copied = 0; // number of bytes copied
    +        while (copied < len)
    +        {
    +            if (buffer.remaining() == 0)
    +            {
    +                try
    +                {
    +                    reBuffer();
    +                }
    +                catch (EOFException e)
    +                {
    +                    throw new EOFException("EOF after " + copied + " bytes 
out of " + len);
    +                }
    +                if (buffer.remaining() == 0)
    +                    return copied == 0 ? -1 : copied;
    --- End diff --
    
    If reBuffer() fails it's going to throw an IOException or RuntimeException 
that won't be caught there so it won't throw AssertionError. It will only throw 
AssertionError when reBuffer() fails to reBuffer() and also doesn't exit via an 
Exception. 
    
    If reBuffer() doesn't reBuffer() and doesn't throw EOF then you don't know 
what's happening. That check doesn't do anything because if it doesn't read the 
require number of bytes it's going to throw EOF (in reBuffer()) and skip it 
anyways.


---

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

Reply via email to