8064467: type info persistence failed to calculate directory name
Reviewed-by: hannesw, lagergren
This commit is contained in:
parent
e49b1e9aef
commit
ed690e7835
@ -156,6 +156,7 @@
|
||||
<fileset dir="${src.dir}/jdk/nashorn/tools/resources/"/>
|
||||
</copy>
|
||||
<copy file="${src.dir}/jdk/internal/dynalink/support/messages.properties" todir="${build.classes.dir}/jdk/internal/dynalink/support"/>
|
||||
<copy file="${src.dir}/jdk/nashorn/internal/codegen/anchor.properties" todir="${build.classes.dir}/jdk/nashorn/internal/codegen"/>
|
||||
|
||||
<echo message="full=${nashorn.fullversion}" file="${build.classes.dir}/jdk/nashorn/internal/runtime/resources/version.properties"/>
|
||||
<echo file="${build.classes.dir}/jdk/nashorn/internal/runtime/resources/version.properties" append="true">${line.separator}</echo>
|
||||
|
@ -33,6 +33,8 @@ import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
@ -221,11 +223,37 @@ public final class OptimisticTypesPersistence {
|
||||
private static void reportError(final String msg, final File file, final Exception e) {
|
||||
final long now = System.currentTimeMillis();
|
||||
if(now - lastReportedError > ERROR_REPORT_THRESHOLD) {
|
||||
getLogger().warning(String.format("Failed to %s %s", msg, file), e);
|
||||
reportError(String.format("Failed to %s %s", msg, file), e);
|
||||
lastReportedError = now;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs an error message with warning severity (reasoning being that we're reporting an error that'll disable the
|
||||
* type info cache, but it's only logged as a warning because that doesn't prevent Nashorn from running, it just
|
||||
* disables a performance-enhancing cache).
|
||||
* @param msg the message to log
|
||||
* @param e the exception that represents the error.
|
||||
*/
|
||||
private static void reportError(final String msg, final Exception e) {
|
||||
getLogger().warning(msg, "\n", exceptionToString(e));
|
||||
}
|
||||
|
||||
/**
|
||||
* A helper that prints an exception stack trace into a string. We have to do this as if we just pass the exception
|
||||
* to {@link DebugLogger#warning(Object...)}, it will only log the exception message and not the stack, making
|
||||
* problems harder to diagnose.
|
||||
* @param e the exception
|
||||
* @return the string representation of {@link Exception#printStackTrace()} output.
|
||||
*/
|
||||
private static String exceptionToString(final Exception e) {
|
||||
final StringWriter sw = new StringWriter();
|
||||
final PrintWriter pw = new PrintWriter(sw, false);
|
||||
e.printStackTrace(pw);
|
||||
pw.flush();
|
||||
return sw.toString();
|
||||
}
|
||||
|
||||
private static File createBaseCacheDir() {
|
||||
if(MAX_FILES == 0 || Options.getBooleanProperty("nashorn.typeInfo.disabled")) {
|
||||
return null;
|
||||
@ -233,7 +261,7 @@ public final class OptimisticTypesPersistence {
|
||||
try {
|
||||
return createBaseCacheDirPrivileged();
|
||||
} catch(final Exception e) {
|
||||
getLogger().warning("Failed to create cache dir", e);
|
||||
reportError("Failed to create cache dir", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -267,7 +295,7 @@ public final class OptimisticTypesPersistence {
|
||||
try {
|
||||
return createCacheDirPrivileged(baseDir);
|
||||
} catch(final Exception e) {
|
||||
getLogger().warning("Failed to create cache dir", e);
|
||||
reportError("Failed to create cache dir", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -280,7 +308,7 @@ public final class OptimisticTypesPersistence {
|
||||
try {
|
||||
versionDirName = getVersionDirName();
|
||||
} catch(final Exception e) {
|
||||
getLogger().warning("Failed to calculate version dir name", e);
|
||||
reportError("Failed to calculate version dir name", e);
|
||||
return null;
|
||||
}
|
||||
final File versionDir = new File(baseDir, versionDirName);
|
||||
@ -328,7 +356,12 @@ public final class OptimisticTypesPersistence {
|
||||
* @throws Exception if digest could not be created
|
||||
*/
|
||||
public static String getVersionDirName() throws Exception {
|
||||
final URL url = OptimisticTypesPersistence.class.getResource("");
|
||||
// NOTE: getResource("") won't work if the JAR file doesn't have directory entries (and JAR files in JDK distro
|
||||
// don't, or at least it's a bad idea counting on it). Alternatively, we could've tried
|
||||
// getResource("OptimisticTypesPersistence.class") but behavior of getResource with regard to its willingness
|
||||
// to hand out URLs to .class files is also unspecified. Therefore, the most robust way to obtain an URL to our
|
||||
// package is to have a small non-class anchor file and start out from its URL.
|
||||
final URL url = OptimisticTypesPersistence.class.getResource("anchor.properties");
|
||||
final String protocol = url.getProtocol();
|
||||
if (protocol.equals("jar")) {
|
||||
// Normal deployment: nashorn.jar
|
||||
|
@ -0,0 +1,27 @@
|
||||
#
|
||||
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
|
||||
# This file exists only so OptimisticTypesPersistence.getVersionDirName() can take its URL.
|
Loading…
x
Reference in New Issue
Block a user