Protocol version of Attach API
David Holmes
david.holmes at oracle.com
Tue Feb 26 12:39:36 UTC 2019
On 26/02/2019 10:31 pm, Yasumasa Suenaga wrote:
> Hi Lin,
>
> I filed this issue to JBS:
> https://bugs.openjdk.java.net/browse/JDK-8219721
Thanks.
>
>> IMHO, It is not easy to distinguish between the case "socket is
>> blocked for some reason" and "there is no more data from socket", it
>> is not easy for me to speak under which situation the loop should be
>> break.
>> So my idea to fix is using non-blocking socket, do you think it
>> is reasonable?
Not sure. The first thing read from the socket should be how much data
is being sent. But I don't know if the protocol can handle that. The
Solaris door mechanism does seem to allow accurate communication of the
amount of data, but I haven't had a chance to test this myself.
>
> I don't think so.
> We can fill NULL values to `buf[]` before end of loop when tail value of
> buf[] is NULL and `str_count` is less than expected_str_count`.
That doesn't help if the read is blocked.
> I think it is clean if we shutdown socket after the client send request.
?? can we guarantee the receiver will get all the data in that case?
Thanks,
David
> But we have no chance to VirtualMachineImpl or older implementation in
> earlier JDK releases.
>
>
> Thanks,
>
> Yasumasa
>
>
> On 2019/02/26 20:54, 臧琳 wrote:
>> Dear All,
>> It seems there is a little complicated for handling the
>> mentioned issue.
>> The problem code snippet is
>> http://hg.openjdk.java.net/jdk/jdk/file/616a32d6b463/src/hotspot/os/linux/attachListener_linux.cpp#l266
>> to
>> http://hg.openjdk.java.net/jdk/jdk/file/616a32d6b463/src/hotspot/os/linux/attachListener_linux.cpp#l297.
>>
>> The logic is that attachListener keep reading from socket until
>> the expected_str_count is reached. the expected_str_count is enlarged
>> with arg_count_max, so it keeps block at reading from socket when
>> using the old jcmd.
>> IMHO, It is not easy to distinguish between the case "socket is
>> blocked for some reason" and "there is no more data from socket", it
>> is not easy for me to speak under which situation the loop should be
>> break.
>> So my idea to fix is using non-blocking socket, do you think it
>> is reasonable?
>>
>> BRs,
>> Lin
>>
>>
>> ________________________________________
>> From: 臧琳
>> Sent: Tuesday, February 26, 2019 6:19:37 PM
>> To: Yasumasa Suenaga; David Holmes
>> Cc: serviceability-dev at openjdk.java.net
>> serviceability-dev at openjdk.java.net
>> Subject: Re: Protocol version of Attach API
>>
>> Hi David, Yasumasa, Thomas,
>> Thanks for point out this issue. it is introduced by enlarged the
>> arg_count_max for 8215622.
>> I have reproduced it on my side, and I will handle the fix.
>> would you like to help create a JBS for this issue?
>>
>>
>> Cheers,
>> Lin
>> ________________________________________
>> From: serviceability-dev <serviceability-dev-bounces at openjdk.java.net>
>> on behalf of Yasumasa Suenaga <yasuenag at gmail.com>
>> Sent: Tuesday, February 26, 2019 3:25:15 PM
>> To: David Holmes
>> Cc: serviceability-dev at openjdk.java.net
>> serviceability-dev at openjdk.java.net
>> Subject: Re: Protocol version of Attach API
>>
>> 2019年2月26日(火) 16:11 David Holmes <david.holmes at oracle.com>:
>>>
>>> On 26/02/2019 5:01 pm, Yasumasa Suenaga wrote:
>>>> 2019年2月26日(火) 15:47 Thomas Stüfe <thomas.stuefe at gmail.com>:
>>>>>
>>>>> Hi David, Yasumasa,
>>>>>
>>>>>>
>>>>>>
>>>>>>> Do we support connection to later VMs from earlier JDK tools?
>>>>>>
>>>>>> I could not find the spec about this.
>>>>>> So I asked to serviceability folks before filing this to JBS :-)
>>>>>>
>>>>>
>>>>> Just to chime in on that, I do not know if it is specified but it
>>>>> is certainly very handy in daily use. I often use old jcmd tools to
>>>>> connect to newer VMs. I always thought that was a neat design.
>>>>
>>>> I agree with Thomas,
>>>> but I think we can update protocol version and reject request(s) from
>>>> jcmd and other tools on earlier release.
>>>
>>> That is not a decision to be taken lightly and one that requires a CSR
>>> request. Simply allowing for an extra arg on the jmap histo subcommand
>>> should not break all backward compatability.
>>>
>>> I think this is a "simple" bug in the Linux (and possibly other) attach
>>> listener logic. It should be reading a protocol "packet" with up to 4
>>> arguments, but it should be perfectly fine to get a packet with fewer
>>> than 4. The current code doesn't do that, but assumes the "packet" is
>>> always the maximum size.
>>
>> Ok,
>> but I can create a patch for Linux only.
>>
>> AFAICS this issue seems to be in AttachListener for Linux, AIX, OS X.
>> (Solaris and Windows are ok)
>>
>> Can you handle this issue?
>> Of course I can take this if it allows for Linux only :-)
>>
>>
>> Thanks,
>>
>> Yasumasa
>>
>>
>>> David
>>> -----
>>>
>>>>
>>>> I guess serviceability tools like a jhsdb are recommended in use with
>>>> same version.
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Yasumasa
>>>>
>>>>
>>>>> ..Thomas
>>>>>
More information about the serviceability-dev
mailing list