Presentation is loading. Please wait.

Presentation is loading. Please wait.

Provisioning & Migration with p2: Case study - The Good, the Bad and the Ugly Christian

Similar presentations


Presentation on theme: "Provisioning & Migration with p2: Case study - The Good, the Bad and the Ugly Christian"— Presentation transcript:

1 Provisioning & Migration with p2: Case study - The Good, the Bad and the Ugly Christian Bourgeois @bourgeois_c

2 Some Context on Previous Product Version 2 Based on Eclipse 3.4 Too much time to deliver a simple update Migration would leave system in inconsistent state

3 3 How can we update a software component and migrate it’s configuration data while having a stable system in case of failure?

4 Demonstration 4

5 Provisioning UI 5 import org.eclipse.equinox.internal.p2.ui.ProvUI; import org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener; import org.eclipse.equinox.internal.p2.ui.dialogs.AddRepositoryDialog; import org.eclipse.equinox.internal.provisional.p2.repository.RepositoryEvent;

6 client.feature info.feature client.bundle common.bundle client.bundle.nls server.feature info.feature server.bundle common.bundle config.feature 6 Business Model Artifacts Layout

7 properties.1.name = bsm.adaptor properties.1.value = true properties.2.name = adaptor.name properties.2.value = ZExampleAdaptor properties.3.name = client.feature.name properties.3.value = zzz.compuware.example.adaptor.client.feature properties.4.name = server.feature.name properties.4.value = zzz.compuware.example.adaptor.server.feature properties.5.name = adaptor.id properties.5.value = ZExampleAdaptor properties.6.name = adaptor.version properties.6.value = 1.0.0 properties.7.name = company.id properties.7.value = CPWR properties.8.name = domains.ids properties.8.value = APM 7 Business Model info.feature – p2.inf

8 8 Migrations… How to integrate them with p2? public abstract class org.eclipse.equinox.p2.engine.spi.ProvisioningAction { … public abstract IStatus execute(Map parameters); public abstract IStatus undo(Map parameters); … }

9 Remote Provisioning 9 Client Server Create Plan Execute Plan Create Plan Execute Plan Migrate Save Uninstall timestamp Install timestamp

10 10 p2 Touchpoint Actions instructions.configure=markStarted(started:true); instructions.configure=copy(source:a, target:b,overwrite:true); instructions.configure=setProgramProperty(propName:key, propValue:value); instructions.configure=addJvmArg(jvmArg:-XX:+UnlockDiagnosticVMOptions); They are executed in the “builder”!

11 Custom p2 Touchpoint Actions 11 instructions.configure=…adaptors.p2.engine.touchpoint.migrate(); instructions.unconfigure=…adaptors.p2.engine.touchpoint.saveConfigurations(); Executes business logic Must have knowledge of their runtime

12 12 public IStatus execute(Map parameters) { boolean isServer = RuntimeInfo.isServer(); if (!isServer) { return Status.OK_STATUS; } … IInstallableUnit infoInstallableUnit = this.getInfoInstallableUnit(iu, repositoryManager, progressMonitor); String adaptorID = this.getAdaptorID(infoInstallableUnit); Version adaptorVersion = this.getAdaptorVersion(infoInstallableUnit); MigrationManager manager = this.getMigrationManager(); MigrationStatus migrationStatus = manager.migrate(adaptorID, adaptorVersion); IStatus status = EclipseStatusFactory.createStatus(migrationStatus); return status; } public IStatus undo(Map parameters) { … MigrationManager manager = this.getMigrationManager(); manager.revert(adaptorID, adaptorVersion); }

13 13 Ok… But now I get a “No action found” message?

14 p2 Meta-Requirements 14 Provisions the meta-requirements in the builder provides.0.namespace=com.compuware.vantage.vsm.adaptors.p2 provides.0.name=touchpoints provides.0.version=1.1 com.compuware.vantage.vsm.adaptors.p2.engine.touchpoint.feature com.compuware.vantage.vsm.adaptors.p2.prerequisite.feature metaRequirements.0.namespace=com.compuware.vantage.vsm.adaptors.p2 metaRequirements.0.name=touchpoints metaRequirements.0.range=1.1

15 p2 Meta-Requirements Beware! 15 Tycho Bugzilla 351487 tycho-p2-director-plugin ignores meta- requirements *.target in IDE

16 Conclusion 16 p2 is easy to use (when you know the basics) p2 API is becoming more high level Must be aware of the “tricks” and pitfalls

17 Christian Bourgeois @bourgeois_c Feedback is always appreciated


Download ppt "Provisioning & Migration with p2: Case study - The Good, the Bad and the Ugly Christian"

Similar presentations


Ads by Google