Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 272561

Summary: [target] java.lang.StackOverflowError during loading target platform definitions
Product: [Eclipse Project] Equinox Reporter: Raymond Feng <enjoyjava>
Component: FrameworkAssignee: equinox.framework-inbox <equinox.framework-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P3 CC: caniszczyk, curtis.windatt.public, tjwatson
Version: 3.5   
Target Milestone: 3.5 M7   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Raymond Feng CLA 2009-04-16 15:21:02 EDT
Build ID: 3.5 M6

Steps To Reproduce:
I have a set of bundles and a target definition file. Open
the target definition file and set as target platform hangs
and I see the StackOverFlowError in the .log file. It seems
there is an infinite loop.

I can provide a zip of the bundles if it helps but it's kind of big (40+ MB).

More information:
!ENTRY org.eclipse.core.jobs 4 2 2009-04-16 11:42:39.250
!MESSAGE An internal error occurred during: "Load Target Platform".
!STACK 0
java.lang.StackOverflowError
	at java.util.HashMap.get(Unknown Source)
	at org.eclipse.osgi.internal.module.MappedList.get(MappedList.java:59)
	at org.eclipse.osgi.internal.module.MappedList.get(MappedList.java:54)
	at org.eclipse.osgi.internal.module.ResolverBundle.getExports(ResolverBundle.java:112)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveImport(ResolverImpl.java:1297)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundle(ResolverImpl.java:1111)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveImport(ResolverImpl.java:1318)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundle(ResolverImpl.java:1111)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveImport(ResolverImpl.java:1318)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundle(ResolverImpl.java:1111)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveImport(ResolverImpl.java:1318)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundle(ResolverImpl.java:1111)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveImport(ResolverImpl.java:1318)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundle(ResolverImpl.java:1111)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveImport(ResolverImpl.java:1318)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundle(ResolverImpl.java:1111)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveImport(ResolverImpl.java:1318)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundle(ResolverImpl.java:1111)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveImport(ResolverImpl.java:1318)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundle(ResolverImpl.java:1111)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveImport(ResolverImpl.java:1318)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundle(ResolverImpl.java:1111)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:527)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
	at org.eclipse.osgi.internal.module.ResolverImpl.reResolveBundles(ResolverImpl.java:608)
	at org.eclipse.osgi.internal.module.ResolverImpl.checkUsesConstraints(ResolverImpl.java:595)
	at org.eclipse.osgi.internal.module.ResolverImpl.resolveBundles0(ResolverImpl.java:538)
Comment 1 Chris Aniszczyk CLA 2009-04-16 15:22:57 EDT
uses clauses makes me cry Tom
Comment 2 Chris Aniszczyk CLA 2009-04-16 15:24:30 EDT
This is probably a dupe of bug 216934

You can try to set '-Dosgi.resolver.usesMode=ignore' on startup of Eclipse or simply remove uses clauses from your manifests.
Comment 3 Curtis Windatt CLA 2009-04-16 15:27:58 EDT
I did see this kind of stack overflow when changing the target with the new p2 target provisioner, but as I've fixed bugs there I haven't seen it again.  Will keep my eyes open.
Comment 4 Thomas Watson CLA 2009-04-16 16:15:32 EDT
Could you attach your target with all content removed except for the bundle manifests?
Comment 5 Raymond Feng CLA 2009-04-16 17:59:15 EDT
The zip file can be downloaded from:

http://people.apache.org/~rfeng/tuscany/target.zip (35MB, still uploading...)

After unzip it, I can load the bundles using:

c:\...modules> java -jar osgi-3.4.0-v20080605-1900.jar -configuration ..\features\configuration -console

Thanks,
Raymond
Comment 6 Thomas Watson CLA 2009-04-16 18:13:49 EDT
I have been working on a testcase to reproduce myself.  I managed to reproduce it with fragments which introduce uses conflicts.  It only reproduces when using the resolver in devmode (which is what PDE does).  I will look at your manifests to see if you are running into the same issue I see.
Comment 7 Thomas Watson CLA 2009-04-17 10:23:29 EDT
(In reply to comment #5)
> The zip file can be downloaded from:
> 
> http://people.apache.org/~rfeng/tuscany/target.zip (35MB, still uploading...)
> 
> After unzip it, I can load the bundles using:
> 
> c:\...modules> java -jar osgi-3.4.0-v20080605-1900.jar -configuration
> ..\features\configuration -console
> 
> Thanks,
> Raymond
> 

Thanks for the test case.  Your scenario is the same as the one I found.  Basically a fragment is contributing a constraint (Import-package) which is causing a uses conflict in the host.  The issue is when in development mode we did not detach the fragment so the extra "bad" constraint was remaining on the host after we marked the fragment as unresolvable.  Then when we try to reresolve we would find the "bad" constaint again on the host and go into endless reresolve recursion.

I have release a fix and new testcases to test for this scenario.