-
Notifications
You must be signed in to change notification settings - Fork 25k
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
Set LIBFFI_TMPDIR at startup #80651
Set LIBFFI_TMPDIR at startup #80651
Conversation
e451699
to
9bad3ac
Compare
0b3cb94
to
24026d3
Compare
Pinging @elastic/es-core-infra (Team:Core/Infra) |
24026d3
to
b287852
Compare
Today if `libffi` cannot allocate pages of memory which are both writeable and executable then it will attempt to write code to a temporary file. Elasticsearch configures itself a suitable temporary directory for use by JNA but by default `libffi` won't find this directory and will try various other places. In certain configurations, none of the other places that `libffi` tries are suitable. With older versions of JNA this would result in a `SIGSEGV`; since elastic#80617 the JVM will exit with an exception. With this commit we use the `LIBFFI_TMPDIR` environment variable to configure `libffi` to use the same directory as JNA for its temporary files if they are needed. Closes elastic#18272 Closes elastic#73309 Closes elastic#74545 Closes elastic#77014 Closes elastic#77053 Relates elastic#77285 Co-authored-by: Rory Hunter <roryhunter2@gmail.com>
b287852
to
92bd545
Compare
} | ||
return PathUtils.get(workingDirectory).resolve(environmentVariable); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this line so that the env var can be either relative or absolute?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Really so that we report the absolute path that we expected to exist (and that libffi
would use) even if the env var is a relative path. Elasticsearch's actual working directory is different from the working directory in which the user executes $ES_DIR/bin/elasticsearch
so the behaviour can be surprising otherwise.
Today if `libffi` cannot allocate pages of memory which are both writeable and executable then it will attempt to write code to a temporary file. Elasticsearch configures itself a suitable temporary directory for use by JNA but by default `libffi` won't find this directory and will try various other places. In certain configurations, none of the other places that `libffi` tries are suitable. With older versions of JNA this would result in a `SIGSEGV`; since elastic#80617 the JVM will exit with an exception. With this commit we use the `LIBFFI_TMPDIR` environment variable to configure `libffi` to use the same directory as JNA for its temporary files if they are needed. Closes elastic#18272 Closes elastic#73309 Closes elastic#74545 Closes elastic#77014 Closes elastic#77053 Relates elastic#77285 Co-authored-by: Rory Hunter <roryhunter2@gmail.com>
Today if `libffi` cannot allocate pages of memory which are both writeable and executable then it will attempt to write code to a temporary file. Elasticsearch configures itself a suitable temporary directory for use by JNA but by default `libffi` won't find this directory and will try various other places. In certain configurations, none of the other places that `libffi` tries are suitable. With older versions of JNA this would result in a `SIGSEGV`; since elastic#80617 the JVM will exit with an exception. With this commit we use the `LIBFFI_TMPDIR` environment variable to configure `libffi` to use the same directory as JNA for its temporary files if they are needed. Closes elastic#18272 Closes elastic#73309 Closes elastic#74545 Closes elastic#77014 Closes elastic#77053 Relates elastic#77285 Co-authored-by: Rory Hunter <roryhunter2@gmail.com>
Today if `libffi` cannot allocate pages of memory which are both writeable and executable then it will attempt to write code to a temporary file. Elasticsearch configures itself a suitable temporary directory for use by JNA but by default `libffi` won't find this directory and will try various other places. In certain configurations, none of the other places that `libffi` tries are suitable. With older versions of JNA this would result in a `SIGSEGV`; since #80617 the JVM will exit with an exception. With this commit we use the `LIBFFI_TMPDIR` environment variable to configure `libffi` to use the same directory as JNA for its temporary files if they are needed. Closes #18272 Closes #73309 Closes #74545 Closes #77014 Closes #77053 Relates #77285 Co-authored-by: Rory Hunter <roryhunter2@gmail.com> Co-authored-by: Rory Hunter <roryhunter2@gmail.com>
* Set LIBFFI_TMPDIR at startup (#80651) Today if `libffi` cannot allocate pages of memory which are both writeable and executable then it will attempt to write code to a temporary file. Elasticsearch configures itself a suitable temporary directory for use by JNA but by default `libffi` won't find this directory and will try various other places. In certain configurations, none of the other places that `libffi` tries are suitable. With older versions of JNA this would result in a `SIGSEGV`; since #80617 the JVM will exit with an exception. With this commit we use the `LIBFFI_TMPDIR` environment variable to configure `libffi` to use the same directory as JNA for its temporary files if they are needed. Closes #18272 Closes #73309 Closes #74545 Closes #77014 Closes #77053 Relates #77285 Co-authored-by: Rory Hunter <roryhunter2@gmail.com> * Fix incorrect SSL usage Co-authored-by: Rory Hunter <roryhunter2@gmail.com>
Today we suggest that users set `ES_TMPDIR` using `export`, which only works if you're running things directly from the shell. Yet most users encountering `ES_TMPDIR` problems seem to on RHEL and trying to run things via `systemd`, for whom the `export` suggestion doesn't work. This commit adds to the docs a suggestion of how to adjust the `systemd` service file to set the appropriate environment variable. Relates elastic#80651
Today we suggest that users set `ES_TMPDIR` using `export`, which only works if you're running things directly from the shell. Yet most users encountering `ES_TMPDIR` problems seem to on RHEL and trying to run things via `systemd`, for whom the `export` suggestion doesn't work. This commit adds to the docs a suggestion of how to adjust the `systemd` service file to set the appropriate environment variable. Relates #80651
Today we suggest that users set `ES_TMPDIR` using `export`, which only works if you're running things directly from the shell. Yet most users encountering `ES_TMPDIR` problems seem to on RHEL and trying to run things via `systemd`, for whom the `export` suggestion doesn't work. This commit adds to the docs a suggestion of how to adjust the `systemd` service file to set the appropriate environment variable. Relates elastic#80651
Today we suggest that users set `ES_TMPDIR` using `export`, which only works if you're running things directly from the shell. Yet most users encountering `ES_TMPDIR` problems seem to on RHEL and trying to run things via `systemd`, for whom the `export` suggestion doesn't work. This commit adds to the docs a suggestion of how to adjust the `systemd` service file to set the appropriate environment variable. Relates elastic#80651
Today we suggest that users set `ES_TMPDIR` using `export`, which only works if you're running things directly from the shell. Yet most users encountering `ES_TMPDIR` problems seem to on RHEL and trying to run things via `systemd`, for whom the `export` suggestion doesn't work. This commit adds to the docs a suggestion of how to adjust the `systemd` service file to set the appropriate environment variable. Relates #80651
Today we suggest that users set `ES_TMPDIR` using `export`, which only works if you're running things directly from the shell. Yet most users encountering `ES_TMPDIR` problems seem to on RHEL and trying to run things via `systemd`, for whom the `export` suggestion doesn't work. This commit adds to the docs a suggestion of how to adjust the `systemd` service file to set the appropriate environment variable. Relates #80651
Today if
libffi
cannot allocate pages of memory which are bothwriteable and executable then it will attempt to write code to a
temporary file. Elasticsearch configures itself a suitable temporary
directory for use by JNA but by default
libffi
won't find thisdirectory and will try various other places. In certain configurations,
none of the other places that
libffi
tries are suitable. With olderversions of JNA this would result in a
SIGSEGV
; since #80617 the JVMwill exit with an exception.
With this commit we use the
LIBFFI_TMPDIR
environment variable toconfigure
libffi
to use the same directory as JNA for its temporaryfiles if they are needed.
Closes #18272
Closes #73309
Closes #74545
Closes #77014
Closes #77053
Relates #77285
Co-authored-by: Rory Hunter roryhunter2@gmail.com