)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a98aea6428b191357697d276a428dc8bd315f9e7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mike Lowe \u003cjomlowe@iu.edu\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-11-07 09:02:18 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Take no chance an assigned disk device address will be overwritten during migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"During live migration disk devices are updated with the latest"},{"line_number":10,"context_line":"block device mapping information for volumes.  Previously this"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f4b6375_4ca428a6","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":83},"updated":"2017-11-07 14:38:21.000000000","message":"Please make commit summary lines no longer than 50 characters. How about this instead?\n\n live-mig: keep disk device address same","commit_id":"705b9456219204a2fbe24ffe239e29fbf02a20c8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a98aea6428b191357697d276a428dc8bd315f9e7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"relied on libvirt to assign addresses in order after the already"},{"line_number":12,"context_line":"assigned devices like the root disk had been accounted for.  In"},{"line_number":13,"context_line":"the latest libvirt the unassigned devices are allocated first which"},{"line_number":14,"context_line":"makes the root disk address double allcated causing the migration to"},{"line_number":15,"context_line":"fail.  A running instance should never have the hardware addresses"},{"line_number":16,"context_line":"of its disks changed mid flight.  With this disk addresses are no"},{"line_number":17,"context_line":"longer updated with block device mapping information while every"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f4b6375_ac2f1cf4","line":14,"range":{"start_line":14,"start_character":35,"end_line":14,"end_character":43},"updated":"2017-11-07 14:38:21.000000000","message":"allocated","commit_id":"705b9456219204a2fbe24ffe239e29fbf02a20c8"}],"nova/tests/unit/virt/libvirt/test_migration.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5a4eb5f889283412a8ec8594168383a2c7010c72","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        new_xml \u003d xml.replace(\u0027ip-1.2.3.4:3260-iqn.abc.12345.opst-lun-X\u0027,"},{"line_number":247,"context_line":"                              \u0027ip-1.2.3.4:3260-iqn.cde.67890.opst-lun-Z\u0027)"},{"line_number":248,"context_line":"        self.assertThat(res, matchers.XMLMatches(new_xml))"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        # Now test to make sure xml isn\u0027t alterned for virtio-scsi and rbd"},{"line_number":251,"context_line":"        connection_info \u003d {"},{"line_number":252,"context_line":"            \u0027driver_volume_type\u0027: \u0027rbd\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_2f22f4a3","line":249,"updated":"2017-11-08 00:40:53.000000000","message":"go ahead and make this in a new test function since you aren\u0027t sharing any variables from above here. Simply do:\n\n def test_update_volume_xml_keeps_address(self):","commit_id":"3c0ccc96d4a915de7bfd034e6dc77817a36e2036"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5a4eb5f889283412a8ec8594168383a2c7010c72","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                              \u0027ip-1.2.3.4:3260-iqn.cde.67890.opst-lun-Z\u0027)"},{"line_number":248,"context_line":"        self.assertThat(res, matchers.XMLMatches(new_xml))"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        # Now test to make sure xml isn\u0027t alterned for virtio-scsi and rbd"},{"line_number":251,"context_line":"        connection_info \u003d {"},{"line_number":252,"context_line":"            \u0027driver_volume_type\u0027: \u0027rbd\u0027,"},{"line_number":253,"context_line":"            \u0027serial\u0027: \u0027d299a078-f0db-4993-bf03-f10fe44fd192\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_2f09d429","line":250,"range":{"start_line":250,"start_character":42,"end_line":250,"end_character":50},"updated":"2017-11-08 00:40:53.000000000","message":"altered","commit_id":"3c0ccc96d4a915de7bfd034e6dc77817a36e2036"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5a4eb5f889283412a8ec8594168383a2c7010c72","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            \u0027data\u0027: {"},{"line_number":255,"context_line":"                \u0027access_mode\u0027: \u0027rw\u0027,"},{"line_number":256,"context_line":"                \u0027secret_type\u0027: \u0027ceph\u0027,"},{"line_number":257,"context_line":"                \u0027name\u0027: \u0027cinder-volumes/volume-d299a078-f0db-4993-bf03-f10fe44fd192\u0027,"},{"line_number":258,"context_line":"                \u0027encrypted\u0027: False,"},{"line_number":259,"context_line":"                \u0027discard\u0027: True,"},{"line_number":260,"context_line":"                \u0027cluster_name\u0027: \u0027ceph\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_8f77a8a0","line":257,"updated":"2017-11-08 00:40:53.000000000","message":"2017-11-07 19:12:41.877757 | ubuntu-xenial | ./nova/tests/unit/virt/libvirt/test_migration.py:257:80: E501 line too long (85 \u003e 79 characters)\n\nJust shorten this to cinder-volumes/volume-name or something...","commit_id":"3c0ccc96d4a915de7bfd034e6dc77817a36e2036"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5a4eb5f889283412a8ec8594168383a2c7010c72","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                \u0027qos_specs\u0027: Null,"},{"line_number":263,"context_line":"                \u0027auth_enabled\u0027: True,"},{"line_number":264,"context_line":"                \u0027volume_id\u0027: \u0027d299a078-f0db-4993-bf03-f10fe44fd192\u0027,"},{"line_number":265,"context_line":"                \u0027hosts\u0027: [\u0027172.16.128.101\u0027, \u0027172.16.128.121\u0027, \u0027172.16.128.130\u0027],"},{"line_number":266,"context_line":"                \u0027auth_username\u0027: \u0027cinder\u0027,"},{"line_number":267,"context_line":"                \u0027ports\u0027: [\u00276789\u0027, \u00276789\u0027, \u00276789\u0027]}}"},{"line_number":268,"context_line":"        bdm \u003d objects.LibvirtLiveMigrateBDMInfo("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_cf6000d2","line":265,"updated":"2017-11-08 00:40:53.000000000","message":"2017-11-07 19:12:41.878211 | ubuntu-xenial | ./nova/tests/unit/virt/libvirt/test_migration.py:265:80: E501 line too long (80 \u003e 79 characters)\n\nJust split these across lines (or remove one of the elements)","commit_id":"3c0ccc96d4a915de7bfd034e6dc77817a36e2036"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5a4eb5f889283412a8ec8594168383a2c7010c72","unresolved":false,"context_lines":[{"line_number":280,"context_line":"      \u003cauth username\u003d\u0027cinder\u0027\u003e"},{"line_number":281,"context_line":"        \u003csecret type\u003d\u0027ceph\u0027 uuid\u003d\u00271a790a26-dd49-4825-8d16-3dd627cf05a9\u0027/\u003e"},{"line_number":282,"context_line":"      \u003c/auth\u003e"},{"line_number":283,"context_line":"      \u003csource protocol\u003d\u0027rbd\u0027 name\u003d\u0027cinder-volumes/volume-d299a078-f0db-4993-bf03-f10fe44fd192\u0027\u003e"},{"line_number":284,"context_line":"        \u003chost name\u003d\u0027172.16.128.101\u0027 port\u003d\u00276789\u0027/\u003e"},{"line_number":285,"context_line":"        \u003chost name\u003d\u0027172.16.128.121\u0027 port\u003d\u00276789\u0027/\u003e"},{"line_number":286,"context_line":"        \u003chost name\u003d\u0027172.16.128.130\u0027 port\u003d\u00276789\u0027/\u003e"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_0f6bb8b6","line":283,"updated":"2017-11-08 00:40:53.000000000","message":"2017-11-07 19:12:41.878274 | ubuntu-xenial | ./nova/tests/unit/virt/libvirt/test_migration.py:283:80: E501 line too long (95 \u003e 79 characters)\n\nditto from above","commit_id":"3c0ccc96d4a915de7bfd034e6dc77817a36e2036"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5a4eb5f889283412a8ec8594168383a2c7010c72","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":308,"context_line":"        res \u003d etree.tostring(migration._update_volume_xml("},{"line_number":309,"context_line":"            doc, data, get_volume_config), encoding\u003d\u0027unicode\u0027)"},{"line_number":310,"context_line":"        self.assertThat(res, matchers.XMLMatches(xml))"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def test_update_perf_events_xml(self):"},{"line_number":313,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_8f9c48c0","line":310,"updated":"2017-11-08 00:40:53.000000000","message":"Test failure here:\n\n Traceback (most recent call last):\n  File \"nova/tests/unit/virt/libvirt/test_migration.py\", line 307, in test_update_volume_xml\n    doc \u003d etree.fromstring(xml)\n  File \"src/lxml/etree.pyx\", line 3230, in lxml.etree.fromstring (src/lxml/etree.c:81055)\n  File \"src/lxml/parser.pxi\", line 1871, in lxml.etree._parseMemoryDocument (src/lxml/etree.c:121235)\n  File \"src/lxml/parser.pxi\", line 1759, in lxml.etree._parseDoc (src/lxml/etree.c:119911)\n  File \"src/lxml/parser.pxi\", line 1125, in lxml.etree._BaseParser._parseDoc (src/lxml/etree.c:114158)\n  File \"src/lxml/parser.pxi\", line 598, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/etree.c:107723)\n  File \"src/lxml/parser.pxi\", line 709, in lxml.etree._handleParseResult (src/lxml/etree.c:109432)\n  File \"src/lxml/parser.pxi\", line 638, in lxml.etree._raiseParseError (src/lxml/etree.c:108286)\n  File \"\u003cstring\u003e\", line 18\nlxml.etree.XMLSyntaxError: Opening and ending tag mismatch: disk line 3 and devices, line 18, column 13","commit_id":"3c0ccc96d4a915de7bfd034e6dc77817a36e2036"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b02f8c02cec8395b97469d15dc2d1963e456e33f","unresolved":false,"context_lines":[{"line_number":293,"context_line":"      \u003caddress type\u003d\u0027drive\u0027 controller\u003d\u00270\u0027 bus\u003d\u00270\u0027 target\u003d\u00270\u0027 unit\u003d\u00271\u0027/\u003e"},{"line_number":294,"context_line":"    \u003c/disk\u003e"},{"line_number":295,"context_line":" \u003c/devices\u003e"},{"line_number":296,"context_line":"\u003c/domain\u003e\"\"\""},{"line_number":297,"context_line":"        conf \u003d vconfig.LibvirtConfigGuestDisk()"},{"line_number":298,"context_line":"        conf.source_device \u003d bdm.type"},{"line_number":299,"context_line":"        conf.driver_name \u003d \"qemu\""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_ac8ee2cd","line":296,"updated":"2017-11-09 14:57:53.000000000","message":"I\u0027d like to see this test show that *only* the address element of the returned XML has been kept the same between source and destination. As this test stands, the source and destination elements are all exactly the same, so there\u0027s no change in the XML being returned from the _update_volume_xml() function. How about making the destination disk alias element different so that we can test that the destination alias is changed from the source alias but the address element stays the same?","commit_id":"580bcf00bd0bcfb7003e6e4ec98b89640e881ee9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"897f7a616ad5113724f7134ef3c00a59594596dc","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                \u0027qos_specs\u0027: None,"},{"line_number":264,"context_line":"                \u0027auth_enabled\u0027: True,"},{"line_number":265,"context_line":"                \u0027volume_id\u0027: \u0027d299a078-f0db-4993-bf03-f10fe44fd192\u0027,"},{"line_number":266,"context_line":"                \u0027hosts\u0027: [\u0027172.16.128.101\u0027, \u0027172.16.128.122\u0027],"},{"line_number":267,"context_line":"                \u0027auth_username\u0027: \u0027cinder\u0027,"},{"line_number":268,"context_line":"                \u0027ports\u0027: [\u00276789\u0027, \u00276789\u0027, \u00276789\u0027]}}"},{"line_number":269,"context_line":"        bdm \u003d objects.LibvirtLiveMigrateBDMInfo("}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_07755f95","line":266,"range":{"start_line":266,"start_character":45,"end_line":266,"end_character":59},"updated":"2017-11-21 22:51:13.000000000","message":"You can set this back to what you had in the previous patch set.","commit_id":"e4508cbbffd12cf3874c02f995f96f0f4f54a1e3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"70823d57529c506e68515edb478b5d31240009c9","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                \u0027volume_id\u0027: \u0027d299a078-f0db-4993-bf03-f10fe44fd192\u0027,"},{"line_number":266,"context_line":"                \u0027hosts\u0027: [\u0027172.16.128.101\u0027, \u0027172.16.128.122\u0027],"},{"line_number":267,"context_line":"                \u0027auth_username\u0027: \u0027cinder\u0027,"},{"line_number":268,"context_line":"                \u0027ports\u0027: [\u00276789\u0027, \u00276789\u0027, \u00276789\u0027]}}"},{"line_number":269,"context_line":"        bdm \u003d objects.LibvirtLiveMigrateBDMInfo("},{"line_number":270,"context_line":"            serial\u003d\u0027d299a078-f0db-4993-bf03-f10fe44fd192\u0027,"},{"line_number":271,"context_line":"            bus\u003d\u0027scsi\u0027, type\u003d\u0027disk\u0027, dev\u003d\u0027sdb\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_fb5b6a51","line":268,"range":{"start_line":268,"start_character":40,"end_line":268,"end_character":48},"updated":"2017-12-01 14:30:16.000000000","message":"this should be removed since there should be one port per host.","commit_id":"e4508cbbffd12cf3874c02f995f96f0f4f54a1e3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"897f7a616ad5113724f7134ef3c00a59594596dc","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                \u0027ports\u0027: [\u00276789\u0027, \u00276789\u0027, \u00276789\u0027]}}"},{"line_number":269,"context_line":"        bdm \u003d objects.LibvirtLiveMigrateBDMInfo("},{"line_number":270,"context_line":"            serial\u003d\u0027d299a078-f0db-4993-bf03-f10fe44fd192\u0027,"},{"line_number":271,"context_line":"            bus\u003d\u0027scsi\u0027, type\u003d\u0027disk\u0027, dev\u003d\u0027sdb\u0027,"},{"line_number":272,"context_line":"            connection_info\u003dconnection_info)"},{"line_number":273,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("},{"line_number":274,"context_line":"            target_connect_addr\u003dNone,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_87188f1d","line":271,"range":{"start_line":271,"start_character":41,"end_line":271,"end_character":46},"updated":"2017-11-21 22:51:13.000000000","message":"Suggestion: you could set this to \u0027sdc\u0027 to verify that it\u0027s changed as expected to the destination value later.","commit_id":"e4508cbbffd12cf3874c02f995f96f0f4f54a1e3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"897f7a616ad5113724f7134ef3c00a59594596dc","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        conf.target_bus \u003d bdm.bus"},{"line_number":303,"context_line":"        conf.serial \u003d bdm.connection_info.get(\u0027serial\u0027)"},{"line_number":304,"context_line":"        conf.source_type \u003d \"network\""},{"line_number":305,"context_line":"        conf.driver_discard \u003d \u0027unmap\u0027"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        get_volume_config \u003d mock.MagicMock(return_value\u003dconf)"},{"line_number":308,"context_line":"        doc \u003d etree.fromstring(xml)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_0c4b4684","line":305,"updated":"2017-11-21 22:51:13.000000000","message":"I think you need to add here, something like:\n\n conf.device_addr \u003d vconfig.LibvirtConfigGuestDeviceAddressDrive()\n conf.device_addr.controller \u003d 0\n\nto mimic what\u0027s happening in the real get_volume_config driver function with resetting the address info.\n\nThis will make it so that the test will fail without your fix and pass with your fix.","commit_id":"e4508cbbffd12cf3874c02f995f96f0f4f54a1e3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"897f7a616ad5113724f7134ef3c00a59594596dc","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":309,"context_line":"        res \u003d etree.tostring(migration._update_volume_xml("},{"line_number":310,"context_line":"            doc, data, get_volume_config), encoding\u003d\u0027unicode\u0027)"},{"line_number":311,"context_line":"        new_xml \u003d xml.replace(\u0027172.16.128.121\u0027,"},{"line_number":312,"context_line":"                              \u0027172.16.128.122\u0027)"},{"line_number":313,"context_line":"        self.assertThat(res, matchers.XMLMatches(new_xml))"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def test_update_perf_events_xml(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_4c7e2ee5","line":312,"range":{"start_line":311,"start_character":8,"end_line":312,"end_character":47},"updated":"2017-11-21 22:51:13.000000000","message":"I dug into the code to figure out why your unit test is failing and found that the source host IPs are not related to your fix. We need to look at the address element i.e.\n\n \u003caddress type\u003d\u0027drive\u0027 controller\u003d\u00270\u0027 bus\u003d\u00270\u0027 target\u003d\u00270\u0027 unit\u003d\u00271\u0027/\u003e\n\nSo I think you want to change this to something like:\n\n new_xml \u003d xml.replace(\u0027sdb\u0027, \u0027sdc\u0027)\n\nif you use my earlier suggestion to verify that the target dev gets updated to the destination config.","commit_id":"e4508cbbffd12cf3874c02f995f96f0f4f54a1e3"}],"nova/virt/libvirt/migration.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"8e18522733b00c2c103382a2030f75fe7fbfc72f","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                # the item using destination value."},{"line_number":163,"context_line":"                for item_dst in xml_doc2.findall(item_src.tag):"},{"line_number":164,"context_line":"                    if item_dst.tag !\u003d \u0027address\u0027:"},{"line_number":165,"context_line":"                    # hw address presented to guest must never change"},{"line_number":166,"context_line":"                        disk_dev.remove(item_src)"},{"line_number":167,"context_line":"                        item_dst.tail \u003d None"},{"line_number":168,"context_line":"                        disk_dev.insert(cnt, item_dst)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_2fd8c91b","line":165,"range":{"start_line":165,"start_character":0,"end_line":165,"end_character":69},"updated":"2017-11-07 04:10:56.000000000","message":"nit: indent","commit_id":"04024990f1f6f2e0dab6fb153a0384600d2810b9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a98aea6428b191357697d276a428dc8bd315f9e7","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                # the item using destination value."},{"line_number":163,"context_line":"                for item_dst in xml_doc2.findall(item_src.tag):"},{"line_number":164,"context_line":"                    if item_dst.tag !\u003d \u0027address\u0027:"},{"line_number":165,"context_line":"                        # hw address presented to guest must never change"},{"line_number":166,"context_line":"                        disk_dev.remove(item_src)"},{"line_number":167,"context_line":"                        item_dst.tail \u003d None"},{"line_number":168,"context_line":"                        disk_dev.insert(cnt, item_dst)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_cc96d8f0","line":165,"updated":"2017-11-07 14:38:21.000000000","message":"This is only the case for *live* migration, right? According to the bug report, normal cold migration works perfectly fine if the device addresses happen to change.\n\nWe should probably put a note in here that it\u0027s live migration that is the reason for not changing the device addresses.","commit_id":"705b9456219204a2fbe24ffe239e29fbf02a20c8"}]}
