Set LIBFFI_TMPDIR at startup#80651
Merged
DaveCTurner merged 4 commits intoelastic:masterfrom Nov 15, 2021
Merged
Conversation
e451699 to
9bad3ac
Compare
0b3cb94 to
24026d3
Compare
Collaborator
|
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
pugnascotia
reviewed
Nov 11, 2021
| if (environmentVariable == null) { | ||
| return null; | ||
| } | ||
| return PathUtils.get(workingDirectory).resolve(environmentVariable); |
Contributor
There was a problem hiding this comment.
Is this line so that the env var can be either relative or absolute?
Member
Author
There was a problem hiding this comment.
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.
pugnascotia
approved these changes
Nov 11, 2021
DaveCTurner
added a commit
to DaveCTurner/elasticsearch
that referenced
this pull request
Nov 15, 2021
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>
DaveCTurner
added a commit
to DaveCTurner/elasticsearch
that referenced
this pull request
Nov 15, 2021
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>
elasticsearchmachine
pushed a commit
that referenced
this pull request
Nov 15, 2021
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>
elasticsearchmachine
pushed a commit
that referenced
this pull request
Nov 15, 2021
* 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>
DaveCTurner
added a commit
to DaveCTurner/elasticsearch
that referenced
this pull request
Jan 20, 2023
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
DaveCTurner
added a commit
that referenced
this pull request
Jan 23, 2023
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
DaveCTurner
added a commit
to DaveCTurner/elasticsearch
that referenced
this pull request
Jan 23, 2023
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
DaveCTurner
added a commit
to DaveCTurner/elasticsearch
that referenced
this pull request
Jan 23, 2023
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
elasticsearchmachine
pushed a commit
that referenced
this pull request
Jan 23, 2023
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
elasticsearchmachine
pushed a commit
that referenced
this pull request
Jan 23, 2023
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Today if
libfficannot 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
libffiwon't find thisdirectory and will try various other places. In certain configurations,
none of the other places that
libffitries 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_TMPDIRenvironment variable toconfigure
libffito 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