Provisioning & Migration with p2: Case study - The Good, the Bad and the Ugly
description
Transcript of Provisioning & Migration with p2: Case study - The Good, the Bad and the Ugly
Provisioning & Migration with p2: Case study - The Good, the Bad and the UglyChristian Bourgeois@bourgeois_c
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
How can we update a software component and migrate it’s configuration data while having a stable system in case of failure?
Demonstration
4
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;
• client.feature• info.feature• client.bundle• common.bundle• client.bundle.nls
• server.feature• info.feature• server.bundle• common.bundle• config.feature
6
Business ModelArtifacts Layout
properties.1.name = bsm.adaptorproperties.1.value = trueproperties.2.name = adaptor.nameproperties.2.value = ZExampleAdaptorproperties.3.name = client.feature.nameproperties.3.value = zzz.compuware.example.adaptor.client.featureproperties.4.name = server.feature.nameproperties.4.value = zzz.compuware.example.adaptor.server.featureproperties.5.name = adaptor.idproperties.5.value = ZExampleAdaptorproperties.6.name = adaptor.versionproperties.6.value = 1.0.0properties.7.name = company.idproperties.7.value = CPWRproperties.8.name = domains.idsproperties.8.value = APM
7
Business Modelinfo.feature – p2.inf
8
Migrations… How to integrate them with p2?
public abstract class org.eclipse.equinox.p2.engine.spi.ProvisioningAction { …
public abstract IStatus execute(Map<String, Object> parameters);
public abstract IStatus undo(Map<String, Object> parameters);
…}
Remote Provisioning
9
Client ServerCreate Plan
Create Plan
Execute Plan
Create Plan
Execute Plan
Execute Plan
Migrate
Save
Uninstall
timestamp
Install
timestamp
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”!
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
public IStatus execute(Map<String, Object> 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<String, Object> parameters) { … MigrationManager manager = this.getMigrationManager(); manager.revert(adaptorID, adaptorVersion);}
13
Ok… But now I get a “No action found” message?
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
p2 Meta-RequirementsBeware!
15
• Tycho Bugzilla 351487• tycho-p2-director-plugin ignores meta-
requirements
• *.target in IDE
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
Christian Bourgeois@bourgeois_c
Feedback is always appreciated