<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 22 June 2017 at 17:24, Édouard Thuleau <span dir="ltr"><<a href="mailto:edouard.thuleau@gmail.com" target="_blank">edouard.thuleau@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Armando,<br>
<br>
I did not opened any bug report. But if a core plugin implements only<br>
the NeutronPluginBaseV2 interface [1] and not the NeutronDbPluginV2<br>
interface [2], most of the service plugins of that list will be<br>
initialized without any errors (only the timestamp plugin fails to<br>
initialize because it tries to do DB stuff in its constructor [3]).<br>
And all API extensions of that service plugins are listed as supported<br>
but none of them works. Resources are not extended (tag, revision,<br>
auto-allocate) or some API extensions returns 404<br>
(network-ip-availability or flavors).<br>
<br>
What I proposed, is to improve all that service plugins of that list<br>
to be able to support pluggable backend drivers (thanks to the Neutron<br>
service driver mechanism [4]) and uses by default a driver based on<br>
the Neutron DB(like it's implemented actually). That will permits core<br>
plugin which not implements the Neutron DB model to provide its own<br>
driver. But until all service plugins will be fixed, I proposed a<br>
workaround to disable them.<br></blockquote><div><br></div><div>I would recommend against the workaround of disabling them because of the stated rationale.</div><div><br></div><div>Can you open a bug report, potentially when you're ready to file a fix (or enable someone else to take ownership of the fix)? This way we can have a more effective conversation either on the bug report or code review.</div><div><br></div><div>Thanks,</div><div>Armando </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
[1] <a href="https://github.com/openstack/neutron/blob/master/neutron/neutron_plugin_base_v2.py#L30" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>neutron_plugin_base_v2.py#L30</a><br>
[2] <a href="https://github.com/openstack/neutron/blob/master/neutron/db/db_base_plugin_v2.py#L124" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>db/db_base_plugin_v2.py#L124</a><br>
[3] <a href="https://github.com/openstack/neutron/blob/master/neutron/services/timestamp/timestamp_plugin.py#L32" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>services/timestamp/timestamp_<wbr>plugin.py#L32</a><br>
[4] <a href="https://github.com/openstack/neutron/blob/master/neutron/services/service_base.py#L27" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>services/service_base.py#L27</a><br>
<span class="HOEnZb"><font color="#888888"><br>
Édouard.<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Thu, Jun 22, 2017 at 12:29 AM, Armando M. <<a href="mailto:armamig@gmail.com">armamig@gmail.com</a>> wrote:<br>
><br>
><br>
> On 21 June 2017 at 17:40, Édouard Thuleau <<a href="mailto:edouard.thuleau@gmail.com">edouard.thuleau@gmail.com</a>> wrote:<br>
>><br>
>> Hi,<br>
>><br>
>> @Chaoyi,<br>
>> I don't want to change the core plugin interface. But I'm not sure we<br>
>> are talking about the same interface. I had a very quick look into the<br>
>> tricycle code and I think it uses the NeutronDbPluginV2 interface [1]<br>
>> which implements the Neutron DB model. Our Contrail Neutron plugin<br>
>> implements the NeutronPluginBaseV2 interface [2]. Anyway,<br>
>> NeutronDbPluginV2 is inheriting from NeutronPluginBaseV2 [3].<br>
>> Thanks for the pointer to the stadium paragraph.<br>
><br>
><br>
> Is there any bug report that captures the actual error you're facing? Out of<br>
> the list of plugins that have been added to that list over time, most work<br>
> just exercising the core plugin API, and we can look into the ones that<br>
> don't to figure out whether we overlooked some design abstractions during<br>
> code review.<br>
><br>
>><br>
>><br>
>> @Kevin,<br>
>> Service plugins loaded by default are defined in a contant list [4]<br>
>> and I don't see how I can remove a default service plugin to be loaded<br>
>> [5].<br>
>><br>
>> [1]<br>
>> <a href="https://github.com/openstack/tricircle/blob/master/tricircle/network/central_plugin.py#L128" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>tricircle/blob/master/<wbr>tricircle/network/central_<wbr>plugin.py#L128</a><br>
>> [2]<br>
>> <a href="https://github.com/Juniper/contrail-neutron-plugin/blob/master/neutron_plugin_contrail/plugins/opencontrail/contrail_plugin_base.py#L113" rel="noreferrer" target="_blank">https://github.com/Juniper/<wbr>contrail-neutron-plugin/blob/<wbr>master/neutron_plugin_<wbr>contrail/plugins/opencontrail/<wbr>contrail_plugin_base.py#L113</a><br>
>> [3]<br>
>> <a href="https://github.com/openstack/neutron/blob/master/neutron/db/db_base_plugin_v2.py#L125" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>db/db_base_plugin_v2.py#L125</a><br>
>> [4]<br>
>> <a href="https://github.com/openstack/neutron/blob/master/neutron/plugins/common/constants.py#L43" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>plugins/common/constants.py#<wbr>L43</a><br>
>> [5]<br>
>> <a href="https://github.com/openstack/neutron/blob/master/neutron/manager.py#L190" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>manager.py#L190</a><br>
>><br>
>> Édouard.<br>
>><br>
>> On Wed, Jun 21, 2017 at 11:22 AM, Kevin Benton <kevin@benton.pub> wrote:<br>
>> > Why not just delete the service plugins you don't support from the<br>
>> > default<br>
>> > plugins dict?<br>
>> ><br>
>> > On Wed, Jun 21, 2017 at 1:45 AM, Édouard Thuleau<br>
>> > <<a href="mailto:edouard.thuleau@gmail.com">edouard.thuleau@gmail.com</a>><br>
>> > wrote:<br>
>> >><br>
>> >> Ok, we would like to help on that. How we can start?<br>
>> >><br>
>> >> I think the issue I raise in that thread must be the first point to<br>
>> >> address and my second proposition seems to be the correct one. What do<br>
>> >> you think?<br>
>> >> But it will needs some time and not sure we'll be able to fix all<br>
>> >> service plugins loaded by default before the next Pike release.<br>
>> >><br>
>> >> I like to propose a workaround until all default service plugins will<br>
>> >> be compatible with non-DB core plugins. We can continue to load that<br>
>> >> default service plugins list but authorizing a core plugin to disable<br>
>> >> it completely with a private attribut on the core plugin class like<br>
>> >> it's done for bulk/pagination/sorting operations.<br>
>> >><br>
>> >> Of course, we need to add the ability to report any regression on<br>
>> >> that. I think unit tests will help and we can also work on a<br>
>> >> functional test based on a fake non-DB core plugin.<br>
>> >><br>
>> >> Regards,<br>
>> >> Édouard.<br>
>> >><br>
>> >> On Tue, Jun 20, 2017 at 12:09 AM, Kevin Benton <kevin@benton.pub><br>
>> >> wrote:<br>
>> >> > The issue is mainly developer resources. Everyone currently working<br>
>> >> > upstream<br>
>> >> > doesn't have the bandwidth to keep adding/reviewing the layers of<br>
>> >> > interfaces<br>
>> >> > to make the DB optional that go untested. (None of the projects that<br>
>> >> > would<br>
>> >> > use them run a CI system that reports results on Neutron patches.)<br>
>> >> ><br>
>> >> > I think we can certainly accept patches to do the things you are<br>
>> >> > proposing,<br>
>> >> > but there is no guarantee that it won't regress to being DB-dependent<br>
>> >> > until<br>
>> >> > there is something reporting results back telling us when it breaks.<br>
>> >> ><br>
>> >> > So it's not that the community is against non-DB core plugins, it's<br>
>> >> > just<br>
>> >> > that the people developing those plugins don't participate in the<br>
>> >> > community<br>
>> >> > to ensure they work.<br>
>> >> ><br>
>> >> > Cheers<br>
>> >> ><br>
>> >> ><br>
>> >> > On Mon, Jun 19, 2017 at 2:15 AM, Édouard Thuleau<br>
>> >> > <<a href="mailto:edouard.thuleau@gmail.com">edouard.thuleau@gmail.com</a>><br>
>> >> > wrote:<br>
>> >> >><br>
>> >> >> Oops, sent too fast, sorry. I try again.<br>
>> >> >><br>
>> >> >> Hi,<br>
>> >> >><br>
>> >> >> Since Mitaka release, a default service plugins list is loaded when<br>
>> >> >> Neutron<br>
>> >> >> server starts [1]. That list is not editable and was extended with<br>
>> >> >> few<br>
>> >> >> services<br>
>> >> >> [2]. But all of them rely on the Neutron DB model.<br>
>> >> >><br>
>> >> >> If a core driver is not based on the ML2 core plugin framework or<br>
>> >> >> not<br>
>> >> >> based on<br>
>> >> >> the 'neutron.db.models_v2' class, all that service plugins will not<br>
>> >> >> work.<br>
>> >> >><br>
>> >> >> So my first question is Does Neutron still support core plugin not<br>
>> >> >> based<br>
>> >> >> on ML2<br>
>> >> >> or 'neutron.db.models_v2' class?<br>
>> >> >><br>
>> >> >> If yes, I would like to propose two solutions:<br>
>> >> >> - permits core plugin to overload the service plugin class by it's<br>
>> >> >> own<br>
>> >> >> implementation and continuing to use the actual Neutron db based<br>
>> >> >> services<br>
>> >> >> as<br>
>> >> >> default.<br>
>> >> >> - modifying all default plugin service to use service plugin driver<br>
>> >> >> framework [3], and set the actual Neutron db based implementation as<br>
>> >> >> default driver for services. That permits to core drivers not based<br>
>> >> >> on<br>
>> >> >> the<br>
>> >> >> Neutron DB to specify a driver. We can see that solution was adopted<br>
>> >> >> in<br>
>> >> >> the<br>
>> >> >> networking-bgpvpn project, where can find two abstract driver<br>
>> >> >> classes,<br>
>> >> >> one<br>
>> >> >> for<br>
>> >> >> core driver based on Neutron DB model [4] and one used by core<br>
>> >> >> driver<br>
>> >> >> not<br>
>> >> >> based<br>
>> >> >> on the DB [5] as the Contrail driver [6].<br>
>> >> >><br>
>> >> >> [1]<br>
>> >> >><br>
>> >> >><br>
>> >> >> <a href="https://github.com/openstack/neutron/commit/aadf2f30f84dff3d85f380a7ff4e16dbbb0c6bb0#diff-9169a6595980d19b2649d5bedfff05ce" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/commit/<wbr>aadf2f30f84dff3d85f380a7ff4e16<wbr>dbbb0c6bb0#diff-<wbr>9169a6595980d19b2649d5bedfff05<wbr>ce</a><br>
>> >> >> [2]<br>
>> >> >><br>
>> >> >><br>
>> >> >> <a href="https://github.com/openstack/neutron/blob/master/neutron/plugins/common/constants.py#L43" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>plugins/common/constants.py#<wbr>L43</a><br>
>> >> >> [3]<br>
>> >> >><br>
>> >> >><br>
>> >> >> <a href="https://github.com/openstack/neutron/blob/master/neutron/services/service_base.py#L27" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>services/service_base.py#L27</a><br>
>> >> >> [4]<br>
>> >> >><br>
>> >> >><br>
>> >> >> <a href="https://github.com/openstack/networking-bgpvpn/blob/master/networking_bgpvpn/neutron/services/service_drivers/driver_api.py#L226" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>networking-bgpvpn/blob/master/<wbr>networking_bgpvpn/neutron/<wbr>services/service_drivers/<wbr>driver_api.py#L226</a><br>
>> >> >> [5]<br>
>> >> >><br>
>> >> >><br>
>> >> >> <a href="https://github.com/openstack/networking-bgpvpn/blob/master/networking_bgpvpn/neutron/services/service_drivers/driver_api.py#L23" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>networking-bgpvpn/blob/master/<wbr>networking_bgpvpn/neutron/<wbr>services/service_drivers/<wbr>driver_api.py#L23</a><br>
>> >> >> [6]<br>
>> >> >><br>
>> >> >><br>
>> >> >> <a href="https://github.com/Juniper/contrail-neutron-plugin/blob/master/neutron_plugin_contrail/plugins/opencontrail/networking_bgpvpn/contrail.py#L36" rel="noreferrer" target="_blank">https://github.com/Juniper/<wbr>contrail-neutron-plugin/blob/<wbr>master/neutron_plugin_<wbr>contrail/plugins/opencontrail/<wbr>networking_bgpvpn/contrail.py#<wbr>L36</a><br>
>> >> >><br>
>> >> >> Regards,<br>
>> >> >> Édouard.<br>
>> >> >><br>
>> >> >> On Mon, Jun 19, 2017 at 10:47 AM, Édouard Thuleau<br>
>> >> >> <<a href="mailto:edouard.thuleau@gmail.com">edouard.thuleau@gmail.com</a>> wrote:<br>
>> >> >> > Hi,<br>
>> >> >> > Since Mitaka release [1], a default service plugins list is loaded<br>
>> >> >> > when Neutron server starts. That list is not editable and was<br>
>> >> >> > extended<br>
>> >> >> > with few services [2]. But none of th<br>
>> >> >> ><br>
>> >> >> > [1]<br>
>> >> >> ><br>
>> >> >> ><br>
>> >> >> > <a href="https://github.com/openstack/neutron/commit/aadf2f30f84dff3d85f380a7ff4e16dbbb0c6bb0#diff-9169a6595980d19b2649d5bedfff05ce" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/commit/<wbr>aadf2f30f84dff3d85f380a7ff4e16<wbr>dbbb0c6bb0#diff-<wbr>9169a6595980d19b2649d5bedfff05<wbr>ce</a><br>
>> >> >> > [2]<br>
>> >> >> ><br>
>> >> >> ><br>
>> >> >> > <a href="https://github.com/openstack/neutron/blob/master/neutron/plugins/common/constants.py#L43" rel="noreferrer" target="_blank">https://github.com/openstack/<wbr>neutron/blob/master/neutron/<wbr>plugins/common/constants.py#<wbr>L43</a><br>
>> >> >><br>
>> >> >><br>
>> >> >><br>
>> >> >> ______________________________<wbr>______________________________<wbr>______________<br>
>> >> >> OpenStack Development Mailing List (not for usage questions)<br>
>> >> >> Unsubscribe:<br>
>> >> >> <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
>> >> >> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
>> >> ><br>
>> >> ><br>
>> >> ><br>
>> >> ><br>
>> >> ><br>
>> >> > ______________________________<wbr>______________________________<wbr>______________<br>
>> >> > OpenStack Development Mailing List (not for usage questions)<br>
>> >> > Unsubscribe:<br>
>> >> > <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
>> >> > <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
>> >> ><br>
>> ><br>
>> ><br>
>><br>
>> ______________________________<wbr>______________________________<wbr>______________<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.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
><br>
><br>
><br>
> ______________________________<wbr>______________________________<wbr>______________<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.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
><br>
<br>
______________________________<wbr>______________________________<wbr>______________<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.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
</div></div></blockquote></div><br></div></div>