| Summary: | Infinite loop in ResolverImpl.resolve | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Eclipse Project] Equinox | Reporter: | Marc-André Laperle <malaperle> | ||||
| Component: | Framework | Assignee: | Thomas Watson <tjwatson> | ||||
| Status: | RESOLVED FIXED | QA Contact: | |||||
| Severity: | major | ||||||
| Priority: | P3 | CC: | cvgaviao, eclipse.sprigogin, matthieu.helleboid, slewis, tjwatson | ||||
| Version: | 4.5.0 Mars | ||||||
| Target Milestone: | Mars M7 | ||||||
| Hardware: | PC | ||||||
| OS: | Linux | ||||||
| Whiteboard: | |||||||
| Attachments: |
|
||||||
|
Description
Marc-André Laperle
There was two main modifications in bug #457118 : 1- http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=e7db81bab4bce237fcafd3d624e56d183bbd6dae backported for Luna SR2 in bug #457718 : http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=e7db81bab4bce237fcafd3d624e56d183bbd6dae 2- http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=16bb483bd75d665c3ff6a554419ddf8ad93bab57 So if you cannot reproduce this bug on Luna 4.4.2RC4, maybe only the second commit is causing this. Can you test that? Thanks for testing on both 4.4.2 and 4.5 (Mars). I will investigate if the later commit is the cause, but could be a combination of the two. Setting configuration option equinox.resolver.revision.batch.size=1 gets around the issue. (In reply to Thomas Watson from comment #3) > Setting configuration option equinox.resolver.revision.batch.size=1 gets > around the issue. Forgot to state, that does seem to indicate that the batching of the bundles to resolve is causing the issue. But I don't think it is the batching code that is causing the issue, but rather an issue in the felix resolver. Need to track that down. Sorry for the blast of comments. I notice your target includes both servlet 3.0 and 3.1. But you are using jetty 8 repo which only supports servlet 3.0 I think. We should not have an infinite as a result, but something seems off about this target. (In reply to Thomas Watson from comment #5) > Sorry for the blast of comments. I notice your target includes both servlet > 3.0 and 3.1. But you are using jetty 8 repo which only supports servlet 3.0 > I think. We should not have an infinite as a result, but something seems > off about this target. Yes, the target is not good and we fixed it in our master branch (CDT). But it used to work OK in previous versions and I'm concerned this could happen in other scenarios. At this point I may have to default the batch size to 1 until we can get a handle on the cause. It appears the multiple versions of the javax.servlet package are causing an explosion in the permutations to try when the batch size gets to large. equinox.resolver.revision.batch.size=38 seems to be the magic number in this case that causes the 'infinite loop'. I'm not really sure it is infinite at this point or if the possible solutions it is trying is just so large that it appears infinite. There could be a bug in the felix resolver that is causing it to try the 'same' solution over and over, in that case this would be an infinite loop. For now I changed the default of the batch to 1: http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/?id=025ca5529ced196ed37091198976820e63180e1d There have been some major changes to the felix resolver to fix some performance issues (https://issues.apache.org/jira/browse/FELIX-4656). These are pretty involved changes that I think are risky to make in M7. Initial testing show that the changes improve the resolve time for this problematic scenario down to 200 seconds. Before it would never complete and end in an out of memory error. At this point I think we need to keep the batch setting at 1 for Mars. I opened bug 464084 to track updating the resolver implementation for Neon. Marking this as fixed since setting the default batch size to 1 has worked around the issue for now. FYI, more discussions in Felix with respect to the resolver optimizations. I spent more time reviewing the changes and they are significant, but they make a pretty important optimization that prevents the same solution set from being processed over and over. After more testing and more review I decided to include the changes into M7 with bug 464084. |