Public bug reported: Those are the current steps to load the plugins and extensions during the Neutron server initialization: 1) The plugins are loaded. The first one is the core plugin (ML2Plugin). During the initialization, the mechanism drivers are loaded [1].
2) The PluginAwareExtensionManager is instantiated [2]. It will load all extensions from the loaded plugins, first from the core one (ML2Plugin) and then the service plugins. The extensions are defined, per plugin (and the inherited classes), in "supported_extension_aliases". Some plugins, "Ml2Plugin" and "L3RouterPlugin", implement a non standard method (at least not defined in the ServicePluginBase abs class) to remove from the supported extensions list those ones not matching a defined criteria. 3) The PluginAwareExtensionManager extend the extension resources [3]. In this phase, some extensions will request the presence of other ones (get_required_extensions). If those requirements are not fulfilled, the server will exit with an exception. The proposal of this RFE is to add a step in this process, between (2) and (3): each plugin will be able to revisit the list of loaded extensions and unload gracefully those ones not needed. In this description I'm reducing the scope of this feature to just the ML2Plugin. This plugin will filter the extension list depending on the loaded mechanism drivers. If one extension is not supported by any loaded mechanism driver, it will be removed. This is very similar to the process done in (2) when "Ml2Plugin" or "L3RouterPlugin" remove those extensions not configured or not supported. In order to allow each mechanism driver to filter the loaded extensions, the mechanism driver will have two lists: - A list of supported extensions. - A list of not supported extensions. In some cases, it will be easier to maintain only this list of not supported extensions (could be shorter). If a mechanism driver does not have any of those lists populated (by default), the behavior will be current one, keeping backwards compatibility. [1]https://github.com/openstack/neutron/blob/13c5fc4ddd70aba7909f017f49b1047d2af1482b/neutron/plugins/ml2/managers.py#L428 [2]https://github.com/openstack/neutron/blob/a388701ddfe628e9a5bd16a78422164799b11ef8/neutron/pecan_wsgi/startup.py#L40 [3]https://github.com/openstack/neutron/blob/a388701ddfe628e9a5bd16a78422164799b11ef8/neutron/pecan_wsgi/startup.py#L41 ** Affects: neutron Importance: Undecided Status: New -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/1888829 Title: Improve core plugin extension filtering using the mechanism driver information Status in neutron: New Bug description: Those are the current steps to load the plugins and extensions during the Neutron server initialization: 1) The plugins are loaded. The first one is the core plugin (ML2Plugin). During the initialization, the mechanism drivers are loaded [1]. 2) The PluginAwareExtensionManager is instantiated [2]. It will load all extensions from the loaded plugins, first from the core one (ML2Plugin) and then the service plugins. The extensions are defined, per plugin (and the inherited classes), in "supported_extension_aliases". Some plugins, "Ml2Plugin" and "L3RouterPlugin", implement a non standard method (at least not defined in the ServicePluginBase abs class) to remove from the supported extensions list those ones not matching a defined criteria. 3) The PluginAwareExtensionManager extend the extension resources [3]. In this phase, some extensions will request the presence of other ones (get_required_extensions). If those requirements are not fulfilled, the server will exit with an exception. The proposal of this RFE is to add a step in this process, between (2) and (3): each plugin will be able to revisit the list of loaded extensions and unload gracefully those ones not needed. In this description I'm reducing the scope of this feature to just the ML2Plugin. This plugin will filter the extension list depending on the loaded mechanism drivers. If one extension is not supported by any loaded mechanism driver, it will be removed. This is very similar to the process done in (2) when "Ml2Plugin" or "L3RouterPlugin" remove those extensions not configured or not supported. In order to allow each mechanism driver to filter the loaded extensions, the mechanism driver will have two lists: - A list of supported extensions. - A list of not supported extensions. In some cases, it will be easier to maintain only this list of not supported extensions (could be shorter). If a mechanism driver does not have any of those lists populated (by default), the behavior will be current one, keeping backwards compatibility. [1]https://github.com/openstack/neutron/blob/13c5fc4ddd70aba7909f017f49b1047d2af1482b/neutron/plugins/ml2/managers.py#L428 [2]https://github.com/openstack/neutron/blob/a388701ddfe628e9a5bd16a78422164799b11ef8/neutron/pecan_wsgi/startup.py#L40 [3]https://github.com/openstack/neutron/blob/a388701ddfe628e9a5bd16a78422164799b11ef8/neutron/pecan_wsgi/startup.py#L41 To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/1888829/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : [email protected] Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp

