)]}'
{"dragonflow/tests/fullstack/test_apps.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d18b0e2b30c4d3a525e2eed2b02af57de79ccbcf","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        # Attach interface to br-ex and assign address"},{"line_number":1248,"context_line":"        tapname \u003d \u0027tap-test-{0}\u0027.format(os.getpid() % 100000)"},{"line_number":1249,"context_line":"        app_testing_objects.create_tap_dev(tapname)"},{"line_number":1250,"context_line":"        tap \u003d pytun.TunTapDevice(name\u003dtapname,"},{"line_number":1251,"context_line":"                                 flags\u003dpytun.IFF_TAP | pytun.IFF_NO_PI)"},{"line_number":1252,"context_line":"        tap.up()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_b4394ea6","line":1249,"range":{"start_line":1249,"start_character":8,"end_line":1249,"end_character":51},"updated":"2016-11-20 08:13:05.000000000","message":"I think this is not necessary. We don\u0027t have to use both pytun and \u0027ip\u0027 command at the same time","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"ae12ea8b48ef31d4ac38929c85659d09f685b857","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        # Attach interface to br-ex and assign address"},{"line_number":1248,"context_line":"        tapname \u003d \u0027tap-test-{0}\u0027.format(os.getpid() % 100000)"},{"line_number":1249,"context_line":"        app_testing_objects.create_tap_dev(tapname)"},{"line_number":1250,"context_line":"        tap \u003d pytun.TunTapDevice(name\u003dtapname,"},{"line_number":1251,"context_line":"                                 flags\u003dpytun.IFF_TAP | pytun.IFF_NO_PI)"},{"line_number":1252,"context_line":"        tap.up()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_ac8d7a32","line":1249,"range":{"start_line":1249,"start_character":8,"end_line":1249,"end_character":51},"in_reply_to":"7a77a97e_5af743d2","updated":"2016-11-21 02:36:15.000000000","message":"Is pytun.TunTapDevice redundant? Can ip command do what pytun does?","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"98160220bdc2017db1bdd413ec04c6cc979c2165","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        # Attach interface to br-ex and assign address"},{"line_number":1248,"context_line":"        tapname \u003d \u0027tap-test-{0}\u0027.format(os.getpid() % 100000)"},{"line_number":1249,"context_line":"        app_testing_objects.create_tap_dev(tapname)"},{"line_number":1250,"context_line":"        tap \u003d pytun.TunTapDevice(name\u003dtapname,"},{"line_number":1251,"context_line":"                                 flags\u003dpytun.IFF_TAP | pytun.IFF_NO_PI)"},{"line_number":1252,"context_line":"        tap.up()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_2725f25b","line":1249,"range":{"start_line":1249,"start_character":8,"end_line":1249,"end_character":51},"in_reply_to":"7a77a97e_ac8d7a32","updated":"2016-11-21 13:26:53.000000000","message":"In this scenario it is used just for up(), it can be done with \u0027ip link\u0027 but I think it is bit more pretty.","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7008bfe12bcb144cd811f2fa4d6919bf7d684406","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        # Attach interface to br-ex and assign address"},{"line_number":1248,"context_line":"        tapname \u003d \u0027tap-test-{0}\u0027.format(os.getpid() % 100000)"},{"line_number":1249,"context_line":"        app_testing_objects.create_tap_dev(tapname)"},{"line_number":1250,"context_line":"        tap \u003d pytun.TunTapDevice(name\u003dtapname,"},{"line_number":1251,"context_line":"                                 flags\u003dpytun.IFF_TAP | pytun.IFF_NO_PI)"},{"line_number":1252,"context_line":"        tap.up()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_5af743d2","line":1249,"range":{"start_line":1249,"start_character":8,"end_line":1249,"end_character":51},"in_reply_to":"7a77a97e_b4394ea6","updated":"2016-11-20 12:21:44.000000000","message":"I\u0027ve removed this code because I could not get it work, and instead I add/remove address to br-ex directly.\n\nI do not agree with ip command being redundant, because pytun runs as stack user and does not have sufficient permissions to do creation/address assignment.","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d18b0e2b30c4d3a525e2eed2b02af57de79ccbcf","unresolved":false,"context_lines":[{"line_number":1252,"context_line":"        tap.up()"},{"line_number":1253,"context_line":""},{"line_number":1254,"context_line":"        test_utils.print_command("},{"line_number":1255,"context_line":"            [\u0027ip\u0027, \u0027addr\u0027, \u0027add\u0027, \u0027172.24.4.1/24\u0027, \u0027dev\u0027, tapname],"},{"line_number":1256,"context_line":"            run_as_root\u003dTrue)"},{"line_number":1257,"context_line":""},{"line_number":1258,"context_line":"        test_utils.print_command("}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_5449da2f","line":1255,"range":{"start_line":1255,"start_character":12,"end_line":1255,"end_character":67},"updated":"2016-11-20 08:13:05.000000000","message":"ditto","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d18b0e2b30c4d3a525e2eed2b02af57de79ccbcf","unresolved":false,"context_lines":[{"line_number":1264,"context_line":"                [\u0027ovs-vsctl\u0027, \u0027del-port\u0027, \u0027br-ex\u0027, tapname],"},{"line_number":1265,"context_line":"                run_as_root\u003dTrue)"},{"line_number":1266,"context_line":"            tap.close()"},{"line_number":1267,"context_line":"            test_utils.print_command("},{"line_number":1268,"context_line":"                [\u0027ip\u0027, \u0027link\u0027, \u0027set\u0027, \u0027dev\u0027, tapname, \u0027down\u0027],"},{"line_number":1269,"context_line":"                run_as_root\u003dTrue)"},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"            test_utils.print_command("},{"line_number":1272,"context_line":"                [\u0027ip\u0027, \u0027tuntap\u0027, \u0027del\u0027, \u0027dev\u0027, tapname, \u0027mode\u0027, \u0027tap\u0027],"},{"line_number":1273,"context_line":"                run_as_root\u003dTrue)"},{"line_number":1274,"context_line":""},{"line_number":1275,"context_line":"        self.store(\u0027tap\u0027, close_func\u003dclean_tap)"},{"line_number":1276,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_745416c9","line":1273,"range":{"start_line":1267,"start_character":1,"end_line":1273,"end_character":33},"updated":"2016-11-20 08:13:05.000000000","message":"tap.close is enough","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d18b0e2b30c4d3a525e2eed2b02af57de79ccbcf","unresolved":false,"context_lines":[{"line_number":1334,"context_line":"            self.assertTrue(self.fip.exists())"},{"line_number":1335,"context_line":"            self.fip.update({\u0027port_id\u0027: self.int_port.port.port_id})"},{"line_number":1336,"context_line":"            self.fip_addr \u003d self.fip.get_floatingip().get_ip_address()"},{"line_number":1337,"context_line":""},{"line_number":1338,"context_line":"        except Exception:"},{"line_number":1339,"context_line":"            self._cleanup()"},{"line_number":1340,"context_line":"            raise"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":"    def _cleanup(self):"},{"line_number":1343,"context_line":"        if self.topology is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_f45666cc","line":1340,"range":{"start_line":1337,"start_character":0,"end_line":1340,"end_character":17},"updated":"2016-11-20 08:13:05.000000000","message":"you can use self.addCleanup()","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"ae12ea8b48ef31d4ac38929c85659d09f685b857","unresolved":false,"context_lines":[{"line_number":1334,"context_line":"            self.assertTrue(self.fip.exists())"},{"line_number":1335,"context_line":"            self.fip.update({\u0027port_id\u0027: self.int_port.port.port_id})"},{"line_number":1336,"context_line":"            self.fip_addr \u003d self.fip.get_floatingip().get_ip_address()"},{"line_number":1337,"context_line":""},{"line_number":1338,"context_line":"        except Exception:"},{"line_number":1339,"context_line":"            self._cleanup()"},{"line_number":1340,"context_line":"            raise"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":"    def _cleanup(self):"},{"line_number":1343,"context_line":"        if self.topology is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_4cc30638","line":1340,"range":{"start_line":1337,"start_character":0,"end_line":1340,"end_character":17},"in_reply_to":"7a77a97e_55ad54e7","updated":"2016-11-21 02:36:15.000000000","message":"I got it, thx","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7008bfe12bcb144cd811f2fa4d6919bf7d684406","unresolved":false,"context_lines":[{"line_number":1334,"context_line":"            self.assertTrue(self.fip.exists())"},{"line_number":1335,"context_line":"            self.fip.update({\u0027port_id\u0027: self.int_port.port.port_id})"},{"line_number":1336,"context_line":"            self.fip_addr \u003d self.fip.get_floatingip().get_ip_address()"},{"line_number":1337,"context_line":""},{"line_number":1338,"context_line":"        except Exception:"},{"line_number":1339,"context_line":"            self._cleanup()"},{"line_number":1340,"context_line":"            raise"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":"    def _cleanup(self):"},{"line_number":1343,"context_line":"        if self.topology is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_55ad54e7","line":1340,"range":{"start_line":1337,"start_character":0,"end_line":1340,"end_character":17},"in_reply_to":"7a77a97e_f45666cc","updated":"2016-11-20 12:21:44.000000000","message":"I think the issue here is that self.store() cleanup happens only in tearDown so whenever setUp throws an exception nothing gets cleaned up.\n\nI\u0027ve moved the tearDown code to cleanup in a separate patch, please take a look: https://review.openstack.org/#/c/399952/","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d18b0e2b30c4d3a525e2eed2b02af57de79ccbcf","unresolved":false,"context_lines":[{"line_number":1343,"context_line":"        if self.topology is not None:"},{"line_number":1344,"context_line":"            self.topology.close()"},{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"    def _get_udp2222_filter(self):"},{"line_number":1347,"context_line":"        class _Filter(object):"},{"line_number":1348,"context_line":"            def __call__(self, buf):"},{"line_number":1349,"context_line":"                pkt \u003d ryu.lib.packet.packet.Packet(buf)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_14b84274","line":1346,"range":{"start_line":1346,"start_character":8,"end_line":1346,"end_character":27},"updated":"2016-11-20 08:13:05.000000000","message":"why do we need this wrapper?","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7008bfe12bcb144cd811f2fa4d6919bf7d684406","unresolved":false,"context_lines":[{"line_number":1343,"context_line":"        if self.topology is not None:"},{"line_number":1344,"context_line":"            self.topology.close()"},{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"    def _get_udp2222_filter(self):"},{"line_number":1347,"context_line":"        class _Filter(object):"},{"line_number":1348,"context_line":"            def __call__(self, buf):"},{"line_number":1349,"context_line":"                pkt \u003d ryu.lib.packet.packet.Packet(buf)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_fa248f60","line":1346,"range":{"start_line":1346,"start_character":8,"end_line":1346,"end_character":27},"in_reply_to":"7a77a97e_14b84274","updated":"2016-11-20 12:21:44.000000000","message":"We don\u0027t, will move it to _test_send_recv_packet","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d18b0e2b30c4d3a525e2eed2b02af57de79ccbcf","unresolved":false,"context_lines":[{"line_number":1403,"context_line":"        ) as sock:"},{"line_number":1404,"context_line":"            sock.bind((\u00270.0.0.0\u0027, 0))"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"            def send_to_port(*_):"},{"line_number":1407,"context_line":"                sock.sendto(\u0027ping\u0027, (self.fip_addr, 2222))"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"            def create_reply(buf):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_94dff2d4","line":1406,"range":{"start_line":1406,"start_character":29,"end_line":1406,"end_character":31},"updated":"2016-11-20 08:13:05.000000000","message":"?","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7008bfe12bcb144cd811f2fa4d6919bf7d684406","unresolved":false,"context_lines":[{"line_number":1403,"context_line":"        ) as sock:"},{"line_number":1404,"context_line":"            sock.bind((\u00270.0.0.0\u0027, 0))"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"            def send_to_port(*_):"},{"line_number":1407,"context_line":"                sock.sendto(\u0027ping\u0027, (self.fip_addr, 2222))"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"            def create_reply(buf):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_da3193a3","line":1406,"range":{"start_line":1406,"start_character":29,"end_line":1406,"end_character":31},"in_reply_to":"7a77a97e_94dff2d4","updated":"2016-11-20 12:21:44.000000000","message":"Just a way to ignore all arguments","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d18b0e2b30c4d3a525e2eed2b02af57de79ccbcf","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"            sock.bind((\u00270.0.0.0\u0027, 0))"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"            def send_to_port(*_):"},{"line_number":1407,"context_line":"                sock.sendto(\u0027ping\u0027, (self.fip_addr, 2222))"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"            def create_reply(buf):"},{"line_number":1410,"context_line":"                ingress_pkt \u003d ryu.lib.packet.packet.Packet(buf)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_f49d860a","line":1407,"range":{"start_line":1407,"start_character":37,"end_line":1407,"end_character":50},"updated":"2016-11-20 08:13:05.000000000","message":"Do we need to check if the dest IP has been translated to the fixed IP when this ping packet is received?","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7008bfe12bcb144cd811f2fa4d6919bf7d684406","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"            sock.bind((\u00270.0.0.0\u0027, 0))"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"            def send_to_port(*_):"},{"line_number":1407,"context_line":"                sock.sendto(\u0027ping\u0027, (self.fip_addr, 2222))"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"            def create_reply(buf):"},{"line_number":1410,"context_line":"                ingress_pkt \u003d ryu.lib.packet.packet.Packet(buf)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_ba2e9740","line":1407,"range":{"start_line":1407,"start_character":37,"end_line":1407,"end_character":50},"in_reply_to":"7a77a97e_f49d860a","updated":"2016-11-20 12:21:44.000000000","message":"I will add this check","commit_id":"dd9b332862aac05248c8e07a32623d82630bc12b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ce177da3cba7bfb3506331111728dff5df8b96d2","unresolved":false,"context_lines":[{"line_number":1312,"context_line":"            # create FIP in ext net and associate with port in subnet"},{"line_number":1313,"context_line":"            self.fip \u003d self.store("},{"line_number":1314,"context_line":"                objects.FloatingipTestObj(self.neutron, self.nb_api))"},{"line_number":1315,"context_line":"            self.fip.create({\u0027floating_network_id\u0027: external_network_id})"},{"line_number":1316,"context_line":"            self.assertTrue(self.fip.exists())"},{"line_number":1317,"context_line":"            self.fip.update({\u0027port_id\u0027: self.int_port.port.port_id})"},{"line_number":1318,"context_line":"            self.fip_addr \u003d self.fip.get_floatingip().get_ip_address()"},{"line_number":1319,"context_line":""},{"line_number":1320,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_2ffb277a","line":1317,"range":{"start_line":1315,"start_character":0,"end_line":1317,"end_character":68},"updated":"2016-11-20 09:05:14.000000000","message":"You can create floatingip with port_id, so no need to create and then udpate fip.","commit_id":"b5572aae7eb0d521028a3a25ccc7fbd2dce3cd14"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ce177da3cba7bfb3506331111728dff5df8b96d2","unresolved":false,"context_lines":[{"line_number":1336,"context_line":"                return udp.dst_port \u003d\u003d 2222"},{"line_number":1337,"context_line":"        return _Filter()"},{"line_number":1338,"context_line":""},{"line_number":1339,"context_line":"    @lockutils.synchronized(\u0027need-external-net\u0027)"},{"line_number":1340,"context_line":"    def test_send_recv_packet(self):"},{"line_number":1341,"context_line":"        self._test_send_recv_packet()"},{"line_number":1342,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_8f1a7bc4","line":1339,"range":{"start_line":1339,"start_character":0,"end_line":1339,"end_character":48},"updated":"2016-11-20 09:05:14.000000000","message":"Do we need this? the fullstack now is one thread.","commit_id":"b5572aae7eb0d521028a3a25ccc7fbd2dce3cd14"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1efd25d45ec280a13014662d013dd8dcfd7cff3f","unresolved":false,"context_lines":[{"line_number":1458,"context_line":"            if policy.exceptions:"},{"line_number":1459,"context_line":"                raise policy.exceptions[0]"},{"line_number":1460,"context_line":""},{"line_number":1461,"context_line":"            sock.settimeout(200.0)"},{"line_number":1462,"context_line":"            data, addr \u003d sock.recvfrom(1024)"},{"line_number":1463,"context_line":"            self.assertEqual(addr[0], self.fip_addr)"},{"line_number":1464,"context_line":"            self.assertEqual(addr[1], 2222)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_41aad386","line":1461,"range":{"start_line":1461,"start_character":12,"end_line":1461,"end_character":34},"updated":"2016-11-21 16:30:25.000000000","message":"Oops, this is really way too much","commit_id":"c54d3fb58ce9ba659accaa8cbe43ba0e91667d1c"}]}
