)]}'
{"dragonflow/controller/l3_proactive_app.py":[{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"691be1a52cc8a3bd8277807b1c6e2baa5b3ebe09","unresolved":false,"context_lines":[{"line_number":453,"context_line":"            parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions),"},{"line_number":454,"context_line":"            parser.OFPInstructionGotoTable(const.EGRESS_TABLE),"},{"line_number":455,"context_line":"        ]"},{"line_number":456,"context_line":"        self.mod_flow("},{"line_number":457,"context_line":"            self.get_datapath(),"},{"line_number":458,"context_line":"            inst\u003dinst,"},{"line_number":459,"context_line":"            table_id\u003dconst.L3_LOOKUP_TABLE,"},{"line_number":460,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":461,"context_line":"            match\u003dmatch)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _delete_router_port(self, router, router_port):"},{"line_number":464,"context_line":"        LOG.info(_LI(\"Removing logical router interface \u003d %s\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da4df55a_b00cba43","line":461,"range":{"start_line":456,"start_character":0,"end_line":461,"end_character":24},"updated":"2016-12-22 12:36:52.000000000","message":"I think this flow will be in conflict with egress DNAT rules, as they all have the same priority and the match field will be hit simultaneously.","commit_id":"b66c7361b70b2a73d9d15e487d50af567cf454a7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"62bd2ea069ebf7981a68495b07aa50aa0915832f","unresolved":false,"context_lines":[{"line_number":453,"context_line":"            parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions),"},{"line_number":454,"context_line":"            parser.OFPInstructionGotoTable(const.EGRESS_TABLE),"},{"line_number":455,"context_line":"        ]"},{"line_number":456,"context_line":"        self.mod_flow("},{"line_number":457,"context_line":"            self.get_datapath(),"},{"line_number":458,"context_line":"            inst\u003dinst,"},{"line_number":459,"context_line":"            table_id\u003dconst.L3_LOOKUP_TABLE,"},{"line_number":460,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":461,"context_line":"            match\u003dmatch)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _delete_router_port(self, router, router_port):"},{"line_number":464,"context_line":"        LOG.info(_LI(\"Removing logical router interface \u003d %s\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da4df55a_13038210","line":461,"range":{"start_line":456,"start_character":0,"end_line":461,"end_character":24},"in_reply_to":"da4df55a_b00cba43","updated":"2016-12-25 08:41:02.000000000","message":"Good catch. Priority was changed to low.","commit_id":"b66c7361b70b2a73d9d15e487d50af567cf454a7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"45860f45d04da47acb81a99405c2d54704c3122a","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":461,"context_line":"            match\u003dmatch)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _delete_router_port(self, router, router_port):"},{"line_number":464,"context_line":"        LOG.info(_LI(\"Removing logical router interface \u003d %s\"),"},{"line_number":465,"context_line":"                 router_port)"},{"line_number":466,"context_line":"        local_network_id \u003d self.db_store.get_unique_key_by_id("}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_62a07244","line":463,"range":{"start_line":463,"start_character":0,"end_line":463,"end_character":55},"updated":"2016-12-26 01:11:55.000000000","message":"Remove the new flow when delete router port?","commit_id":"bd0bf955b975c5abcaeaffa1bcaad000c5ee539f"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865a0a86401353e833bc1b2ba146eafee837b3ae","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":461,"context_line":"            match\u003dmatch)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _delete_router_port(self, router, router_port):"},{"line_number":464,"context_line":"        LOG.info(_LI(\"Removing logical router interface \u003d %s\"),"},{"line_number":465,"context_line":"                 router_port)"},{"line_number":466,"context_line":"        local_network_id \u003d self.db_store.get_unique_key_by_id("}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_06b7b1d8","line":463,"range":{"start_line":463,"start_character":0,"end_line":463,"end_character":55},"in_reply_to":"da4df55a_62a07244","updated":"2016-12-26 08:50:42.000000000","message":"Will do.","commit_id":"bd0bf955b975c5abcaeaffa1bcaad000c5ee539f"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"2fbe498542360e14ea3ce03f0f3bae4878c169aa","unresolved":false,"context_lines":[{"line_number":454,"context_line":"            parser.OFPInstructionGotoTable(const.EGRESS_TABLE),"},{"line_number":455,"context_line":"        ]"},{"line_number":456,"context_line":"        self.mod_flow("},{"line_number":457,"context_line":"            self.get_datapath(),"},{"line_number":458,"context_line":"            inst\u003dinst,"},{"line_number":459,"context_line":"            table_id\u003dconst.L3_LOOKUP_TABLE,"},{"line_number":460,"context_line":"            priority\u003dconst.PRIORITY_LOW,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_4f4ffc6a","line":457,"range":{"start_line":457,"start_character":12,"end_line":457,"end_character":32},"updated":"2016-12-27 00:52:19.000000000","message":"why not just use \"datapath\" here?","commit_id":"1609914855e551c26b7ceded633030a19d54057f"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0e4703644d733b141b481666712d8fc76ba46bb3","unresolved":false,"context_lines":[{"line_number":454,"context_line":"            parser.OFPInstructionGotoTable(const.EGRESS_TABLE),"},{"line_number":455,"context_line":"        ]"},{"line_number":456,"context_line":"        self.mod_flow("},{"line_number":457,"context_line":"            self.get_datapath(),"},{"line_number":458,"context_line":"            inst\u003dinst,"},{"line_number":459,"context_line":"            table_id\u003dconst.L3_LOOKUP_TABLE,"},{"line_number":460,"context_line":"            priority\u003dconst.PRIORITY_LOW,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_03022c3d","line":457,"range":{"start_line":457,"start_character":12,"end_line":457,"end_character":32},"in_reply_to":"da4df55a_4f4ffc6a","updated":"2016-12-27 07:37:03.000000000","message":"Will fix","commit_id":"1609914855e551c26b7ceded633030a19d54057f"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"2fbe498542360e14ea3ce03f0f3bae4878c169aa","unresolved":false,"context_lines":[{"line_number":461,"context_line":"            match\u003dmatch)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _delete_subnet_send_to_snat(self, network_id, mac):"},{"line_number":464,"context_line":"        datapath \u003d self.get_datapath()"},{"line_number":465,"context_line":"        ofproto \u003d datapath.ofproto"},{"line_number":466,"context_line":"        parser \u003d datapath.ofproto_parser"},{"line_number":467,"context_line":"        match \u003d parser.OFPMatch(metadata\u003dnetwork_id, eth_dst\u003dmac)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_6f54c0fe","line":464,"range":{"start_line":464,"start_character":8,"end_line":464,"end_character":38},"updated":"2016-12-27 00:52:19.000000000","message":"ditto","commit_id":"1609914855e551c26b7ceded633030a19d54057f"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0e4703644d733b141b481666712d8fc76ba46bb3","unresolved":false,"context_lines":[{"line_number":461,"context_line":"            match\u003dmatch)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _delete_subnet_send_to_snat(self, network_id, mac):"},{"line_number":464,"context_line":"        datapath \u003d self.get_datapath()"},{"line_number":465,"context_line":"        ofproto \u003d datapath.ofproto"},{"line_number":466,"context_line":"        parser \u003d datapath.ofproto_parser"},{"line_number":467,"context_line":"        match \u003d parser.OFPMatch(metadata\u003dnetwork_id, eth_dst\u003dmac)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_43f8b449","line":464,"range":{"start_line":464,"start_character":8,"end_line":464,"end_character":38},"in_reply_to":"da4df55a_6f54c0fe","updated":"2016-12-27 07:37:03.000000000","message":"Will fix.","commit_id":"1609914855e551c26b7ceded633030a19d54057f"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"555bc08929dd5a181a014e9a17ea2301fd816618","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":444,"context_line":"            match\u003dmatch)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def _add_subnet_send_to_snat(self, network_id, mac, tunnel_key):"},{"line_number":447,"context_line":"        datapath \u003d self.get_datapath()"},{"line_number":448,"context_line":"        ofproto \u003d datapath.ofproto"},{"line_number":449,"context_line":"        parser \u003d datapath.ofproto_parser"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_3e916b9a","line":446,"range":{"start_line":446,"start_character":8,"end_line":446,"end_character":20},"updated":"2017-01-02 13:57:29.000000000","message":"why is the method called add_subnet?","commit_id":"64feb55f95169d21bbb24f9a1b701bd7c84eae4e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6e07e923166dd1c81ddd72fadc75914fb8e44e82","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":444,"context_line":"            match\u003dmatch)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def _add_subnet_send_to_snat(self, network_id, mac, tunnel_key):"},{"line_number":447,"context_line":"        datapath \u003d self.get_datapath()"},{"line_number":448,"context_line":"        ofproto \u003d datapath.ofproto"},{"line_number":449,"context_line":"        parser \u003d datapath.ofproto_parser"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_2e8d847b","line":446,"range":{"start_line":446,"start_character":8,"end_line":446,"end_character":20},"in_reply_to":"ba5201f7_141b9b1c","updated":"2017-01-04 08:37:12.000000000","message":"@irenab, I think the best solution is to pass this patch as is, and do a renaming patch for this file. As I mention in the commit message, this method will be moved out anyway.\n\nIs that acceptable?","commit_id":"64feb55f95169d21bbb24f9a1b701bd7c84eae4e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"30ebd1ec517becae16fb35a7135191c1a1a85bd7","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":444,"context_line":"            match\u003dmatch)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def _add_subnet_send_to_snat(self, network_id, mac, tunnel_key):"},{"line_number":447,"context_line":"        datapath \u003d self.get_datapath()"},{"line_number":448,"context_line":"        ofproto \u003d datapath.ofproto"},{"line_number":449,"context_line":"        parser \u003d datapath.ofproto_parser"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_e43b9b36","line":446,"range":{"start_line":446,"start_character":8,"end_line":446,"end_character":20},"in_reply_to":"ba5201f7_2e8d847b","updated":"2017-01-04 09:37:36.000000000","message":"Opened bug https://bugs.launchpad.net/dragonflow/+bug/1653926 for this issue.","commit_id":"64feb55f95169d21bbb24f9a1b701bd7c84eae4e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9d451f4b471970aeaeb6b89a9299eaee351b79f0","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":444,"context_line":"            match\u003dmatch)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def _add_subnet_send_to_snat(self, network_id, mac, tunnel_key):"},{"line_number":447,"context_line":"        datapath \u003d self.get_datapath()"},{"line_number":448,"context_line":"        ofproto \u003d datapath.ofproto"},{"line_number":449,"context_line":"        parser \u003d datapath.ofproto_parser"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_94578b01","line":446,"range":{"start_line":446,"start_character":8,"end_line":446,"end_character":20},"in_reply_to":"ba5201f7_3e916b9a","updated":"2017-01-03 08:32:53.000000000","message":"Parallel to the method \u0027_add_subnet_send_to_proactive_routing\u0027","commit_id":"64feb55f95169d21bbb24f9a1b701bd7c84eae4e"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"fe652015f39e15822286376c1d9047d1507777e5","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":444,"context_line":"            match\u003dmatch)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def _add_subnet_send_to_snat(self, network_id, mac, tunnel_key):"},{"line_number":447,"context_line":"        datapath \u003d self.get_datapath()"},{"line_number":448,"context_line":"        ofproto \u003d datapath.ofproto"},{"line_number":449,"context_line":"        parser \u003d datapath.ofproto_parser"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_141b9b1c","line":446,"range":{"start_line":446,"start_character":8,"end_line":446,"end_character":20},"in_reply_to":"ba5201f7_94578b01","updated":"2017-01-03 08:42:23.000000000","message":"maybe \u0027add_snat_flow\u0027 is a better name","commit_id":"64feb55f95169d21bbb24f9a1b701bd7c84eae4e"}],"dragonflow/tests/unit/test_l3_proactive_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"45860f45d04da47acb81a99405c2d54704c3122a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.app \u003d self.open_flow_app.dispatcher.apps[0]"},{"line_number":29,"context_line":"        self.mock_mod_flow \u003d mock.Mock(name\u003d\u0027mod_flow\u0027)"},{"line_number":30,"context_line":"        self.app.mod_flow \u003d self.mock_mod_flow"},{"line_number":31,"context_line":"        self.app._add_subnet_send_to_snat \u003d mock.Mock()"},{"line_number":32,"context_line":"        self.router \u003d test_app_base.fake_logic_router1"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_add_del_route(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_a28a5abd","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":55},"updated":"2016-12-26 01:11:55.000000000","message":"I think such mock should go in specific test, not in the common setUp, which might be used by all test cases.","commit_id":"bd0bf955b975c5abcaeaffa1bcaad000c5ee539f"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865a0a86401353e833bc1b2ba146eafee837b3ae","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.app \u003d self.open_flow_app.dispatcher.apps[0]"},{"line_number":29,"context_line":"        self.mock_mod_flow \u003d mock.Mock(name\u003d\u0027mod_flow\u0027)"},{"line_number":30,"context_line":"        self.app.mod_flow \u003d self.mock_mod_flow"},{"line_number":31,"context_line":"        self.app._add_subnet_send_to_snat \u003d mock.Mock()"},{"line_number":32,"context_line":"        self.router \u003d test_app_base.fake_logic_router1"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_add_del_route(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_c6ae8984","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":55},"in_reply_to":"da4df55a_a28a5abd","updated":"2016-12-26 08:50:42.000000000","message":"Will do","commit_id":"bd0bf955b975c5abcaeaffa1bcaad000c5ee539f"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"2fbe498542360e14ea3ce03f0f3bae4878c169aa","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from mock import patch"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":21,"context_line":"from dragonflow.tests.unit import test_app_base"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_4f761ca5","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":22},"updated":"2016-12-27 00:52:19.000000000","message":"patch is a function in mock module, so the import here might not be right.","commit_id":"1609914855e551c26b7ceded633030a19d54057f"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0e4703644d733b141b481666712d8fc76ba46bb3","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from mock import patch"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":21,"context_line":"from dragonflow.tests.unit import test_app_base"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_2392d0f6","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":22},"in_reply_to":"da4df55a_4f761ca5","updated":"2016-12-27 07:37:03.000000000","message":"This turns out a bit strange. patch is a function, but the object function sits inside it...\n\nI\u0027ll remove the import, and access mock.patch.object via mock.","commit_id":"1609914855e551c26b7ceded633030a19d54057f"}]}
