RFR: JDK-8210337: runtime/NMT/VirtualAllocTestType.java failed on RuntimeException missing from stdout/stderr

David Holmes david.holmes at oracle.com
Tue Oct 2 21:38:34 UTC 2018


Chris,

On 3/10/2018 6:57 AM, Chris Plummer wrote:
> 
> 
> On 10/2/18 1:44 PM, gary.adams at oracle.com wrote:
>> The general attach sequence ...
>>
>> src/jdk.attach/solaris/classes/sun/tools/attach/VirtualMachineImpl.java
>>
>>  the attacher creates an attach_pid file in a directory where the 
>> attachee is runnning
>>  issues a signal to the attacheee
>>
>>   loops waiting for the java_pid file to be created
>>   default timeout is 10 seconds
>>
> So getting a FileNotFoundException while in this loop is OK, but 
> IOException is not.
> 
>> src/hotspot/os/solaris/attachListener_solaris.cpp
>>
>>    attachee creates the java_pid file
>>    listens til the attacher opens the door
>>
> I'm don't think this is related, but JDK-8199811 made a fix in 
> attachListener_solaris.cpp to make it wait up to 10 seconds for 
> initialization to complete before failing the enqueue.
> 
>> ...
>> Not sure when a bare IOException is thrown rather than the
>> more specific FileNotFoundException.
> Where is the IOException originating from? I wonder if the issue is that 
> the file is in the process of being created, but is not fully created 
> yet. Maybe it is there, but owner/group/permissions have not been set 
> yet, and this results in an IOException instead of FileNotFoundException.

The exception is shown in the bug report:

  [java.io.IOException: Permission denied
at jdk.attach/sun.tools.attach.VirtualMachineImpl.open(Native Method)
at 
jdk.attach/sun.tools.attach.VirtualMachineImpl.openDoor(VirtualMachineImpl.java:215)
at 
jdk.attach/sun.tools.attach.VirtualMachineImpl.<init>(VirtualMachineImpl.java:71)
at 
jdk.attach/sun.tools.attach.AttachProviderImpl.attachVirtualMachine(AttachProviderImpl.java:58)
at 
jdk.attach/com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:207)
at jdk.jcmd/sun.tools.jcmd.JCmd.executeCommandForPid(JCmd.java:114)
at jdk.jcmd/sun.tools.jcmd.JCmd.main(JCmd.java:98)

And if you look at the native code the EPERM from open will cause 
IOException to be thrown.

./jdk.attach/solaris/native/libattach/VirtualMachineImpl.c

JNIEXPORT jint JNICALL Java_sun_tools_attach_VirtualMachineImpl_open
   (JNIEnv *env, jclass cls, jstring path)
{
     jboolean isCopy;
     const char* p = GetStringPlatformChars(env, path, &isCopy);
     if (p == NULL) {
         return 0;
     } else {
         int fd;
         int err = 0;

         fd = open(p, O_RDWR);
         if (fd == -1) {
             err = errno;
         }

         if (isCopy) {
             JNU_ReleaseStringPlatformChars(env, path, p);
         }

         if (fd == -1) {
             if (err == ENOENT) {
                 JNU_ThrowByName(env, "java/io/FileNotFoundException", 
NULL);
             } else {
                 char* msg = strdup(strerror(err));
                 JNU_ThrowIOException(env, msg);
                 if (msg != NULL) {
                     free(msg);
                 }


We should add the path to the exception message.

David
-----

> Chris
>>
>>
>>
>> On 10/2/18 4:11 PM, Chris Plummer wrote:
>>> Can you summarize how the attach handshaking is suppose to work? I'm 
>>> just wondering why the attacher would ever be looking for the file 
>>> before the attachee has created it. It seems a proper handshake would 
>>> prevent this. Maybe there's some sort of visibility issue where the 
>>> attachee has indeed created the file, but it is not immediately 
>>> visible to the attacher process.
>>>
>>> Chris
>>>
>>> On 10/2/18 12:27 PM, gary.adams at oracle.com wrote:
>>>> The problem reproduced pretty quickly.
>>>> I added a call to checkPermission and revealed the
>>>> "file not found" from the stat call when the IOException
>>>> was detected.
>>>>
>>>> There has been some flakiness from the Solaris test machines today,
>>>> so I'll continue with the testing a bit longer.
>>>>
>>>> On 10/2/18 3:12 PM, Chris Plummer wrote:
>>>>> Without the fix was this issue easy enough to reproduce that you 
>>>>> can be sure this is resolving it?
>>>>>
>>>>> Chris
>>>>>
>>>>> On 10/2/18 8:16 AM, Gary Adams wrote:
>>>>>> Solaris debug builds are failing tests that use the attach interface.
>>>>>> An IOException is reported when the java_pid file is not opened.
>>>>>>
>>>>>> It appears that the attempt to attach is taking place too quickly.
>>>>>> This workaround will allow the open operation to be retried
>>>>>> after a short pause.
>>>>>>
>>>>>>   Webrev: http://cr.openjdk.java.net/~gadams/8210337/webrev/
>>>>>>   Issue: https://bugs.openjdk.java.net/browse/JDK-8210337
>>>>>>
>>>>>> Testing is in progress.
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
> 
> 


More information about the serviceability-dev mailing list