)]}'
{"neutron/agent/linux/bridge_lib.py":[{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"200c643f6ae93a2e15c31f7ddff5a900f84e49ce","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def _execute(cls, op, mac, dev, ip_dst):"},{"line_number":109,"context_line":"        cmd \u003d [\u0027bridge\u0027, \u0027fdb\u0027, op, mac, \u0027dev\u0027, dev]"},{"line_number":110,"context_line":"        if ip_dst is not None:"},{"line_number":111,"context_line":"            cmd +\u003d [\u0027dst\u0027, ip_dst]"},{"line_number":112,"context_line":"        return utils.execute(cmd, run_as_root\u003dTrue)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_67aa69d6","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":30},"updated":"2016-07-04 11:58:12.000000000","message":"what about \u0027if ip_dst:\u0027?","commit_id":"5b5d62ebdcbbb8a8aab730da5fe244dae96048ba"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"8fbcfcabbcef1b55f2d1a8b7435c6aa2b2eed7eb","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def _execute(cls, op, mac, dev, ip_dst):"},{"line_number":109,"context_line":"        cmd \u003d [\u0027bridge\u0027, \u0027fdb\u0027, op, mac, \u0027dev\u0027, dev]"},{"line_number":110,"context_line":"        if ip_dst is not None:"},{"line_number":111,"context_line":"            cmd +\u003d [\u0027dst\u0027, ip_dst]"},{"line_number":112,"context_line":"        return utils.execute(cmd, run_as_root\u003dTrue)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_a4128ab2","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":30},"in_reply_to":"1aa78d24_67aa69d6","updated":"2016-07-04 12:38:05.000000000","message":"suppose ip_dst is an empty string (and it shouldn\u0027t be),\nthe error will be suppressed here and it would go unnoticed.\nif we\u0027re checking only for the default value None these cases will raise an exception.","commit_id":"5b5d62ebdcbbb8a8aab730da5fe244dae96048ba"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1b5f85e729207bccfe10211fb3cfc0483ecd28a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def _execute(cls, op, mac, dev, ip_dst):"},{"line_number":109,"context_line":"        cmd \u003d [\u0027bridge\u0027, \u0027fdb\u0027, op, mac, \u0027dev\u0027, dev]"},{"line_number":110,"context_line":"        if ip_dst is not None:"},{"line_number":111,"context_line":"            cmd +\u003d [\u0027dst\u0027, ip_dst]"},{"line_number":112,"context_line":"        return utils.execute(cmd, run_as_root\u003dTrue)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_c7e23803","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":30},"in_reply_to":"1aa78d24_a4128ab2","updated":"2016-07-04 12:50:39.000000000","message":"so you\u0027re saying it\u0027s  more failure tolerant, as an empty string will not lead to errors. ok, I buy that, although I\u0027m not totally convinced that this is required. Thanks for responding!","commit_id":"5b5d62ebdcbbb8a8aab730da5fe244dae96048ba"}],"neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"13d9698f89982be042c9a76f0a38b3a9e29621aa","unresolved":false,"context_lines":[{"line_number":684,"context_line":"        utils.execute([\u0027bridge\u0027, \u0027fdb\u0027, operation, mac, \u0027dev\u0027, interface,"},{"line_number":685,"context_line":"                       \u0027dst\u0027, agent_ip],"},{"line_number":686,"context_line":"                      run_as_root\u003dTrue,"},{"line_number":687,"context_line":"                      check_exit_code\u003dFalse)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def remove_fdb_bridge_entry(self, mac, agent_ip, interface):"},{"line_number":690,"context_line":"        utils.execute([\u0027bridge\u0027, \u0027fdb\u0027, \u0027del\u0027, mac, \u0027dev\u0027, interface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_845f9871","side":"PARENT","line":687,"range":{"start_line":687,"start_character":22,"end_line":687,"end_character":44},"updated":"2016-07-04 09:44:33.000000000","message":"The \"check_exit_code\" will be changed to True with this refactor, which is different from the original behavior. And the potential RuntimeError will be raise.","commit_id":"19f7b6ea6413e24b9fb1943aaeb359b30e35975c"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"eb99b313da0c29468c3369dae9f32cd881f1287b","unresolved":false,"context_lines":[{"line_number":684,"context_line":"        utils.execute([\u0027bridge\u0027, \u0027fdb\u0027, operation, mac, \u0027dev\u0027, interface,"},{"line_number":685,"context_line":"                       \u0027dst\u0027, agent_ip],"},{"line_number":686,"context_line":"                      run_as_root\u003dTrue,"},{"line_number":687,"context_line":"                      check_exit_code\u003dFalse)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def remove_fdb_bridge_entry(self, mac, agent_ip, interface):"},{"line_number":690,"context_line":"        utils.execute([\u0027bridge\u0027, \u0027fdb\u0027, \u0027del\u0027, mac, \u0027dev\u0027, interface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_4eb94ae9","side":"PARENT","line":687,"range":{"start_line":687,"start_character":22,"end_line":687,"end_character":44},"in_reply_to":"1aa78d24_845f9871","updated":"2016-07-04 10:33:16.000000000","message":"You\u0027re right but i didn\u0027t see any use/test that requires ignoring a failed execution so i thought it\u0027s safer not to use this flag.\nDo you know of such scenario?","commit_id":"19f7b6ea6413e24b9fb1943aaeb359b30e35975c"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"13d9698f89982be042c9a76f0a38b3a9e29621aa","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        utils.execute([\u0027bridge\u0027, \u0027fdb\u0027, \u0027del\u0027, mac, \u0027dev\u0027, interface,"},{"line_number":691,"context_line":"                       \u0027dst\u0027, agent_ip],"},{"line_number":692,"context_line":"                      run_as_root\u003dTrue,"},{"line_number":693,"context_line":"                      check_exit_code\u003dFalse)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"    def add_fdb_entries(self, agent_ip, ports, interface):"},{"line_number":696,"context_line":"        for mac, ip in ports:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_e4549c55","side":"PARENT","line":693,"range":{"start_line":693,"start_character":22,"end_line":693,"end_character":43},"updated":"2016-07-04 09:44:33.000000000","message":"ditto","commit_id":"19f7b6ea6413e24b9fb1943aaeb359b30e35975c"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"200c643f6ae93a2e15c31f7ddff5a900f84e49ce","unresolved":false,"context_lines":[{"line_number":684,"context_line":"        utils.execute([\u0027bridge\u0027, \u0027fdb\u0027, operation, mac, \u0027dev\u0027, interface,"},{"line_number":685,"context_line":"                       \u0027dst\u0027, agent_ip],"},{"line_number":686,"context_line":"                      run_as_root\u003dTrue,"},{"line_number":687,"context_line":"                      check_exit_code\u003dFalse)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def remove_fdb_bridge_entry(self, mac, agent_ip, interface):"},{"line_number":690,"context_line":"        utils.execute([\u0027bridge\u0027, \u0027fdb\u0027, \u0027del\u0027, mac, \u0027dev\u0027, interface,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_9d37e2e2","side":"PARENT","line":687,"range":{"start_line":687,"start_character":22,"end_line":687,"end_character":37},"updated":"2016-07-04 11:58:12.000000000","message":"changing that behavior like pointed out by Hong Hui Xiao should be done in a separate commit! \n\nIf you want to achieve this with this patchset, it should at least be mentioned in the commit message! However I think a separate patch is the right approach! Cause it makes reverting and backporting more easy!","commit_id":"19f7b6ea6413e24b9fb1943aaeb359b30e35975c"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"d348310dc9e4b5f189113ade0c573682a388edb0","unresolved":false,"context_lines":[{"line_number":684,"context_line":"        utils.execute([\u0027bridge\u0027, \u0027fdb\u0027, operation, mac, \u0027dev\u0027, interface,"},{"line_number":685,"context_line":"                       \u0027dst\u0027, agent_ip],"},{"line_number":686,"context_line":"                      run_as_root\u003dTrue,"},{"line_number":687,"context_line":"                      check_exit_code\u003dFalse)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def remove_fdb_bridge_entry(self, mac, agent_ip, interface):"},{"line_number":690,"context_line":"        utils.execute([\u0027bridge\u0027, \u0027fdb\u0027, \u0027del\u0027, mac, \u0027dev\u0027, interface,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_cab07df7","side":"PARENT","line":687,"range":{"start_line":687,"start_character":22,"end_line":687,"end_character":37},"in_reply_to":"1aa78d24_9d37e2e2","updated":"2016-07-04 13:53:44.000000000","message":"You\u0027re both right, I\u0027ll do it in a separate commit, thanks for pointing that out.","commit_id":"19f7b6ea6413e24b9fb1943aaeb359b30e35975c"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"52f15ec00d3eae9623b89585d61d562b3a52318c","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        try:"},{"line_number":625,"context_line":"            bridge_lib.FdbInterface.append(constants.FLOODING_ENTRY[0],"},{"line_number":626,"context_line":"                                           test_iface, \u00271.1.1.1\u0027,"},{"line_number":627,"context_line":"                                           check_exit_code\u003dFalse)"},{"line_number":628,"context_line":"            return True"},{"line_number":629,"context_line":"        except RuntimeError:"},{"line_number":630,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_d03c5aca","line":627,"range":{"start_line":627,"start_character":43,"end_line":627,"end_character":58},"updated":"2016-07-06 02:25:47.000000000","message":"I think this should be true, because line 629 is expecting RuntimeError. Maybe mix up with original \"log_fail_as_error\"","commit_id":"2ab9b045846bd5dfd02069fa716fadacd54336ad"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"d66aae006d5ee08e56ed663a7ef09e506ef0cee2","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        try:"},{"line_number":625,"context_line":"            bridge_lib.FdbInterface.append(constants.FLOODING_ENTRY[0],"},{"line_number":626,"context_line":"                                           test_iface, \u00271.1.1.1\u0027,"},{"line_number":627,"context_line":"                                           check_exit_code\u003dFalse)"},{"line_number":628,"context_line":"            return True"},{"line_number":629,"context_line":"        except RuntimeError:"},{"line_number":630,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_fa017007","line":627,"range":{"start_line":627,"start_character":43,"end_line":627,"end_character":58},"in_reply_to":"1aa78d24_d03c5aca","updated":"2016-07-06 06:24:35.000000000","message":"Absolutely right, my bad, thank you!","commit_id":"2ab9b045846bd5dfd02069fa716fadacd54336ad"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"d1a412eb3c6b05f274c7200d6ba6ebe8f6c16424","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        try:"},{"line_number":625,"context_line":"            bridge_lib.FdbInterface.append(constants.FLOODING_ENTRY[0],"},{"line_number":626,"context_line":"                                           test_iface, \u00271.1.1.1\u0027,"},{"line_number":627,"context_line":"                                           check_exit_code\u003dFalse)"},{"line_number":628,"context_line":"            return True"},{"line_number":629,"context_line":"        except RuntimeError:"},{"line_number":630,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_f8c69898","line":627,"range":{"start_line":627,"start_character":43,"end_line":627,"end_character":58},"in_reply_to":"1aa78d24_d03c5aca","updated":"2016-07-06 06:23:17.000000000","message":"good catch!","commit_id":"2ab9b045846bd5dfd02069fa716fadacd54336ad"}],"neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"13d9698f89982be042c9a76f0a38b3a9e29621aa","unresolved":false,"context_lines":[{"line_number":782,"context_line":"                                  \u0027ensure_vxlan\u0027,"},{"line_number":783,"context_line":"                                  return_value\u003dNone),\\"},{"line_number":784,"context_line":"                mock.patch.object("},{"line_number":785,"context_line":"                    bridge_lib.FdbInterface,"},{"line_number":786,"context_line":"                    \u0027_execute\u0027,"},{"line_number":787,"context_line":"                    side_effect\u003dNone if fdb_append else RuntimeError()),\\"},{"line_number":788,"context_line":"                mock.patch.object(ip_lib,"},{"line_number":789,"context_line":"                                  \u0027iproute_arg_supported\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_84edd88d","line":786,"range":{"start_line":785,"start_character":20,"end_line":786,"end_character":30},"updated":"2016-07-04 09:44:33.000000000","message":"I think this mock and the mock below don\u0027t need to be changed, because, eventually, it is neutron.agent.linux.utils being called.","commit_id":"4c407e5f296dacfdabaabbdecc0209a8ea29406e"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"a5475a4a87f0cf081e37377272832722d754f768","unresolved":false,"context_lines":[{"line_number":782,"context_line":"                                  \u0027ensure_vxlan\u0027,"},{"line_number":783,"context_line":"                                  return_value\u003dNone),\\"},{"line_number":784,"context_line":"                mock.patch.object("},{"line_number":785,"context_line":"                    bridge_lib.FdbInterface,"},{"line_number":786,"context_line":"                    \u0027_execute\u0027,"},{"line_number":787,"context_line":"                    side_effect\u003dNone if fdb_append else RuntimeError()),\\"},{"line_number":788,"context_line":"                mock.patch.object(ip_lib,"},{"line_number":789,"context_line":"                                  \u0027iproute_arg_supported\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_715867fb","line":786,"range":{"start_line":785,"start_character":20,"end_line":786,"end_character":30},"in_reply_to":"1aa78d24_84edd88d","updated":"2016-07-04 11:09:11.000000000","message":"Done","commit_id":"4c407e5f296dacfdabaabbdecc0209a8ea29406e"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"200c643f6ae93a2e15c31f7ddff5a900f84e49ce","unresolved":false,"context_lines":[{"line_number":948,"context_line":"                        \u0027network_type\u0027: \u0027vxlan\u0027,"},{"line_number":949,"context_line":"                        \u0027segment_id\u0027: 1}}"},{"line_number":950,"context_line":""},{"line_number":951,"context_line":"        with mock.patch.object(bridge_lib.FdbInterface, \u0027_execute\u0027,"},{"line_number":952,"context_line":"                               return_value\u003d\u0027\u0027) as execute_fn, \\"},{"line_number":953,"context_line":"                mock.patch.object(bridge_lib.FdbInterface, \u0027show\u0027,"},{"line_number":954,"context_line":"                               return_value\u003d\u0027\u0027) as show_fn, \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_27c181e5","line":951,"updated":"2016-07-04 11:58:12.000000000","message":"why couldn\u0027t we leave the test as is (just mocking utils.execute)? This would be the ultimate proof that the refactoring was successful","commit_id":"5b5d62ebdcbbb8a8aab730da5fe244dae96048ba"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"d348310dc9e4b5f189113ade0c573682a388edb0","unresolved":false,"context_lines":[{"line_number":948,"context_line":"                        \u0027network_type\u0027: \u0027vxlan\u0027,"},{"line_number":949,"context_line":"                        \u0027segment_id\u0027: 1}}"},{"line_number":950,"context_line":""},{"line_number":951,"context_line":"        with mock.patch.object(bridge_lib.FdbInterface, \u0027_execute\u0027,"},{"line_number":952,"context_line":"                               return_value\u003d\u0027\u0027) as execute_fn, \\"},{"line_number":953,"context_line":"                mock.patch.object(bridge_lib.FdbInterface, \u0027show\u0027,"},{"line_number":954,"context_line":"                               return_value\u003d\u0027\u0027) as show_fn, \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_2a96614c","line":951,"in_reply_to":"1aa78d24_27c181e5","updated":"2016-07-04 13:53:44.000000000","message":"Done","commit_id":"5b5d62ebdcbbb8a8aab730da5fe244dae96048ba"}]}
