On 2011-01-20, at 11:43 AM, Kevin McIntire wrote:

> Hi,
> 
> We are continuing to build an app on a headless equinox container that 
> provides p2 installation facilities over an http interface and are running 
> into issues with installing certain bundles.  We can install many features 
> into the container and apply changes and start the bundles, but certain 
> features are installing bundles that cause p2 to restart the already running 
> servlets, and the http client never gets a response.
> 
> We've run across a generalized discussion of why this happens 
> (http://dev.eclipse.org/mhonarc/lists/p2-dev/msg02006.html) but is there a 
> good way to actually debug/diagnose this behaviour?
        At this point you would have to debug the Slicer code which given an IU 
will compute a "slice" (aka the transitive closure of this IU). The interesting 
method to see when an IU is added to the slice is 
org.eclipse.equinox.internal.p2.director.Slicer#consider(...) and why. Note 
though that the slicing proceed in a BFS so it may be a bit of pain to see 
exactly why something gets in.

>  Or, better yet, is there a way to exclude certain bundles from being 
> considered as part of the installation plan?
        First, if the problem is caused by some IUs being updated, then be sure 
to lock (meaning specify a precise version) the IUs referred to from the 
feature.
        If this is not the case, then you have two possibilities.
                1) Specify negative requirements on the IProfileChangeRequest 
using the IProfileChangeRequest#addExtraRequirements
                        Note though that the extra requirements are *not* 
persisted in the profile, so these extra requirements will have to be re-added 
every time a profile change request is emitted.
                2) Specify negative requirements in one / several IUs that 
represent the "core" of your system. This is equivalent to the "idea" of 
locking but except that you are locking things out. The aspect that is not 
optimal about that solution is that we currently have no support in the p2.inf 
to add negative requirements. So you either have to write a little utility to 
serialize the IU to disk, or provide a patch :)

At this point, I think that solution 2 is probably best because it allows you 
to control through metadata specified in a repository rather than having to 
have the negation be expressed in code.

Here is a snippet that shows how to create a negative requirement, the relevant 
values are the min and max card that need to both be set to 0.
IRequirement req1 = 
MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, iu.getId(), 
new VersionRange(iu.getVersion(), true, iu.getVersion(), true), null, 0, 0, 
false, null);

HTH
        


>  The servlet and it's supporting middle tier bundles are a bootstrap 
> mechanism that we want running no matter what.
> 
> Thanks!
> 
> Kevin
> _______________________________________________
> p2-dev mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/p2-dev

_______________________________________________
p2-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/p2-dev

Reply via email to