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

Lubos Husivarga commented on HTTPCORE-707:
------------------------------------------

Thanks [~olegk] !

I didn't expect the buffer can be expanded in such a simple way, I wasn't sure 
about thread safety. I have put a breakpoint at the buffer expansion point and 
no other requests were processed, so looks thread safe for me.

One more line is missing in the expand(...) method of FrameOutputBuffer, you 
didn't update the maxFramePayloadSize and therefore the exception is thrown 
anyway, please update your commit:

 
{code:java}
    public void expand(final int maxFramePayloadSize) {
+       this.maxFramePayloadSize = maxFramePayloadSize;
        final ByteBuffer newBuffer = ByteBuffer.allocate(FrameConsts.HEAD_LEN + 
maxFramePayloadSize);
        if (buffer.position() > 0) {
            buffer.flip();
            newBuffer.put(buffer);
        }
        buffer = newBuffer;
    } {code}
Otherwise it seems to work well, but the higher frame size did not help with 
file upload performance much in my case :(

 

Thank you very much for your quick response and fix, I didn't expect it!

Keep up the great work and Happy New Year!

 

> AbstractH2StreamMultiplexer: FrameOutputBuffer: Frame size exceeds maximum
> --------------------------------------------------------------------------
>
>                 Key: HTTPCORE-707
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-707
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore NIO
>    Affects Versions: 5.2-alpha1
>            Reporter: Lubos Husivarga
>            Priority: Major
>             Fix For: 5.1.4, 5.2-alpha3
>
>         Attachments: context_wire_log.txt, http2_flow_frame.txt
>
>
> AbstractH2StreamMultiplexer initializes outputBuffer with frame size from 
> local config:
> _this.outputBuffer = new FrameOutputBuffer(this.outputMetrics, 
> this.{*}localConfig{*}.getMaxFrameSize());_
>  
> Data are streamed using streamData(...) method which checks maxPayloadSize 
> against remote config:
> _final int maxPayloadSize = Math.min(capacity, 
> {*}remoteConfig{*}.getMaxFrameSize());_
>  
> Issue: When remote config has greater max frame size than local config and 
> the payload is also greater than local max frame size, the FrameOutputBuffer 
> throws "Frame size exceeds maximum" error, since it compares the payload size 
> against local frame size as it was initialized with it, not remote frame size.
>  
> My suggestion: AbstractH2StreamMultiplexer.{*}applyRemoteSettings{*}(...) 
> should update the outputBuffer's max frame size based on remote config.
>  
> I will appreciate your help, as it is really annoying issue depending on 
> remote site config and payload size, so it may be spotted randomly.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

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

Reply via email to