Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal to update WildFly download distributions using channels #577

Open
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

jmesnil
Copy link
Member

@jmesnil jmesnil commented Jun 6, 2024

No description provided.

@jmesnil
Copy link
Member Author

jmesnil commented Jun 6, 2024

@bstansberry @spyrkob This proposal would encompass https://issues.redhat.com/browse/WFLY-19221 but I'd like to get the whole user story in the proposal (including the tooling aspect of it).
We would likely have to update the existing installation-manager.sh script to provide this enhancement.

wf-galleon/wildfly_channel_in_zips.adoc Outdated Show resolved Hide resolved
4. Run a script in the existing WildFly installation to update if from x.y.z to x.y.(z+1)
5. Reload the server to run your applications on WildFly x.y.(z+ 1)

If there are multiple available updates for WildFly, the user must be able to decide which one they want to update to.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a note - that would be a new requirement for prospero, not something that is currently supported.

Copy link
Member Author

@jmesnil jmesnil Jun 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as a note, it is possible to decide to which version to update by changing the manifest.maven.version in .installation/installer-channels.yaml to point to a new manifest

wf-galleon/wildfly_channel_in_zips.adoc Outdated Show resolved Hide resolved
wf-galleon/wildfly_channel_in_zips.adoc Outdated Show resolved Hide resolved
wf-galleon/wildfly_channel_in_zips.adoc Outdated Show resolved Hide resolved
@bstansberry
Copy link
Contributor

Thanks for this, @jmesnil. This goes well beyond WFLY-19221, which is a good thing. But it goes beyond in ways that seem unlikely to be completed by the June 26 feature freeze for WildFly 33.

So I'm not sure what we (e.g. me, you, @spyrkob) want to do re WF 33. WFLY-19221 itself establishes a kind of new contract for WF, e.g. that in our download zips there will be files in certain locations with certain content. (We somewhat already have contracts in this regard as we publish manifests that tools like wildfly-maven-plugin can use.)

If we know enough about what that contract should be, perhaps we can do something re WFLY-19221 in 33. If not, we shouldn't.

I don't think that right now we know enough, because the use case discussion here may affect things. OTOH, if there's significant value in having WFLY-19221 in 33 (e.g. to provide a base for other tooling development) it might be the case that we'd know enough a couple weeks from now, if we make that a goal of the discussion.

@jmesnil
Copy link
Member Author

jmesnil commented Jun 13, 2024

This goes well beyond WFLY-19221, which is a good thing. But it goes beyond in ways that seem unlikely to be completed by the June 26 feature freeze for WildFly 33.
So I'm not sure what we (e.g. me, you, @spyrkob) want to do re WF 33. WFLY-19221 itself establishes a kind of new contract for WF, e.g. that in our download zips there will be files in certain locations with certain content. (We somewhat already have contracts in this regard as we publish manifests that tools like wildfly-maven-plugin can use.)

I update the proposal to address some of the questions you raise.
The additional files are in a dotted directory, the feature itself is flagged as preview so we are not tying our hands too tightly :)

For WildFly 33, I agree that we will not be able to address the tooling aspect of the proposal.
We could limit the scope to WFLY-19221 (as a preview feature) but the full RFE will not be addressed until we have the tooling in place to effectively update WildFly.

The only advantage of having WFLY-19221 done for WildFly 33 is to be able to work incrementally and that it leaves us the full dev cycle of 34 to address the tooling aspect.

That's a weak argument so if @bstansberry or @spyrkob, you don't see another value for WFLY-19221 in itself, let's move it to WildFly 34 and do the tooling at the same time.


WildFly must contain the tooling to let user update installations without having to download another piece of software.

The tooling should be made available in the `bin` directory of this installation and affects only the parent directory (`JBOSS_HOME` would have no bearing for update).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should keep JBoss CLI and HAL in sync with those new capabilities.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI on tooling alignment (especially HAL and JBoss CLI) I have a discussion here about a change I will be proposing against the proposals repo.

Overall based on the stability level of a new feature I am proposing different levels of support in the tooling so features can come it at a lower level maybe without tooling support and then get the tooling support added, then promote the feature to a higher stability level.

A general exception however would be where a feature is dependent on the tooling support entierely, i.e. if you can not use it without the JBoss CLI or HAL then one must support it at the outset - assuming the developers on those projects are available to assist.

** The user MUST specify the updates to apply.
** As this feature is experimental, the tooling should warn the user that updating their installation is an experimental mechanism
** these operations will be using Prospero that needs to be integrated as a JBoss module in the WildFly distributions.
* Updates must not discard any user changes to an installation (in their configuration files or JBoss modules directory)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note - currently the files under modules/system are considers "system-path" and Galleon updates take precedence over user changes

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that's fine. We don't support users modifying system modules, so if they do they can't use this feature.

* https://github.com/wildfly/wildfly[WildFly]
** WildFly distributions will incorporate channel metadata used to create the distributions and tooling to update the installation to a more recent version.
* https://github.com/wildfly-extras/prospero[Prospero]
** Prospero will be used as the library to update WildFly installations but will not surface to the user (the `installation-manager` script is the user entry point)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I understand why we need a new entry point script (installation-manager) instead of the script shipped with Prospero?

If we don't want to expose Prospero script to the users, maybe we should use the JBoss CLI/Web Console integration?

To make it a `preview` or `community` feature, we will pay attention to the user experience. In particular, the distributions should be "self-updatable" and should not need
to rely on the external download of Prospero to be updated. Promotion to `preview` or `community` would involve the integration of Prospero library into WildFly (as a JBoss module or a separate feature pack). The user interface could also be directly the `prospero` cli tool, a streamlined CLI focused on updates, or additional commands provided within `jboss-cli` tool.

=== Implementation Plan
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the implementation plan mention the new module(s) created to include Prospero libraries?


=== Stability Level

* [x] Experimental
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have only had a very fast scan so sorry if I jumped over it, if this is an experimental feature - how does a user turn on this experimental feature / acknowledge that they are using an experimental feature rather than assuming it is a community feature?


== Overview

WildFly now publishes https://repo1.maven.org/maven2/org/wildfly/channels/[channels] that is a mechanism to keep a WildFly installation up to date with the latest releases.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/that is/that are/g


WildFly now publishes https://repo1.maven.org/maven2/org/wildfly/channels/[channels] that is a mechanism to keep a WildFly installation up to date with the latest releases.

This works out of the box if users is provisioning WildFly (using the https://github.com/wildfly/wildfly-maven-plugin[wildfly-maven-plugin] or https://github.com/wildfly-extras/prospero[Prospero]).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/users is/users are/g


The http://docs.wildfly.org/wildfly-proposals/build/WFLY-19130_publish_Wildfly_channel_manifest.html[Analysis Document for WFLY-19130] states that the channels publish the latest manifest with no backwards compatibility guarantee, meaning each channel will always contain components of the latest released version of WildFly.

There are no guarantee that the channel will not break between major releases of WildFly.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/guarantee/guarantees

Updating to a more recent version is a user decision and would require the user to give as input the version of the WildFly they want to _update to_ (e.g. `33.0.1.Final` or `34.0.0.Final`).
After the update is successful, the channel metadata would be updated to point to the current version of the installation.

WildFly must contain the tooling to let user update installations without having to download another piece of software.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/users/user

** After their confirmation, the update is applied and the installation state changes
** After the update, the provisioned version of the installation is the more recent version that was applied

Since https://issues.redhat.com/browse/WFCORE-6206[WFCORE-6206], there is `installation-manager` script that is meant for internal usage. This script could be repurposed to provide these operations to the user.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/is/is an/g

=== Test Plan for WFLY-19221 - [Preview] Incorporate channel metadata in the download zips

* Verify that WildFly generated distributions (from the `dist`, `ee-dist`, and `preview-dist` Maven Modules) contain the channel metadata files corresponding to their provisioning states.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have the testsuite/galleon tests which test updating an installation using Galleon tooling. It seems like we could expand this to cover this update mechanism.

=== Non-Requirements

* Changing the type of distributions during an update is not supported (in other words, it is not possible to download the zip for WildFly 33.0.0.Final and update the installation to WildFly Preview)
* Trimming an existing installation coming from WildFly distributions with Galleon layers is not supported.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is fine but it gets me thinking about a related scenario. Is the installation-manager.sh script present in a slimmed server? If it is, what happens when the user uses it?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the slimming is achieved using Galleon and recorded in the .galleon/provisioning.xml, Prospero should only update the components in the slimmed installation.
Or do you mean a scenario where the slimmed installation does not include Prospero modules?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spyrkob Both I suppose. TBH I don't recall what I was thinking when I asked this.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think currently the installation-manager.sh is always provisioned even if the installation.manager package is not present, but I'm not sure if it's possible to exclude that package, maybe @yersan can confirm.


* Changing the type of distributions during an update is not supported (in other words, it is not possible to download the zip for WildFly 33.0.0.Final and update the installation to WildFly Preview)
* Trimming an existing installation coming from WildFly distributions with Galleon layers is not supported.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spyrkob has mentioned the CLI and the console. If the decision is to not include those, they should be listed as non-requirements as the basic assumption if nothing is said should be consistency across tools.

This feature is `experimental`.

To make it a `preview` or `community` feature, we will pay attention to the user experience. In particular, the distributions should be "self-updatable" and should not need
to rely on the external download of Prospero to be updated. Promotion to `preview` or `community` would involve the integration of Prospero library into WildFly (as a JBoss module or a separate feature pack). The user interface could also be directly the `prospero` cli tool, a streamlined CLI focused on updates, or additional commands provided within `jboss-cli` tool.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The first two sentences in this paragraph contradict the requirements.


=== Default Configuration

Updating an installation could update its default configuration (e.g. if the update is to a major version).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or minor

@jmesnil jmesnil force-pushed the wildfly_channel_in_zips branch 4 times, most recently from 50faff1 to 158156e Compare October 14, 2024 09:03
@github-actions github-actions bot added the stability-level/experimental "Experimental" stability level label Oct 14, 2024
@github-actions github-actions bot added stability-level/experimental "Experimental" stability level and removed stability-level/experimental "Experimental" stability level labels Oct 14, 2024
@github-actions github-actions bot added stability-level/experimental "Experimental" stability level and removed stability-level/experimental "Experimental" stability level labels Oct 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
stability-level/experimental "Experimental" stability level
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants