[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[p2-dev] RPM, P2 and reconciliation again - huge problems

Hi P2 masters,

Eclipse packages in Fedora use dropins as a primary deployment
mechanism, because there is no way to make P2 and RPM working together
(which I can explain in details upon request or at EclipseCon France).

Shared scenarios were greatly improved in Kepler thanks to Ericsson

But there is still one more issue that is not resolved - and I guess not
really visible unless you use shared deployments at large scale, which
is related to the implicit dependencies in Eclipse - causing incomplete
bundles refresh and in turn various ClassCastExceptions,
NoClassDefFoundErrors during first startup [1][2]. This really makes
Eclipse in Fedora to look unprofessional.

After I tracked those implicit dependencies, and built Eclipse with
proper patches, it turned out dropins did not worked anymore as expected
due to the fact that during the OSGi refresh core P2 bundles were
restarted, and the OSGi attempted to restart dropins synchronizer, which
failed because of being in the "starting" state.

The scenario once more in bullet points:
* a bundle providing vital classes put in the dropins (f.e. javax.xml)
* reconciler goes into starting state
* reconciler installs javax.xml, writes timestamps and applies
* osgi starts refreshing bundles (stopping them and starting)
* osgi tries to restart reconciler (which is still starting, an
exception occurs)

In the end: timestamps are stored, bundles.info seems to be ok, but OSGi
cache is old, because the new configuration was not applied. Eclipse
will not pick it unless invoked explicitly with -clean.

It does not make Eclipse in Fedora unprofessional, it just sucks!

As a result - I had to revert my patch for [2] and accept first-run

I've tried to come up with any creative solution, but did not managed to
get anything valuable here:
* OSGi can't really interrupt start method - man, that would be a hack!
* Reconciliation can't be moved out of a start method - because the
Eclipse start process must be blocked until reconciliation is complete.
This applied to an applyConfiguration, too.
* External reconciler cannot be run, because nothing should be stored in
a master configuration.

Looks like a dead end. Any suggestions how should I proceed with this?

[1] Bug 297769 - Split packages are not refreshed properly
[2] Bug 406359 - Yet another class surviving refresh invoked by dropins 


Krzysztof Daniel <kdaniel@xxxxxxxxxx>
Red Hat