)]}'
{"neutron/agent/linux/openvswitch_firewall/firewall.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"680b2ba0b0962b57cf6141aa5afb3030d784c94f","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        self.initialize_port_flows(of_port)"},{"line_number":276,"context_line":"        self.add_flows_from_rules(of_port)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def update_port_filter(self, port):"},{"line_number":279,"context_line":"        \"\"\"Update rules for given port"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        Current existing filtering rules are removed and new ones are generated"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_421dc364","line":278,"range":{"start_line":278,"start_character":8,"end_line":278,"end_character":26},"updated":"2016-12-06 12:51:37.000000000","message":"in case the agent (update_stale_ofport_rules) noticed the ofport change,\nit comes here, doesn\u0027t it?","commit_id":"8a30fbe68dfd27282371087633860209c4285e31"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"5603a1d1557b8564b6817dcc6215f6c7bc995d4d","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        self.initialize_port_flows(of_port)"},{"line_number":276,"context_line":"        self.add_flows_from_rules(of_port)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def update_port_filter(self, port):"},{"line_number":279,"context_line":"        \"\"\"Update rules for given port"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        Current existing filtering rules are removed and new ones are generated"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a3c09a3_accf9127","line":278,"range":{"start_line":278,"start_character":8,"end_line":278,"end_character":26},"in_reply_to":"1a6eadb0_608e7b2f","updated":"2017-01-17 03:43:10.000000000","message":"If minimize_polling \u003d\u003d False, this function is called.\nOtherwise, prepare_port_filter is called instead.","commit_id":"8a30fbe68dfd27282371087633860209c4285e31"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"4b246cef1edac7a19c7bea19b49907c275910dd2","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        self.initialize_port_flows(of_port)"},{"line_number":276,"context_line":"        self.add_flows_from_rules(of_port)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def update_port_filter(self, port):"},{"line_number":279,"context_line":"        \"\"\"Update rules for given port"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        Current existing filtering rules are removed and new ones are generated"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_608e7b2f","line":278,"range":{"start_line":278,"start_character":8,"end_line":278,"end_character":26},"in_reply_to":"3a71b18c_421dc364","updated":"2016-12-21 09:34:22.000000000","message":"You are probably correct.\n\nThe tempest tests in question seem to cause vif unplug+plug events, so this patch fixes the tempest issue.\n\nupdate_stale_ofport_rules should trigger prepare_port_filter for ovs firewall in some way. Otherwise you are toast because of its delete_flows(in_port\u003dofport) call.\n\nDo you know how to achieve this? Need to touch securitygroups_rpc.py?","commit_id":"8a30fbe68dfd27282371087633860209c4285e31"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"e0c0faf6c701b5f1354d66efe47f4ccc13d33525","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def get_or_create_ofport(self, port):"},{"line_number":247,"context_line":"        port_id \u003d port[\u0027device\u0027]"},{"line_number":248,"context_line":"        ovs_port \u003d self.int_br.br.get_vif_port_by_id(port_id)"},{"line_number":249,"context_line":"        if not ovs_port:"},{"line_number":250,"context_line":"            raise exceptions.OVSFWPortNotFound(port_id\u003dport_id)"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a3c09a3_1b61b9d3","line":248,"updated":"2017-01-17 07:04:18.000000000","message":"oh it seems to cause problems when called from remove_port_filter.","commit_id":"70794423395919750b06d6850dc95fc587a681a6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e891f7f7d666eb33c439da171d84621f49b43b17","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        for table in ovs_consts.OVS_FIREWALL_TABLES:"},{"line_number":244,"context_line":"            self.int_br.br.add_flow(table\u003dtable, priority\u003d0, actions\u003d\u0027drop\u0027)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def get_or_create_ofport(self, port, create\u003dFalse):"},{"line_number":247,"context_line":"        \"\"\"Get ofport specified by port[\u0027device\u0027]."},{"line_number":248,"context_line":"        If create is True, check and reflect ofport changes."},{"line_number":249,"context_line":"        If ofport is nonexistent, create and return one if create is"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_d06b431c","line":246,"range":{"start_line":246,"start_character":8,"end_line":246,"end_character":28},"updated":"2017-01-18 10:22:02.000000000","message":"We should break this method into get_ofport() and create_ofport() based on how it\u0027s used below on L281 and L282. It will also simplify the code.","commit_id":"40a6ccf8463db24efb28f3bfff2ead03451351c6"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"33d7a26ff1d3ec9c7c152e31bb7edd1a2decd13d","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        for table in ovs_consts.OVS_FIREWALL_TABLES:"},{"line_number":244,"context_line":"            self.int_br.br.add_flow(table\u003dtable, priority\u003d0, actions\u003d\u0027drop\u0027)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def get_or_create_ofport(self, port, create\u003dFalse):"},{"line_number":247,"context_line":"        \"\"\"Get ofport specified by port[\u0027device\u0027]."},{"line_number":248,"context_line":"        If create is True, check and reflect ofport changes."},{"line_number":249,"context_line":"        If ofport is nonexistent, create and return one if create is"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a3905b3_595a1ff3","line":246,"range":{"start_line":246,"start_character":8,"end_line":246,"end_character":28},"in_reply_to":"7a3c09a3_d06b431c","updated":"2017-01-24 08:07:19.000000000","message":"Done","commit_id":"40a6ccf8463db24efb28f3bfff2ead03451351c6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"433e21868e412d65a32711de6801c9a3d3723d8c","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def get_ofport(self, port):"},{"line_number":247,"context_line":"        port_id \u003d port[\u0027device\u0027]"},{"line_number":248,"context_line":"        return self.sg_port_map.ports.get(port_id)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def get_or_create_ofport(self, port):"},{"line_number":251,"context_line":"        \"\"\"Get ofport specified by port[\u0027device\u0027], checking and reflecting"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_add9f9f4","line":248,"range":{"start_line":248,"start_character":37,"end_line":248,"end_character":41},"updated":"2017-01-24 09:47:47.000000000","message":"We never check for None on places where get_ofport() is called. We should raise an exception here to avoid passing None to delete_all_port_flows() ? (e.g. on L307) It\u0027s gonna produce an AttributeError later anyway.","commit_id":"07ecb3e47608dd1914b0bb274c0de33d2e6cf172"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"253e85d108dc17fd93ce90bda08c2c499d41d35c","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def get_ofport(self, port):"},{"line_number":247,"context_line":"        port_id \u003d port[\u0027device\u0027]"},{"line_number":248,"context_line":"        return self.sg_port_map.ports.get(port_id)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def get_or_create_ofport(self, port):"},{"line_number":251,"context_line":"        \"\"\"Get ofport specified by port[\u0027device\u0027], checking and reflecting"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_5478e68f","line":248,"range":{"start_line":248,"start_character":37,"end_line":248,"end_character":41},"in_reply_to":"5a3905b3_4ada09eb","updated":"2017-01-25 08:34:03.000000000","message":"L301 would still raise a KeyError exception on L276","commit_id":"07ecb3e47608dd1914b0bb274c0de33d2e6cf172"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"186c27089cb308a91bdb4a749aefbc13c2ec6aa5","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def get_ofport(self, port):"},{"line_number":247,"context_line":"        port_id \u003d port[\u0027device\u0027]"},{"line_number":248,"context_line":"        return self.sg_port_map.ports.get(port_id)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def get_or_create_ofport(self, port):"},{"line_number":251,"context_line":"        \"\"\"Get ofport specified by port[\u0027device\u0027], checking and reflecting"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_14b65e3d","line":248,"range":{"start_line":248,"start_character":37,"end_line":248,"end_character":41},"in_reply_to":"5a3905b3_5478e68f","updated":"2017-01-25 08:35:00.000000000","message":"Ignore my comment :)","commit_id":"07ecb3e47608dd1914b0bb274c0de33d2e6cf172"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"3bbddc6efe43f9ab5b001bef1ee5b0a38f32661e","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def get_ofport(self, port):"},{"line_number":247,"context_line":"        port_id \u003d port[\u0027device\u0027]"},{"line_number":248,"context_line":"        return self.sg_port_map.ports.get(port_id)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def get_or_create_ofport(self, port):"},{"line_number":251,"context_line":"        \"\"\"Get ofport specified by port[\u0027device\u0027], checking and reflecting"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_4ada09eb","line":248,"range":{"start_line":248,"start_character":37,"end_line":248,"end_character":41},"in_reply_to":"5a3905b3_add9f9f4","updated":"2017-01-25 02:11:08.000000000","message":"For L307, the existence of old_of_port is checked in L301.\n\nThey could be rewritten using exceptions, though.","commit_id":"07ecb3e47608dd1914b0bb274c0de33d2e6cf172"}]}
