<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 4, 2016 at 7:33 AM, Sean Dague <span dir="ltr"><<a href="mailto:sean@dague.net" target="_blank">sean@dague.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 02/04/2016 08:18 AM, Doug Hellmann wrote:<br>
> Excerpts from Hayes, Graham's message of 2016-02-04 12:54:56 +0000:<br>
>> On 04/02/2016 11:40, Sean Dague wrote:<br>
>>> A few issues have crept up recently with the service catalog, API<br>
>>> headers, API end points, and even similarly named resources in<br>
>>> different resources (e.g. backup), that are all circling around a key<br>
>>> problem. Distributed teams and naming collision.<br>
>>><br>
>>> Every OpenStack project has a unique name by virtue of having a git<br>
>>> tree. Once they claim 'openstack/foo', foo is theirs in the<br>
>>> OpenStack universe for all time (or until trademarks say otherwise).<br>
>>> Nova in OpenStack will always mean one project.<br>
>>><br>
>>> There has also been a desire to replace project names with<br>
>>> common/generic names, in the service catalog, API headers, and a few<br>
>>> other places. Nova owns 'compute'. Except... that's only because we<br>
>>> all know that it does. We don't *actually* have a registry for those<br>
>>> values.<br>
>>><br>
>>> So the code names are well regulated, the common names, that we<br>
>>> encourage use of, are not. Devstack in tree code defines some<br>
>>> conventions. However with the big tent, things get kind of squirely<br>
>>> pretty quickly. Congress registering 'policy' as their endpoint type<br>
>>> is a good example of that -<br>
>>> <a href="https://github.com/openstack/congress/blob/master/devstack/plugin.sh#L147" rel="noreferrer" target="_blank">https://github.com/openstack/congress/blob/master/devstack/plugin.sh#L147</a><br>
>>><br>
>>>  Naming is hard. And trying to boil down complicated state machines<br>
>>> to one or two word shiboliths means that inevitably we're going to<br>
>>> find some words just keep cropping up: policy, flavor, backup, meter.<br>
>>> We do however need to figure out a way forward.<br>
>>><br>
>>> Lets start with the top level names (resource overlap cascades from<br>
>>> there).<br>
>>><br>
>>> What options do we have?<br>
>>><br>
>>> 1) Use the names we already have: nova, glance, swift, etc.<br>
>>><br>
>>> Upside, collision problem is solved. Downside, you need a secret<br>
>>> decoder ring to figure out what project does what.<br>
>>><br>
>>> 2) Have a registry of "common" names.<br>
>>><br>
>>> Upside, we can safely use common names everywhere and not fear<br>
>>> collision down the road.<br>
>>><br>
>>> Downside, yet another contention point.<br>
>>><br>
>>> A registry would clearly be under TC administration, though all the<br>
>>> heavy lifting might be handed over to the API working group. I still<br>
>>> imagine collision around some areas might be contentious.<br>
>><br>
>> ++ to a central registry. It could easily be added to the projects.yaml<br>
>> file, and is a single source of truth.<br>
><br>
> Although I realized that the projects.yaml file only includes official<br>
> projects right now, which would mean new projects wouldn't have a place<br>
> to register terms. Maybe that's a feature?<br>
<br>
</div></div>It seems like it's a feature.<br>
<br>
That being said, projects.yaml is pretty full right now. And, it's not<br>
clear that common name <-> project name is a 1 to 1 mapping.<br>
<br>
For instance, Nova is getting very close to exposing a set of scheduler<br>
resources. For future proofing we would like to do that on a dedicated<br>
new endpoint from day one so that potential future split out of the code<br>
would not impact how APIs look in the service catalog or to consumers.<br>
There would be no need to have proxy apis in Nova for compatibility in<br>
the future.<br>
<br>
So this feels like a separate registry for service common name, which<br>
maps N -> 1 to a project.<br></blockquote><div><br></div><div>Project names should not be exposed to end users.</div><div><br></div><div>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.</div><div><br></div><div>For the schedule example, is it the Compute endpoint that intakes the scheduling operations? Or is there a new endpoint?</div><div><br></div><div>API design and developer experience must become our first thought.</div><div><br></div><div>Anne</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="im HOEnZb"><br>
        -Sean<br>
<br>
--<br>
Sean Dague<br>
<a href="http://dague.net" rel="noreferrer" target="_blank">http://dague.net</a><br>
<br>
</span><div class="HOEnZb"><div class="h5">__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Anne Gentle</div><div>Rackspace</div><div>Principal Engineer</div><div><a href="http://www.justwriteclick.com" target="_blank">www.justwriteclick.com</a></div></div></div>
</div></div>