> From what I see in the test a STREAM_REFUSED is returned when a the maxConcurrentStream is set to one. Yet I'd like to understand how this value is changed internally. I think >the only difference with my code is the call to the method doHttpUpgrade() which seems to send a GET for upgrade. Does this perform the actual upgrade of the settings? If this >is the case where is it implemented?
>Http2UpgradeHandler (which represents an HTTP/2 connection) sets the maximum concurrent stream value when the connection is created: >https://github.com/apache/tomcat/blob/master/java/org/apache/coyote/http2/Http2UpgradeHandler.java#L156 <https://github.com/apache/tomcat/blob/master/java/org/apache/coyote/http2/Http2UpgradeHandler.java#L156> >This means if the value set on the protocol is changed dynamically, the new value takes effect for all subsequent connections. >The setting is communicated to the client as part of the connection preface. >https://github.com/apache/tomcat/blob/master/java/org/apache/coyote/http2/Http2UpgradeHandler.java#L229 <https://github.com/apache/tomcat/blob/master/java/org/apache/coyote/http2/Http2UpgradeHandler.java#L229> >Well-behaved clients will respect this setting but Tomcat checks the limit every time a new stream is created. >https://github.com/apache/tomcat/blob/master/java/org/apache/coyote/http2/Http2UpgradeHandler.java#L1333 <https://github.com/apache/tomcat/blob/master/java/org/apache/coyote/http2/Http2UpgradeHandler.java#L1333> >You may find enabling Tomcat's debug logging for HTTP/2 instructive. >Mark Thanks. I finally understood how it all works. Helena El vie., 1 mar. 2019 a las 10:44, Mark Thomas (<ma...@apache.org>) escribió: > On 27/02/2019 08:37, Helena Carbajo wrote: > >>> See > >>> > https://github.com/apache/tomcat/blob/8.5.x/test/org/apache/coyote/http2/TestHttp2Section_5_1.java#L174 > > > > From what I see in the test a STREAM_REFUSED is returned when a the > maxConcurrentStream is set to one. Yet I'd like to understand how this > value is changed internally. I think the only difference with my code is > the call to the method doHttpUpgrade() which seems to send a GET for > upgrade. Does this perform the actual upgrade of the settings? If this is > the case where is it implemented? > > Http2UpgradeHandler (which represents an HTTP/2 connection) sets the > maximum concurrent stream value when the connection is created: > > > https://github.com/apache/tomcat/blob/master/java/org/apache/coyote/http2/Http2UpgradeHandler.java#L156 > > This means if the value set on the protocol is changed dynamically, the > new value takes effect for all subsequent connections. > > The setting is communicated to the client as part of the connection > preface. > > > https://github.com/apache/tomcat/blob/master/java/org/apache/coyote/http2/Http2UpgradeHandler.java#L229 > > Well-behaved clients will respect this setting but Tomcat checks the > limit every time a new stream is created. > > > https://github.com/apache/tomcat/blob/master/java/org/apache/coyote/http2/Http2UpgradeHandler.java#L1333 > > You may find enabling Tomcat's debug logging for HTTP/2 instructive. > > Mark > > > > > > -----Original Message----- > > From: Mark Thomas <ma...@apache.org> > > Sent: martes, 26 de febrero de 2019 13:45 > > To: users@tomcat.apache.org > > Subject: Re: tomcat 8.5.23 can not modify maxconcurrentstream setting > > > > See > > > https://github.com/apache/tomcat/blob/8.5.x/test/org/apache/coyote/http2/TestHttp2Section_5_1.java#L174 > > > > Mark > > > > > > On 26/02/2019 11:01, Helena Carbajo wrote: > >> I'm trying to modify the value of MaxConcurrentStream for the tomcat > server in order to check that it returns a STREAM_REFUSED when the client > uses more streams, but I don't manage to change the default unlimited value. > >> > >> I've been inspecting the tomcat server code with a debugger and I saw > it enters the method protected synchronized void set(Setting setting, Long > value) from the org.apache.coyote.http2.ConnectionSettingsLocal.java class > to change the value for maxConcurrentStream. Yet, if I'm not wrong, it only > modifies the pending hashSet not the current one, which is the one that is > checked later on to determine if it is lower than the clients' active > streams and therefore send the STREAM_REFUSED code. > >> > >> > >> > >> I'm not sure if I'm not modifying the value correctly. I use the > Http2Protocol's method setMaxConcurrentStreams to set the value and then > add the Http2Protocol to the connector(addUpgradeProtocol). > >> > >> > >> > >> I'd be grateful if someone could give me a hint of what is going on or > what I'm doing wrong. Thank you! > >> > >> > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > > For additional commands, e-mail: users-h...@tomcat.apache.org > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > > For additional commands, e-mail: users-h...@tomcat.apache.org > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > >