Bug 420067 - Review trace options for org.eclipse.osgi
Summary: Review trace options for org.eclipse.osgi
Status: RESOLVED FIXED
Alias: None
Product: Equinox
Classification: Eclipse Project
Component: Framework (show other bugs)
Version: 3.10.0 Luna   Edit
Hardware: PC Mac OS X
: P3 normal with 1 vote (vote)
Target Milestone: Luna M4   Edit
Assignee: John Ross CLA
QA Contact: Thomas Watson CLA
URL:
Whiteboard:
Keywords: noteworthy
: 292774 (view as bug list)
Depends on:
Blocks:
 
Reported: 2013-10-22 08:43 EDT by Thomas Watson CLA
Modified: 2014-08-08 08:48 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas Watson CLA 2013-10-22 08:43:43 EDT
With the new code base many of the trace options for org.eclipse.osgi are either missing or no longer make sense.  We need to do an overall review of the trace options, clean up any that are no longer used (from the .options file) and implement ones that still make sense.
Comment 1 Thomas Watson CLA 2013-10-22 08:44:12 EDT
Probably not for M3.
Comment 2 Thomas Watson CLA 2013-10-24 16:43:39 EDT
implement debug/bundleTime trace option:
 http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=cb819b33e6508a855297d4f69051701465014201

Add access to DebugOptions service from ModuleContainerAdaptor:
 http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=533922fd66895d1261b0c9f7b97bfac2a2bc40c1

implement debug/startlevel trace option:
 http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=1799a0278506d5fd5bf0e17f9e02b3c61cb9c062

implement monditor/activation trace option:
 http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=2eef54b2d72bb35bb6f7718c3a691980c68f21d6

properly document debug/location option:
 http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=e0277da6b404476293d2a002ff17e91fcbbaee76

implement debug/cachedmanifest trace option:
 http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=347b72dc6d4f40b241a6cfea2d11be53e653caa9

remove some unnecessary flags:
 http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=28c40b451f7e5562f93b0bbdd60d8de2ab27a0a3

Still have much more review to do:

 - Need to clean up the .options file when we are done
 - Need resolver trace options
 - Need package admin trace options? (maybe this just is included in resolver?)
 - Review options for profile tracing
 - Likely remove any options for monitor and tracing of classes/resoruces
 - move trace options for old plugin converter to org.eclipse.osgi.compatibility.plugins
 - move trace options for platformadmin to org.eclipse.osgi.compatibility.state
Comment 3 Thomas Watson CLA 2013-11-08 08:57:37 EST
Assigning to John for more work.  Please focus on the options to trace resolving first as they are the most important.
Comment 4 John Ross CLA 2013-11-13 08:06:29 EST
*** Bug 421604 has been marked as a duplicate of this bug. ***
Comment 5 John Ross CLA 2013-11-13 08:07:17 EST
Review patch in bug 421604.
Comment 6 John Ross CLA 2013-11-19 14:32:39 EST
With regard to the resolver trace options, the following list is from the current .options file.

# Turns on debugging for the resolver
org.eclipse.osgi/resolver/debug = false
# Prints out wiring information after the resolver has completed the resolve process
org.eclipse.osgi/resolver/wiring = false
# Prints out Import-Package information
org.eclipse.osgi/resolver/imports = false
# Prints out Require-Bundle information
org.eclipse.osgi/resolver/requires = false
# Prints out debug information form the "uses" clause
org.eclipse.osgi/resolver/uses = false
# Prints out cycle information
org.eclipse.osgi/resolver/cycles = false
# Prints out Eclipse-GenericRequire information
org.eclipse.osgi/resolver/generics = false

From bug 421604, we also have the following.

# In combination with org.eclipse.osgi/resolver/uses, prints out
# information about encountered conflicts for each attempt.
org.eclipse.osgi/resolver/conflicts = false

Other candidates include the following.

# Prints out information about all matching capabilities found
# for requirements.
org.eclipse.osgi/resolver/providers
Comment 7 John Ross CLA 2013-12-02 17:06:00 EST
I started remote topic branch jross/420067 under rt.equinox.framework.

I've done an initial implementation of the org.eclipse.osgi/resolver/providers trace option [2].

Specifying org.eclipse.osgi/resolver/providers = true within the .options file will enable trace output describing what's happening between the resolve context and resolver when finding providers. A list of the current output follows. 

(1) The requirement for which providers are being found.
(2) Capabilities filtered because their effective directive was not equal to "resolve". 
(3) Capabilities filtered by resolver hooks via the filterMatches method. 
(4) Capabilities filtered because their resource was no resolved. 
(5) Capabilities filtered because the requirer did not have permission. 
(6) Capabilities filtered because the provider did not have permission. 
(7) Capabilities filtered because they were disabled. 
(8) Capabilities filtered because they were substituted. 
(9) The list of capabilities being returned to the resolver after filtering. 

I tried to format the output so that it's easily readable using line separators and tabs. The risk, of course, is that while it might look good in the console output, it could look horrible when System.out is routed to some third-party logging mechanism.

[1] http://git.eclipse.org/c/equinox/rt.equinox.framework.git/log/?h=jross/420067

[2] http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?h=jross/420067&id=2046b15cb2782c9e2c88db37d5afc841439eb2b9
Comment 8 John Ross CLA 2013-12-03 11:29:16 EST
I added support for a new resolver trace option.

Setting org.eclipse.osgi/resolver/hooks = true will print out everything filtered by resolver hooks. Information is printed out separately for each method: filterMatches, filterResolvable, and filterSingletonCollisions.

The filterMatches information is now printed for both DEBUG_PROVIDERS and DEBUG_HOOKS.

http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?h=jross/420067&id=635eecaa7f6a449a4725139750cefd55719e279e
Comment 9 John Ross CLA 2013-12-04 10:28:35 EST
Another resolver trace option added.

Setting org.eclipse.osgi/resolver/uses = true will print out information about uses constraint violations.

http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?h=jross/420067&id=84ca40c1f02946057f490f1f192a9c541c32e2e4
Comment 10 John Ross CLA 2013-12-04 10:30:27 EST
(In reply to John Ross from comment #9)
> Another resolver trace option added.
> 
> Setting org.eclipse.osgi/resolver/uses = true will print out information
> about uses constraint violations.
> 
> http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?h=jross/
> 420067&id=84ca40c1f02946057f490f1f192a9c541c32e2e4

Here's a sample message.

RESOLVER: Uses constraint violation
	Resource
		osgi.identity; osgi.identity="uses4"; type="osgi.bundle"; version:Version="0.0.0"
	Error
		Uses constraint violation. Unable to resolve resource uses4 [osgi.identity; osgi.identity="uses4"; type="osgi.bundle"; version:Version="0.0.0"] because it is exposed to package 'q' from resources uses3 [osgi.identity; osgi.identity="uses3"; type="osgi.bundle"; version:Version="0.0.0"] and uses2 [osgi.identity; osgi.identity="uses2"; type="osgi.bundle"; version:Version="0.0.0"] via two dependency chains.

Chain 1:
  uses4 [osgi.identity; osgi.identity="uses4"; type="osgi.bundle"; version:Version="0.0.0"]
    import: (&(osgi.wiring.package=q)(version>=2.0.0))
     |
    export: osgi.wiring.package: q
  uses3 [osgi.identity; osgi.identity="uses3"; type="osgi.bundle"; version:Version="0.0.0"]

Chain 2:
  uses4 [osgi.identity; osgi.identity="uses4"; type="osgi.bundle"; version:Version="0.0.0"]
    import: (osgi.wiring.package=p)
     |
    export: osgi.wiring.package=p; uses:=q
  uses1 [osgi.identity; osgi.identity="uses1"; type="osgi.bundle"; version:Version="0.0.0"]
    import: (&(osgi.wiring.package=q)(&(version>=1.0.0)(version<=1.0.0)))
     |
    export: osgi.wiring.package: q
  uses2 [osgi.identity; osgi.identity="uses2"; type="osgi.bundle"; version:Version="0.0.0"]
Comment 11 John Ross CLA 2013-12-04 10:32:33 EST
Michael,

Is the sample message in comment 10 regarding uses constraint violations an acceptable substitute for bug 421604 in kepler?
Comment 12 Michael Adada CLA 2013-12-04 10:46:41 EST
Hi John,
Yes, this looks great! :)
Just to clarify, this information will be logged also for initial conflicts, right?
Comment 13 John Ross CLA 2013-12-04 11:10:46 EST
(In reply to Michael Adada from comment #12)
> Hi John,
> Yes, this looks great! :)
> Just to clarify, this information will be logged also for initial conflicts,
> right?

Correct. Violations are printed out as they happen throughout the resolution process.
Comment 14 John Ross CLA 2013-12-04 13:38:17 EST
Added support for the org.eclipse.osgi/resolver/wiring resolver trace option.

Setting org.eclipse.osgi/resolver/wiring = true will print out the wiring information for all bundles that were resolved as part of the resolution.

http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?h=jross/420067&id=95827f8e17935a2aa4349eb1087d52e726b246f7
Comment 15 John Ross CLA 2013-12-04 14:02:14 EST
Added support for the org.eclipse.osgi/resolver/report resolver trace option.

Setting org.eclipse.osgi/resolver/report = true will print out the resolution report information.

http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?h=jross/420067&id=bd64dbe9635db929753a6dfb375effc171622f78
Comment 16 Thomas Watson CLA 2013-12-05 17:19:16 EST
I pushed the changes to master with two additional changes:

1) the debug boolean option fields need to be non-static to allow multiple framework instances to be configured with different trace options:

http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=38ce3e64440c1f5b4d2414987af381845829f78d

2) Handle an NPE when the wires object is null for printWirings.  This can happen if all the mandator triggers got disabled:

http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=c287ef5b61a6fb158f319411cf3752ffb7c5c108
Comment 17 Thomas Watson CLA 2014-08-08 08:48:45 EDT
*** Bug 292774 has been marked as a duplicate of this bug. ***