)]}'
{"nova/tests/unit/virt/libvirt/test_migration.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3add8fd480cda3872c7e6686181a0f060343a84b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"\u003c/domain\u003e\"\"\""},{"line_number":192,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":193,"context_line":"        res \u003d etree.tostring(migration._update_perf_events_xml(doc, data))"},{"line_number":194,"context_line":"        self.assertIn(\u0027\u003cevent enabled\u003d\"yes\" name\u003d\"cmt\"/\u003e\u0027,"},{"line_number":195,"context_line":"                      six.text_type(res))"},{"line_number":196,"context_line":"        self.assertNotIn(\u0027\u003cevent enabled\u003d\"yes\" name\u003d\"mbml\"/\u003e\u0027,"},{"line_number":197,"context_line":"                      six.text_type(res))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def test_update_perf_events_xml_add_new_events(self):"},{"line_number":200,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_a8a76b09","line":197,"range":{"start_line":194,"start_character":8,"end_line":197,"end_character":41},"updated":"2016-06-24 16:18:02.000000000","message":"nit: I\u0027d prefer seeing the full expected xml compared to the result.","commit_id":"7ac0b3a0ded708e9c5a77afbea2fa88811199af1"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4e6867a703058f88d90e04491317dd72b125c2dc","unresolved":false,"context_lines":[{"line_number":191,"context_line":"\u003c/domain\u003e\"\"\""},{"line_number":192,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":193,"context_line":"        res \u003d etree.tostring(migration._update_perf_events_xml(doc, data))"},{"line_number":194,"context_line":"        self.assertIn(\u0027\u003cevent enabled\u003d\"yes\" name\u003d\"cmt\"/\u003e\u0027,"},{"line_number":195,"context_line":"                      six.text_type(res))"},{"line_number":196,"context_line":"        self.assertNotIn(\u0027\u003cevent enabled\u003d\"yes\" name\u003d\"mbml\"/\u003e\u0027,"},{"line_number":197,"context_line":"                      six.text_type(res))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def test_update_perf_events_xml_add_new_events(self):"},{"line_number":200,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_2ead1c9b","line":197,"range":{"start_line":194,"start_character":8,"end_line":197,"end_character":41},"in_reply_to":"3aaa91ec_a8a76b09","updated":"2016-06-27 03:17:19.000000000","message":"Done","commit_id":"7ac0b3a0ded708e9c5a77afbea2fa88811199af1"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7250b1eac756058fa663dbc7a27bfb3807c90336","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  \u003c/perf\u003e"},{"line_number":195,"context_line":"\u003c/domain\u003e\"\"\""},{"line_number":196,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":197,"context_line":"        res \u003d etree.tostring(migration._update_perf_events_xml(doc, data))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(\"\"\"\u003cdomain\u003e"},{"line_number":200,"context_line":"  \u003cperf\u003e"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_5b1496e7","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":74},"updated":"2016-06-27 11:29:45.000000000","message":"etree.tostring returns bytes in Python 3.","commit_id":"35566e26741b8c4f5e51d3d8eef25c5d184a7c98"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ae2cd7aafedf919cca265e45f5662fa242a4983","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  \u003c/perf\u003e"},{"line_number":195,"context_line":"\u003c/domain\u003e\"\"\""},{"line_number":196,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":197,"context_line":"        res \u003d etree.tostring(migration._update_perf_events_xml(doc, data))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(\"\"\"\u003cdomain\u003e"},{"line_number":200,"context_line":"  \u003cperf\u003e"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_b2aca68d","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":74},"in_reply_to":"3aaa91ec_5b1496e7","updated":"2016-06-27 16:58:59.000000000","message":"The existing tests are doing the same thing, so I wouldn\u0027t block on this for FF on 6/30. These would all probably get cleaned up for py3 support at the same time.","commit_id":"35566e26741b8c4f5e51d3d8eef25c5d184a7c98"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"8cca5756707580c45466a0fbc33015fc96da4994","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  \u003c/perf\u003e"},{"line_number":195,"context_line":"\u003c/domain\u003e\"\"\""},{"line_number":196,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":197,"context_line":"        res \u003d etree.tostring(migration._update_perf_events_xml(doc, data))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(\"\"\"\u003cdomain\u003e"},{"line_number":200,"context_line":"  \u003cperf\u003e"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_b7400337","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":74},"in_reply_to":"3aaa91ec_5b1496e7","updated":"2016-06-28 01:12:32.000000000","message":"yes, thanks for pointing me out.","commit_id":"35566e26741b8c4f5e51d3d8eef25c5d184a7c98"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c18a70cc56e8c709c9cd96280cf7a1691fd84918","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  \u003c/perf\u003e"},{"line_number":195,"context_line":"\u003c/domain\u003e\"\"\""},{"line_number":196,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":197,"context_line":"        res \u003d etree.tostring(migration._update_perf_events_xml(doc, data))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(\"\"\"\u003cdomain\u003e"},{"line_number":200,"context_line":"  \u003cperf\u003e"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_b8ac878d","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":74},"in_reply_to":"3aaa91ec_b2aca68d","updated":"2016-06-27 17:39:05.000000000","message":"Oh I see the py34 job is failing on this:\n\nhttp://logs.openstack.org/39/329339/8/check/gate-nova-python34-db/6599106/console.html#_2016-06-27_03_26_33_254881\n\nWeird, then why aren\u0027t the others failing above?","commit_id":"35566e26741b8c4f5e51d3d8eef25c5d184a7c98"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"8cca5756707580c45466a0fbc33015fc96da4994","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  \u003c/perf\u003e"},{"line_number":195,"context_line":"\u003c/domain\u003e\"\"\""},{"line_number":196,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":197,"context_line":"        res \u003d etree.tostring(migration._update_perf_events_xml(doc, data))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(\"\"\"\u003cdomain\u003e"},{"line_number":200,"context_line":"  \u003cperf\u003e"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_d7478f49","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":74},"in_reply_to":"3aaa91ec_b2aca68d","updated":"2016-06-28 01:12:32.000000000","message":"yep, I can do the cleanup after this patch.","commit_id":"35566e26741b8c4f5e51d3d8eef25c5d184a7c98"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"8cca5756707580c45466a0fbc33015fc96da4994","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  \u003c/perf\u003e"},{"line_number":195,"context_line":"\u003c/domain\u003e\"\"\""},{"line_number":196,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":197,"context_line":"        res \u003d etree.tostring(migration._update_perf_events_xml(doc, data))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(\"\"\"\u003cdomain\u003e"},{"line_number":200,"context_line":"  \u003cperf\u003e"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_97ab47d6","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":74},"in_reply_to":"3aaa91ec_b8ac878d","updated":"2016-06-28 01:12:32.000000000","message":"for other failing, we user assertIn not assertEqual. as gcb pointing out: etree.tostring returns bytes in py3\n\nI tested, we can do ether \n\nself.assertEqual(b\"\"\"\u003cdomain\u003e .... \"\"\", res) \n\nor \n\nself.assertEqual(\"\"\"\u003cdomain\u003e .... \"\"\", encodeutils.safe_decode(res))","commit_id":"35566e26741b8c4f5e51d3d8eef25c5d184a7c98"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7250b1eac756058fa663dbc7a27bfb3807c90336","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        self.assertEqual(\"\"\"\u003cdomain\u003e"},{"line_number":200,"context_line":"  \u003cperf\u003e"},{"line_number":201,"context_line":"    \u003cevent enabled\u003d\"yes\" name\u003d\"cmt\"/\u003e\u003c/perf\u003e"},{"line_number":202,"context_line":"\u003c/domain\u003e\"\"\", six.text_type(res))"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_update_perf_events_xml_add_new_events(self):"},{"line_number":205,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_1b932e5c","line":202,"range":{"start_line":202,"start_character":14,"end_line":202,"end_character":32},"updated":"2016-06-27 11:29:45.000000000","message":"use : from oslo_utils import encodeutils\n      encodeutils.safe_decode(res)","commit_id":"35566e26741b8c4f5e51d3d8eef25c5d184a7c98"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ae2cd7aafedf919cca265e45f5662fa242a4983","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        self.assertEqual(\"\"\"\u003cdomain\u003e"},{"line_number":200,"context_line":"  \u003cperf\u003e"},{"line_number":201,"context_line":"    \u003cevent enabled\u003d\"yes\" name\u003d\"cmt\"/\u003e\u003c/perf\u003e"},{"line_number":202,"context_line":"\u003c/domain\u003e\"\"\", six.text_type(res))"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_update_perf_events_xml_add_new_events(self):"},{"line_number":205,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_92a9aa7e","line":202,"range":{"start_line":202,"start_character":14,"end_line":202,"end_character":32},"in_reply_to":"3aaa91ec_1b932e5c","updated":"2016-06-27 16:58:59.000000000","message":"ditto","commit_id":"35566e26741b8c4f5e51d3d8eef25c5d184a7c98"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba87ec06247de33cbbbfce54df9d9d6a8cae47b6","unresolved":false,"context_lines":[{"line_number":220,"context_line":"\u003cperf\u003e\u003cevent enabled\u003d\"yes\" name\u003d\"cmt\"/\u003e\u003c/perf\u003e\u003c/domain\u003e\"\"\","},{"line_number":221,"context_line":"                         encodeutils.safe_decode(res))"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def test_update_perf_events_xml_add_new_events1(self):"},{"line_number":224,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("},{"line_number":225,"context_line":"            supported_perf_events\u003d[\u0027cmt\u0027, \u0027mbml\u0027])"},{"line_number":226,"context_line":"        xml \u003d \"\"\"\u003cdomain\u003e"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_c3792684","line":223,"range":{"start_line":223,"start_character":50,"end_line":223,"end_character":51},"updated":"2016-06-29 18:22:28.000000000","message":"nit: this isn\u0027t very descriptive of the difference from the test before this.","commit_id":"3b9e7c5dec88c56e55f31cd1909d48fc5b00f082"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3add8fd480cda3872c7e6686181a0f060343a84b","unresolved":false,"context_lines":[{"line_number":6516,"context_line":"        # Store live_migration_inbound_addr"},{"line_number":6517,"context_line":"        migrate_data.target_connect_addr \u003d \\"},{"line_number":6518,"context_line":"            CONF.libvirt.live_migration_inbound_addr"},{"line_number":6519,"context_line":"        migrate_data.supported_perf_events \u003d self._supported_perf_events"},{"line_number":6520,"context_line":""},{"line_number":6521,"context_line":"        for vol in block_device_mapping:"},{"line_number":6522,"context_line":"            connection_info \u003d vol[\u0027connection_info\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_e8117353","line":6519,"updated":"2016-06-24 16:18:02.000000000","message":"We should probably have a test change somewhere to assert this is set.","commit_id":"7ac0b3a0ded708e9c5a77afbea2fa88811199af1"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4e6867a703058f88d90e04491317dd72b125c2dc","unresolved":false,"context_lines":[{"line_number":6516,"context_line":"        # Store live_migration_inbound_addr"},{"line_number":6517,"context_line":"        migrate_data.target_connect_addr \u003d \\"},{"line_number":6518,"context_line":"            CONF.libvirt.live_migration_inbound_addr"},{"line_number":6519,"context_line":"        migrate_data.supported_perf_events \u003d self._supported_perf_events"},{"line_number":6520,"context_line":""},{"line_number":6521,"context_line":"        for vol in block_device_mapping:"},{"line_number":6522,"context_line":"            connection_info \u003d vol[\u0027connection_info\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_6e93a45b","line":6519,"in_reply_to":"3aaa91ec_e8117353","updated":"2016-06-27 03:17:19.000000000","message":"Done","commit_id":"7ac0b3a0ded708e9c5a77afbea2fa88811199af1"}],"nova/virt/libvirt/migration.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3add8fd480cda3872c7e6686181a0f060343a84b","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # remove perf events from xml"},{"line_number":138,"context_line":"    if not perf_events:"},{"line_number":139,"context_line":"        perf_events \u003d etree.Element(\"perf\")"},{"line_number":140,"context_line":"        old_xml_has_perf \u003d False"},{"line_number":141,"context_line":"    else:"},{"line_number":142,"context_line":"        perf_events \u003d perf_events[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_c8c917ae","line":139,"range":{"start_line":139,"start_character":8,"end_line":139,"end_character":43},"updated":"2016-06-24 16:18:02.000000000","message":"Is libvirt OK with an empty \u003cperf\u003e\u003c/perf\u003e element with no children? I\u0027m thinking of the case that we\u0027re migrating an instance with no perf events in the xml to a host that\u0027s not configured for perf events, the resulting xml would have an empty \u003cperf/\u003e element in it essentially - and I\u0027m not sure how libvirt handles that.","commit_id":"7ac0b3a0ded708e9c5a77afbea2fa88811199af1"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"31dc490c9de7c348a628d08281ae215475490dfe","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # remove perf events from xml"},{"line_number":138,"context_line":"    if not perf_events:"},{"line_number":139,"context_line":"        perf_events \u003d etree.Element(\"perf\")"},{"line_number":140,"context_line":"        old_xml_has_perf \u003d False"},{"line_number":141,"context_line":"    else:"},{"line_number":142,"context_line":"        perf_events \u003d perf_events[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_e975f5ca","line":139,"range":{"start_line":139,"start_character":8,"end_line":139,"end_character":43},"in_reply_to":"3aaa91ec_c8c917ae","updated":"2016-06-24 17:51:42.000000000","message":"Thats no problem - the parser just ignores it.","commit_id":"7ac0b3a0ded708e9c5a77afbea2fa88811199af1"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4e6867a703058f88d90e04491317dd72b125c2dc","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # remove perf events from xml"},{"line_number":138,"context_line":"    if not perf_events:"},{"line_number":139,"context_line":"        perf_events \u003d etree.Element(\"perf\")"},{"line_number":140,"context_line":"        old_xml_has_perf \u003d False"},{"line_number":141,"context_line":"    else:"},{"line_number":142,"context_line":"        perf_events \u003d perf_events[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_33a10347","line":139,"range":{"start_line":139,"start_character":8,"end_line":139,"end_character":43},"in_reply_to":"3aaa91ec_e975f5ca","updated":"2016-06-27 03:17:19.000000000","message":"thanks danpb for the clarify, actually I tested in my local environment too.","commit_id":"7ac0b3a0ded708e9c5a77afbea2fa88811199af1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3add8fd480cda3872c7e6686181a0f060343a84b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        for c, event in enumerate(perf_events):"},{"line_number":144,"context_line":"            perf_events.remove(event)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    if not supported_perf_events:"},{"line_number":147,"context_line":"        return xml_doc"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    # add supported perf events"},{"line_number":150,"context_line":"    for e in supported_perf_events:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_68ef431e","line":147,"range":{"start_line":146,"start_character":4,"end_line":147,"end_character":22},"updated":"2016-06-24 16:18:02.000000000","message":"We don\u0027t have a test where the domain xml coming in has perf events but the destination host doesn\u0027t have any supported_perf_events so we assert we get an xml back with no perf events.","commit_id":"7ac0b3a0ded708e9c5a77afbea2fa88811199af1"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4e6867a703058f88d90e04491317dd72b125c2dc","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        for c, event in enumerate(perf_events):"},{"line_number":144,"context_line":"            perf_events.remove(event)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    if not supported_perf_events:"},{"line_number":147,"context_line":"        return xml_doc"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    # add supported perf events"},{"line_number":150,"context_line":"    for e in supported_perf_events:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_53e76fab","line":147,"range":{"start_line":146,"start_character":4,"end_line":147,"end_character":22},"in_reply_to":"3aaa91ec_68ef431e","updated":"2016-06-27 03:17:19.000000000","message":"Done","commit_id":"7ac0b3a0ded708e9c5a77afbea2fa88811199af1"}]}
