
The from_self() method in SQLAlchemy is currently being considered for removal from the library, with a deprecation phase throughout 1.4 and then removal by SQLAlchemy 2.0. The from_self() method takes an ORM query object, turns it into a subquery, then returns a new query object that will SELECT from that subquery, while transparently altering subsequent criteria added to the query to be stated in terms of the subquery. The current design direction of SQLAlchemy hopes to de-emphasize the "transparently altering criteria" part of the above use case, and to move users towards a more explicit and model of usage where a subquery should be created and used explicitly using the aliased() construct, which is now very mature and can be used in ways that were not available when from_self() was first introduced. On the SQLAlchemy side, from_self() has proven to be one of the most difficult features to maintain and test as it can easily lead to extremely complicated scenarios, and while I am also experimenting with some alternatives that may still retain some of the "automatic translation" features, those features are still proving to add similar internal complexity which is having me lean towards the original plan of removing open-ended "entity translation" features like that of from_self() at least through the start of the 2.0 series. A code search for all of Openstack shows that the two files modified here are the only usages of the from_self() method throughout all of searchable Openstack code. This speaks to the general obscurity of this method, although neutron's Subnet code is actually using this method as intended. The new approach necessarily changes some of the method signatures here so that the explicit "subquery" entity can be passed; code searches again show that these methods are not being called anywhere outside, so the query_filter_service_subnets method becomes the private _query_entity_service_subnets method. References: https://github.com/sqlalchemy/sqlalchemy/issues/5368 Closes-Bug: #2004263 Change-Id: Icec998873221ac8e6a1566a157b2044c1f6cd7f3
Neutron ML2 l2 population Mechanism Drivers l2 population (l2pop) mechanism drivers implements the ML2 driver to improve open source plugins overlay implementations (VXLAN with Linux bridge and GRE/VXLAN with OVS). This mechanism driver is implemented in ML2 to propagate the forwarding information among agents using a common RPC API. More informations could be found on the wiki page [1]. VXLAN Linux kernel: ------------------- The VXLAN Linux kernel module provide all necessary functionalities to populate the forwarding table and local ARP responder tables. This module appears on release 3.7 of the vanilla Linux kernel in experimental: - 3.8: first stable release, no edge replication (multicast necessary), - 3.9: edge replication only for the broadcasted packets, - 3.11: edge replication for broadcast, multicast and unknown packets. Note: Some distributions (like RHEL) have backported this module on precedent kernel version. OpenvSwitch: ------------ The OVS OpenFlow tables provide all of the necessary functionality to populate the forwarding table and local ARP responder tables. A wiki page describe how the flow tables did evolve on OVS agents: - [2] without local ARP responder - [3] with local ARP responder. /!\ This functionality is only available since the development branch 2.1. It's possible to disable (enable by default) it through the flag 'arp_responder'. /!\ Note: A difference persists between the LB and OVS agents when they are used with the l2-pop mechanism driver (and local ARP responder available). The LB agent will drop unknown unicast (VXLAN bridge mode), whereas the OVS agent will flood it. [1] https://wiki.openstack.org/wiki/L2population_blueprint [2] https://wiki.openstack.org/wiki/Ovs-flow-logic#OVS_flows_logic [3] https://wiki.openstack.org/wiki/Ovs-flow-logic#OVS_flows_logic_with_local_ARP_responder