提交 0b281792 编写于 作者: E egahlin

8216064: -XX:StartFlightRecording:settings= doesn't work properly

Reviewed-by: mgronlun
上级 4e40b598
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
*/ */
package jdk.jfr.internal.dcmd; package jdk.jfr.internal.dcmd;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.InvalidPathException; import java.nio.file.InvalidPathException;
...@@ -105,8 +106,9 @@ final class DCmdStart extends AbstractDCmd { ...@@ -105,8 +106,9 @@ final class DCmdStart extends AbstractDCmd {
if (duration == null && Boolean.FALSE.equals(dumpOnExit) && path != null) { if (duration == null && Boolean.FALSE.equals(dumpOnExit) && path != null) {
throw new DCmdException("Filename can only be set for a time bound recording or if dumponexit=true. Set duration/dumponexit or omit filename."); throw new DCmdException("Filename can only be set for a time bound recording or if dumponexit=true. Set duration/dumponexit or omit filename.");
} }
if (settings.length == 1 && settings[0].length() == 0) {
throw new DCmdException("No settings specified. Use settings=none to start without any settings");
}
Map<String, String> s = new HashMap<>(); Map<String, String> s = new HashMap<>();
if (settings == null || settings.length == 0) { if (settings == null || settings.length == 0) {
...@@ -116,8 +118,10 @@ final class DCmdStart extends AbstractDCmd { ...@@ -116,8 +118,10 @@ final class DCmdStart extends AbstractDCmd {
for (String configName : settings) { for (String configName : settings) {
try { try {
s.putAll(JFC.createKnown(configName).getSettings()); s.putAll(JFC.createKnown(configName).getSettings());
} catch(FileNotFoundException e) {
throw new DCmdException("Could not find settings file'" + configName + "'", e);
} catch (IOException | ParseException e) { } catch (IOException | ParseException e) {
throw new DCmdException("Could not parse setting " + settings[0], e); throw new DCmdException("Could not parse settings file '" + settings[0] + "'", e);
} }
} }
......
...@@ -127,7 +127,11 @@ public final class JFC { ...@@ -127,7 +127,11 @@ public final class JFC {
public static String nameFromPath(Path file) throws IOException { public static String nameFromPath(Path file) throws IOException {
String f = nullSafeFileName(file); String f = nullSafeFileName(file);
return f.substring(0, f.length() - JFCParser.FILE_EXTENSION.length()); if (f.endsWith(JFCParser.FILE_EXTENSION)) {
return f.substring(0, f.length() - JFCParser.FILE_EXTENSION.length());
} else {
return f;
}
} }
// Invoked by DCmdStart // Invoked by DCmdStart
......
/*
* Copyright (c) 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
* 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.
*/
package jdk.jfr.startupargs;
import jdk.jfr.Event;
import jdk.jfr.EventType;
import jdk.jfr.FlightRecorder;
import jdk.jfr.Name;
import jdk.jfr.Recording;
/**
* @test
* @summary Start a FlightRecording without any settings (not even default).
* @key jfr
* @library /lib /
* @run main/othervm jdk.jfr.startupargs.TestStartNoSettings
* -XX:StartFlightRecording=settings=none
*/
public class TestStartNoSettings {
@Name("UserEvent")
static class UserEvent extends Event {
}
public static void main(String[] a) throws Exception {
boolean userEnabled = false;
try (Recording r = new Recording()) {
r.start();
UserEvent e = new UserEvent();
e.commit();
for (EventType et : FlightRecorder.getFlightRecorder().getEventTypes()) {
if (et.isEnabled()) {
if (!et.getName().equals("UserEvent")) {
throw new Exception("Only 'UserEvent' should be enabled");
}
userEnabled = true;
}
}
}
if (!userEnabled) {
throw new Exception("Expected 'UserEvent' to be enabled with -XX:StartFlightRecording=settings=none");
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册