<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Mar 21, 2015 at 8:31 AM, Monty Taylor <span dir="ltr"><<a href="mailto:mordred@inaugust.com" target="_blank">mordred@inaugust.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">On 03/21/2015 01:21 AM, Chris Friesen wrote:<br>
> Hi,<br>
><br>
> I've recently been playing around a bit with API microversions and I<br>
> noticed something that may be problematic.<br>
><br>
> The way microversions are handled, there is a monotonically increasing<br>
> MAX_API_VERSION value in "nova/api/openstack/api_version_request.py".<br>
> When you want to make a change you bump the minor version number and<br>
> it's yours. End-users can set the microversion number in the request to<br>
> indicate what they support, and all will be well.<br>
><br>
> The issue is that it doesn't allow for OpenStack providers to add their<br>
> own private microversion(s) to the API.  They can't just bump the<br>
> microversion internally because that will conflict with the next<br>
> microversion bump upstream (which could cause problems when they upgrade).<br>
><br>
> In terms of how to deal with this, it would be relatively simple to just<br>
> bump the major microversion number at the beginning of each new<br>
> release.  However, that would make it difficult to backport<br>
> bugfixes/features that use new microversions since they might overlap<br>
> with private microversions.<br>
><br>
> I think a better solution might be to expand the existing microversion<br>
> API to include a third digit which could be considered a "private"<br>
> microversion, and provide a way to check the third digit separate from<br>
> the other two.  That way providers would have a way to add custom<br>
> features in a backwards-compatible way without worrying about colliding<br>
> with upstream code.<br>
<br>
</span>I would vote that we not make this pleasant or easy for vendors who are<br>
wanting to add a feature to the API. As a person who uses several clouds<br>
daily, I can tell you that a vendor chosing to do that is VERY mean to<br>
users, and provides absolutely no value to anyone, other than allowing<br>
someone to make a divergent "differentiated" fork.<br>
<br>
Just don't do it. Seriously. It makes life very difficult for people<br>
trying to consume these things.<br>
<br>
The API is not the place for divergence.<br></blockquote><div><br></div><div>In fact we have made vendorization of the API hard on purpose, see the microversion spec for details: <a href="https://review.openstack.org/#/c/127127">https://review.openstack.org/#/c/127127</a></div><div> </div><div>To quote Jay Pipes from that review:</div><div><br></div><div><span style="color:rgb(0,0,0);font-family:sans-serif"><i>-1 for vendor flag</i></span></div><p style="color:rgb(0,0,0);font-family:sans-serif"><i>Recommend getting rid of the vendor: specification entirely. The point of standardizing our APIs is to make them standard, not to allow vendorization. API extensions were an idea designed (in part) to allow vendorization. And we've seen how that works out.</i></p><p style="color:rgb(0,0,0);font-family:sans-serif"><i>Let's take a hard stand and say "this is the OpenStack Compute API" and be done with it. If RAX or HP Cloud or Frobnozzle Cloud wants to have a separate but different API, then they should call it something else, because it's not the OpenStack Compute API</i></p><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class=""><div class="h5"><br>
<br>
__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</div></div></blockquote></div><br></div></div>