-
Notifications
You must be signed in to change notification settings - Fork 6.2k
8364281: Reduce JNI usage in Linux attach provider #26712
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
- use Path API to read file permissions - use Path API for Unix domain sockets
- use idiomatic Java APIs for permission checks
👋 Welcome back marschall! A progress list of the required criteria for merging this PR into |
❗ This change is not yet ready to be integrated. |
@marschall The following label will be automatically applied to this pull request:
When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command. |
Thanks for the work so far, nice to get rid of JNI. 🙂 There is a problemlisted test related to this that could make sense to run manually (https://bugs.openjdk.org/browse/JDK-8341518, it's failing in Oracle's CI but I have not been able to reproduce the failure myself, discussed a bit in #21331 too). I'll see if I can find time to check out this change locally and run some tests, otherwise, feel free to run it yourself. |
TestJcmdWithSideCar fails with
I must confess I'm quite confused by this as this ultimately means that
Fails with NoSuchFileException on the Path returned by createFile. Is there a better way to run TestJcmdWithSideCar other than removing it from ProblemList? As for the issue on Oralce CI, is there I way I ran run TestJcmdWithSideCar on a feature branch of mine on Oralce CI without opening a PR? |
Reduce the usage of JNI in the Linux attach provider by making more use of the
Path
API.Path
API to read file permissionsPath
API to write to and read from Unix domain socketsAfter this the sole usage of JNI in the Linux attach provider will be to send a signal using
kill
.I ran the tier1 and serviceability test suites and they both pass. I verified I can attach to and attach using a locally built JDK. I didn't do any Docker related tests.
I split the changes into two commits:
UserPrincipal
,Set
, ...)I hope this makes it easier to review and verify the changes preserve the semantics.
To the best of my knowledge
uid_t
is an unsigned 32 bit integer.VM#geteuid()
returns it aslong
, unsigned. HoweverUnixUserPrincipals#fromUid
expects anint
, I believe casting is the correct way to convert in this case.I tried to keep unrelated changes to
VirtualMachineImpl
to a minimum. I did however replace all usages ofjava.io.File
withjava.nio.file.Path
and made two methodsstatic
. We could get rid of thesocket_path
instance variable if we instead usesocket_address
to flag a disconnect.Ultimately the same changes can be applied to the macOS an AIX implementations.
Progress
Issue
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/26712/head:pull/26712
$ git checkout pull/26712
Update a local copy of the PR:
$ git checkout pull/26712
$ git pull https://git.openjdk.org/jdk.git pull/26712/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 26712
View PR using the GUI difftool:
$ git pr show -t 26712
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/26712.diff
Using Webrev
Link to Webrev Comment