Log the shaded form of native workdir system property (#8867)

Motivation:

When users' /tmp is noexec, NativeLibraryLoader logs a message informing
them how to fix the problem by setting a system property. However, if
Netty has been shaded that message will tell them to set the un-shaded
system property name, which won't work.

Modifications:

Change the code to let shading tools rename the native.workdir property
name reference within user-visible log messages.

Notably, debug logs were _not_ changed, as there's many debug statements
including a variety of property names. Fixing them would be a much more
invasive change and have limited benefit.

Result:

The users will see the correctly-named system property to set if they
are using a noexec /tmp.
This commit is contained in:
Eric Anderson 2019-02-14 15:18:37 -08:00 committed by Norman Maurer
parent 8fecbab2c5
commit 098705040d

View File

@ -217,10 +217,13 @@ public final class NativeLibraryLoader {
try { try {
if (tmpFile != null && tmpFile.isFile() && tmpFile.canRead() && if (tmpFile != null && tmpFile.isFile() && tmpFile.canRead() &&
!NoexecVolumeDetector.canExecuteExecutable(tmpFile)) { !NoexecVolumeDetector.canExecuteExecutable(tmpFile)) {
// Pass "io.netty.native.workdir" as an argument to allow shading tools to see
// the string. Since this is printed out to users to tell them what to do next,
// we want the value to be correct even when shading.
logger.info("{} exists but cannot be executed even when execute permissions set; " + logger.info("{} exists but cannot be executed even when execute permissions set; " +
"check volume for \"noexec\" flag; use -Dio.netty.native.workdir=[path] " + "check volume for \"noexec\" flag; use -D{}=[path] " +
"to set native working directory separately.", "to set native working directory separately.",
tmpFile.getPath()); tmpFile.getPath(), "io.netty.native.workdir");
} }
} catch (Throwable t) { } catch (Throwable t) {
suppressed.add(t); suppressed.add(t);