[wildfly-dev] Design Proposal: Build split and provisioning
Stuart Douglas
stuart.w.douglas at gmail.com
Wed Jun 11 10:59:10 EDT 2014
Peter Cai wrote:
> Hi Stuart,
> Many good points.
>
> I have some questions in this regard.
> 1, Could you please clarify the difference between feature packs,
> module, and subsystems?
> If I understand correctly, that subsystems, and module to feature packs
> is like what ingredients to recipes.
A feature pack contains subsystems and other modules.
>
> 2, To my gut feel, the feature packs you described shares the same
> concept of feature of Karaf. For more info, please refer to
> http://karaf.apache.org/manual/latest/users-guide/provisioning.html. Is
> it possible for Wildfly to be built on top of OSGi container in the future?
>
It is kinda like Karaf, but we are not based on OSGi, and have no plans
to move.
Stuart
> Regards,
> Peter C
>
>
> On Wed, Jun 11, 2014 at 1:13 AM, Stuart Douglas <sdouglas at redhat.com
> <mailto:sdouglas at redhat.com>> wrote:
>
> This design proposal covers the inter related tasks of splitting up the
> build, and also creating a build/provisioning system that will make it
> easy for end users to consume Wildfly. Apologies for the length, but it
> is a complex topic. The first part explains what we are trying to
> achieve, the second part covers how we are planning to actually
> implement it.
>
> The Wildfly code base is over a million lines of java and has a test
> suite that generally takes close to two hours to run in its entirety.
> This makes the project very unwieldily, and the large size and slow test
> suite makes development painful.
>
> To deal with this issue we are going to split the Wildfly code base into
> smaller discrete repositories. The planned split is as follows:
>
> - Core: just the WF core
> - Arquillian: the arquillian adaptors
> - Servlet: a WF distribution with just Undertow, and some basic EE
> functionality such as naming
> - EE: All the core EE related functionality, EJB's, messaging etc
> - Clustering: The core clustering functionality
> - Console: The management console
> - Dist: brings all the pieces together, and allows us to run all tests
> against a full server
>
> Note that this list is in no way final, and is open to debate. We will
> most likely want to split up the EE component at some point, possibly
> along some kind of web profile/full profile type split.
>
> Each of these repos will build a feature pack, which will contain the
> following:
>
> - Feature specification / description
> - Core version requirements (e.g. WF10)
> - Dependency info on other features (e.g. RestEASY X requires CDI 1.1)
> - module.xml files for all required modules that are not provided by
> other features
> - References to maven GAV's for jars (possibly a level of indirection
> here, module.xml may just contain the group and artifact, and the
> version may be in a version.properties file to allow it to be easily
> overridden)
> - Default configuration snippet, subsystem snippets are packaged in the
> subsystem jars, templates that combine them into config files are part
> of the feature pack.
> - Misc files (e.g. xsds) with indication of where on path to place them
>
> Note that a feature pack is not a complete server, it cannot simply be
> extracted and run, it first needs to be assembled into a server by the
> provisioning tool. The feature packs also just contain references to the
> maven GAV of required jars, they do not have the actual jars in the pack
> (which should make them very lightweight).
>
> Feature packs will be assembled by the WF build tool, which is just a
> maven plugin that will replace our existing hacky collection of ant
> scripts.
>
> Actual server instances will be assembled by the provisioning tool,
> which will be implemented as a library with several different front
> ends, including a maven plugin and a CLI (possibly integrated into our
> existing CLI). In general the provisioning tool will be able to
> provision three different types of servers:
>
> - A traditional server with all jar files in the distribution
> - A server that uses maven coordinates in module.xml files, with all
> artifacts downloaded as part of the provisioning process
> - As above, but with artifacts being lazily loaded as needed (not
> recommended for production, but I think this may be useful from a
> developer point of view)
>
> The provisioning tool will work from an XML descriptor that describes
> the server that is to be built. In general this information will
> include:
>
> - GAV of the feature packs to use
> - Filtering information if not all features from a pack are required
> (e.g. just give me JAX-RS from the EE pack. In this case the only
> modules/subsystems installed from the pack will be modules and subystem
> that JAX-RS requires).
> - Version overrides (e.g. give me Reaseasy 3.0.10 instead of 3.0.8),
> which will allow community users to easily upgrade individual
> components.
> - Configuration changes that are required (e.g. some way to add a
> datasource to the assembled server). The actual form this will take
> still needs to be decided. Note that this need to work on both a user
> level (a user adding a datasource) and a feature pack level (e.g. the
> JON feature packing adding a required data source).
> - GAV of deployments to install in the server. This should allow a
> server complete with deployments and the necessary config to be
> assembled and be immediately ready to be put into service.
>
> Note that if you just want a full WF install you should be able to
> provision it with a single line in the provisioning file, by specifying
> the dist feature pack. We will still provide our traditional download,
> which will be build by the provisioning tool as part of our build
> process.
>
> The provisioning tool will also be able to upgrade servers, which
> basically consists of provisioning a new modules directory. Rollback is
> provided by provisioning from an earlier version of provisioning file.
> When a server is provisioned the tool will make a backup copy of the
> file used, so it should always be possible to examine the provisioning
> file that was used to build the current server config.
>
> Note that when an update is performed on an existing server config will
> not be updated, unless the update adds an additional config file, in
> which case the new config file will be generated (however existing
> config will not be touched).
>
> Note that as a result of this split we will need to do much more
> frequent releases of the individual feature packs, to allow the most
> recent code to be integrated into dist.
>
> Implementation Plan
>
> The above changes are obviously a big job, and will not happen
> overnight. They are also highly likely to conflict with other changes,
> so maintaining a long running branch that gets rebased is not a
> practical option. Instead the plan it to perform the split in
> incremental changes. The basic steps are listed below, some of which can
> be performed in parallel.
>
> 1) Using the initial implementation of my build plugin (in my
> wildfly-build-plugin branch) we split up the server along the lines
> above. The code will all stay in the same repo, however the plugin will
> be used to build all the individual pieces, which are then assembled as
> part of the final build process. Note that the plugin in its current
> form does both the build and provision step, and the pack format is
> produces is far from the final pack format that we will want to use.
>
> 2) Split up the test suite into modules based on the features that they
> test. This will result in several smaller modules in place of a single
> large one, which should also be a usability improvement as individual
> tests will be be faster to run, and run times for all tests in a module
> should be more manageable.
>
> 3) Split the core into into own module.
>
> 4) Split everything else into its own module. As part of this step we
> need to make sure we still have the ability to run all tests against the
> full server, as well as against the cut down feature pack version of the
> server.
>
> 5) Focus on the build an provisioning tool, to implement all the
> features above, and to finalize the WF pack format.
>
> I think that just about covers it. There are still lots of nitty gritty
> details that need to be worked out, however I think this covers all the
> main aspects of the design. We are planning on starting work on this
> basically immediately, as we want to get this implemented as early in
> the WF9 cycle as possible.
>
> Stuart
>
>
>
>
>
>
>
>
>
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev at lists.jboss.org <mailto:wildfly-dev at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/wildfly-dev
>
>
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/wildfly-dev
More information about the wildfly-dev
mailing list