)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"67c73633f52bc2960e00c980c54a769e090ae8e5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add InstanceNUMATopology to LibvirtLiveMigrateData"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation for NUMA-aware live migration, add InstanceNUMATopology"},{"line_number":10,"context_line":"to LibvirtLiveMigrateData."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint numa-aware-live-migration"},{"line_number":13,"context_line":"Change-Id: I7f2a3b6faaac302253e6d75926d8b572373c29ea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_011097a7","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":26},"updated":"2018-05-28 17:09:14.000000000","message":"This is getting pretty close to just repeating the summary line. :)   Maybe something like:\n\n\"For live migration we need to pass the InstanceNUMATopology to the destination node so that it can try to fit the instance to the node and claim the appropriate resources.\"","commit_id":"b370e2582d3cdca7af9ed0c707fe7ed60cb5111d"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9f71e8765c74a4f1cc17730f98af8a3a6bc5471","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add InstanceNUMATopology to LibvirtLiveMigrateData"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation for NUMA-aware live migration, add InstanceNUMATopology"},{"line_number":10,"context_line":"to LibvirtLiveMigrateData."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint numa-aware-live-migration"},{"line_number":13,"context_line":"Change-Id: I7f2a3b6faaac302253e6d75926d8b572373c29ea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_4836a6b6","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":26},"in_reply_to":"5f7c97a3_011097a7","updated":"2018-06-11 16:18:33.000000000","message":"Done","commit_id":"b370e2582d3cdca7af9ed0c707fe7ed60cb5111d"}],"nova/objects/migrate_data.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"41c334c4d33491465f0d2faec88b69dca2a498a4","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        \u0027target_connect_addr\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027supported_perf_events\u0027: fields.ListOfStringsField(),"},{"line_number":150,"context_line":"        \u0027src_supports_native_luks\u0027: fields.BooleanField(),"},{"line_number":151,"context_line":"        \u0027instance_numa_topology\u0027: fields.ObjectField(\u0027InstanceNUMATopology\u0027,"},{"line_number":152,"context_line":"                                                     nullable\u003dTrue),"},{"line_number":153,"context_line":"    }"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_1a4bd82a","line":151,"updated":"2018-06-13 18:19:16.000000000","message":"This is not needed you should use migration context. we already have an instance numa topology. You can\u0027t just check that in pre live migration because you need to \"lock\" the resource that you want to use to avoid any race. That is done by MigrationContext used by Claim","commit_id":"3abaeff8d4232a604496bd9edca72724b2809a57"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"aceb9135fd6310fc88b2640262de7777dccf14d1","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        \u0027target_connect_addr\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027supported_perf_events\u0027: fields.ListOfStringsField(),"},{"line_number":150,"context_line":"        \u0027src_supports_native_luks\u0027: fields.BooleanField(),"},{"line_number":151,"context_line":"        \u0027instance_numa_topology\u0027: fields.ObjectField(\u0027InstanceNUMATopology\u0027,"},{"line_number":152,"context_line":"                                                     nullable\u003dTrue),"},{"line_number":153,"context_line":"    }"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_3346ff22","line":151,"in_reply_to":"5f7c97a3_13af43e3","updated":"2018-06-13 20:52:28.000000000","message":"Ah, right, this is live migration, so no claims, no context. So this is probably a fine place to put it.","commit_id":"3abaeff8d4232a604496bd9edca72724b2809a57"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"29c4f2c5293b66a5791092e190685c58dab55fed","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        \u0027target_connect_addr\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027supported_perf_events\u0027: fields.ListOfStringsField(),"},{"line_number":150,"context_line":"        \u0027src_supports_native_luks\u0027: fields.BooleanField(),"},{"line_number":151,"context_line":"        \u0027instance_numa_topology\u0027: fields.ObjectField(\u0027InstanceNUMATopology\u0027,"},{"line_number":152,"context_line":"                                                     nullable\u003dTrue),"},{"line_number":153,"context_line":"    }"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_13af43e3","line":151,"in_reply_to":"5f7c97a3_1a4bd82a","updated":"2018-06-13 20:45:35.000000000","message":"We also already have a new and old version of this object in MigrationContext. Is that not enough?","commit_id":"3abaeff8d4232a604496bd9edca72724b2809a57"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"996f18532e81234fb0d1e0958961458b6b19e2b6","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        \u0027target_connect_addr\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027supported_perf_events\u0027: fields.ListOfStringsField(),"},{"line_number":150,"context_line":"        \u0027src_supports_native_luks\u0027: fields.BooleanField(),"},{"line_number":151,"context_line":"        \u0027instance_numa_topology\u0027: fields.ObjectField(\u0027InstanceNUMATopology\u0027,"},{"line_number":152,"context_line":"                                                     nullable\u003dTrue),"},{"line_number":153,"context_line":"    }"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_1409602f","line":151,"in_reply_to":"5f7c97a3_3346ff22","updated":"2018-06-14 09:59:26.000000000","message":"It is enough and we need to claim during live migration. At this end we will have instance.migration_context.instance_numa_topology.\n\nIt\u0027s all already implemented. I made some explanation here:\n\n  https://review.openstack.org/#/c/567242/5/nova/virt/libvirt/driver.py@6541","commit_id":"3abaeff8d4232a604496bd9edca72724b2809a57"}],"nova/tests/unit/objects/test_migrate_data.py":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"67c73633f52bc2960e00c980c54a769e090ae8e5","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        versions \u003d ovo_base.obj_tree_get_versions(\u0027LibvirtLiveMigrateData\u0027)"},{"line_number":230,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateData("},{"line_number":231,"context_line":"            instance_numa_topology \u003d objects.InstanceNUMATopology("},{"line_number":232,"context_line":"                cells\u003d[objects.InstanceNUMACell(id\u003d0, cpuset\u003dset([1]),"},{"line_number":233,"context_line":"                                                memory\u003d512),"},{"line_number":234,"context_line":"                       objects.InstanceNUMACell(id\u003d1, cpuset\u003dset([3]),"},{"line_number":235,"context_line":"                                                memory\u003d512)"},{"line_number":236,"context_line":"                ]),"},{"line_number":237,"context_line":"            src_supports_native_luks\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_e17f9bdc","line":234,"range":{"start_line":232,"start_character":61,"end_line":234,"end_character":70},"updated":"2018-05-28 17:09:14.000000000","message":"I thought vCPU numbering started at zero...if so it might make more sense to have vCPU numbers 1 and 0 rather than 1 and 3.","commit_id":"b370e2582d3cdca7af9ed0c707fe7ed60cb5111d"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9f71e8765c74a4f1cc17730f98af8a3a6bc5471","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        versions \u003d ovo_base.obj_tree_get_versions(\u0027LibvirtLiveMigrateData\u0027)"},{"line_number":230,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateData("},{"line_number":231,"context_line":"            instance_numa_topology \u003d objects.InstanceNUMATopology("},{"line_number":232,"context_line":"                cells\u003d[objects.InstanceNUMACell(id\u003d0, cpuset\u003dset([1]),"},{"line_number":233,"context_line":"                                                memory\u003d512),"},{"line_number":234,"context_line":"                       objects.InstanceNUMACell(id\u003d1, cpuset\u003dset([3]),"},{"line_number":235,"context_line":"                                                memory\u003d512)"},{"line_number":236,"context_line":"                ]),"},{"line_number":237,"context_line":"            src_supports_native_luks\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_e86f728f","line":234,"range":{"start_line":232,"start_character":61,"end_line":234,"end_character":70},"in_reply_to":"5f7c97a3_e17f9bdc","updated":"2018-06-11 16:18:33.000000000","message":"Done","commit_id":"b370e2582d3cdca7af9ed0c707fe7ed60cb5111d"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"67c73633f52bc2960e00c980c54a769e090ae8e5","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            serial_listen_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":241,"context_line":"            target_connect_addr\u003d\u0027127.0.0.1\u0027)"},{"line_number":242,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.0\u0027,"},{"line_number":243,"context_line":"                                         version_manifest\u003dversions)"},{"line_number":244,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":245,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":246,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_814907b8","line":243,"range":{"start_line":243,"start_character":40,"end_line":243,"end_character":66},"updated":"2018-05-28 17:09:14.000000000","message":"why do we need \"version_manifest\" now when we didn\u0027t before?","commit_id":"b370e2582d3cdca7af9ed0c707fe7ed60cb5111d"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1e9a40bdd04575ff93292407fd5409f56894eba5","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            serial_listen_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":241,"context_line":"            target_connect_addr\u003d\u0027127.0.0.1\u0027)"},{"line_number":242,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.0\u0027,"},{"line_number":243,"context_line":"                                         version_manifest\u003dversions)"},{"line_number":244,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":245,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":246,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_a104434b","line":243,"range":{"start_line":243,"start_character":40,"end_line":243,"end_character":66},"in_reply_to":"5f7c97a3_814907b8","updated":"2018-05-28 17:12:46.000000000","message":"Because we\u0027re backporting nested objects. Honestly, Dan Smith might explain it better. But if we remove this, the obj_make_compatible test definitely fails.","commit_id":"b370e2582d3cdca7af9ed0c707fe7ed60cb5111d"}]}
