)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"918bfde2f90f8d4157f86d2094ba044ada58f4ac","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP: Convert core plugin to ML2 mechanism driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch set converts networking-ovn from a core"},{"line_number":10,"context_line":"plugin to an ML2 mechanism driver."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"WIP Status:"},{"line_number":13,"context_line":"- Basic DevStack deployment will use ML2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"dab17558_773b1b39","line":10,"updated":"2016-05-09 04:07:37.000000000","message":"From devstack/override-defaults and devstack/plugin.sh, I think this patch set is to enable networking-ovn as ML2 mechanism driver, not totally converting, or is this just the first step for that?","commit_id":"93c98afe53f8892ab3a369c28cd489d64e3cf3da"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"7e363076a0168247eb2dbe685f71778c5d1bf1a4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP: Convert core plugin to ML2 mechanism driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch set converts networking-ovn from a core"},{"line_number":10,"context_line":"plugin to an ML2 mechanism driver."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"WIP Status:"},{"line_number":13,"context_line":"- Basic DevStack deployment will use ML2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"dab17558_f9224b00","line":10,"in_reply_to":"dab17558_773b1b39","updated":"2016-05-09 15:07:19.000000000","message":"This is a work-in-progress.  I\u0027ve asked the networking-ovn cores about whether or not we want to do the conversion in a single patch set.  Depending on the responses, we\u0027ll adjust this patch set accordingly.","commit_id":"93c98afe53f8892ab3a369c28cd489d64e3cf3da"}],"devstack/override-defaults":[{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"ddce097ddda6ff86976510408454cbfb5d56a410","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Enable the OVN as either a core plugin (default) or an"},{"line_number":2,"context_line":"# ML2 mechanism driver.  Include the logger to assist with"},{"line_number":3,"context_line":"# development and debugging, but it\u0027s not required."},{"line_number":4,"context_line":"#Q_PLUGIN\u003d\"ovn\""},{"line_number":5,"context_line":"Q_ML2_PLUGIN_MECHANISM_DRIVERS\u003dovn,logger"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"if [[ \"$Q_PLUGIN\" \u003d\u003d \"ovn\" ]]; then"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a122d0e_ec8c2f82","line":4,"updated":"2016-05-04 20:20:37.000000000","message":"Don\u0027t you want Q_PLUGIN to be defined (default) for now ?","commit_id":"d3fdee728698426a86dc6c094bc9b736c13cf370"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"6cc0e9834330988f955d97b83b8cdbd2d385c30a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Enable the OVN as either a core plugin (default) or an"},{"line_number":2,"context_line":"# ML2 mechanism driver.  Include the logger to assist with"},{"line_number":3,"context_line":"# development and debugging, but it\u0027s not required."},{"line_number":4,"context_line":"#Q_PLUGIN\u003d\"ovn\""},{"line_number":5,"context_line":"Q_ML2_PLUGIN_MECHANISM_DRIVERS\u003dovn,logger"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"if [[ \"$Q_PLUGIN\" \u003d\u003d \"ovn\" ]]; then"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a122d0e_72e3d6d8","line":4,"in_reply_to":"1a122d0e_ec8c2f82","updated":"2016-05-04 21:23:56.000000000","message":"I actually want to tests the changes as we go and use ML2 for this WIP patch set.","commit_id":"d3fdee728698426a86dc6c094bc9b736c13cf370"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"ddce097ddda6ff86976510408454cbfb5d56a410","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# ML2 mechanism driver.  Include the logger to assist with"},{"line_number":3,"context_line":"# development and debugging, but it\u0027s not required."},{"line_number":4,"context_line":"#Q_PLUGIN\u003d\"ovn\""},{"line_number":5,"context_line":"Q_ML2_PLUGIN_MECHANISM_DRIVERS\u003dovn,logger"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"if [[ \"$Q_PLUGIN\" \u003d\u003d \"ovn\" ]]; then"},{"line_number":8,"context_line":"    function neutron_plugin_configure_common {"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a122d0e_0ceecb21","line":5,"updated":"2016-05-04 20:20:37.000000000","message":"Shouldn\u0027t this be commented out until we get more of the mechanism driver in place.","commit_id":"d3fdee728698426a86dc6c094bc9b736c13cf370"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"6cc0e9834330988f955d97b83b8cdbd2d385c30a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# ML2 mechanism driver.  Include the logger to assist with"},{"line_number":3,"context_line":"# development and debugging, but it\u0027s not required."},{"line_number":4,"context_line":"#Q_PLUGIN\u003d\"ovn\""},{"line_number":5,"context_line":"Q_ML2_PLUGIN_MECHANISM_DRIVERS\u003dovn,logger"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"if [[ \"$Q_PLUGIN\" \u003d\u003d \"ovn\" ]]; then"},{"line_number":8,"context_line":"    function neutron_plugin_configure_common {"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a122d0e_92ce7258","line":5,"in_reply_to":"1a122d0e_0ceecb21","updated":"2016-05-04 21:23:56.000000000","message":"See above.","commit_id":"d3fdee728698426a86dc6c094bc9b736c13cf370"}],"devstack/plugin.sh":[{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"7d5e3d9d3db6221bbf67717847677d92e10e09d9","unresolved":false,"context_lines":[{"line_number":143,"context_line":"             print \",\".join(extensions.SUPPORTED_API_EXTENSIONS)\u0027)"},{"line_number":144,"context_line":"        NEUTRON_CONF\u003d/etc/neutron/neutron.conf"},{"line_number":145,"context_line":"        iniset $NEUTRON_CONF ovn ovsdb_connection \"$OVN_NB_REMOTE\""},{"line_number":146,"context_line":"        iniset $NEUTRON_CONF ovn ovn_l3_mode \"$OVN_L3_MODE\""},{"line_number":147,"context_line":"    fi"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    if is_service_enabled q-l3 ; then"}],"source_content_type":"text/x-sh","patch_set":17,"id":"dab17558_447fb5df","line":146,"updated":"2016-05-11 14:29:52.000000000","message":"For the L3 stuff, do we not need an L3 service plugin as well?","commit_id":"b4154c2fe660811e7ea1b1e54c1d8908ebcaeebc"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"e372088c5b61343b1310da97d980167d1db3e28e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"             print \",\".join(extensions.SUPPORTED_API_EXTENSIONS)\u0027)"},{"line_number":144,"context_line":"        NEUTRON_CONF\u003d/etc/neutron/neutron.conf"},{"line_number":145,"context_line":"        iniset $NEUTRON_CONF ovn ovsdb_connection \"$OVN_NB_REMOTE\""},{"line_number":146,"context_line":"        iniset $NEUTRON_CONF ovn ovn_l3_mode \"$OVN_L3_MODE\""},{"line_number":147,"context_line":"    fi"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    if is_service_enabled q-l3 ; then"}],"source_content_type":"text/x-sh","patch_set":17,"id":"dab17558_1f394542","line":146,"in_reply_to":"dab17558_447fb5df","updated":"2016-05-12 11:41:30.000000000","message":"Thanks for the reminder Kyle.  Yes, we\u0027ll need L3 stuff.  It is on our TODO list.","commit_id":"b4154c2fe660811e7ea1b1e54c1d8908ebcaeebc"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"7b7a9ecdd62021342135c9ec377092ab6831ae0e","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"# Whether to enable using OVN\u0027s L3 functionality. If this value is disabled,"},{"line_number":64,"context_line":"# OpenStack will use q-l3 functionality."},{"line_number":65,"context_line":"OVN_L3_MODE\u003d$(trueorfalse True OVN_L3_MODE)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# Whether or not to build the openvswitch kernel module from ovs.  This is required"},{"line_number":68,"context_line":"# unless the distro kernel includes ovs+conntrack support."}],"source_content_type":"text/x-sh","patch_set":33,"id":"dab17558_15df980d","side":"PARENT","line":65,"updated":"2016-05-17 14:54:06.000000000","message":"Why was this removed?   This property is used on L140.","commit_id":"40868ac1ea55a1898614f83e14c9e4922e583761"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9b5d90d8673d3827491ae1693f6407efacdfbe51","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"# Whether to enable using OVN\u0027s L3 functionality. If this value is disabled,"},{"line_number":64,"context_line":"# OpenStack will use q-l3 functionality."},{"line_number":65,"context_line":"OVN_L3_MODE\u003d$(trueorfalse True OVN_L3_MODE)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# Whether or not to build the openvswitch kernel module from ovs.  This is required"},{"line_number":68,"context_line":"# unless the distro kernel includes ovs+conntrack support."}],"source_content_type":"text/x-sh","patch_set":33,"id":"dab17558_c419dcd2","side":"PARENT","line":65,"in_reply_to":"dab17558_15df980d","updated":"2016-05-17 15:03:01.000000000","message":"This was moved to override-defaults","commit_id":"40868ac1ea55a1898614f83e14c9e4922e583761"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"7b7a9ecdd62021342135c9ec377092ab6831ae0e","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        iniset $NEUTRON_CONF DEFAULT core_plugin \"$Q_PLUGIN_CLASS\""},{"line_number":147,"context_line":"        iniset $NEUTRON_CONF DEFAULT service_plugins \"qos\""},{"line_number":148,"context_line":"        iniset $Q_PLUGIN_CONF_FILE ovn ovsdb_connection \"$OVN_NB_REMOTE\""},{"line_number":149,"context_line":"        iniset $Q_PLUGIN_CONF_FILE ovn ovn_l3_mode \"$OVN_L3_MODE\""},{"line_number":150,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":33,"id":"dab17558_d5d99023","side":"PARENT","line":147,"updated":"2016-05-17 14:54:06.000000000","message":"Why is \"qos\" no longer included in service_plugins ?","commit_id":"40868ac1ea55a1898614f83e14c9e4922e583761"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9b5d90d8673d3827491ae1693f6407efacdfbe51","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        iniset $NEUTRON_CONF DEFAULT core_plugin \"$Q_PLUGIN_CLASS\""},{"line_number":147,"context_line":"        iniset $NEUTRON_CONF DEFAULT service_plugins \"qos\""},{"line_number":148,"context_line":"        iniset $Q_PLUGIN_CONF_FILE ovn ovsdb_connection \"$OVN_NB_REMOTE\""},{"line_number":149,"context_line":"        iniset $Q_PLUGIN_CONF_FILE ovn ovn_l3_mode \"$OVN_L3_MODE\""},{"line_number":150,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":33,"id":"dab17558_e44ce0c9","side":"PARENT","line":147,"in_reply_to":"dab17558_d5d99023","updated":"2016-05-17 15:03:01.000000000","message":"This should be handled by the qos DevStack plugin when enabled.","commit_id":"40868ac1ea55a1898614f83e14c9e4922e583761"}],"doc/source/design/data_model.rst":[{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"7d5e3d9d3db6221bbf67717847677d92e10e09d9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Mapping between Neutron and OVN data models"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"The primary job of the Neutron OVN driver is to translate requests for"},{"line_number":5,"context_line":"resources into OVN\u0027s data model.  Resources are created in OVN by updating the"},{"line_number":6,"context_line":"appropriate tables in the OVN northbound database (an ovsdb database).  This"},{"line_number":7,"context_line":"document looks at the mappings between the data that exists in Neutron and what"}],"source_content_type":"text/x-rst","patch_set":17,"id":"dab17558_44317559","line":4,"updated":"2016-05-11 14:29:52.000000000","message":"Nit: I\u0027d change these to \"ML2 driver\" instead of just driver. This applies to all the doc changes.","commit_id":"b4154c2fe660811e7ea1b1e54c1d8908ebcaeebc"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"e372088c5b61343b1310da97d980167d1db3e28e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Mapping between Neutron and OVN data models"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"The primary job of the Neutron OVN driver is to translate requests for"},{"line_number":5,"context_line":"resources into OVN\u0027s data model.  Resources are created in OVN by updating the"},{"line_number":6,"context_line":"appropriate tables in the OVN northbound database (an ovsdb database).  This"},{"line_number":7,"context_line":"document looks at the mappings between the data that exists in Neutron and what"}],"source_content_type":"text/x-rst","patch_set":17,"id":"dab17558_3f59a98f","line":4,"in_reply_to":"dab17558_44317559","updated":"2016-05-12 11:41:30.000000000","message":"Done","commit_id":"b4154c2fe660811e7ea1b1e54c1d8908ebcaeebc"}],"networking_ovn/common/acl.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"a1ded9c7ff4450cd1d56fb9fd4d07ab0730c3d18","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    return acl_list"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def add_sg_rule_acl_for_port(port, r, match):"},{"line_number":96,"context_line":"    dir_map \u003d {"},{"line_number":97,"context_line":"        \u0027ingress\u0027: \u0027to-lport\u0027,"},{"line_number":98,"context_line":"        \u0027egress\u0027: \u0027from-lport\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_70a76e0b","line":95,"updated":"2016-05-16 04:24:15.000000000","message":"I would suggest change this method name, since you move these code out from _add_sg_rule_acl_for_port and put make them be a common method. Similar name to previous one may get confusion and not so fit.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"385153d1704a7a32a1c017e9fa725ee74256e675","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    return acl_list"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def add_sg_rule_acl_for_port(port, r, match):"},{"line_number":96,"context_line":"    dir_map \u003d {"},{"line_number":97,"context_line":"        \u0027ingress\u0027: \u0027to-lport\u0027,"},{"line_number":98,"context_line":"        \u0027egress\u0027: \u0027from-lport\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_5d6f712a","line":95,"in_reply_to":"dab17558_70a76e0b","updated":"2016-05-17 20:27:02.000000000","message":"Sure, I can change the name.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"}],"networking_ovn/l3/l3_ovn.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"dfa077c352e61d0d2d2cd432e709c0d8850c1054","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        original_router \u003d self.get_router(context, id)"},{"line_number":105,"context_line":"        result \u003d super(OVNL3RouterPlugin, self).update_router("},{"line_number":106,"context_line":"            context, id, router)"},{"line_number":107,"context_line":"        if \u0027name\u0027 in router[\u0027router\u0027]:"},{"line_number":108,"context_line":"            router_name \u003d utils.ovn_name(id)"},{"line_number":109,"context_line":"            external_ids \u003d {ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY:"},{"line_number":110,"context_line":"                            router[\u0027router\u0027][\u0027name\u0027]}"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_2ab72e3b","line":107,"updated":"2016-05-16 05:57:50.000000000","message":"for other router attributes, should we also try to mention that they are not modified supported in OVN? in log or in prompt.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"7f16832037a45fbede703fd40d65006740a76e90","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        original_router \u003d self.get_router(context, id)"},{"line_number":105,"context_line":"        result \u003d super(OVNL3RouterPlugin, self).update_router("},{"line_number":106,"context_line":"            context, id, router)"},{"line_number":107,"context_line":"        if \u0027name\u0027 in router[\u0027router\u0027]:"},{"line_number":108,"context_line":"            router_name \u003d utils.ovn_name(id)"},{"line_number":109,"context_line":"            external_ids \u003d {ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY:"},{"line_number":110,"context_line":"                            router[\u0027router\u0027][\u0027name\u0027]}"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_dd908145","line":107,"in_reply_to":"dab17558_2ab72e3b","updated":"2016-05-17 20:23:09.000000000","message":"I don\u0027t plan to add functionality to the code as part of this conversion.  Also, there are patch sets in progress to work on this.  Your comment is probably better mentioned in them (e.g. https://review.openstack.org/#/c/315398/).","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"7b7a9ecdd62021342135c9ec377092ab6831ae0e","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @property"},{"line_number":60,"context_line":"    def _plugin(self):"},{"line_number":61,"context_line":"        return manager.NeutronManager.get_plugin()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_plugin_type(self):"},{"line_number":64,"context_line":"        return constants.L3_ROUTER_NAT"}],"source_content_type":"text/x-python","patch_set":33,"id":"dab17558_f8864963","line":61,"updated":"2016-05-17 14:54:06.000000000","message":"Create local variable to cache plugin value ... similar to what is done with self.__ovn","commit_id":"127a6d1186f668058a509af0b1316344e98ee701"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9b5d90d8673d3827491ae1693f6407efacdfbe51","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @property"},{"line_number":60,"context_line":"    def _plugin(self):"},{"line_number":61,"context_line":"        return manager.NeutronManager.get_plugin()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_plugin_type(self):"},{"line_number":64,"context_line":"        return constants.L3_ROUTER_NAT"}],"source_content_type":"text/x-python","patch_set":33,"id":"dab17558_04f3e473","line":61,"in_reply_to":"dab17558_f8864963","updated":"2016-05-17 15:03:01.000000000","message":"Good idea, I\u0027ll add to the TODO list.","commit_id":"127a6d1186f668058a509af0b1316344e98ee701"}],"networking_ovn/ml2/mech_driver.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"100526408635d6aeadbad823eb3cfeffe7fd86b5","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        # TODO(rtheis): Only create segment if physnet?"},{"line_number":144,"context_line":"        try:"},{"line_number":145,"context_line":"            self.create_network_in_ovn(network, {}, physnet, segid)"},{"line_number":146,"context_line":"        except Exception:"},{"line_number":147,"context_line":"            LOG.exception(_LE(\u0027Unable to create lswitch for %s\u0027),"},{"line_number":148,"context_line":"                          network[\u0027id\u0027])"},{"line_number":149,"context_line":"            raise ml2_exc.MechanismDriverError(method\u003d\u0027create_network_in_ovn\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_8bc4e140","line":146,"updated":"2016-05-05 23:46:55.000000000","message":"Why catch and re-raise the exception?","commit_id":"69100fc7a75ea1c011c09bf4f8237400cd9c7df6"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9e143d726735a28134860d14ad2dbf11f0e32c88","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        # TODO(rtheis): Only create segment if physnet?"},{"line_number":144,"context_line":"        try:"},{"line_number":145,"context_line":"            self.create_network_in_ovn(network, {}, physnet, segid)"},{"line_number":146,"context_line":"        except Exception:"},{"line_number":147,"context_line":"            LOG.exception(_LE(\u0027Unable to create lswitch for %s\u0027),"},{"line_number":148,"context_line":"                          network[\u0027id\u0027])"},{"line_number":149,"context_line":"            raise ml2_exc.MechanismDriverError(method\u003d\u0027create_network_in_ovn\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_9d5546c8","line":146,"in_reply_to":"dab17558_5ad124fb","updated":"2016-05-06 01:36:39.000000000","message":"It appears that MechanismManager catches all Exceptions.","commit_id":"69100fc7a75ea1c011c09bf4f8237400cd9c7df6"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"b0b047a5ccc2df3db2659429ff8cba66748a6267","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        # TODO(rtheis): Only create segment if physnet?"},{"line_number":144,"context_line":"        try:"},{"line_number":145,"context_line":"            self.create_network_in_ovn(network, {}, physnet, segid)"},{"line_number":146,"context_line":"        except Exception:"},{"line_number":147,"context_line":"            LOG.exception(_LE(\u0027Unable to create lswitch for %s\u0027),"},{"line_number":148,"context_line":"                          network[\u0027id\u0027])"},{"line_number":149,"context_line":"            raise ml2_exc.MechanismDriverError(method\u003d\u0027create_network_in_ovn\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_5ad124fb","line":146,"in_reply_to":"dab17558_8bc4e140","updated":"2016-05-06 01:04:45.000000000","message":"Try/Catch was in the plugin code to start with.\nCalling function is only looking for particular type of exception.  Cleanup will not occur if correct exception is not thrown.","commit_id":"69100fc7a75ea1c011c09bf4f8237400cd9c7df6"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"30ca7313d2ce646abbe38921b4738462cb444041","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        if network[\u0027name\u0027] !\u003d original_network[\u0027name\u0027]:"},{"line_number":203,"context_line":"            self._set_network_name(network[\u0027id\u0027], network[\u0027name\u0027])"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        # TODO(jckasper): Add QoS policy id change logic"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def delete_network_postcommit(self, context):"},{"line_number":208,"context_line":"        \"\"\"Delete a network."}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7a46a8c0","line":205,"updated":"2016-05-06 01:07:02.000000000","message":"Not sure how to convert this.  Existing code expects \"context\" from the update_network() plugin call.   That value is stored in NetworkContext but there is no method to retrieve it.","commit_id":"69100fc7a75ea1c011c09bf4f8237400cd9c7df6"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9e143d726735a28134860d14ad2dbf11f0e32c88","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        if network[\u0027name\u0027] !\u003d original_network[\u0027name\u0027]:"},{"line_number":203,"context_line":"            self._set_network_name(network[\u0027id\u0027], network[\u0027name\u0027])"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        # TODO(jckasper): Add QoS policy id change logic"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def delete_network_postcommit(self, context):"},{"line_number":208,"context_line":"        \"\"\"Delete a network."}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_bd092ae0","line":205,"in_reply_to":"dab17558_7a46a8c0","updated":"2016-05-06 01:36:39.000000000","message":"I\u0027m not sure that we need to do anything special for QoS with switch to ML2.","commit_id":"69100fc7a75ea1c011c09bf4f8237400cd9c7df6"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"100526408635d6aeadbad823eb3cfeffe7fd86b5","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            self._ovn.delete_lswitch("},{"line_number":222,"context_line":"                utils.ovn_name(network[\u0027id\u0027]), if_exists\u003dTrue).execute("},{"line_number":223,"context_line":"                    check_error\u003dTrue)"},{"line_number":224,"context_line":"        except Exception:"},{"line_number":225,"context_line":"            LOG.exception(_LE(\u0027Unable to delete lswitch for %s\u0027),"},{"line_number":226,"context_line":"                          network[\u0027id\u0027])"},{"line_number":227,"context_line":"            raise ml2_exc.MechanismDriverError(method\u003d\u0027delete_lswitch\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_6bc1bd2e","line":224,"updated":"2016-05-05 23:46:55.000000000","message":"Why catch and re-raise the exception?","commit_id":"69100fc7a75ea1c011c09bf4f8237400cd9c7df6"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"b0b047a5ccc2df3db2659429ff8cba66748a6267","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            self._ovn.delete_lswitch("},{"line_number":222,"context_line":"                utils.ovn_name(network[\u0027id\u0027]), if_exists\u003dTrue).execute("},{"line_number":223,"context_line":"                    check_error\u003dTrue)"},{"line_number":224,"context_line":"        except Exception:"},{"line_number":225,"context_line":"            LOG.exception(_LE(\u0027Unable to delete lswitch for %s\u0027),"},{"line_number":226,"context_line":"                          network[\u0027id\u0027])"},{"line_number":227,"context_line":"            raise ml2_exc.MechanismDriverError(method\u003d\u0027delete_lswitch\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7ad8681e","line":224,"in_reply_to":"dab17558_6bc1bd2e","updated":"2016-05-06 01:04:45.000000000","message":"Try/Catch was in the plugin code to start with.\nCalling function is only looking for particular type of exception.  Cleanup will not occur if correct exception is not thrown.","commit_id":"69100fc7a75ea1c011c09bf4f8237400cd9c7df6"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9e143d726735a28134860d14ad2dbf11f0e32c88","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            self._ovn.delete_lswitch("},{"line_number":222,"context_line":"                utils.ovn_name(network[\u0027id\u0027]), if_exists\u003dTrue).execute("},{"line_number":223,"context_line":"                    check_error\u003dTrue)"},{"line_number":224,"context_line":"        except Exception:"},{"line_number":225,"context_line":"            LOG.exception(_LE(\u0027Unable to delete lswitch for %s\u0027),"},{"line_number":226,"context_line":"                          network[\u0027id\u0027])"},{"line_number":227,"context_line":"            raise ml2_exc.MechanismDriverError(method\u003d\u0027delete_lswitch\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_5d72be7d","line":224,"in_reply_to":"dab17558_7ad8681e","updated":"2016-05-06 01:36:39.000000000","message":"It appears that MechanismManager catches all Exceptions.","commit_id":"69100fc7a75ea1c011c09bf4f8237400cd9c7df6"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"103e67015526931270a5d88c0cb12a5c72937162","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                                                 \u0027value\u0027: param_value}"},{"line_number":278,"context_line":"                raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        # TODO(rtheis): Do we need to get parent port?"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        if \u0027tag\u0027 in param_set:"},{"line_number":283,"context_line":"            tag \u003d int(param_dict[\u0027tag\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_efe7543e","line":280,"updated":"2016-05-06 17:29:20.000000000","message":"Yes, I think we need to verify we can access the parent port.... to remain consistent with existing plugin implementation.","commit_id":"2150be5a4b985a855f1bd8eb6caa468d560e4b3c"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"918bfde2f90f8d4157f86d2094ba044ada58f4ac","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _setup_vif_port_bindings(self):"},{"line_number":91,"context_line":"        self.supported_vnic_types \u003d [portbindings.VNIC_NORMAL]"},{"line_number":92,"context_line":"        if config.get_ovn_vif_type() \u003d\u003d portbindings.VIF_TYPE_VHOST_USER:"},{"line_number":93,"context_line":"            self.vif_type \u003d portbindings.VIF_TYPE_VHOST_USER"},{"line_number":94,"context_line":"            self.vif_details \u003d {"},{"line_number":95,"context_line":"                portbindings.CAP_PORT_FILTER: False,"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_b7d743ec","line":92,"updated":"2016-05-09 04:07:37.000000000","message":"How about:\n    ovn_vif_type \u003d config.get_ovn_vif_type()\n    if ovn_vif_type \u003d\u003d portbindings.VIP_TYPE_VHOST_USER:\n        ...\n    else:\n        if ovn_vif_type \u003d\u003d portbindings.VIP_TYPE_OVS:\n            ...\n        ...","commit_id":"93c98afe53f8892ab3a369c28cd489d64e3cf3da"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"7e363076a0168247eb2dbe685f71778c5d1bf1a4","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _setup_vif_port_bindings(self):"},{"line_number":91,"context_line":"        self.supported_vnic_types \u003d [portbindings.VNIC_NORMAL]"},{"line_number":92,"context_line":"        if config.get_ovn_vif_type() \u003d\u003d portbindings.VIF_TYPE_VHOST_USER:"},{"line_number":93,"context_line":"            self.vif_type \u003d portbindings.VIF_TYPE_VHOST_USER"},{"line_number":94,"context_line":"            self.vif_details \u003d {"},{"line_number":95,"context_line":"                portbindings.CAP_PORT_FILTER: False,"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_59e717b0","line":92,"in_reply_to":"dab17558_b7d743ec","updated":"2016-05-09 15:07:19.000000000","message":"John and I are trying to keep the code the same as part of this conversion.  We are trying to avoid unnecessary changes to ease the review and conversion.","commit_id":"93c98afe53f8892ab3a369c28cd489d64e3cf3da"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"918bfde2f90f8d4157f86d2094ba044ada58f4ac","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                LOG.warning(_LW(\u0027VIF type should be one of %(ovs)s, %(vhu)s\u0027) %"},{"line_number":103,"context_line":"                            {\"vhu\": portbindings.VIF_TYPE_VHOST_USER,"},{"line_number":104,"context_line":"                             \"ovs\": portbindings.VIF_TYPE_OVS})"},{"line_number":105,"context_line":"            self.vif_type \u003d portbindings.VIF_TYPE_OVS,"},{"line_number":106,"context_line":"            self.vif_details \u003d {"},{"line_number":107,"context_line":"                portbindings.CAP_PORT_FILTER: True,"},{"line_number":108,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_f7e0abce","line":105,"range":{"start_line":105,"start_character":12,"end_line":105,"end_character":54},"updated":"2016-05-09 04:07:37.000000000","message":"So we will enforce setting vif_type to \u0027ovs\u0027 whether ovn.vif_type is \u0027ovs\u0027 or not for the else branch. Please consider updating the warning message for this.","commit_id":"93c98afe53f8892ab3a369c28cd489d64e3cf3da"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"7e363076a0168247eb2dbe685f71778c5d1bf1a4","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                LOG.warning(_LW(\u0027VIF type should be one of %(ovs)s, %(vhu)s\u0027) %"},{"line_number":103,"context_line":"                            {\"vhu\": portbindings.VIF_TYPE_VHOST_USER,"},{"line_number":104,"context_line":"                             \"ovs\": portbindings.VIF_TYPE_OVS})"},{"line_number":105,"context_line":"            self.vif_type \u003d portbindings.VIF_TYPE_OVS,"},{"line_number":106,"context_line":"            self.vif_details \u003d {"},{"line_number":107,"context_line":"                portbindings.CAP_PORT_FILTER: True,"},{"line_number":108,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_b971e3e2","line":105,"range":{"start_line":105,"start_character":12,"end_line":105,"end_character":54},"in_reply_to":"dab17558_f7e0abce","updated":"2016-05-09 15:07:19.000000000","message":"We will consider updating the warning message.","commit_id":"93c98afe53f8892ab3a369c28cd489d64e3cf3da"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"918bfde2f90f8d4157f86d2094ba044ada58f4ac","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def post_fork_initialize(self, resource, event, trigger, **kwargs):"},{"line_number":111,"context_line":"        self._ovn \u003d impl_idl_ovn.OvsdbOvnIdl(self, trigger)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # TODO(rtheis): Synchronizer needs to use ML2 ..."},{"line_number":114,"context_line":"        # if trigger.im_class \u003d\u003d ovsdb_monitor.OvnWorker:"},{"line_number":115,"context_line":"        #     # Call the synchronization task if its ovn worker"},{"line_number":116,"context_line":"        #     # This sync neutron DB to OVN-NB DB only in inconsistent states"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_1761ef39","line":113,"updated":"2016-05-09 04:07:37.000000000","message":"Seems we need to add a section for ovn in ml2_conf.ini ?","commit_id":"93c98afe53f8892ab3a369c28cd489d64e3cf3da"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"7e363076a0168247eb2dbe685f71778c5d1bf1a4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def post_fork_initialize(self, resource, event, trigger, **kwargs):"},{"line_number":111,"context_line":"        self._ovn \u003d impl_idl_ovn.OvsdbOvnIdl(self, trigger)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # TODO(rtheis): Synchronizer needs to use ML2 ..."},{"line_number":114,"context_line":"        # if trigger.im_class \u003d\u003d ovsdb_monitor.OvnWorker:"},{"line_number":115,"context_line":"        #     # Call the synchronization task if its ovn worker"},{"line_number":116,"context_line":"        #     # This sync neutron DB to OVN-NB DB only in inconsistent states"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_f9852bad","line":113,"in_reply_to":"dab17558_1761ef39","updated":"2016-05-09 15:07:19.000000000","message":"We may, but I haven\u0027t investigated this yet.","commit_id":"93c98afe53f8892ab3a369c28cd489d64e3cf3da"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"f831cd0383dddaddea180a2566b4ab7bd6726f72","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            include \u003d True"},{"line_number":203,"context_line":"            for rule in all_rules:"},{"line_number":204,"context_line":"                if not rule.should_apply_to_port(port):"},{"line_number":205,"context_line":"                    include \u003d False"},{"line_number":206,"context_line":"                    break"},{"line_number":207,"context_line":"            if include:"},{"line_number":208,"context_line":"                port_ids.append(port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_8b127755","line":205,"updated":"2016-05-10 18:48:20.000000000","message":"I think you can remove the variable \u0027include\u0027 and do something like\nif not rule.should_apply_to_port(port):\n    port_ids.append(port[\u0027id\u0027])\n    break","commit_id":"39dc4e53d7f8f0a698652cf69d4dfcd46abf5363"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"a3c03778a110a0615dd3a35f82efab20caf26eab","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            include \u003d True"},{"line_number":203,"context_line":"            for rule in all_rules:"},{"line_number":204,"context_line":"                if not rule.should_apply_to_port(port):"},{"line_number":205,"context_line":"                    include \u003d False"},{"line_number":206,"context_line":"                    break"},{"line_number":207,"context_line":"            if include:"},{"line_number":208,"context_line":"                port_ids.append(port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_f95f90e2","line":205,"in_reply_to":"dab17558_8b127755","updated":"2016-05-11 02:44:44.000000000","message":"This routine was copied \"as-is\" from the OVN plugin.py.  The intent was to keep the methods in the mechanism driver as close as possible to the existing logic in the plugin to make reviews/testing easier.","commit_id":"39dc4e53d7f8f0a698652cf69d4dfcd46abf5363"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"dfa077c352e61d0d2d2cd432e709c0d8850c1054","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _get_admin_context_and_plugin(self):"},{"line_number":88,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":89,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":90,"context_line":"        return admin_context, plugin"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _get_attribute(self, obj, attribute):"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_0a2fca88","line":89,"updated":"2016-05-16 05:57:50.000000000","message":"how about making admin_context and plugin be OVN driver attributes?","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"7f16832037a45fbede703fd40d65006740a76e90","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _get_admin_context_and_plugin(self):"},{"line_number":88,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":89,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":90,"context_line":"        return admin_context, plugin"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _get_attribute(self, obj, attribute):"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_fdb0e5dd","line":89,"in_reply_to":"dab17558_0a2fca88","updated":"2016-05-17 20:23:09.000000000","message":"I will consider this.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"a1ded9c7ff4450cd1d56fb9fd4d07ab0730c3d18","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        physnet \u003d self._get_attribute(network, pnet.PHYSICAL_NETWORK)"},{"line_number":203,"context_line":"        segid \u003d self._get_attribute(network, pnet.SEGMENTATION_ID)"},{"line_number":204,"context_line":"        # TODO(rtheis): Only create segment if physnet or is it OK"},{"line_number":205,"context_line":"        # to always create segment?"},{"line_number":206,"context_line":"        self.create_network_in_ovn(network, {}, physnet, segid)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def create_network_in_ovn(self, network, ext_ids,"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_70eace75","line":205,"updated":"2016-05-16 04:24:15.000000000","message":"I hope Hong Hui Xiao can give some suggestion on this TODO.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"97604cb5c07f773cbc9c3256bb3f9040092753e8","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        physnet \u003d self._get_attribute(network, pnet.PHYSICAL_NETWORK)"},{"line_number":203,"context_line":"        segid \u003d self._get_attribute(network, pnet.SEGMENTATION_ID)"},{"line_number":204,"context_line":"        # TODO(rtheis): Only create segment if physnet or is it OK"},{"line_number":205,"context_line":"        # to always create segment?"},{"line_number":206,"context_line":"        self.create_network_in_ovn(network, {}, physnet, segid)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def create_network_in_ovn(self, network, ext_ids,"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_952c7603","line":205,"in_reply_to":"dab17558_70eace75","updated":"2016-05-16 09:58:15.000000000","message":"In ml2, the segment will be created after validation. For tunnel network types, the physnet must be empty. And actually, at this point, the segment has already been created.\n\nhttps://github.com/openstack/neutron/blob/67bb052111440120497727a9ede89643fb466077/neutron/plugins/ml2/managers.py#L193-L203","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"8f3bde93668ebbd8ef73a2a75515d1944ce702c3","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        physnet \u003d self._get_attribute(network, pnet.PHYSICAL_NETWORK)"},{"line_number":203,"context_line":"        segid \u003d self._get_attribute(network, pnet.SEGMENTATION_ID)"},{"line_number":204,"context_line":"        # TODO(rtheis): Only create segment if physnet or is it OK"},{"line_number":205,"context_line":"        # to always create segment?"},{"line_number":206,"context_line":"        self.create_network_in_ovn(network, {}, physnet, segid)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def create_network_in_ovn(self, network, ext_ids,"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_2c60d800","line":205,"in_reply_to":"dab17558_952c7603","updated":"2016-05-16 12:56:58.000000000","message":"Thanks for the link. I haven\u0027t looked into the segment create flow in much detail.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"a1ded9c7ff4450cd1d56fb9fd4d07ab0730c3d18","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            (network[qos_consts.QOS_POLICY_ID] !\u003d"},{"line_number":305,"context_line":"             original_network[qos_consts.QOS_POLICY_ID])):"},{"line_number":306,"context_line":"            self._update_network_qos(network[\u0027id\u0027],"},{"line_number":307,"context_line":"                                     network[qos_consts.QOS_POLICY_ID])"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def delete_network_postcommit(self, context):"},{"line_number":310,"context_line":"        \"\"\"Delete a network."}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_5b9c0bc0","line":307,"updated":"2016-05-16 04:24:15.000000000","message":"How about adding a warning message in log or in prompt, to mention that beside name and qos, other network attributes may not changeable supported in OVN?","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f99e99329531c648d36f2dd8f52d48b5db6b6639","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            (network[qos_consts.QOS_POLICY_ID] !\u003d"},{"line_number":305,"context_line":"             original_network[qos_consts.QOS_POLICY_ID])):"},{"line_number":306,"context_line":"            self._update_network_qos(network[\u0027id\u0027],"},{"line_number":307,"context_line":"                                     network[qos_consts.QOS_POLICY_ID])"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def delete_network_postcommit(self, context):"},{"line_number":310,"context_line":"        \"\"\"Delete a network."}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_fdd105cd","line":307,"in_reply_to":"dab17558_5b9c0bc0","updated":"2016-05-17 20:29:38.000000000","message":"Similar to my response on L3.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"a1ded9c7ff4450cd1d56fb9fd4d07ab0730c3d18","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        \"\"\""},{"line_number":336,"context_line":"        self.validate_data_from_binding_profile(context.current)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def validate_data_from_binding_profile(self, port):"},{"line_number":339,"context_line":"        if (ovn_const.OVN_PORT_BINDING_PROFILE not in port or"},{"line_number":340,"context_line":"                not validators.is_attr_set("},{"line_number":341,"context_line":"                    port[ovn_const.OVN_PORT_BINDING_PROFILE])):"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_fbbe9fac","line":338,"updated":"2016-05-16 04:24:15.000000000","message":"This is similar to get_data_from_binding_profile except L382-383.\nI would suggest that adding a new validate method, and call modified get_data_from_binding_profile in it, since:\n1) for a validate method, it doesn\u0027t need to return something, {} or param_dict;\n2) OvnNbSynchronizer will need modified get_data_from_binding_profile to get binding_profile, method with name validate doesn\u0027t fit that purpose.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f99e99329531c648d36f2dd8f52d48b5db6b6639","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        \"\"\""},{"line_number":336,"context_line":"        self.validate_data_from_binding_profile(context.current)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def validate_data_from_binding_profile(self, port):"},{"line_number":339,"context_line":"        if (ovn_const.OVN_PORT_BINDING_PROFILE not in port or"},{"line_number":340,"context_line":"                not validators.is_attr_set("},{"line_number":341,"context_line":"                    port[ovn_const.OVN_PORT_BINDING_PROFILE])):"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_bdc01de1","line":338,"in_reply_to":"dab17558_fbbe9fac","updated":"2016-05-17 20:29:38.000000000","message":"I\u0027m not sure I see the value in splitting this up.  But I can change the method name to make it clear it is a validate and get.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"a1ded9c7ff4450cd1d56fb9fd4d07ab0730c3d18","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        result in the deletion of the resource."},{"line_number":403,"context_line":"        \"\"\""},{"line_number":404,"context_line":"        port \u003d context.current"},{"line_number":405,"context_line":"        binding_profile \u003d self.validate_data_from_binding_profile(port)"},{"line_number":406,"context_line":"        ovn_port_info \u003d self.get_ovn_port_options(binding_profile, port)"},{"line_number":407,"context_line":"        self.create_port_in_ovn(port, ovn_port_info)"},{"line_number":408,"context_line":"        # TODO(rtheis): Are changes required for QoS?"}],"source_content_type":"text/x-python","patch_set":26,"id":"dab17558_1bf0c390","line":405,"updated":"2016-05-16 04:24:15.000000000","message":"Same to comment for method validate_data_from_binding_profile. It\u0027s odd for a validate method to return something like binding_profile.","commit_id":"19ba2708c7ec7f13b3686fb2abd91b24d70bb6f5"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"6362b334c82e329d474c35bffb816285274dd18a","unresolved":false,"context_lines":[{"line_number":546,"context_line":"        # Finally, create the ACL entry for the direction specified."},{"line_number":547,"context_line":"        return ovn_acl.add_sg_rule_acl_for_port(port, r, match)"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    def _add_acls(self,"},{"line_number":550,"context_line":"                  port,"},{"line_number":551,"context_line":"                  sg_cache,"},{"line_number":552,"context_line":"                  sg_ports_cache,"}],"source_content_type":"text/x-python","patch_set":37,"id":"bab6814e_4fdf290d","line":549,"updated":"2016-05-20 01:38:26.000000000","message":"I didn\u0027t notice this till now but this function does not match the one that is in plugin.py? Why not?","commit_id":"3dcc3398e33c784c28a76c73eb3167d41c9034b4"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"e69326de93c645fd8c9435873160ec5299d0d8fa","unresolved":false,"context_lines":[{"line_number":546,"context_line":"        # Finally, create the ACL entry for the direction specified."},{"line_number":547,"context_line":"        return ovn_acl.add_sg_rule_acl_for_port(port, r, match)"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    def _add_acls(self,"},{"line_number":550,"context_line":"                  port,"},{"line_number":551,"context_line":"                  sg_cache,"},{"line_number":552,"context_line":"                  sg_ports_cache,"}],"source_content_type":"text/x-python","patch_set":37,"id":"bab6814e_2388ddc4","line":549,"in_reply_to":"bab6814e_4fdf290d","updated":"2016-05-20 15:44:40.000000000","message":"Hi Aaron, I refactored this function slightly.  First, I extracted the generic ACL code from the core _add_acl_dhcp method and moved it to ovn_acl.add_acl_dhcp. I then added a method for sg caching. These should explain the mis-match. Functionally, the code should do the same as before.","commit_id":"3dcc3398e33c784c28a76c73eb3167d41c9034b4"}]}
