Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cross-project-issues-dev] p2 <-> aggregator sync.

Please open a bug for this.

The issue seems to come from:
org.eclipse.equinox.internal.p2.metadata.repository.io.MetadataWriter#writeRequirement(IRequirement)

The _expression_ in the repository is *not* a generic requirement. It is the internal representation of a *standard* "namespace; name; version-range". Both standard and generic requirements have similar internal representations with a complex match expressions like this. The p2 read/write code always had this hack to guess if the requirement it is about to write is standard or general. The guess is inherently unreliable. To that hack I added one more guess for a properties match requirement.

I am not sure how but the guessing code for standard requirements failed in this instance.

P2 would have been much better off if it just wrote it's requirements in their normal _expression_ language form. Instead it first introduces a very general _expression_ language that is opaque to external readers (because it is so general) and then tries to hack itself by guessing what kind of _expression_ this is.

-----------------------------------------------------------------------------
My impression was that the latest design idea was to not serialize the
more general "match" requirements in a form that older runtimes would
even read them, so they would not be represented as an
RequiredCapability at all and not be serialized in a form that older
runtimes would even loaded, so would be invisible in order runtimes.
But perhaps this repo was produced with an M4 version of p2 and not
the current version that's in the 4.8IBuilds.


On 29.01.2018 08:37, David Williams wrote:

On 01/28/2018 12:48 PM, Stephan Herrmann wrote:

Result [2]:
Unable to load repository
p2:file:///home/data/httpd/download.eclipse.org/objectteams/updates/ot2.7/staging
While I don't see the actual root error, this appears to be the case
were the aggregator cannot handle current format of p2 meta data.
(Any chance to access any details of this failure?)

Did you try the aggregator editor?
I can see some detail in the console log, when using the aggregator editor.
This is with Oxygen.2 and aggregator 4.7 installed.
The log says "can not load repository" (as does pop up dialog), but
then the log continues with
!MESSAGE Unable to load repository
http://download.eclipse.org/objectteams/updates/ot2.7/staging
!STACK 0
java.lang.IllegalArgumentException
    at org.eclipse.equinox.internal.p2.metadata.RequiredCapability.assertValid(RequiredCapability.java:271)
    at org.eclipse.equinox.internal.p2.metadata.RequiredCapability.extractRange(RequiredCapability.java:250)
    at org.eclipse.equinox.internal.p2.metadata.RequiredCapability.getRange(RequiredCapability.java:164)
    at org.eclipse.cbi.p2repo.p2.util.P2Bridge.importToModel(P2Bridge.java:458)
    at org.eclipse.cbi.p2repo.p2.util.P2Bridge.importToModel(P2Bridge.java:342)
    at org.eclipse.cbi.p2repo.p2.util.P2Bridge.importToModel(P2Bridge.java:280)
    at org.eclipse.cbi.p2repo.p2.util.P2Bridge.importToModel(P2Bridge.java:402)
    at org.eclipse.cbi.p2repo.p2.loader.impl.P2RepositoryLoader.load(P2RepositoryLoader.java:120)
    at org.eclipse.cbi.p2repo.p2.loader.impl.P2RepositoryLoader.load(P2RepositoryLoader.java:60)

And, from looking at the code, there is something about (p2's)
"getVersion" that p2 considers invalid -- that is, while processing
your version in your required capability data. Only in the Oxygen
stream, that I see.

In my dev. environment where Photon M5 is installed, and the
aggregator built from master branch, (i.e. installed from
...cbi/updates/aggregator/ide/4.8/
then there is no exception, and no problem. But, I do not know if it
produces what you intend.

In the Oxygen branch, I put in some debug statements, ran locally, and
it is chocking on the capabilities involved with
org.eclipse.objectteams.otequinox.branding, perhaps this part:

<requires size='6'>
         <requiredProperties namespace='osgi.eematch='(&amp;(osgi.ee=JavaSE)(version=1.7))'/>
         <required namespace='osgi.bundle' name='org.eclipse.ui' range='[3.7.0,4.0.0)'/>
         <required namespace='osgi.bundle' name='org.eclipse.ui.workbench' range='[3.7.0,4.0.0)'/>
         <required namespace='osgi.bundle' name='org.eclipse.objectteams.otequinox' range='[2.3.0,3.0.0)'/>
         <required match='providedCapabilities.exists(cap | cap.name == $0 &amp;&amp; cap.namespace == $1 &amp;&amp; cap.version ~= $2)' matchParameters='[&apos;org.eclipse.objectteams.otequinox.branding&apos;, &apos;org.eclipse.equinox.p2.iu&apos;, range(&apos;[2.5.0,3.0.0)&apos;)]' min='0' max='0'/>
         <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='[3.7.0,4.0.0)'/>
</requires>

So, how many others are going to have *that* sort of match statement
and that sort of problem? :)

IMHO, at least for M5 and Oxygen.3, the Oxygen update branch of Sim
Release should still be aggregated with a base of Oxygen.2 and
...cbi/updates/aggregator/ide/4.7/

whereas the Photon branch of Sim Release should be aggregated with
Photon M5 and ...cbi/updates/aggregator/ide/4.8/
Can always revert back to Oxygen version if something goes terrible wrong.

But, I would be the last to have any true insight into current issues.
I have not been following all the detail requirements of why
"capabilities" is being changed in the way it has been so do not know
the use cases or motivations for the change.
I assume no one needs a change for Oxygen updates.

Back to the top