Bug 22879 - Included features not included as part of update check
Summary: Included features not included as part of update check
Status: RESOLVED DUPLICATE of bug 21351
Alias: None
Product: Platform
Classification: Eclipse Project
Component: Update (deprecated - use Eclipse>Equinox>p2) (show other bugs)
Version: 2.0   Edit
Hardware: PC Windows 2000
: P1 blocker (vote)
Target Milestone: 2.0.2   Edit
Assignee: Dejan Glozic CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2002-08-26 22:07 EDT by Tim Koss CLA
Modified: 2002-09-29 23:17 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 Tim Koss CLA 2002-08-26 22:07:35 EDT
If feature A is included as part of feature B, there is no way to update feature
A independent of feature B using the Available Updates page as feature A will
not be listed under the Query settings. Even if feature A is added independently
at first, as soon as it is included in another feature we can no longer update
it independently.

In our product we have the case where we have base tooling that we want to
ensure is loaded when a given runtime is added via the update mechanism. The
same tooling is pointed to from multiple runtimes. We are using the include tag
to get the tooling in, but we want to be able to update the tooling feature
separately.
Comment 1 Dejan Glozic CLA 2002-08-27 10:05:31 EDT
You are using inclusion for dependency control, and that is against the current 
Update design. A feature that requires plug-ins from another feature should 
use 'requires' clause instead. 

Bottom line:

1) Use 'requires' for features that can be individually updated but depend on 
each other. Eclipse SDK uses feature attribution plug-in for that purpose. Each 
feature has a plug-in that carries NL info, license, about etc. that has the 
same ID as the feature. We simply specify dependency on that feature. PDE 
depends on the platform and JDT plug-ins, for example.

2) Use 'includes' to organize features hierarchically. In this scenario, only 
the root feature can carry update information and the entire hierarchy must be 
updated from the same update site. The reason for this is to ensure that 
service/support contracts are valid - i.e. that only features that are tested 
and verified to work with each other is installed and configured. In other 
words, 'includes' is used to form a product hirerarchy.

We are currently exploring ways to provide for definition of product suites,
where multiple products can be combined into a loose collection (suite) that
is delivered as one but retain more independence than it is the case with 
features that form a product. At the moment (with the 2.0.0/2.0.1 code),
the only way to do that is to define each product as a root-level feature.
You can use 'requires' to ensure cross-dependence and each root feature can
be individually updated, there is no way to represent the collection as 
an entity - each feature acts independently. 
Comment 2 Tim Koss CLA 2002-08-27 11:55:38 EDT
The problem with 'requires' is that it points to a plugin, not a feature. It is
pretty much impossible for a user to figure out what feature they need to load
to meet the requirements
Comment 3 Dejan Glozic CLA 2002-08-27 12:05:32 EDT
Granted, but if you use a require to point to the attribution plug-in, the plug-
in and a feature have the same IDs and names, which makes things easier. 

The idea with plug-in require was that features are plug-in lineups and your 
real dependency is on plug-ins. Consequently, the plug-ins you require may be 
in many different features. The require statements simplys says 'as long as 
these plug-ins are installed, I am happy, and I don't care which feature 
dragged them in'. 

In reality, we realize that dependency on a feature is more practical in most 
cases.
Comment 4 Tim Koss CLA 2002-08-27 13:24:50 EDT
I agree that ultimately the dependency is on a plugin and that you don't care
where the plugin comes from. Unfortunately, the user is just trying to load a
feature here and will be unable to due to a prereq that they will have no id of
how to find since the error message shows the plugin id that has no relation to
the list of features that the user can see. In our case they get an error
message like:

   WCE JCL Max Class Library (1.9.510): Feature requires 
    plug-in "com.ibm.ive.j9.custom".

How the heck can we get the feature name in this message to let the user have a
chance to figure it out?
Comment 5 Dejan Glozic CLA 2002-09-05 21:05:59 EDT
I have to check again, but I think that in 2.0.0 you are notified about the 
missing prereq and offered a way to search for features that contain missing 
plug-ins. 

In your case, if the user chooses the 'Search' option when notified about the 
missing "com.ibm.ive.j9.custom" plug-in, the search would turn out some 
results. Did you try this?
Comment 6 Dejan Glozic CLA 2002-09-11 17:54:49 EDT
Tim, if we were to add another attribute to the 'import' element in feature.xml 
('feature') allowing you to specify requirement on a feature rather than on a 
plug-in, would that fix your problem?
Comment 7 Tim Koss CLA 2002-09-11 18:07:30 EDT
I think that would help a bit - at least the user would know what feature to
load, but what I really want is to have the ability to specify other features
(that I own and know what site they are on) I want loaded. I want these to get
loaded and to exist as if the user loaded them all separately.

Let me try to describe the scenario (since I owe you this anyway <g>). We have
the case in our product where we supply java class libraries and eclipse based
tooling. The libraries are intended to run in a number of different os's and
devices, and the tooling is there to help you manage the complex relationships.
The tie between the tooling and the libraries is a descriptive meta data. The
meta data is backwards compatible, so there is no version relationship between
the different features we want to load (i.e. after we load them, they can be
updated independtly of each other).

I think that what we need would may be provided by what you have described in
your suites. 

To try to restate the scenario simply. To use our product the user has to
download Feature A and Featue B independtly. They show up everywhere as a 'top
level' feature that can be updated on it's own (with the quick update mechanism)
and has no real dependency on the other feature. We simply want to be able to
say - if you load Feature A, we will load Feature B as well. In our case there
could be many version of this, where Feature A is the tool and Feature B thru Z
are the libraries. All of Feature B thru Z would also want to load Feature A
Comment 8 Dejan Glozic CLA 2002-09-11 18:40:45 EDT
I can see how suite support (the addition of 'match' rule that allows included 
features to 'grow' and still be correctly resolved) would help you. However, 
since you indicate that they are completely independent, there may be a limit 
how high a version of the included feature can be tolerated. 

Right now, Update does not support updates between major releases. By default, 
only service increments (i.e. match=equivalent) are treated as 'updates'. This 
can be bumped up to include minor increments (i.e. match=compatible) in the 
Preferences. The intended implementation is to follow this restriction, which 
means that you can specify match=greaterOrEqual in the feature.xml, but search 
will reject major release increments. Is this too restrictive for your case?
Comment 9 Dejan Glozic CLA 2002-09-29 23:17:06 EDT

*** This bug has been marked as a duplicate of 21351 ***