RFR(trivial): 8231024: Improve the debug info when the output is truncated

David Holmes david.holmes at oracle.com
Tue Sep 17 05:40:28 UTC 2019


Hi Jie,

That seems fine to me.

Thanks,
David
-----

On 17/09/2019 11:58 am, Jie Fu wrote:
> Hi Ioi and David,
> 
> Thank you very much for your review and valuable comments.
> 
> Updated: http://cr.openjdk.java.net/~jiefu/8231024/webrev.02/
>   -1) Change the error message which is somewhat misleading
>   -2) Rename "written" to "required_len"
> 
> - Before the patch
> ------------------------------------
> [2019-09-14 16:07:55,752] Agent[1]: stderr: OpenJDK 64-Bit Server VM 
> warning: increase O_BUFLEN in ostream.hpp -- output truncated
> [2019-09-14 16:07:55,758] Agent[1]: stderr: OpenJDK 64-Bit Server VM 
> warning: increase O_BUFLEN in ostream.hpp -- output truncated
> [2019-09-14 16:07:55,763] Agent[1]: stderr: OpenJDK 64-Bit Server VM 
> warning: increase O_BUFLEN in ostream.hpp -- output truncated
> ...
> ------------------------------------
> 
> - After the patch
> ------------------------------------
> [2019-09-17 09:49:21,567] Agent[1]: stderr: OpenJDK 64-Bit Server VM 
> warning: outputStream::do_vsnprintf output truncated -- buffer length is 
> 2000 bytes but 2013 bytes are needed.
> [2019-09-17 09:49:21,571] Agent[1]: stderr: OpenJDK 64-Bit Server VM 
> warning: outputStream::do_vsnprintf output truncated -- buffer length is 
> 2000 bytes but 2031 bytes are needed.
> [2019-09-17 09:49:21,576] Agent[1]: stderr: OpenJDK 64-Bit Server VM 
> warning: outputStream::do_vsnprintf output truncated -- buffer length is 
> 2000 bytes but 2049 bytes are needed.
> ...
> ------------------------------------
> 
> Could you please review it and give me some advice?
> 
> Thanks a lot.
> Best regards,
> Jie
> 
> On 2019/9/17 上午7:20, Ioi Lam wrote:
>>
>>
>> On 9/16/19 12:44 AM, David Holmes wrote:
>>> On 16/09/2019 5:09 pm, Jie Fu wrote:
>>>> Hi David,
>>>>
>>>> Sorry for the confusion.
>>>
>>> The confusion is mine, not from you :)
>>>
>>>> On 2019/9/16 下午2:40, David Holmes wrote:
>>>>> Okay I'm confused. I had assumed that the passed in buffer size 
>>>>> must be different in each case because of the 2014/2032/2050 values 
>>>>> in the message, but in fact they are all sized at 2000. 
>>>> According to the source code, the buffer size can be either 
>>>> 2000(O_BUFLEN) [1] or 2048(BUFLEN) [2].
>>>> So it isn't always 2000.
>>>
>>> It is 2000 is all three examples of the output that you gave.
>>
>> xmlStream::va_tag() uses 2*K.
>>
>>>
>>>>> That makes no sense
>>>> I think it makes sense.
>>>> It is still unclear which one (O_BUFLEN or BUFLEN?) should be 
>>>> increased if the current buffer size wasn't printed.
>>>
>>> You need to know the original caller that passed in the buffer size.
>>>
>>> But we can't just keep increasing the buffer size. We probably need 
>>> to examine the callers to see what amount of information is trying to 
>>> be passed through. Then decide whether to adjust what the callers are 
>>> passing through, or adjust the buffer size - perhaps on a callsite by 
>>> callsite basis rather than just bumping O_BUFLEN or BUFLEN.
>>>
>>
>> I think the message should stop saying "increase O_BUFLEN" -- probably 
>> the reviewers will reject all future increase of O_BUFLEN and will 
>> suggest fixing the caller of outputStream::do_vsnprintf instead.
>>
>> Callers of outputStream::do_vsnprintf don't necessarily use O_BUFLEN. 
>> E.g., xmlStream::va_tag allocates its own buffer. 
>> VMError::report_and_die() also uses its own buffer -- it uses O_BUFLEN 
>> today, but there's no guarantee or requirement that it always does that.
>>
>> How about saying something like "outputStream::do_vsnprintf output 
>> truncated -- buffer length is 2000 bytes but 2100 bytes are needed."
>>
>>
>>>>> - how can we have written e.g. 2014 bytes to a buffer of only 2000 
>>>>> bytes? 
>>>>
>>>> The output is truncated since the current buffer size is too small 
>>>> (e.g., 2000 < 2014).
>>>
>>> Ah sorry - I'd missed that aspect of vsnprintf. We're calling:
>>>
>>>  102     int written = os::vsnprintf(buffer, buflen, format, ap);
>>>
>>> but it isn't "written" when it exceeds buflen, it's the required 
>>> buffer size.
>>>
>>
>> I think the variable "written" should be renamed to "required".
>>
>> Thanks
>> - Ioi
>>
>>> David
>>> -----
>>>
>>>>
>>>>> Do we have a bug in os::vsnprintf?
>>>>
>>>> I don't think so.
>>>>
>>>> Thanks a lot.
>>>> Best regards,
>>>> Jie
>>>>
>>>> [1] 
>>>> http://hg.openjdk.java.net/jdk/jdk/file/24df796eef3d/src/hotspot/share/utilities/ostream.cpp#l124 
>>>>
>>>> [2] 
>>>> http://hg.openjdk.java.net/jdk/jdk/file/24df796eef3d/src/hotspot/share/utilities/xmlstream.cpp#l138 
>>>>
>>>>
>>>>
>>
> 


More information about the hotspot-dev mailing list