Thinking about it I'm not convinced that breaking users blueprints is the best way to update their mental model. With a shift to use the CLI with catalog.bom in root and updating exemplar projects, and updating UI to reflect bundles, I expect we'll achieve this in a less disruptive way.

At minimum I don't think we should make it a breaking change to try to force a mental model switch until _we_ have:

* made catalog UI be bundle-centric (currently bundle name is shown but you can't navigate by bundles) * made composer be bundle-centric - at minimum including a bundle name in the template Brooklyn shows, but ideally more, allowing people to edit multiple resources in a bundle via the UI (else we aren't really operating on the new mental model)

We will also need a non-trivial amount of work to update tests probably the majority of which use anonymous bundles and many of which test aspects of anonymous bundles (and we'd have to be careful in updating/fixing tests to identify the latter ones).


Some halfway house measures would be to provide more obvious feedback to users when they install or use anonymous bundles:

* CLI and UI show the name of the bundle added, with a warning if it's an anonymous one (user can then easily delete and release with better name)
* UI show warnings on items from anonymous bundles


Also maybe it's worth adding a "strict" mode to Brooklyn, where in strict mode this is disabled (and other things, like persisting/rebinding anonymous types or other deprecated features). We could even persist this setting so new users work in strict mode but if you're rebinding you get non-strict mode.

Best
Alex


On 27/10/2017 08:16, Thomas Bouron wrote:
+1, this sounds sensible to me too.
I also vote in favor of making this a breaking change. With 1.0.0 coming, this is the perfect time to do it.

Best.

On Fri, 27 Oct 2017 at 08:06 Geoff Macartney <geoff.macart...@cloudsoft.io <mailto:geoff.macart...@cloudsoft.io>> wrote:

    +1 to your suggestion Aled.   Also I'd side with making it a breaking
    change, I prefer forcing that mental model.

    On Thu, 26 Oct 2017 at 13:12 Aled Sage <aled.s...@gmail.com
    <mailto:aled.s...@gmail.com>> wrote:

    > Alex,
    >
    > I say we break it - force the user to have the correct mental
    model for
    > 1.0.0!
    >
    > It's a simple one-line addition to fix a given .bom file. We should
    > obviously ensure that historic persisted state continues to work.
    >
    > ---
    >
    > Also note that our deprecation warnings are too hidden. For
    example, if
    > you do `br catalog add ...` then deprecation warnings will only be
    > visible via the Brooklyn log (rather than being returned to the
    user of
    > `br` or via the REST api).
    >
    > But that's a separate topic!
    >
    > Aled
    >
    >
    > On 26/10/2017 12:58, Alex Heneveld wrote:
    > >
    > > 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
    > >>
    > >>
    > >
    >
    >

--

Thomas Bouron • Senior Software Engineer @ Cloudsoft Corporation • https://cloudsoft.io/
Github: https://github.com/tbouron
Twitter: https://twitter.com/eltibouron

Reply via email to