Hi, Sundar,

I agree with you in general, but I want to extend SA in some case.
I just want to add gateway to SA.
So I proposed to add some classes in jdk.hotspot.agent for exporting.

It does not mean to maintain all SA classes for it.
I think that the user who want to use it should use it by own risk.
Thus my proposal needs to add --add-exports to build SA plugin.

As another approach, we can might custom CLHSDB command with 
@FunctionalInterface.
For example, if CLHSDB provides "add_function [jar] [FQCN] [command name]" for 
it,
the user add new command(s) through it by own risk.
It does not affect SA code. I believe it is not to expose "Unsupported Java 
API".


Yasumasa


On 2019/12/20 12:25, sundararajan.athijegannat...@oracle.com wrote:
Hi,

I am going to reiterate. This will lead to maintenance nightmare! Any "Unsupported Java 
API" is still an API! Remember Unsafe? Once blessed in any form, it is very difficult to 
remove. Exposing hotspot VM internals as a Java API is very bad idea. No, not even as 
"unsupported API".

Exposing SA to scripts was a different beast. Scripting languages are dynamically typed. It is quite common 
in scripting world to check the existence of an attribute & then use it (if (!obj["foo"]) / 
if (typeof obj["foo"] == 'function') kind of code).  That'd be extremely painful in a statically 
typed language like Java (reflection or method/var handles?).  Platform debuggers like dbx support a 
scripting language along with access to the data structures from the target process. SA scripting was 
inspired from that model. Also scripts were never meant to be written & maintained for long time! Most 
scripts were expected to be written for a specific debugging exercise/session (thrown away).

-Sundar

On 20/12/19 6:38 am, Yasumasa Suenaga wrote:
Hi Chris,

Can we treat (part of) jdk.hotspot.agent like jdk.unsupported module?
jdk.unsupported exports unspec'd API like Unsafe.

If we do so, we might need to separate SA API into exported class and internal 
class.

I've proposed to export all SA packages in JDK-8157947, but it was rejected.


Thanks,

Yasumasa


On 2019/12/20 1:28, Chris Plummer wrote:
Hi Yasumasa,

I've had similar thoughts about how to extend clhsdb. Why not export everything 
since what we would export is not part of a spec, and the javascript support 
had the same issue of potentially breaking when the SA API changed. But maybe 
this type of unspec'd API exporting is considered bad policy. I'm not sure. 
I'll let the API spec guru's comment on that aspect of it.

thanks,

Chris

On 12/19/19 12:17 AM, Yasumasa Suenaga wrote:
Hi,

I think we can provide API for SA as following:

  Patch: http://cr.openjdk.java.net/~ysuenaga/sa-api/webrev/
  Plugin examples:
    browse: http://cr.openjdk.java.net/~ysuenaga/sa-api/plugin-examples/
    download: http://cr.openjdk.java.net/~ysuenaga/sa-api/plugin-examples.tar.gz

I think JS plugin (loading via `jsload` CLHSDB command) was supported "AS IS".
If HotSpot and/or SA code is changed, the user should follow it if need.
SA is not part of Java SE. We need not to maintain SA API when it happen IMHO.

The user who want to expand SA features (includes me!) should have responsible 
for it.
So I did not expose jdk.hotspot.agent module - the user need to build with 
--add-exports.

My proposal can write SA plugins with pure Java. So we don't need to depend on 
script engine.


Comments are welcome.

Thanks,

Yasumasa


On 2019/12/11 21:47, sundararajan.athijegannat...@oracle.com wrote:
Effectively you're asking for SA as API. I don't think that is a good idea. 
That implies supporting hotspot data structures as Java *API*. That will be 
maintainability nightmare - we've to keep tracking hotspot data structures in 
SA code. That itself is problematic. API would be next level nightmare.

-Sundar

On 11/12/19 11:57 am, Yasumasa Suenaga wrote:
Hi,

IMHO we need to export all packages in SA if we do not provide new API for SA.
sa.js in jdk.hotspot.agent could access all SA classes until JDK 8 (before 
Jigsaw), so we could make various functions if we need.

OTOH we cannot know what classes are needed by the SA users. All packages in 
jdk.hotspot.agent module provides features, and they require other packages. 
For example, sun.jvm.hotspot.oops.Oop requires sun.jvm.hotspot.types, and it 
requires sun.jvm.hotspot.debugger .
It is difficult to track and to export minimally.
(I worked for it in JDK-8157947, but I gave up...)

Thus I guess it is a big challenge to export SA classes without refactoring.
If we provide new API for SA plugin, I guess we need to work some refactoring.


Yasumasa


On 2019/12/11 15:00, Chris Plummer wrote:
On 12/10/19 9:56 PM, Yasumasa Suenaga wrote:
On 2019/12/11 14:39, Krystal Mok wrote:
Hi Yasumasa,

That's a very nice idea. Basically what you're asking for is exposing the 
Command interface [1] so that plugins can implement it and get dynamically 
loaded / registered into CLHSDB / HSDB, right?

Yes, but we also need proxy API to access internal SA objects e.g. CodeCache, 
JavaThread, TypeDataBase, etc...

Yes, or export them. I should have read this email before posting my previous 
one.

Chris

Yasumasa


[1]: 
http://hg.openjdk.java.net/jdk/jdk/file/c71ec1f09f21/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CommandProcessor.java#l246

- Kris

On Tue, Dec 10, 2019 at 9:33 PM Yasumasa Suenaga <suen...@oss.nttdata.com 
<mailto:suen...@oss.nttdata.com>> wrote:

    Hi Chris,

    It's a sad proposal, but I agree with you. To maintain SA in JS is 
difficult since Jigsaw.
    However I want SA to implement pluggable feature.
    I use custom script to list compiled codes in CodeCache.

    I guess other troubleshooters also want similar feature (via jsload) in 
future if they encounter JVM crash.


    Thanks,

    Yasumasa


    On 2019/12/11 11:52, Chris Plummer wrote:
     > Hi,
     >
     > I like to propose the removal of SA javascript support. Few people even 
realize this support exists, and hopefully even fewer are using it since I'd like 
to remove it. Since I'm new to this myself, let me first explain what I know about 
it's existence, and then explain why I want to remove it.
     >
     > If you run "jhsdb clhsdb", there are jsload and jseval commands. Don't 
look for them in anything post JDK 8. I'll explain why later. jsload is used to load a 
javascript file. In that file you can register new clhsdb commands that are written in 
javascript. You can also evaluate javascript using the jseval command. Some of this is 
explained in [1], which is the only place I can find any reference to this support. It does 
not appear to be officially supported, nor is there any oracle provided documentation.
     >
     > There also appear to be a few clhsdb commands that are written in javascript. 
Doing a grep for "registerCommand" in sa.js shows the following:
     >
     >   registerCommand("class", "class name", "jclass");
     >   registerCommand("classes", "classes", "jclasses");
     >   registerCommand("dumpclass", "dumpclass { address | name } [ directory ]", 
"dclass");
     >   registerCommand("dumpheap", "dumpheap [ file ]", "dumpHeap");
     >   registerCommand("mem", "mem address [ length ]", "printMem");
     >   registerCommand("sysprops", "sysprops", "sysProps");
     >   registerCommand("whatis", "whatis address", "printWhatis");
     >
     > Once again, don't go looking for these in anything newer than JDK8. You 
won't find them. Again the only documentation I can fine is [1].
     >
     > The other use of Javascript is the SOQL command (Simple Object Query 
Language), a tool used to query the heap, and also the JSDB command. The only SOQL 
documentation I could find is the blog reference [2]. I could not find HSDB 
documentation, but I believe is is a javascript support for looking at hotspot. So 
once again, neither of these seem to be officially supported or documented.
     >
     > The real purpose of the email is to propose removal of this support. 
Here are the reasons:
     >
     > (1) It's broken, and has been since 9. See [3]. This is why you don't 
see the javascript related commands in clhsdb. Javascript fails to initialize, so 
none of the javascript related commands are registered.
     > (2) Nashorn is deprecated and will be removed eventually.
     > (3) We have very little understanding of the javascript support.
     > (4) No resources to work on it (unless there is a community volunteer).
     > (5) Very questionable value (lack of users). The fact this support has 
been broken since JDK 9 and no bug was filed until I did so this week is a good 
indication of that. Another is that there are no other SA Javascript related bugs 
filed. Lastly, the lack of any official documentation and only minimal mention of 
it on the web is another good indication of it's (lack of) value.
     >
     > Also, regarding the 7 commands listed above that would be lost (but 
currently don't work now anyway), if they are really wanted, they could be 
implemented in java instead of javascript.
     >
     > I'd like to remove javascript support in two steps. The first is simply 
disable the clhsdb code that tries to initialize the javascript support. I'd like 
to do this in 14 (actually as soon as possible). I'd like to actually do this now 
even if we decide to keep javascript support and eventually fix it because it will 
get rid of the warning you see whenever you attach from clhsdb:
     >
     >       Warning! JS Engine can't start, some commands will not be 
available.
     >
     > This warning will become more of an issue for the clhsdb tests after I 
push [4] because then you will also see the full stacktrace for the underlying 
exception that caused the Javascript to fail to start. Besides being unnecessary 
noise in passing test cases, it can also be misleading in any test that fails 
because the exception will be unrelated to the failure. This is actually what got 
me going down this path of what the javascript support is all about.
     >
     > The next step would be to strip out all Javascript related code, 
including the SOQL and JSDB tools. This would be done in 15.
     >
     > Please let me know what you think.
     >
     > thanks,
     >
     > Chris
     >
     > [1] 
https://cr.openjdk.java.net/~minqi/6830717/raw_files/new/agent/doc/clhsdb.html
     > [2] 
http://javatroubleshooting.blogspot.com/2015/12/serviceability-agent-part-3.html
     > [3] https://bugs.openjdk.java.net/browse/JDK-8235594
     > [4] https://bugs.openjdk.java.net/browse/JDK-8234277
     >





Reply via email to