)]}'
{"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0465ba52bd9dd5cd8b90d6c7082d23b0980a1872","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    return _IS_ADMIN_STATE_DOWN_NECESSARY"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def is_port_bound(port):"},{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        active_binding \u003d plugin_utils.get_port_binding_by_status_and_host("},{"line_number":73,"context_line":"            port.get(\"port_bindings\", []), const.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_2885a6cf","line":70,"range":{"start_line":70,"start_character":4,"end_line":70,"end_character":17},"updated":"2020-04-01 13:42:47.000000000","message":"TODO, nit: IMO, this method should go to neutron_lib.utils.net","commit_id":"e6f8626e5f8b113a62b9e380525a5827805fa623"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2da4f39c5e116d330345a4a06341f77ecddfae08","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    return _IS_ADMIN_STATE_DOWN_NECESSARY"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def is_port_bound(port):"},{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        active_binding \u003d plugin_utils.get_port_binding_by_status_and_host("},{"line_number":73,"context_line":"            port.get(\"port_bindings\", []), const.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_eb7e18e2","line":70,"range":{"start_line":70,"start_character":4,"end_line":70,"end_character":17},"in_reply_to":"df33271e_2885a6cf","updated":"2020-04-01 14:37:17.000000000","message":"Done","commit_id":"e6f8626e5f8b113a62b9e380525a5827805fa623"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0465ba52bd9dd5cd8b90d6c7082d23b0980a1872","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        active_binding \u003d plugin_utils.get_port_binding_by_status_and_host("},{"line_number":73,"context_line":"            port.get(\"port_bindings\", []), const.ACTIVE)"},{"line_number":74,"context_line":"        return active_binding[portbindings_extended.VIF_TYPE] not in ["},{"line_number":75,"context_line":"            portbindings.VIF_TYPE_UNBOUND,"},{"line_number":76,"context_line":"            portbindings.VIF_TYPE_BINDING_FAILED]"},{"line_number":77,"context_line":"    except n_exc.PortBindingNotFound:"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_480d8a8e","line":74,"range":{"start_line":74,"start_character":15,"end_line":74,"end_character":29},"updated":"2020-04-01 13:42:47.000000000","message":"\"get_port_binding_by_status_and_host\" can return None, you should handle this.\n\nIf active_bindings is None, then this can be considered and unbound.","commit_id":"e6f8626e5f8b113a62b9e380525a5827805fa623"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2da4f39c5e116d330345a4a06341f77ecddfae08","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        active_binding \u003d plugin_utils.get_port_binding_by_status_and_host("},{"line_number":73,"context_line":"            port.get(\"port_bindings\", []), const.ACTIVE)"},{"line_number":74,"context_line":"        return active_binding[portbindings_extended.VIF_TYPE] not in ["},{"line_number":75,"context_line":"            portbindings.VIF_TYPE_UNBOUND,"},{"line_number":76,"context_line":"            portbindings.VIF_TYPE_BINDING_FAILED]"},{"line_number":77,"context_line":"    except n_exc.PortBindingNotFound:"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_cb2074fa","line":74,"range":{"start_line":74,"start_character":15,"end_line":74,"end_character":29},"in_reply_to":"df33271e_480d8a8e","updated":"2020-04-01 14:37:17.000000000","message":"Done","commit_id":"e6f8626e5f8b113a62b9e380525a5827805fa623"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0465ba52bd9dd5cd8b90d6c7082d23b0980a1872","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        return active_binding[portbindings_extended.VIF_TYPE] not in ["},{"line_number":75,"context_line":"            portbindings.VIF_TYPE_UNBOUND,"},{"line_number":76,"context_line":"            portbindings.VIF_TYPE_BINDING_FAILED]"},{"line_number":77,"context_line":"    except n_exc.PortBindingNotFound:"},{"line_number":78,"context_line":"        LOG.warning(\"Binding for port %s was not found.\", port)"},{"line_number":79,"context_line":"        return False"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_884152ac","line":77,"updated":"2020-04-01 13:42:47.000000000","message":"Because \"get_port_binding_by_status_and_host\" kwarg \"raise_if_not_found\" default value is False, this method won\u0027t raise PortBindingNotFound. This try/catch is not needed.","commit_id":"e6f8626e5f8b113a62b9e380525a5827805fa623"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2da4f39c5e116d330345a4a06341f77ecddfae08","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        return active_binding[portbindings_extended.VIF_TYPE] not in ["},{"line_number":75,"context_line":"            portbindings.VIF_TYPE_UNBOUND,"},{"line_number":76,"context_line":"            portbindings.VIF_TYPE_BINDING_FAILED]"},{"line_number":77,"context_line":"    except n_exc.PortBindingNotFound:"},{"line_number":78,"context_line":"        LOG.warning(\"Binding for port %s was not found.\", port)"},{"line_number":79,"context_line":"        return False"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_0b7c1cea","line":77,"in_reply_to":"df33271e_884152ac","updated":"2020-04-01 14:37:17.000000000","message":"Done","commit_id":"e6f8626e5f8b113a62b9e380525a5827805fa623"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"14c5e17d9deab8512f1a30e9af935561fc5d4237","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                self.get_router(context.elevated(), router_id))"},{"line_number":1216,"context_line":"        return False"},{"line_number":1217,"context_line":""},{"line_number":1218,"context_line":"    def get_ports_under_dvr_connected_subnet(self, context, subnet_id):"},{"line_number":1219,"context_line":"        query \u003d dvr_mac_db.get_ports_query_by_subnet_and_ip(context, subnet_id)"},{"line_number":1220,"context_line":"        ports \u003d [p for p in query.all() if is_port_bound(p)]"},{"line_number":1221,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_c667cbb6","line":1218,"range":{"start_line":1218,"start_character":8,"end_line":1218,"end_character":44},"updated":"2020-04-01 14:57:26.000000000","message":"Not familiar with the dvr code base just wondering: Is this called every time a port gets bound? Even when a port was existing but not bound at a previous call? If not, we may miss populating arp entries for bound ports.","commit_id":"eb775458c6da57426703289c7b969caddb83d677"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"697c1963ba456c5e86e558ddfd10760cafab3af2","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                self.get_router(context.elevated(), router_id))"},{"line_number":1216,"context_line":"        return False"},{"line_number":1217,"context_line":""},{"line_number":1218,"context_line":"    def get_ports_under_dvr_connected_subnet(self, context, subnet_id):"},{"line_number":1219,"context_line":"        query \u003d dvr_mac_db.get_ports_query_by_subnet_and_ip(context, subnet_id)"},{"line_number":1220,"context_line":"        ports \u003d [p for p in query.all() if is_port_bound(p)]"},{"line_number":1221,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_01584a54","line":1218,"range":{"start_line":1218,"start_character":8,"end_line":1218,"end_character":44},"in_reply_to":"df33271e_0876cb70","updated":"2020-04-03 13:15:41.000000000","message":"Yes, I confirmed that today on my local dev env. PERM entries are added only when new subnet is plugged to the router, or if You spawn first vm on the host and router\u0027s namespace is created from scrach.\nIf You will create another vm on host where router already exists, it will not add this perm arp entry there.","commit_id":"eb775458c6da57426703289c7b969caddb83d677"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"1cae19475a62677c61aa67a277853915a282eabd","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                self.get_router(context.elevated(), router_id))"},{"line_number":1216,"context_line":"        return False"},{"line_number":1217,"context_line":""},{"line_number":1218,"context_line":"    def get_ports_under_dvr_connected_subnet(self, context, subnet_id):"},{"line_number":1219,"context_line":"        query \u003d dvr_mac_db.get_ports_query_by_subnet_and_ip(context, subnet_id)"},{"line_number":1220,"context_line":"        ports \u003d [p for p in query.all() if is_port_bound(p)]"},{"line_number":1221,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_0876cb70","line":1218,"range":{"start_line":1218,"start_character":8,"end_line":1218,"end_character":44},"in_reply_to":"df33271e_9c587488","updated":"2020-04-02 09:26:12.000000000","message":"Okay that means we already had ports not having permanent entries in the arp cache. Then having a few more should not be a problem. Thank you.","commit_id":"eb775458c6da57426703289c7b969caddb83d677"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d7a544343d07f90c493f65d06c1c69e21d7ba257","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                self.get_router(context.elevated(), router_id))"},{"line_number":1216,"context_line":"        return False"},{"line_number":1217,"context_line":""},{"line_number":1218,"context_line":"    def get_ports_under_dvr_connected_subnet(self, context, subnet_id):"},{"line_number":1219,"context_line":"        query \u003d dvr_mac_db.get_ports_query_by_subnet_and_ip(context, subnet_id)"},{"line_number":1220,"context_line":"        ports \u003d [p for p in query.all() if is_port_bound(p)]"},{"line_number":1221,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_9c587488","line":1218,"range":{"start_line":1218,"start_character":8,"end_line":1218,"end_character":44},"in_reply_to":"df33271e_c667cbb6","updated":"2020-04-01 16:00:03.000000000","message":"actually, based on my testing, it is another story because this is added only when subnet is plugged to the router. So if You will add port after subnet was plugged to the router, this arp cache will not be updated with new PERM entry.\nI will need to confirm that.\n\nMaybe it should be fixed but IMHO it can be done in another patch.","commit_id":"eb775458c6da57426703289c7b969caddb83d677"}],"neutron/tests/unit/db/test_l3_dvr_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bf970306d24f6efbc74bfa6e7ce6e233fc156667","unresolved":false,"context_lines":[{"line_number":1309,"context_line":"            dvr_subnet_ports \u003d self.mixin.get_ports_under_dvr_connected_subnet("},{"line_number":1310,"context_line":"                self.ctx, subnet[\u0027subnet\u0027][\u0027id\u0027])"},{"line_number":1311,"context_line":"            dvr_subnet_ports_ids \u003d [p[\u0027id\u0027] for p in dvr_subnet_ports]"},{"line_number":1312,"context_line":"            self.assertListEqual(fake_bound_ports_ids, dvr_subnet_ports_ids)"},{"line_number":1313,"context_line":""},{"line_number":1314,"context_line":"    @mock.patch.object(plugin_utils, \u0027can_port_be_bound_to_virtual_bridge\u0027,"},{"line_number":1315,"context_line":"                       return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_0c727fad","line":1312,"range":{"start_line":1312,"start_character":17,"end_line":1312,"end_character":32},"updated":"2020-04-01 07:41:44.000000000","message":"consider assertItemsEqual as order might be different in the list returned by get_ports_under_dvr_connected_subnet()","commit_id":"ab9034aa42c3dfce13b558aa381ce75369c37214"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f251e0ca2162cae24da19558f06b1f367b459c61","unresolved":false,"context_lines":[{"line_number":1309,"context_line":"            dvr_subnet_ports \u003d self.mixin.get_ports_under_dvr_connected_subnet("},{"line_number":1310,"context_line":"                self.ctx, subnet[\u0027subnet\u0027][\u0027id\u0027])"},{"line_number":1311,"context_line":"            dvr_subnet_ports_ids \u003d [p[\u0027id\u0027] for p in dvr_subnet_ports]"},{"line_number":1312,"context_line":"            self.assertListEqual(fake_bound_ports_ids, dvr_subnet_ports_ids)"},{"line_number":1313,"context_line":""},{"line_number":1314,"context_line":"    @mock.patch.object(plugin_utils, \u0027can_port_be_bound_to_virtual_bridge\u0027,"},{"line_number":1315,"context_line":"                       return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_6cceab63","line":1312,"range":{"start_line":1312,"start_character":17,"end_line":1312,"end_character":32},"in_reply_to":"df33271e_0c727fad","updated":"2020-04-01 08:05:49.000000000","message":"True :)","commit_id":"ab9034aa42c3dfce13b558aa381ce75369c37214"}]}
