Since 8214300, jcmd cannot attach to a Java process in a docker container.

That change started using a canonicalized File to create the .attach_pidXXX 
file.  For a target process in a container, it will follow a symlink that is 
likely not the same as for the target process.  e.g. follow a symlink to a cwd 
of / which is not the same directory for the container host, as it is within 
the container.  Containerized VM never sees the file, never creates the socket 
file, the attach times out and fails.

To keep the 8214300 change working for non-container situations, we can keep a 
canonical version of the attach File to use for deleting.

For containers there will remain the problem 8214300 describes, although it is 
unlikely: if you start the attach to a containerized VM,  and it then exits, we 
can't delete the .attach_pidXXX file.  Neither the /proc/PID/cwd or canonical 
form are any use.

(Possibly leaving a .attach_pidXXX file if the target dies in that small window 
is better than the current situation.)

Here I'm suggesting the same change on AIX, although I can't build/test that.  
I'm expecting it has the same problem, as /proc/pid/cwd is still a symlink.

-------------

Commit messages:
 - AIX implementation.
 - (C) update
 - 8228343: JCMD and attach fail to work across Linux Container boundary

Changes: https://git.openjdk.java.net/jdk/pull/4418/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4418&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8228343
  Stats: 11 lines in 2 files changed: 4 ins; 2 del; 5 mod
  Patch: https://git.openjdk.java.net/jdk/pull/4418.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/4418/head:pull/4418

PR: https://git.openjdk.java.net/jdk/pull/4418

Reply via email to