<div dir="ltr">2015-10-23 11:36 GMT+02:00 Igor Kalnitsky <span dir="ltr"><<a href="mailto:ikalnitsky@mirantis.com" target="_blank">ikalnitsky@mirantis.com</a>></span>:<br><div><div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Roman, Vitaly,<br>
<br>
You're both saying right things, and you guys bring a sore topic up again.<br>
<br>
The thing is that Nailgun's API isn't the best one.. but we're trying<br>
to improve it step-by-step, from release to release. We have so many<br>
things to reconsider and to fix that it'd require a huge effort to<br>
make backward compatible changes and support it. So we decided ignore<br>
backward compatibility for clients for awhile and consider our API as<br>
unstable.<br>
<br>
I agree with Roman that such changes must not be made secretly, and we<br>
should at least announce about them. Moreover, every core must think<br>
about consequences before approving them.<br>
<br>
So I propose to do the following things when backward incompatible<br>
change to API is required:<br>
<br>
* Announce this change in openstack-dev ML.<br>
* Wait 1 week before approving it, so anyone can prepare.<br>
* Change author has to work with QA in order make sure they are<br>
prepared for this change.<br>
<br>
Any thoughts?<br></blockquote><div><br><br></div><div>+1.<br><br>Although there is one thing that you didn't mention (but probably everyone know about it)<br></div><div>is to solve the issue with fuelclient not beign tested against changes in nailgun.<br></div><div>We need not only run it for every change in nailgun (or for only those that touch files under "api"<br></div><div>dir) but also cover more endpoints with fuelclient tests against real API, not mocks, to discover<br></div><div>such issues earlier.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thanks,<br>
Igor<br>
<div class="HOEnZb"><div class="h5"><br>
On Wed, Oct 21, 2015 at 5:24 PM, Vitaly Kramskikh<br>
<<a href="mailto:vkramskikh@mirantis.com">vkramskikh@mirantis.com</a>> wrote:<br>
> JFYI: (re-)start of this discussion was instigated by merge of this change<br>
> (and here is revert).<br>
><br>
> And this is actually not the first time when we make backward incompatible<br>
> changes in our API. AFAIR, the last time it was also about the network<br>
> configuration handler. We decided not to consider our API frozen, make the<br>
> changes and break backward compatibility. So now is the time to reconsider<br>
> this.<br>
><br>
> API backward compatibility is a must for good software, but we also need to<br>
> understand that introducing API versioning is not that easy and will<br>
> increase efforts needed to make new changes in nailgun.<br>
><br>
> I'd go this way:<br>
><br>
> Estimate the priority of introducing API versioning - maybe we have other<br>
> things we should invest our resources to<br>
> Estimate all the disadvantages this decision might have<br>
> Fix all the issues in the current API (like this one)<br>
> Implement API versioning support (yes, we don't have this mechanism yet, so<br>
> we can't just "bump API version" like Sergii suggested in another thread)<br>
> Consider the current API as frozen v1, so backward incompatible changes (or<br>
> maybe all the changes?) should go to v2<br>
><br>
><br>
> 2015-10-21 20:25 GMT+07:00 Roman Prykhodchenko <<a href="mailto:me@romcheg.me">me@romcheg.me</a>>:<br>
>><br>
>> Hi folks,<br>
>><br>
>> I’d like to touch the aspect of Fuel development process that seems to be<br>
>> as wrong as possible. That aspect is how we change the API.<br>
>><br>
>> The issue is that in Fuel anyone can change API at any point of time<br>
>> without even warning the rest of the same component’s team. Relying on this<br>
>> kind of API is basically impossible. We constantly have problems when even<br>
>> components of Fuel stop working due to unexpected changes in the API.<br>
>> Thinking about another software that must be integrated with Fuel is hardly<br>
>> possible with the current approach.<br>
>><br>
>> As for a grown-up project there is a strong need for Fuel in general and<br>
>> for Nailgun in particular to work on a policy for making changes to their<br>
>> APIs. Living in OpenStack ecosystem we must at least take a look how it’s<br>
>> done in its components and try to do something similar. After working with<br>
>> Nova, Keystone, Ironic and other components I would propose to start with<br>
>> the following: let’s not make any changes to the API. Instead, let’s create<br>
>> a new version of Nailgun’s API that will appear in Fuel 8.0 and make all the<br>
>> changes there. That is the thing that will instantaneously make lives of<br>
>> other components much easier, if we make it now.<br>
>><br>
>> After doing the essential part let’s think about how we are going to live<br>
>> with that in the future. There are several APIs in Fuel, the rest of the<br>
>> email is only touching Nailgun’s REST API. I can see the things somehow like<br>
>> the following:<br>
>><br>
>>  - Introduce API documentation by embedding Swagger and Swagger UI.<br>
>>    The current approach when we leave API docs for documentation team is<br>
>> not effective. Swagger generates the documentation and resolves this issue.<br>
>>  - After releasing a version of Fuel, it’s API is called stable and frozen<br>
>> for any changes, unless they allign API to the documentation or<br>
>> documentation to the API.<br>
>>  - All changes to a stable APIs must be backported to the stable version<br>
>> of Fuel that introduced the corresponding API.<br>
>>  - In order to guarantee that a stable API is not changed, Jenkins jobs<br>
>> should make automatic checks for every new patch set<br>
>><br>
>> Details about all the above mentioned proposals can be discussed in<br>
>> separate threads so this one will stay uncluttered. I'd like to also summon<br>
>> those OpenStack folks, who tried to resolve the same issue and ask them<br>
>> about any common solutions in the ecosystem.<br>
>><br>
>><br>
>> - romcheg<br>
>><br>
>><br>
>><br>
>><br>
>><br>
>> __________________________________________________________________________<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>
>><br>
><br>
><br>
><br>
> --<br>
> Vitaly Kramskikh,<br>
> Fuel UI Tech Lead,<br>
> Mirantis, Inc.<br>
><br>
> __________________________________________________________________________<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>
><br>
<br>
__________________________________________________________________________<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></div></div></div></div>