[openstack-dev] [all] the trouble with names
sean at dague.net
Thu Feb 4 14:49:49 UTC 2016
On 02/04/2016 09:35 AM, Anne Gentle wrote:
> On Thu, Feb 4, 2016 at 7:33 AM, Sean Dague <sean at dague.net
> <mailto:sean at dague.net>> wrote:
> On 02/04/2016 08:18 AM, Doug Hellmann wrote:
> > Excerpts from Hayes, Graham's message of 2016-02-04 12:54:56 +0000:
> >> On 04/02/2016 11:40, Sean Dague wrote:
> >>> A few issues have crept up recently with the service catalog, API
> >>> headers, API end points, and even similarly named resources in
> >>> different resources (e.g. backup), that are all circling around
> a key
> >>> problem. Distributed teams and naming collision.
> >>> Every OpenStack project has a unique name by virtue of having a git
> >>> tree. Once they claim 'openstack/foo', foo is theirs in the
> >>> OpenStack universe for all time (or until trademarks say otherwise).
> >>> Nova in OpenStack will always mean one project.
> >>> There has also been a desire to replace project names with
> >>> common/generic names, in the service catalog, API headers, and a few
> >>> other places. Nova owns 'compute'. Except... that's only because we
> >>> all know that it does. We don't *actually* have a registry for those
> >>> values.
> >>> So the code names are well regulated, the common names, that we
> >>> encourage use of, are not. Devstack in tree code defines some
> >>> conventions. However with the big tent, things get kind of squirely
> >>> pretty quickly. Congress registering 'policy' as their endpoint type
> >>> is a good example of that -
> >>> Naming is hard. And trying to boil down complicated state machines
> >>> to one or two word shiboliths means that inevitably we're going to
> >>> find some words just keep cropping up: policy, flavor, backup,
> >>> We do however need to figure out a way forward.
> >>> Lets start with the top level names (resource overlap cascades from
> >>> there).
> >>> What options do we have?
> >>> 1) Use the names we already have: nova, glance, swift, etc.
> >>> Upside, collision problem is solved. Downside, you need a secret
> >>> decoder ring to figure out what project does what.
> >>> 2) Have a registry of "common" names.
> >>> Upside, we can safely use common names everywhere and not fear
> >>> collision down the road.
> >>> Downside, yet another contention point.
> >>> A registry would clearly be under TC administration, though all the
> >>> heavy lifting might be handed over to the API working group. I still
> >>> imagine collision around some areas might be contentious.
> >> ++ to a central registry. It could easily be added to the
> >> file, and is a single source of truth.
> > Although I realized that the projects.yaml file only includes official
> > projects right now, which would mean new projects wouldn't have a
> > to register terms. Maybe that's a feature?
> It seems like it's a feature.
> That being said, projects.yaml is pretty full right now. And, it's not
> clear that common name <-> project name is a 1 to 1 mapping.
> For instance, Nova is getting very close to exposing a set of scheduler
> resources. For future proofing we would like to do that on a dedicated
> new endpoint from day one so that potential future split out of the code
> would not impact how APIs look in the service catalog or to consumers.
> There would be no need to have proxy apis in Nova for compatibility in
> the future.
> So this feels like a separate registry for service common name, which
> maps N -> 1 to a project.
> Project names should not be exposed to end users.
> Maybe the service names belong in an example, vetted service catalog as
> a place to look to see if your name is already taken. I sense we have to
> first start with endpoints, then move to the resources, and honestly I
> feel lately "let the best API design win." For example, with PayPal and
> Stripe, there are differentiators that would cause a dev to choose one
> over another. PayPal has a /payments resource and Stripe has a /charges
> resource. Those resources are where some of the conflict is starting to
> be seen for us in OpenStack with backups. If we expect end users to use
> the whole cloud then we need to outline the resources that are reserved
> already to avoid end-user confusion. Believe me, I document this stuff,
> and I know it's difficult to understand. We have to advocate for our end
> users now, today, here.
> For the schedule example, is it the Compute endpoint that intakes the
> scheduling operations? Or is there a new endpoint?
The intent is a new dedicated endpoint, to ensure an easy migration to
any future dedicated code base.
More information about the OpenStack-dev