On 28/08/2013 09:41, Mark Thomas wrote:
> On 27/08/2013 03:40, Vince Stewart wrote:
>> hi all,
>> thought I would add some progress on this topic.
>> I have changed my method for reading from the HttpServletRequest object but
>> the same warning message is thrown for every 8192 bytes read. I no longer
>> regard my code to be suspect though am happy to be corrected. The
>> application operates completely normally except for the warning message. The
>> code I am using to read the input is shown below. 
>>
>>  public void doPost(HttpServletRequest httpServletRequest.....etc
>>   .......other code..............
>>   char[] cbuf=new char[8192];  
>>   int i=0;
>>   int requestLength=httpServletRequest.getContentLength();
>>   BufferedReader in=httpServletRequest.getReader();   
>>   StringBuilder sb=new StringBuilder(requestLength);
>>     while(sb.length()<requestLength){
>>       if(in.ready()){
>>        i=in.read(cbuf,0,reqLen);
>>       }
>>      sb.append(cbuf,0,i);     
>>     }
>>   in.close();
>>   String message=sb.toString(); 
>>   //.....etc
> 
> It looks like there is a possible Tomcat bug but the above code is not
> the way to read data from the client as it puts the thread into a tight
> loop while it is waiting for more data to arrive.

I've just cleaned up the code for Tomcat 8.0.x to fix the bug that your
example highlighted. Thanks for such a clear problem statement that made
it very easy to track down the root cause of the issue. The fix will be
in 8.0.0-RC2 onwards.

That said, my comments about there being a better way to do what you are
doing stand.

Mark

> 
> You'd be better off dropping the call to in.ready() and doing a blocking
> read on the socket. The elapsed time should be the same (might even be a
> little less) and your CPU consumption during the read when the client is
> slow sending data will be significantly lower. If you remove the call to
> in.ready(), I'm fairly sure you'll see the warnings disappear.
> 
> Ideally, you should look at non-blocking IO as supported by Servlet 3.1
> but that might be too big a change as it fundamentally changes how data
> is read and written.
> 
> Mark
> 
> 
> ---------------------------------------------------------------------
> 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

Reply via email to