)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"557ab66e4df45b7becc6584b352737bbb22daa99","unresolved":false,"context_lines":[{"line_number":43,"context_line":"- Static routes enabled on IPV4"},{"line_number":44,"context_line":"- floating IP in progress"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"- IPV6 requires changes to Open vSwitch to modify the reserved field on icmpv6."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Change-Id: Iac79212823d15feb0f530f84a66ffe47bbaacca1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5f2577a7_f7f32709","line":46,"updated":"2017-09-13 20:10:40.000000000","message":"Can you reference your spec or RFE in here for reference.","commit_id":"d6e1b76713d2908b3a4e8dad010ea1aeb1dbb437"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"3e0116434ad64075f8d77668ebd1f158192fbb05","unresolved":false,"context_lines":[{"line_number":21,"context_line":"router_distributed\u003dTrue"},{"line_number":22,"context_line":"[[post-config|/$Q_L3_CONF_FILE]]"},{"line_number":23,"context_line":"[DEFAULT]"},{"line_number":24,"context_line":"agent_mode\u003ddvr_bridge"},{"line_number":25,"context_line":"[ovs]"},{"line_number":26,"context_line":"ovsdb_interface\u003dvsctl"},{"line_number":27,"context_line":"[[post-config|/$Q_DHCP_CONF_FILE]]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"5fc1f717_a1ac6b8c","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":21},"updated":"2019-03-10 03:30:57.000000000","message":"Outdated: this is now:\nagent_mode\u003ddvr\nagent_backend\u003dovs","commit_id":"a4e57cef603a96e28b68c8c92bcd2ee77815aa57"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"0767397c48491d209e71f36a9030fbb25371904b","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"- IPV6 requires changes to Open vSwitch to modify the reserved field on icmpv6."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"- Installation settings in devstack:"},{"line_number":18,"context_line":"[[post-config|$NEUTRON_CONF]]"},{"line_number":19,"context_line":"[DEFAULT]"},{"line_number":20,"context_line":"service_plugins\u003dneutron.services.l3_router.l3_router_plugin.L3RouterPlugin"},{"line_number":21,"context_line":"router_distributed\u003dTrue"},{"line_number":22,"context_line":"[[post-config|/$Q_L3_CONF_FILE]]"},{"line_number":23,"context_line":"[DEFAULT]"},{"line_number":24,"context_line":"agent_mode\u003ddvr_bridge"},{"line_number":25,"context_line":"[ovs]"},{"line_number":26,"context_line":"ovsdb_interface\u003dvsctl"},{"line_number":27,"context_line":"[[post-config|/$Q_DHCP_CONF_FILE]]"},{"line_number":28,"context_line":"[DEFAULT]"},{"line_number":29,"context_line":"force_metadata\u003dTrue"},{"line_number":30,"context_line":"enable_isolated_metadata\u003dTrue"},{"line_number":31,"context_line":"[[post-config|/$Q_PLUGIN_CONF_FILE]]"},{"line_number":32,"context_line":"[ml2]"},{"line_number":33,"context_line":"types_drivers \u003d vxlan,flat"},{"line_number":34,"context_line":"tenant_network_types \u003d vxlan"},{"line_number":35,"context_line":"extension_drivers \u003d port_security,qos"},{"line_number":36,"context_line":"mechanism_drivers \u003d openvswitch,l2population"},{"line_number":37,"context_line":"[ml2_type_flat]"},{"line_number":38,"context_line":"flat_networks \u003d public"},{"line_number":39,"context_line":"[agent]"},{"line_number":40,"context_line":"l2_population\u003dTrue"},{"line_number":41,"context_line":"tunnel_types\u003dvxlan"},{"line_number":42,"context_line":"enable_distributed_routing\u003dTrue"},{"line_number":43,"context_line":"extensions\u003dqos"},{"line_number":44,"context_line":"[ovs]"},{"line_number":45,"context_line":"ovsdb_interface\u003dvsctl"},{"line_number":46,"context_line":"of_interface\u003dovs-ofctl"},{"line_number":47,"context_line":"local_ip\u003d$HOST_IP"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Co-Authored-By: Xubo Zhang \u003cxubo.zhang@intel.com\u003e"},{"line_number":50,"context_line":"Co-Authored-By: Igor D.C. \u003cigor.duarte.cardoso@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"bfb3d3c7_26a976de","line":47,"range":{"start_line":17,"start_character":0,"end_line":47,"end_character":17},"updated":"2019-05-23 01:33:41.000000000","message":"Add a doc for such config?","commit_id":"a4e57cef603a96e28b68c8c92bcd2ee77815aa57"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"77aa8a38f0394a0868034791643fbb142c536bb1","unresolved":false,"context_lines":[{"line_number":45,"context_line":"ovsdb_interface\u003dvsctl"},{"line_number":46,"context_line":"of_interface\u003dovs-ofctl"},{"line_number":47,"context_line":"local_ip\u003d$HOST_IP"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Co-Authored-By: Xubo Zhang \u003cxubo.zhang@intel.com\u003e"},{"line_number":50,"context_line":"Co-Authored-By: Igor D.C. \u003cigor.duarte.cardoso@intel.com\u003e"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"5fc1f717_a63f77b2","line":48,"updated":"2019-03-12 14:35:27.000000000","message":"\u003e Please add following tag then we can trace all the patch with right\n \u003e BP:\n \u003e Partially-Implements: blueprint openflow-based-dvr","commit_id":"a4e57cef603a96e28b68c8c92bcd2ee77815aa57"}],"neutron/agent/l3/agent.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            config\u003dself.conf,"},{"line_number":197,"context_line":"            resource_type\u003d\u0027router\u0027)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        if self.conf.agent_mode \u003d\u003d \u0027dvr_bridge\u0027:"},{"line_number":200,"context_line":"            self.driver \u003d dvr_local_bridge_router.DvrLocalBridgeRouter.\\"},{"line_number":201,"context_line":"                              OVSInterfaceDriver(self.conf)"},{"line_number":202,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_b388641f","line":199,"range":{"start_line":199,"start_character":36,"end_line":199,"end_character":46},"updated":"2017-07-31 11:07:17.000000000","message":"Use the constant","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            config\u003dself.conf,"},{"line_number":197,"context_line":"            resource_type\u003d\u0027router\u0027)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        if self.conf.agent_mode \u003d\u003d \u0027dvr_bridge\u0027:"},{"line_number":200,"context_line":"            self.driver \u003d dvr_local_bridge_router.DvrLocalBridgeRouter.\\"},{"line_number":201,"context_line":"                              OVSInterfaceDriver(self.conf)"},{"line_number":202,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_8c5e56e4","line":199,"range":{"start_line":199,"start_character":36,"end_line":199,"end_character":46},"in_reply_to":"df3967d1_b388641f","updated":"2017-07-31 13:13:36.000000000","message":"ack","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        if self.conf.enable_metadata_proxy:"},{"line_number":239,"context_line":"            self.metadata_driver \u003d metadata_driver.MetadataDriver(self)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        if self.conf.agent_mode \u003d\u003d \u0027dvr_bridge\u0027:"},{"line_number":242,"context_line":"            self.namespaces_manager \u003d dvr_local_bridge_router.\\"},{"line_number":243,"context_line":"                                          DvrLocalBridgeRouter.\\"},{"line_number":244,"context_line":"                                          NameSpaceManagerMock("}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_737afc24","line":241,"range":{"start_line":241,"start_character":36,"end_line":241,"end_character":46},"updated":"2017-07-31 11:07:17.000000000","message":"ditto","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        if self.conf.enable_metadata_proxy:"},{"line_number":239,"context_line":"            self.metadata_driver \u003d metadata_driver.MetadataDriver(self)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        if self.conf.agent_mode \u003d\u003d \u0027dvr_bridge\u0027:"},{"line_number":242,"context_line":"            self.namespaces_manager \u003d dvr_local_bridge_router.\\"},{"line_number":243,"context_line":"                                          DvrLocalBridgeRouter.\\"},{"line_number":244,"context_line":"                                          NameSpaceManagerMock("}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_6c733282","line":241,"range":{"start_line":241,"start_character":36,"end_line":241,"end_character":46},"in_reply_to":"df3967d1_737afc24","updated":"2017-07-31 13:13:36.000000000","message":"ack.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            self.metadata_driver \u003d metadata_driver.MetadataDriver(self)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        if self.conf.agent_mode \u003d\u003d \u0027dvr_bridge\u0027:"},{"line_number":242,"context_line":"            self.namespaces_manager \u003d dvr_local_bridge_router.\\"},{"line_number":243,"context_line":"                                          DvrLocalBridgeRouter.\\"},{"line_number":244,"context_line":"                                          NameSpaceManagerMock("},{"line_number":245,"context_line":"                                              self.conf,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_33a9147b","line":242,"range":{"start_line":242,"start_character":61,"end_line":242,"end_character":63},"updated":"2017-07-31 11:07:17.000000000","message":"In parenthesis is preferred","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            self.metadata_driver \u003d metadata_driver.MetadataDriver(self)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        if self.conf.agent_mode \u003d\u003d \u0027dvr_bridge\u0027:"},{"line_number":242,"context_line":"            self.namespaces_manager \u003d dvr_local_bridge_router.\\"},{"line_number":243,"context_line":"                                          DvrLocalBridgeRouter.\\"},{"line_number":244,"context_line":"                                          NameSpaceManagerMock("},{"line_number":245,"context_line":"                                              self.conf,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_2c6d2a98","line":242,"range":{"start_line":242,"start_character":61,"end_line":242,"end_character":63},"in_reply_to":"df3967d1_33a9147b","updated":"2017-07-31 13:13:36.000000000","message":"ack.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"from neutron.agent.l3 import l3_agent_extensions_manager as l3_ext_manager"},{"line_number":48,"context_line":"from neutron.agent.l3 import legacy_router"},{"line_number":49,"context_line":"from neutron.agent.l3 import namespace_manager"},{"line_number":50,"context_line":"from neutron.agent.l3.openflow_utils import mock_utils"},{"line_number":51,"context_line":"from neutron.agent.l3 import router_processing_queue as queue"},{"line_number":52,"context_line":"from neutron.agent.linux import external_process"},{"line_number":53,"context_line":"from neutron.agent.linux import ip_lib"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_f59b7861","line":50,"updated":"2018-06-14 16:50:27.000000000","message":"\u0027mock\u0027 is a confusing name as it\u0027s a library used in the tests.","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            self.namespaces_manager.ensure_router_cleanup(router_id)"},{"line_number":413,"context_line":"            return"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        if self.conf.agent_mode !\u003d l3_constants.L3_AGENT_MODE_DVR_BRIDGE:"},{"line_number":416,"context_line":"            registry.notify(resources.ROUTER, events.BEFORE_DELETE,"},{"line_number":417,"context_line":"                        self, router\u003dri)"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_358490d3","line":415,"updated":"2018-06-14 16:50:27.000000000","message":"Why do you do this?","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/agent/l3/dvr_local_bridge_router.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        :param process_monitor: The agent\u0027s process monitor instance."},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":194,"context_line":"        while not canary_flow or len(canary_flow.splitlines()) \u003e 1:"},{"line_number":195,"context_line":"            canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":196,"context_line":"        cookie \u003d canary_flow.partition(\",\")[0].partition(\"\u003d\")[2]"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_36bc6204","line":193,"range":{"start_line":193,"start_character":55,"end_line":193,"end_character":57},"updated":"2017-07-31 11:07:17.000000000","message":"Use the forc... constant in plugins/ml2/drivers/openvswitch/agent/common/constansts CANARY_TABLE\u003d23","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        :param process_monitor: The agent\u0027s process monitor instance."},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":194,"context_line":"        while not canary_flow or len(canary_flow.splitlines()) \u003e 1:"},{"line_number":195,"context_line":"            canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":196,"context_line":"        cookie \u003d canary_flow.partition(\",\")[0].partition(\"\u003d\")[2]"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_0c8ee677","line":193,"range":{"start_line":193,"start_character":55,"end_line":193,"end_character":57},"in_reply_to":"df3967d1_36bc6204","updated":"2017-07-31 13:13:36.000000000","message":"I\u0027m trying to think of a witty comment but I\u0027ve got nothing.\nack.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        :param process_monitor: The agent\u0027s process monitor instance."},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":194,"context_line":"        while not canary_flow or len(canary_flow.splitlines()) \u003e 1:"},{"line_number":195,"context_line":"            canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":196,"context_line":"        cookie \u003d canary_flow.partition(\",\")[0].partition(\"\u003d\")[2]"},{"line_number":197,"context_line":"        self.int_br.set_agent_uuid_stamp(int(cookie, 0))"},{"line_number":198,"context_line":"        self.br.set_agent_uuid_stamp(int(cookie, 0))"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_f6093add","line":195,"range":{"start_line":194,"start_character":0,"end_line":195,"end_character":62},"updated":"2017-07-31 11:07:17.000000000","message":"Why are you doing this? Waiting for the initialization of the canary table?\n\nIf br-int is up (must be), this table is one of the first tables to be initialized. You must relay on ovs neutron agent to do this.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        :param process_monitor: The agent\u0027s process monitor instance."},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":194,"context_line":"        while not canary_flow or len(canary_flow.splitlines()) \u003e 1:"},{"line_number":195,"context_line":"            canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":196,"context_line":"        cookie \u003d canary_flow.partition(\",\")[0].partition(\"\u003d\")[2]"},{"line_number":197,"context_line":"        self.int_br.set_agent_uuid_stamp(int(cookie, 0))"},{"line_number":198,"context_line":"        self.br.set_agent_uuid_stamp(int(cookie, 0))"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_168f19cd","line":195,"range":{"start_line":194,"start_character":0,"end_line":195,"end_character":62},"in_reply_to":"df3967d1_f6093add","updated":"2017-07-31 13:13:36.000000000","message":"There have been a few instances while working on the patch that there have been 2 flows or no flows in the canary table while stacking.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":194,"context_line":"        while not canary_flow or len(canary_flow.splitlines()) \u003e 1:"},{"line_number":195,"context_line":"            canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":196,"context_line":"        cookie \u003d canary_flow.partition(\",\")[0].partition(\"\u003d\")[2]"},{"line_number":197,"context_line":"        self.int_br.set_agent_uuid_stamp(int(cookie, 0))"},{"line_number":198,"context_line":"        self.br.set_agent_uuid_stamp(int(cookie, 0))"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_d6e636e9","line":196,"range":{"start_line":196,"start_character":8,"end_line":196,"end_character":64},"updated":"2017-07-31 11:07:17.000000000","message":"This cookie should be the cookie of the ovs agent.\n\nAre you going to use the same as the agent? You shouldn\u0027t.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":194,"context_line":"        while not canary_flow or len(canary_flow.splitlines()) \u003e 1:"},{"line_number":195,"context_line":"            canary_flow \u003d self.int_br.dump_flows_for_table(23)"},{"line_number":196,"context_line":"        cookie \u003d canary_flow.partition(\",\")[0].partition(\"\u003d\")[2]"},{"line_number":197,"context_line":"        self.int_br.set_agent_uuid_stamp(int(cookie, 0))"},{"line_number":198,"context_line":"        self.br.set_agent_uuid_stamp(int(cookie, 0))"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_793bf6d0","line":196,"range":{"start_line":196,"start_character":8,"end_line":196,"end_character":64},"in_reply_to":"df3967d1_d6e636e9","updated":"2017-07-31 13:13:36.000000000","message":"I do need it in case any flows need to be added to br-int.\nHowever till now I have not needed to do that.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        while self.br.bridge_exists(self.ns_name):"},{"line_number":208,"context_line":"            self.br.destroy()"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        while not self.br.bridge_exists(self.ns_name):"},{"line_number":211,"context_line":"            self.br.create()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.br.add_flow(table\u003d2, priority\u003d1, actions\u003d\"NORMAL\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_963e6e27","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":54},"updated":"2017-07-31 11:07:17.000000000","message":"At this point, you are sure \"ns_name\" doesn\u0027t exist. You don\u0027t need this check.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        while self.br.bridge_exists(self.ns_name):"},{"line_number":208,"context_line":"            self.br.destroy()"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        while not self.br.bridge_exists(self.ns_name):"},{"line_number":211,"context_line":"            self.br.create()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.br.add_flow(table\u003d2, priority\u003d1, actions\u003d\"NORMAL\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_d97ae286","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":54},"in_reply_to":"df3967d1_963e6e27","updated":"2017-07-31 13:13:36.000000000","message":"I\u0027ve also found there is a couple of seconds where the bridge has not been created after the call and all the flow creation calls throw errors as the bridge doesn\u0027t yet exist.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        while not self.br.bridge_exists(self.ns_name):"},{"line_number":211,"context_line":"            self.br.create()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.br.add_flow(table\u003d2, priority\u003d1, actions\u003d\"NORMAL\")"},{"line_number":214,"context_line":"        self.br.add_flow(table\u003d3, priority\u003d1, actions\u003d\"DROP\")"},{"line_number":215,"context_line":"        self.br.delete_flows(table\u003d0, cookie\u003d0)"},{"line_number":216,"context_line":"        LOG.debug(\"\\n\\n\\n\\n\\ndvr local router initialized\\n\\n\\n\\n\\n\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_5680068c","line":213,"range":{"start_line":213,"start_character":25,"end_line":213,"end_character":32},"updated":"2017-07-31 11:07:17.000000000","message":"Use the constants (plugins/ml2/drivers/openvswitch/agent/common/constansts). This way is easier to follow the code.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        while not self.br.bridge_exists(self.ns_name):"},{"line_number":211,"context_line":"            self.br.create()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.br.add_flow(table\u003d2, priority\u003d1, actions\u003d\"NORMAL\")"},{"line_number":214,"context_line":"        self.br.add_flow(table\u003d3, priority\u003d1, actions\u003d\"DROP\")"},{"line_number":215,"context_line":"        self.br.delete_flows(table\u003d0, cookie\u003d0)"},{"line_number":216,"context_line":"        LOG.debug(\"\\n\\n\\n\\n\\ndvr local router initialized\\n\\n\\n\\n\\n\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_59703273","line":213,"range":{"start_line":213,"start_character":25,"end_line":213,"end_character":32},"in_reply_to":"df3967d1_5680068c","updated":"2017-07-31 13:13:36.000000000","message":"This flow is being created on the router-bridge, not br-int.\nI\u0027ll add it to the l3-constants, and then migrate it to neutron-lib later.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            self.br.create()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.br.add_flow(table\u003d2, priority\u003d1, actions\u003d\"NORMAL\")"},{"line_number":214,"context_line":"        self.br.add_flow(table\u003d3, priority\u003d1, actions\u003d\"DROP\")"},{"line_number":215,"context_line":"        self.br.delete_flows(table\u003d0, cookie\u003d0)"},{"line_number":216,"context_line":"        LOG.debug(\"\\n\\n\\n\\n\\ndvr local router initialized\\n\\n\\n\\n\\n\")"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_b64a927d","line":214,"range":{"start_line":214,"start_character":25,"end_line":214,"end_character":26},"updated":"2017-07-31 11:07:17.000000000","message":"ditto","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            self.br.create()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.br.add_flow(table\u003d2, priority\u003d1, actions\u003d\"NORMAL\")"},{"line_number":214,"context_line":"        self.br.add_flow(table\u003d3, priority\u003d1, actions\u003d\"DROP\")"},{"line_number":215,"context_line":"        self.br.delete_flows(table\u003d0, cookie\u003d0)"},{"line_number":216,"context_line":"        LOG.debug(\"\\n\\n\\n\\n\\ndvr local router initialized\\n\\n\\n\\n\\n\")"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_f90486c8","line":214,"range":{"start_line":214,"start_character":25,"end_line":214,"end_character":26},"in_reply_to":"df3967d1_b64a927d","updated":"2017-07-31 13:13:36.000000000","message":"ditto","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            for subnet in port[\u0027subnets\u0027]:"},{"line_number":268,"context_line":"                if router_port[\u0027subnet_id\u0027] in subnet[\u0027id\u0027]:"},{"line_number":269,"context_line":"                    router_cidr \u003d subnet[\u0027cidr\u0027]"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            if \u0027:\u0027 not in router_ip and router_cidr:"},{"line_number":272,"context_line":"                self.br.add_flow(priority\u003d50, proto\u003d\u0027arp\u0027, table\u003d0,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_01511637","line":269,"updated":"2017-07-31 11:07:17.000000000","message":"There should be only one subnet cidr matching router_port[\u0027subnet_id\u0027]. You should brake the L267 loop","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            for subnet in port[\u0027subnets\u0027]:"},{"line_number":268,"context_line":"                if router_port[\u0027subnet_id\u0027] in subnet[\u0027id\u0027]:"},{"line_number":269,"context_line":"                    router_cidr \u003d subnet[\u0027cidr\u0027]"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            if \u0027:\u0027 not in router_ip and router_cidr:"},{"line_number":272,"context_line":"                self.br.add_flow(priority\u003d50, proto\u003d\u0027arp\u0027, table\u003d0,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_391b2e1c","line":269,"in_reply_to":"df3967d1_01511637","updated":"2017-07-31 13:13:36.000000000","message":"ack","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                if router_port[\u0027subnet_id\u0027] in subnet[\u0027id\u0027]:"},{"line_number":269,"context_line":"                    router_cidr \u003d subnet[\u0027cidr\u0027]"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            if \u0027:\u0027 not in router_ip and router_cidr:"},{"line_number":272,"context_line":"                self.br.add_flow(priority\u003d50, proto\u003d\u0027arp\u0027, table\u003d0,"},{"line_number":273,"context_line":"                                 nw_dst\u003drouter_cidr, actions\u003d\"resubmit(,1),\""},{"line_number":274,"context_line":"                                                             \"resubmit(,3)\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_e113b265","line":271,"updated":"2017-07-31 11:07:17.000000000","message":"If you are checking the IP version, type(router_ip) is IPAddress().\n\nnetaddr.IPAddress inherits from BaseIP, which has a property called \"version\". I think it\u0027s easier.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                if router_port[\u0027subnet_id\u0027] in subnet[\u0027id\u0027]:"},{"line_number":269,"context_line":"                    router_cidr \u003d subnet[\u0027cidr\u0027]"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            if \u0027:\u0027 not in router_ip and router_cidr:"},{"line_number":272,"context_line":"                self.br.add_flow(priority\u003d50, proto\u003d\u0027arp\u0027, table\u003d0,"},{"line_number":273,"context_line":"                                 nw_dst\u003drouter_cidr, actions\u003d\"resubmit(,1),\""},{"line_number":274,"context_line":"                                                             \"resubmit(,3)\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_8c2656b7","line":271,"in_reply_to":"df3967d1_e113b265","updated":"2017-07-31 13:13:36.000000000","message":"ack.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            if \u0027:\u0027 not in router_ip and router_cidr:"},{"line_number":272,"context_line":"                self.br.add_flow(priority\u003d50, proto\u003d\u0027arp\u0027, table\u003d0,"},{"line_number":273,"context_line":"                                 nw_dst\u003drouter_cidr, actions\u003d\"resubmit(,1),\""},{"line_number":274,"context_line":"                                                             \"resubmit(,3)\")"},{"line_number":275,"context_line":"                self.br.add_flow(priority\u003d100, proto\u003d\u0027ip\u0027, table\u003d0,"},{"line_number":276,"context_line":"                                 nw_dst\u003drouter_cidr, actions\u003d\"resubmit(,1)\")"},{"line_number":277,"context_line":"                self.br.add_flow(priority\u003d300, proto\u003d\u0027arp\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_9c3b2dd0","line":274,"range":{"start_line":274,"start_character":71,"end_line":274,"end_character":73},"updated":"2017-07-31 11:07:17.000000000","message":"Table 1 is DVR_TO_SRC_MAC.\n\nWhich one is 3?","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            if \u0027:\u0027 not in router_ip and router_cidr:"},{"line_number":272,"context_line":"                self.br.add_flow(priority\u003d50, proto\u003d\u0027arp\u0027, table\u003d0,"},{"line_number":273,"context_line":"                                 nw_dst\u003drouter_cidr, actions\u003d\"resubmit(,1),\""},{"line_number":274,"context_line":"                                                             \"resubmit(,3)\")"},{"line_number":275,"context_line":"                self.br.add_flow(priority\u003d100, proto\u003d\u0027ip\u0027, table\u003d0,"},{"line_number":276,"context_line":"                                 nw_dst\u003drouter_cidr, actions\u003d\"resubmit(,1)\")"},{"line_number":277,"context_line":"                self.br.add_flow(priority\u003d300, proto\u003d\u0027arp\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_597a7224","line":274,"range":{"start_line":274,"start_character":71,"end_line":274,"end_character":73},"in_reply_to":"df3967d1_9c3b2dd0","updated":"2017-07-31 13:13:36.000000000","message":"It\u0027s a table used to rewrite arp requests sent to this router bridge and make them requests to the external gateway.\nWhen an external gateway hasn\u0027t been added there is only a drop flow in this table.\nThe responses are used to extract the external gateway mac addresses and create flows through a learn action on table 0.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                        \"resubmit(,2),resubmit(,3)\" %"},{"line_number":286,"context_line":"                        (mac_address, router_ip, mac_address))"},{"line_number":287,"context_line":"                self.br.add_flow(priority\u003d300, proto\u003d\u0027icmp\u0027, icmp_type\u003d8,"},{"line_number":288,"context_line":"                        nw_dst\u003drouter_ip, table\u003d1,"},{"line_number":289,"context_line":"                        actions\u003d\"move:NXM_OF_IP_SRC[]-\u003eNXM_OF_IP_DST[],\""},{"line_number":290,"context_line":"                        \"mod_nw_src:%s,load:0x00-\u003eNXM_OF_ICMP_TYPE[],\""},{"line_number":291,"context_line":"                        \"move:NXM_OF_ETH_SRC[]-\u003eNXM_OF_ETH_DST[],\""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_9cae8de5","line":288,"updated":"2017-07-31 11:07:17.000000000","message":"Shouldn\u0027t you match in this flow the in_port too?","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                        \"resubmit(,2),resubmit(,3)\" %"},{"line_number":286,"context_line":"                        (mac_address, router_ip, mac_address))"},{"line_number":287,"context_line":"                self.br.add_flow(priority\u003d300, proto\u003d\u0027icmp\u0027, icmp_type\u003d8,"},{"line_number":288,"context_line":"                        nw_dst\u003drouter_ip, table\u003d1,"},{"line_number":289,"context_line":"                        actions\u003d\"move:NXM_OF_IP_SRC[]-\u003eNXM_OF_IP_DST[],\""},{"line_number":290,"context_line":"                        \"mod_nw_src:%s,load:0x00-\u003eNXM_OF_ICMP_TYPE[],\""},{"line_number":291,"context_line":"                        \"move:NXM_OF_ETH_SRC[]-\u003eNXM_OF_ETH_DST[],\""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_ecfe0204","line":288,"in_reply_to":"df3967d1_9cae8de5","updated":"2017-07-31 13:13:36.000000000","message":"Let me get back to you on this one.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":292,"context_line":"                        \"mod_dl_src:%s,\""},{"line_number":293,"context_line":"                        \"resubmit(,2)\" %"},{"line_number":294,"context_line":"                        (router_ip, mac_address))"},{"line_number":295,"context_line":"                self.br.add_flow(priority\u003d150, table\u003d2, proto\u003d\u0027icmp\u0027,"},{"line_number":296,"context_line":"                                 eth_src\u003dmac_address, nw_src\u003drouter_ip,"},{"line_number":297,"context_line":"                                 actions\u003d\u0027IN_PORT\u0027)"},{"line_number":298,"context_line":"            elif \u0027:\u0027 in router_ip and router_cidr:"},{"line_number":299,"context_line":"                ipv6_addr \u003d ipaddress.ip_address(router_ip)"},{"line_number":300,"context_line":"                icmp6_addr \u003d ICMP6_SNMA + ipv6_addr.exploded[-7:]"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_9c4a0d25","line":297,"range":{"start_line":295,"start_character":16,"end_line":297,"end_character":51},"updated":"2017-07-31 11:07:17.000000000","message":"Is this the icmp packet resubmitted by L287? If it is, why don\u0027t you send this packet to the port in the other flow? Instead of creating another flow to do this.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":292,"context_line":"                        \"mod_dl_src:%s,\""},{"line_number":293,"context_line":"                        \"resubmit(,2)\" %"},{"line_number":294,"context_line":"                        (router_ip, mac_address))"},{"line_number":295,"context_line":"                self.br.add_flow(priority\u003d150, table\u003d2, proto\u003d\u0027icmp\u0027,"},{"line_number":296,"context_line":"                                 eth_src\u003dmac_address, nw_src\u003drouter_ip,"},{"line_number":297,"context_line":"                                 actions\u003d\u0027IN_PORT\u0027)"},{"line_number":298,"context_line":"            elif \u0027:\u0027 in router_ip and router_cidr:"},{"line_number":299,"context_line":"                ipv6_addr \u003d ipaddress.ip_address(router_ip)"},{"line_number":300,"context_line":"                icmp6_addr \u003d ICMP6_SNMA + ipv6_addr.exploded[-7:]"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_993fbad5","line":297,"range":{"start_line":295,"start_character":16,"end_line":297,"end_character":51},"in_reply_to":"df3967d1_9c4a0d25","updated":"2017-07-31 13:13:36.000000000","message":"It\u0027s simply to keep all \"internal\" output actions on the same table.\nAll the external output actions are made on table 4 by learn actions.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"557ab66e4df45b7becc6584b352737bbb22daa99","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import collections"},{"line_number":16,"context_line":"import ipaddress"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron_lib import constants as lib_constants"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f2577a7_fc142c50","line":17,"updated":"2017-09-13 20:10:40.000000000","message":"Is it possible to chunk this file into multiple files?\nThis file is too huge.","commit_id":"d6e1b76713d2908b3a4e8dad010ea1aeb1dbb437"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.dist_fip_count \u003d None"},{"line_number":77,"context_line":"        self.fip_ns \u003d None"},{"line_number":78,"context_line":"        self.current_ports \u003d {}"},{"line_number":79,"context_line":"        self._floating_ips \u003d {}"},{"line_number":80,"context_line":"        self.int_br \u003d ovs_lib.OVSBridge(self.agent_conf.OVS.integration_bridge"},{"line_number":81,"context_line":"                         if hasattr(self.agent_conf.OVS, \"integration_bridge\")"},{"line_number":82,"context_line":"                         else \"br-int\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_750688d0","line":79,"updated":"2018-06-14 16:50:27.000000000","message":"Seems like a lot of the above should live in the parent class?  At least in the existing code these are in RouterInfo.\n\nSame comments for below methods.","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        self.disable_radvd()"},{"line_number":137,"context_line":"        LOG.debug(\"\\n\\n\\n\\n\\ndvr local router deleted\\n\\n\\n\\n\\n\")"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def gen_name(self, prefix, uuid):"},{"line_number":140,"context_line":"        return (prefix + uuid)[:ovs_interface.OVSInterfaceDriver.DEV_NAME_LEN]"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def get_external_device_name(self, port_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_f58db835","line":139,"updated":"2018-06-14 16:50:27.000000000","message":"make private?","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/agent/l3/openflow_utils/common.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        subnet_mac \u003d self.mac_addresses[cidr[of_port]]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        for p in subnet_ports:"},{"line_number":65,"context_line":"            if p[\u0027device_owner\u0027] not in \\"},{"line_number":66,"context_line":"                    lib_constants.ROUTER_INTERFACE_OWNERS:"},{"line_number":67,"context_line":"                for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":68,"context_line":"                    self._setup_ip_forwarder_flows(ip[\u0027ip_address\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_95556421","line":65,"range":{"start_line":65,"start_character":40,"end_line":65,"end_character":41},"updated":"2018-06-14 16:50:27.000000000","message":"nit: can use () around if() block to avoid the backslash.","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        for subnet in ex_gw_port[\u0027subnets\u0027]:"},{"line_number":185,"context_line":"            for fixed_ip in ex_gw_port[\u0027fixed_ips\u0027]:"},{"line_number":186,"context_line":"                ip \u003d fixed_ip[\u0027ip_address\u0027]"},{"line_number":187,"context_line":"                ip_cidr \u003d ip + \"/%s\" % fixed_ip[\u0027prefixlen\u0027]"},{"line_number":188,"context_line":"                if (common_utils.get_ip_version(ip) \u003d\u003d 4 and"},{"line_number":189,"context_line":"                        self._check_ip_in_subnet(ip_cidr, subnet[\u0027cidr\u0027])):"},{"line_number":190,"context_line":"                    hex_str \u003d \u0027{:02X}{:02X}{:02X}{:02X}\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_55ba6c71","line":187,"range":{"start_line":187,"start_character":16,"end_line":187,"end_character":60},"updated":"2018-06-14 16:50:27.000000000","message":"ip_cidr \u003d common_utils.ip_to_cidr(ip, fixed_ip[\u0027prefixlen\u0027])","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                                    (gateway_mac.replace(\u0027:\u0027, \"\"),"},{"line_number":205,"context_line":"                                     gateway_mac, ip_hex, gateway_ip_hex,"},{"line_number":206,"context_line":"                                     port))"},{"line_number":207,"context_line":"                elif (common_utils.get_ip_version(ip) \u003d\u003d 6 and"},{"line_number":208,"context_line":"                        self._check_ip_in_subnet(ip_cidr, subnet[\u0027cidr\u0027])):"},{"line_number":209,"context_line":"                    gate_ipv6 \u003d ipaddress.ip_address(subnet[\u0027gateway_ip\u0027])"},{"line_number":210,"context_line":"                    ipv6 \u003d ipaddress.ip_address(ip)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_355d7079","line":207,"range":{"start_line":207,"start_character":57,"end_line":207,"end_character":58},"updated":"2018-06-14 16:50:27.000000000","message":"nit: please use the lib_constants values as was done for IPv4 above.  There are other occurrences in this file.","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/agent/l3/openflow_utils/external_config.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                             actions\u003dipv4_actions[:-1])"},{"line_number":63,"context_line":"        if ipv6_actions_rsp:"},{"line_number":64,"context_line":"            self.br.add_flow(table\u003dmac_learning_table, priority\u003d150,"},{"line_number":65,"context_line":"                             proto\u003d\u0027icmp6\u0027, icmpv6_type\u003d133,"},{"line_number":66,"context_line":"                             actions\u003dipv6_actions_rsp[:-1])"},{"line_number":67,"context_line":"            self.br.add_flow(table\u003dmac_learning_table, priority\u003d150,"},{"line_number":68,"context_line":"                             proto\u003d\u0027icmp6\u0027, icmpv6_type\u003d135,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_38424511","line":65,"range":{"start_line":65,"start_character":56,"end_line":65,"end_character":59},"updated":"2018-06-14 16:50:27.000000000","message":"Please use the values from neutron_lib.constants for these since it makes it more understanable, for example, ICMPV6_TYPE_RS for 133.  Same applies below and to other items like proto, etc.","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        for fixed_ip in ex_gw_port[\u0027fixed_ips\u0027]:"},{"line_number":95,"context_line":"            ip \u003d fixed_ip[\u0027ip_address\u0027]"},{"line_number":96,"context_line":"            if common_utils.get_ip_version(ip) \u003d\u003d 6:"},{"line_number":97,"context_line":"                self.br.delete_flows(proto\u003d\u0027ipv6\u0027, dl_src\u003dgateway_mac)"},{"line_number":98,"context_line":"                self.br.delete_flows(proto\u003d\u0027icmp6\u0027, dl_src\u003dgateway_mac)"},{"line_number":99,"context_line":"                self.br.delete_flows(proto\u003d\u0027ipv6\u0027, ipv6_dst\u003dip)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_1853c918","line":96,"range":{"start_line":96,"start_character":50,"end_line":96,"end_character":51},"updated":"2018-06-14 16:50:27.000000000","message":"same nit on using the constants value","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/agent/l3/openflow_utils/floating_ip.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        mac \u003d vif.vif_mac"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        for ip in ext_port[\u0027fixed_ips\u0027]:"},{"line_number":51,"context_line":"            pref \u003d ip[\u0027ip_address\u0027] + \u0027/\u0027 + str(ip[\u0027prefixlen\u0027])"},{"line_number":52,"context_line":"            if self._check_ip_in_subnet(float_ip, pref):"},{"line_number":53,"context_line":"                of_port \u003d self.of_port[ip[\u0027ip_address\u0027]]"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_3829e536","line":51,"updated":"2018-06-14 16:50:27.000000000","message":"looks like this is making a cidr, can use common_utils.ip_to_cidr()","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        those that should not longer be configured."},{"line_number":117,"context_line":"        \"\"\""},{"line_number":118,"context_line":"        if not self.fip_cookie:"},{"line_number":119,"context_line":"            self.fip_cookie \u003d ovs_lib.generate_random_cookie()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        fip_statuses \u003d {}"},{"line_number":122,"context_line":"        if interface_name is None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_f8c84d76","line":119,"updated":"2018-06-14 16:50:27.000000000","message":"Below looks like a copy/paste of the code from RouterInfo class, which isn\u0027t going to be very maintainable if it\u0027s in two places.","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/agent/l3/router_info.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":381,"context_line":"            elif fip_statuses[fip[\u0027id\u0027]] \u003d\u003d fip[\u0027status\u0027]:"},{"line_number":382,"context_line":"                # mark the status as not changed. we can\u0027t remove it because"},{"line_number":383,"context_line":"                # that\u0027s how the caller determines that it was removed"},{"line_number":384,"context_line":"                fip_statuses[fip[\u0027id\u0027]] \u003d router_info_base. \\"},{"line_number":385,"context_line":"                                          FLOATINGIP_STATUS_NOCHANGE"},{"line_number":386,"context_line":"        fips_to_remove \u003d ("},{"line_number":387,"context_line":"            ip_cidr for ip_cidr in existing_cidrs - new_cidrs - gw_cidrs"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_989a796d","line":384,"range":{"start_line":384,"start_character":60,"end_line":384,"end_character":61},"updated":"2018-06-14 16:50:27.000000000","message":"nit: just not a fan of backslashes","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/agent/l3/router_info_base.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"ADDRESS_SCOPE_MARK_MASK \u003d \"0xffff0000\""},{"line_number":21,"context_line":"ADDRESS_SCOPE_MARK_ID_MIN \u003d 1024"},{"line_number":22,"context_line":"ADDRESS_SCOPE_MARK_ID_MAX \u003d 2048"},{"line_number":23,"context_line":"DEFAULT_ADDRESS_SCOPE \u003d \"noscope\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_18950933","line":23,"updated":"2018-06-14 16:50:27.000000000","message":"these are all duplicate from router_info.py","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/agent/linux/external_process.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            if (\"agent_mode\" in self.conf and \"dvr_bridge\" in"},{"line_number":87,"context_line":"                    self.conf.agent_mode):"},{"line_number":88,"context_line":"                LOG.debug(\u0027dvr_bridge active\u0027)"},{"line_number":89,"context_line":"            else:"},{"line_number":90,"context_line":"                ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dself.namespace)"},{"line_number":91,"context_line":"                ip_wrapper.netns.execute(cmd, addl_env\u003dself.cmd_addl_env,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_f8f28d9b","line":88,"updated":"2018-06-14 16:50:27.000000000","message":"Do you have a better way to do this?","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/common/constants.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"ROUTER_STATUS_ACTIVE \u003d \u0027ACTIVE\u0027"},{"line_number":23,"context_line":"ROUTER_STATUS_ERROR \u003d \u0027ERROR\u0027"},{"line_number":24,"context_line":"L3_AGENT_MODE_DVR_BRIDGE \u003d \u0027dvr_bridge\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"DEVICE_ID_RESERVED_DHCP_PORT \u003d \"reserved_dhcp_port\""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_d3b528f0","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":24},"updated":"2017-07-31 11:07:17.000000000","message":"In future patches, you can locate this in neutron-lib, along with lib_constants.L3_AGENT_MODE_DVR and lib_constants.L3_AGENT_MODE_DVR_SNA","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"ROUTER_STATUS_ACTIVE \u003d \u0027ACTIVE\u0027"},{"line_number":23,"context_line":"ROUTER_STATUS_ERROR \u003d \u0027ERROR\u0027"},{"line_number":24,"context_line":"L3_AGENT_MODE_DVR_BRIDGE \u003d \u0027dvr_bridge\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"DEVICE_ID_RESERVED_DHCP_PORT \u003d \"reserved_dhcp_port\""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_d67d11e8","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":24},"in_reply_to":"df3967d1_d3b528f0","updated":"2017-07-31 13:13:36.000000000","message":"ack.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"00581e898cf59a3c86ee3fedd88705c5fbc526c1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"VALID_ROUTER_STATUS \u003d (ROUTER_STATUS_ACTIVE,"},{"line_number":27,"context_line":"                       ROUTER_STATUS_ALLOCATING,"},{"line_number":28,"context_line":"                       ROUTER_STATUS_ERROR)"},{"line_number":29,"context_line":"L3_AGENT_MODE_DVR_BRIDGE \u003d \u0027dvr_bridge\u0027"},{"line_number":30,"context_line":"DVR_BRIDGE_INPUT_TABLE \u003d 0"},{"line_number":31,"context_line":"DVR_BRIDGE_NEXT_HOP_TABLE \u003d 1"},{"line_number":32,"context_line":"DVR_BRIDGE_INT_OUTPUT_TABLE \u003d 2"}],"source_content_type":"text/x-python","patch_set":15,"id":"bfdaf3ff_0b957940","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":39},"updated":"2019-01-17 23:15:36.000000000","message":"This should be added to neutron_lib.constants","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"084a344f310998d6eca6b0b64fea6dd9c5b8c7a7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"DVR_BRIDGE_INT_OUTPUT_TABLE \u003d 2"},{"line_number":33,"context_line":"DVR_BRIDGE_MAC_LEARNING_TABLE \u003d 3"},{"line_number":34,"context_line":"DVR_BRIDGE_EXT_OUTPUT_TABLE \u003d 4"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"DEVICE_ID_RESERVED_DHCP_PORT \u003d \"reserved_dhcp_port\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"HA_ROUTER_STATE_KEY \u003d \u0027_ha_state\u0027"},{"line_number":39,"context_line":"METERING_LABEL_KEY \u003d \u0027_metering_labels\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_13c76c14","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":51},"updated":"2018-08-10 12:18:16.000000000","message":"I presume this was moved to neutron-lib, this can be removed.","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/conf/agent/l3/config.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22069f6842815b6a2bd065841f57dd097ebd3be3","unresolved":false,"context_lines":[{"line_number":25,"context_line":"OPTS \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027agent_mode\u0027, default\u003dconstants.L3_AGENT_MODE_LEGACY,"},{"line_number":27,"context_line":"               choices\u003d(constants.L3_AGENT_MODE_DVR,"},{"line_number":28,"context_line":"                        common_consts.L3_AGENT_MODE_DVR_BRIDGE,"},{"line_number":29,"context_line":"                        constants.L3_AGENT_MODE_DVR_SNAT,"},{"line_number":30,"context_line":"                        constants.L3_AGENT_MODE_LEGACY,"},{"line_number":31,"context_line":"                        constants.L3_AGENT_MODE_DVR_NO_EXTERNAL),"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_9844b9ba","line":28,"updated":"2018-06-14 16:50:27.000000000","message":"This should be the last entry in the list, and a description should be added in the help message.","commit_id":"b6aec8726c0e2bf7b918b565e32a945bf20d2031"}],"neutron/db/l3_hamode_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":652,"context_line":"    def get_ha_sync_data_for_host(self, context, host, agent,"},{"line_number":653,"context_line":"                                  router_ids\u003dNone, active\u003dNone):"},{"line_number":654,"context_line":"        agent_mode \u003d self._get_agent_mode(agent)"},{"line_number":655,"context_line":"        dvr_agent_mode \u003d (agent_mode in [\"dvr_bridge\","},{"line_number":656,"context_line":"                                         constants.L3_AGENT_MODE_DVR_SNAT,"},{"line_number":657,"context_line":"                                         constants.L3_AGENT_MODE_DVR])"},{"line_number":658,"context_line":"        if (dvr_agent_mode and n_utils.is_extension_supported("}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_f3326ca7","line":655,"range":{"start_line":655,"start_character":41,"end_line":655,"end_character":54},"updated":"2017-07-31 11:07:17.000000000","message":"Hmmm, maybe use the constant","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":652,"context_line":"    def get_ha_sync_data_for_host(self, context, host, agent,"},{"line_number":653,"context_line":"                                  router_ids\u003dNone, active\u003dNone):"},{"line_number":654,"context_line":"        agent_mode \u003d self._get_agent_mode(agent)"},{"line_number":655,"context_line":"        dvr_agent_mode \u003d (agent_mode in [\"dvr_bridge\","},{"line_number":656,"context_line":"                                         constants.L3_AGENT_MODE_DVR_SNAT,"},{"line_number":657,"context_line":"                                         constants.L3_AGENT_MODE_DVR])"},{"line_number":658,"context_line":"        if (dvr_agent_mode and n_utils.is_extension_supported("}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_7912d65a","line":655,"range":{"start_line":655,"start_character":41,"end_line":655,"end_character":54},"in_reply_to":"df3967d1_f3326ca7","updated":"2017-07-31 13:13:36.000000000","message":"ack","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ef2f7cd2898830756dd3014ff6772ef98495b55","unresolved":false,"context_lines":[{"line_number":1525,"context_line":"                network \u003d self.get_network(plugin_context, port[\u0027network_id\u0027])"},{"line_number":1526,"context_line":""},{"line_number":1527,"context_line":"            if port[\u0027device_owner\u0027] \u003d\u003d const.DEVICE_OWNER_DVR_INTERFACE:"},{"line_number":1528,"context_line":"                binding \u003d db.get_distributed_port_bindings("},{"line_number":1529,"context_line":"                    plugin_context, port[\u0027id\u0027])[0]"},{"line_number":1530,"context_line":"                if not binding:"},{"line_number":1531,"context_line":"                    LOG.error(_LE(\"Binding info for DVR port %s not found\"),"},{"line_number":1532,"context_line":"                              port_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_337d94b1","line":1529,"range":{"start_line":1528,"start_character":16,"end_line":1529,"end_character":50},"updated":"2017-07-31 11:07:17.000000000","message":"Sorry, I don\u0027t understand this change. If I\u0027m not wrong, you need to retrieve the port binding from this specific host, don\u0027t you?","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"99d1089c13ceeee9d72048716e0f7c454c2ec3ab","unresolved":false,"context_lines":[{"line_number":1525,"context_line":"                network \u003d self.get_network(plugin_context, port[\u0027network_id\u0027])"},{"line_number":1526,"context_line":""},{"line_number":1527,"context_line":"            if port[\u0027device_owner\u0027] \u003d\u003d const.DEVICE_OWNER_DVR_INTERFACE:"},{"line_number":1528,"context_line":"                binding \u003d db.get_distributed_port_bindings("},{"line_number":1529,"context_line":"                    plugin_context, port[\u0027id\u0027])[0]"},{"line_number":1530,"context_line":"                if not binding:"},{"line_number":1531,"context_line":"                    LOG.error(_LE(\"Binding info for DVR port %s not found\"),"},{"line_number":1532,"context_line":"                              port_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_f67815f9","line":1529,"range":{"start_line":1528,"start_character":16,"end_line":1529,"end_character":50},"in_reply_to":"df3967d1_337d94b1","updated":"2017-07-31 13:13:36.000000000","message":"There was a bug that caused q-svc to throw errors without this change, however I believe it has been fixed since the last patch set.","commit_id":"b82de782a9c354cb7b9d1d7c822e00e34342e90b"}]}
