Absolutely.

Question is whether we should deprecate or make it a breaking change.

Deprecating feels right, though I think it would mean we can't actually remove until 2.0 ?

Best
Alex


On 26/10/2017 12:06, Aled Sage wrote:
Hi all,

I propose we make it mandatory to specify the bundle id and version (currently it is optional).

I think we should do this asap, before 1.0.0 is released.

This is a breaking change - it will require users to add a `bundle: ...` line to their .bom files (if they are not supplying the metadata another way, such as building their project as an OSGi bundle).

TL;DR: for backwards compatibility, we let users have a different mental model from what Brooklyn now actually does, which can lead to confusing behaviour when upgrading or working with snapshots.

*## Current Behaviour*

Currently, we'll auto-wrap things as a bundle, generating a unique anonymous bundle name:version if one is not supplied.

This is important for users doing `br catalog add myfile.bom` or `br catalog add mydir/`. In both cases we automatically create an OSGi bundle with those contents. For that bundle's name:version, one can explicitly supply it (e.g. via `bundle: ...` in the .bom file). But, for backwards compatibility, we support .bom files that have no such metadata.

*## Old Behaviour (0.11.0 and Earlier)*

Before we added full support and use of bundles in the catalog, the user's .bom file was parsed and its items added to the catalog. The raw .bom file was discarded.

For upgrade/dependencies/versioning/usability reasons described in [1,2,3], this was a bad idea.


*## Reason the Current Behaviour is Bad!*

By auto-generating bundle names, we allow users to have a completely different mental model from what is actually happening in Brooklyn.

For simple cases (e.g. their .bom file only ever contains one item), that's fine.

However, it leads to surprising behaviour (and more complicated Brooklyn code), particularly when using snapshots or forced upgrade.

Consider a (developer) user writing a .bom file, with version 1.0.0-SNAPSHOT containing entities A and B. If the user modifies it and runs `br catalog add myfile.bom` then we successfully replace the old auto-generated bundle with this new one. However, if the user then deletes B (so the .bom contains only A) and does `catalog add` again, it's unclear to Brooklyn whether this is meant to be the same .bom file. You could argue that it should be forbidden (because if we kept the old .bom we'd end up with two different versions of A, and deleting B would be wrong if it was a different .bom).

The right thing in my opinion is to force the user to have the same mental model as Brooklyn does: they need to include a `bundle: ` line in their .bom file so they are explicit about what they are doing.

Note this does not force the user to understand OSGi/java; it just requires them to think in terms of a "versioned bundle" of catalog items.

Aled

[1] "Uploading ZIPs for a better dev workflow" dev@brooklyn email thread
[2] "Bundles in Brooklyn" dev@brooklyn email thread
[3] "Bundles of fun" dev@brooklyn email thread



Reply via email to