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

Jie Fu fujie at loongson.cn
Tue Sep 17 06:28:13 UTC 2019


Hi Ioi,

Thank you so much.

I would be appreciated if you could sponsor it.

Thanks a lot.
Best regards,
Jie

On 2019/9/17 下午2:21, Ioi Lam wrote:
> Hi Jie,
>
> Looks good to me, too. Thanks
>
> - Ioi
>
> On 9/16/19 10:40 PM, David Holmes wrote:
>> 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