On 30/10/2014 12:20, Rémy Maucherat wrote:
> 2014-10-30 10:42 GMT+01:00 Mark Thomas <ma...@apache.org>:
> 
>> Was it just the cost of the chunking that triggered this change or was
>> it something else? If it was performance, how much difference does this
>> change make?
>>
> 
> Debugging something else, this turned out to not cause a failure, it was
> the reversed header order that caused the problem.

OK. Order can be significant for multiple instances of the same header
so it makes sense to ensure that order is retained.

>> Looking at the code, I can see a couple of places where this changes
>> behaviour:
>> - If the client requests the connection is closed
>>
> 
> Yes, that was this situation, the client sends a connection close. But in
> that case connection close is also added to the response (right after this
> code) so the behavior is consistent.
> 
> 
>> - If the request is the last one before the connection is closed due to
>>   reaching the maximum number of keep-alive requests
>>
>> We have had bug reports in the past about not being able to detect a
>> truncated response. I suspect the current unit tests for those miss the
>> second case above which is my main concern right now.
>>
>> I don't think a system property is the right way to handle configuration
>> of this feature (if such configuration is required). There is no reason
>> it could not be a connector attribute.
>>
> 
> IMO the new attribute should also do the same thing for connection close in
> the response. The default should be to not chunk if closing (as is right
> now).

I disagree on the default but not adding the behaviour. Users have had
issues (not being able to identify a truncated response) because we
haven't used chunked encoding but no user has reported an issue because
we have used chunked encoding. Therefore the default should be to
continue using chunked encoding with an option to disable it for those
that want the marginal performance gain it brings.

> Ok, so since you're complaining about every commit,

No, I am not. I am complaining about you frequently breaking the unit
tests when I am trying to get the code base to a point where I can tag
it for the next release (i.e. the unit tests have to pass).

I am also not particularly happy with commits like this one that
knowingly introduce regressions for users in order to fix a perceived
problem that isn't actually causing an issue for anyone.

> next fix you'll scream more since the upgrade process is not correct

If HTTP upgrade is broken, I'm not going to object to fixing it. If the
fix breaks some unit tests then I'm likely to moan about that.

> (no handling of leftover input bytes, anything included in the same packet
> that the request header is lost - I would agree it's questionable
> client behavior though).

I've been digging through the code. I thought I recalled doing something
like this for WebSocket but it was on the client side where such
behaviour is expected.

I agree it is questionable client behaviour but I'm guessing you've seen
at least one client doing this. I can understand why they might.

> This means adding code to pass around a ByteBuffer to the upgraded
> processor to add as input since I see no other way :) Yum.

Given the implementation of HTTP upgrade (dedicated upgrade processors,
deliberately light-weight compared to the HTTP processors, none of the
I/O scaffolding the HTTP processors have) I don't see an alternative way
either.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to