Resolver and tracing: trace dependency graph node depth not call stack depth
Paul Sandoz
paul.sandoz at oracle.com
Wed May 2 09:10:56 PDT 2012
Hi,
Enabling tracing to spit out lots of information (e.g. export JIGSAW_TRACE=1000) is useful to help work out what going on underneath the covers when executing javac/jmod/java.
I noticed that the tracing for the Resolver class when traversing the dependency graph is not as i would have expected. The depth of the tracing output corresponds to the depth of the call stack. I expected the depth to correspond to the depth of a node (from the root node) in the dependency graph. Thus i found output is confusing and unintuitive.
See the following URL for a webrev that modifies the tracing output to correspond to the depth in the dependency graph:
http://cr.openjdk.java.net/~psandoz/jigsaw/resolver-trace/webrev.00/
See below for an example trace output. In this example there are three modules: B that requires A and jdk.httpserver; A with no explicit requires; and C with no explicit requires. It is now much easier to grok the traversal through the dependency graph.
Notice the 4 repeating "resolving jdk.desktop at 8-ea requires optional jdk.desktop", which are due to the desktop module requiring optional services which are also provided by the desktop module. In such cases there should be no need to add such nodes to the stack of nodes to further search. I did not notice this from the previous trace output.
Paul.
| Path-configuring [c@=1.0, a@=1.0, b@=1.0] using catalog javac
| resolving ROOT requires b@=1.0
| trying b at 1.0
| - resolving b at 1.0 requires a
| - trying a at 1.0
| -- resolving a at 1.0 requires synthesized java.base@>=8
| -- trying java.base
| --- resolving jdk.base at 8-ea requires optional sun.charsets
| --- trying sun.charsets at 8-ea
| ---- resolving sun.charsets at 8-ea requires local jdk.base.internal@=8-ea
| ---- resolving sun.charsets at 8-ea requires synthesized java.base@>=7
| --- resolving jdk.base at 8-ea requires optional jdk.zipfs
| --- trying jdk.zipfs at 8-ea
| ---- resolving jdk.zipfs at 8-ea requires jdk.base@=8-ea
| ---- resolving jdk.zipfs at 8-ea requires synthesized java.base@>=7
| --- resolving jdk.base at 8-ea requires optional jdk.jndi
| --- trying jdk.jndi at 8-ea
| ---- resolving jdk.jndi at 8-ea requires local jdk.auth.internal@=8-ea
| ---- trying jdk.auth.internal at 8-ea
| ----- resolving jdk.auth at 8-ea requires local jdk.base.internal@=8-ea
| ----- resolving jdk.auth at 8-ea requires jdk.logging@=8-ea
| ----- trying jdk.logging at 8-ea
| ------ resolving jdk.logging at 8-ea requires local jdk.base.internal@=8-ea
| ------ resolving jdk.logging at 8-ea requires synthesized java.base@>=7
| ----- resolving jdk.auth at 8-ea requires synthesized java.base@>=7
| ---- resolving jdk.jndi at 8-ea requires local jdk.base.internal@=8-ea
| ---- resolving jdk.jndi at 8-ea requires optional jdk.desktop@=8-ea
| ---- trying jdk.desktop at 8-ea
| ----- resolving jdk.desktop at 8-ea requires optional jdk.desktop
| ----- resolving jdk.desktop at 8-ea requires optional jdk.desktop
| ----- resolving jdk.desktop at 8-ea requires optional jdk.desktop
| ----- resolving jdk.desktop at 8-ea requires optional jdk.desktop
| ----- resolving jdk.desktop at 8-ea requires local jdk.base.internal@=8-ea
| ----- resolving jdk.desktop at 8-ea requires optional jdk.jaxp@=8-ea
| ----- trying jdk.jaxp at 8-ea
| ------ resolving jdk.jaxp at 8-ea requires local jdk.base.internal@=8-ea
| ------ resolving jdk.jaxp at 8-ea requires synthesized java.base@>=7
| ----- resolving jdk.desktop at 8-ea requires jdk.logging@=8-ea
| ----- resolving jdk.desktop at 8-ea requires jdk.prefs@=8-ea
| ----- trying jdk.prefs at 8-ea
| ------ resolving jdk.prefs at 8-ea requires local jdk.base.internal@=8-ea
| ------ resolving jdk.prefs at 8-ea requires jdk.jaxp@=8-ea
| ------ resolving jdk.prefs at 8-ea requires synthesized java.base@>=7
| ----- resolving jdk.desktop at 8-ea requires sun.charsets.internal@=8-ea
| ----- resolving jdk.desktop at 8-ea requires synthesized java.base@>=7
| ---- resolving jdk.jndi at 8-ea requires jdk.rmi@=8-ea
| ---- trying jdk.rmi at 8-ea
| ----- resolving jdk.rmi at 8-ea requires local jdk.base.internal@=8-ea
| ----- resolving jdk.rmi at 8-ea requires jdk.logging@=8-ea
| ----- resolving jdk.rmi at 8-ea requires jdk.tls@=8-ea
| ----- trying jdk.tls at 8-ea
| ------ resolving jdk.tls at 8-ea requires local jdk.base.internal@=8-ea
| ------ resolving jdk.tls at 8-ea requires synthesized java.base@>=7
| ----- resolving jdk.rmi at 8-ea requires synthesized java.base@>=7
| ---- resolving jdk.jndi at 8-ea requires jdk.tls.internal@=8-ea
| ---- resolving jdk.jndi at 8-ea requires synthesized java.base@>=7
| --- resolving jdk.base at 8-ea requires local optional jdk.desktop.internal@=8-ea
| --- resolving jdk.base at 8-ea requires optional jdk.jaxp@=8-ea
| --- resolving jdk.base at 8-ea requires local optional jdk.tls.internal@=8-ea
| --- resolving jdk.base at 8-ea requires local optional sun.localedata@=8-ea
| --- trying sun.localedata at 8-ea
| ---- resolving sun.localedata at 8-ea requires local jdk.base.internal@=8-ea
| ---- resolving sun.localedata at 8-ea requires synthesized java.base@>=7
| --- resolving jdk.base at 8-ea requires local optional sun.resources@=8-ea
| --- trying sun.resources at 8-ea
| ---- resolving sun.resources at 8-ea requires local jdk.base.internal@=8-ea
| ---- resolving sun.resources at 8-ea requires synthesized java.base@>=7
| - resolving b at 1.0 requires jdk.httpserver
| - trying jdk.httpserver at 8-ea
| -- resolving jdk.httpserver at 8-ea requires jdk.base@=8-ea
| -- resolving jdk.httpserver at 8-ea requires jdk.logging@=8-ea
| -- resolving jdk.httpserver at 8-ea requires jdk.tls@=8-ea
| -- resolving jdk.httpserver at 8-ea requires synthesized java.base@>=7
| - resolving b at 1.0 requires synthesized java.base@>=8
| resolving ROOT requires a@=1.0
| resolving ROOT requires c@=1.0
| trying c at 1.0
| - resolving c at 1.0 requires synthesized java.base@>=8
More information about the jigsaw-dev
mailing list