diff -r 4cab5edc2950 -r 5d043a159d5c src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java Fri May 17 15:53:21 2019 +0200 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java Fri May 17 16:02:27 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2019, 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 @@ -43,6 +43,7 @@ public final static DateTimeFormatter REPO_DATE_FORMAT = DateTimeFormatter .ofPattern("yyyy_MM_dd_HH_mm_ss"); + private static final String JFR_REPOSITORY_LOCATION_PROPERTY = "jdk.jfr.repository"; private final Set cleanupDirectories = new HashSet<>(); private SafePath baseLocation; @@ -55,7 +56,7 @@ return instance; } - public synchronized void setBasePath(SafePath baseLocation) throws Exception { + public synchronized void setBasePath(SafePath baseLocation) throws IOException { // Probe to see if repository can be created, needed for fail fast // during JVM startup or JFR.configure this.repository = createRepository(baseLocation); @@ -69,7 +70,7 @@ this.baseLocation = baseLocation; } - synchronized void ensureRepository() throws Exception { + public synchronized void ensureRepository() throws IOException { if (baseLocation == null) { setBasePath(SecuritySupport.JAVA_IO_TMPDIR); } @@ -91,7 +92,7 @@ } } - private static SafePath createRepository(SafePath basePath) throws Exception { + private static SafePath createRepository(SafePath basePath) throws IOException { SafePath canonicalBaseRepositoryPath = createRealBasePath(basePath); SafePath f = null; @@ -108,13 +109,14 @@ } if (i == MAX_REPO_CREATION_RETRIES) { - throw new Exception("Unable to create JFR repository directory using base location (" + basePath + ")"); + throw new IOException("Unable to create JFR repository directory using base location (" + basePath + ")"); } SafePath canonicalRepositoryPath = SecuritySupport.toRealPath(f); + SecuritySupport.setProperty(JFR_REPOSITORY_LOCATION_PROPERTY, canonicalRepositoryPath.toString()); return canonicalRepositoryPath; } - private static SafePath createRealBasePath(SafePath safePath) throws Exception { + private static SafePath createRealBasePath(SafePath safePath) throws IOException { if (SecuritySupport.exists(safePath)) { if (!SecuritySupport.isWritable(safePath)) { throw new IOException("JFR repository directory (" + safePath.toString() + ") exists, but isn't writable"); @@ -154,7 +156,7 @@ SecuritySupport.clearDirectory(p); Logger.log(LogTag.JFR, LogLevel.INFO, "Removed repository " + p); } catch (IOException e) { - Logger.log(LogTag.JFR, LogLevel.ERROR, "Repository " + p + " could not be removed at shutdown: " + e.getMessage()); + Logger.log(LogTag.JFR, LogLevel.INFO, "Repository " + p + " could not be removed at shutdown: " + e.getMessage()); } } }