)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"532b9cab7ec9881e5c47b673808fa11465ca6bbd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Artom Lifshitz \u003califshit@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-05-09 10:42:35 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: NUMA-aware live migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"During live migration, pass an instance\u0027s instance NUMA topology (if"},{"line_number":10,"context_line":"it has one) to the destination in migrate_data so that the instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5f7c97a3_21f1136c","line":7,"range":{"start_line":7,"start_character":5,"end_line":7,"end_character":30},"updated":"2018-05-28 17:26:48.000000000","message":"summary line should be more specific, I think.","commit_id":"dce1fb4db8f3ff7d40ec89521f41853184a28fb6"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"292bb65bcfd58582203b90980b258c45ad0cb2da","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Artom Lifshitz \u003califshit@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-05-09 10:42:35 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: NUMA-aware live migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"During live migration, pass an instance\u0027s instance NUMA topology (if"},{"line_number":10,"context_line":"it has one) to the destination in migrate_data so that the instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5f7c97a3_687da2e5","line":7,"range":{"start_line":7,"start_character":5,"end_line":7,"end_character":30},"in_reply_to":"5f7c97a3_21f1136c","updated":"2018-06-11 16:21:17.000000000","message":"Done","commit_id":"dce1fb4db8f3ff7d40ec89521f41853184a28fb6"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"532b9cab7ec9881e5c47b673808fa11465ca6bbd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: NUMA-aware live migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"During live migration, pass an instance\u0027s instance NUMA topology (if"},{"line_number":10,"context_line":"it has one) to the destination in migrate_data so that the instance"},{"line_number":11,"context_line":"can be re-fitted to the destination\u0027s NUMA topology."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5f7c97a3_a1dbe3ea","line":9,"range":{"start_line":9,"start_character":42,"end_line":9,"end_character":50},"updated":"2018-05-28 17:26:48.000000000","message":"Would be clearer without the second \"instance\" I think.","commit_id":"dce1fb4db8f3ff7d40ec89521f41853184a28fb6"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"292bb65bcfd58582203b90980b258c45ad0cb2da","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: NUMA-aware live migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"During live migration, pass an instance\u0027s instance NUMA topology (if"},{"line_number":10,"context_line":"it has one) to the destination in migrate_data so that the instance"},{"line_number":11,"context_line":"can be re-fitted to the destination\u0027s NUMA topology."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5f7c97a3_e868d221","line":9,"range":{"start_line":9,"start_character":42,"end_line":9,"end_character":50},"in_reply_to":"5f7c97a3_a1dbe3ea","updated":"2018-06-11 16:21:17.000000000","message":"Done","commit_id":"dce1fb4db8f3ff7d40ec89521f41853184a28fb6"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"c43f7e2edaa9a3b490510cc95979341e3ea698a9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Artom Lifshitz \u003califshit@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-06-11 12:21:11 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: LM: re-fit topology and claim resources on dest"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"During live migration, pass an instance\u0027s NUMA topology (if"},{"line_number":10,"context_line":"it has one) to the destination in migrate_data so that the instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f7c97a3_773c9e91","line":7,"range":{"start_line":7,"start_character":5,"end_line":7,"end_character":52},"updated":"2018-06-11 20:52:54.000000000","message":"the summary line doesn\u0027t accurately reflect what is actually happening in this commit","commit_id":"d17c120e70371d81d82af0551d4c30e4f8f1c1a8"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"c43f7e2edaa9a3b490510cc95979341e3ea698a9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: LM: re-fit topology and claim resources on dest"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"During live migration, pass an instance\u0027s NUMA topology (if"},{"line_number":10,"context_line":"it has one) to the destination in migrate_data so that the instance"},{"line_number":11,"context_line":"can be re-fitted to the destination\u0027s host NUMA topology and its"},{"line_number":12,"context_line":"resources claimed."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint numa-aware-live-migration"},{"line_number":15,"context_line":"Change-Id: Ie97366b5e6ae4b3b7cc83fff16882fdcc681e37f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f7c97a3_97285a33","line":12,"range":{"start_line":9,"start_character":0,"end_line":12,"end_character":18},"updated":"2018-06-11 20:52:54.000000000","message":"If the numa topology is simply being retrieved from the \"instance\" object why do we need the source node to stick it into the migration data?  Why can\u0027t the dest just look at instance.numa_topology directly?","commit_id":"d17c120e70371d81d82af0551d4c30e4f8f1c1a8"}],"nova/tests/unit/api/openstack/compute/admin_only_action_common.py":[{"author":{"_account_id":28203,"name":"Tsuyoshi Nagata","email":"nagata3333333@jp.fujitsu.com","username":"yukari-papa"},"change_message_id":"4ea283dc31717781b31df041960bd23c756884ad","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                id\u003d1, uuid\u003duuid, vm_state\u003dvm_states.ACTIVE,"},{"line_number":39,"context_line":"                task_state\u003dNone, launched_at\u003dtimeutils.utcnow())"},{"line_number":40,"context_line":"        self.compute_api.get("},{"line_number":41,"context_line":"            self.context, uuid, expected_attrs\u003dmox.IgnoreArg()).AndReturn(instance)"},{"line_number":42,"context_line":"        return instance"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _stub_instance_get_failure(self, exc_info, uuid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_5739cc3c","line":41,"range":{"start_line":41,"start_character":0,"end_line":41,"end_character":83},"updated":"2018-05-21 05:56:54.000000000","message":"pep8 error detected.\n\u003eadmin_only_action_common.py:41:80: E501 line too long (83 \u003e 79 characters)\nyou must insert CR in this line.","commit_id":"dce1fb4db8f3ff7d40ec89521f41853184a28fb6"},{"author":{"_account_id":28203,"name":"Tsuyoshi Nagata","email":"nagata3333333@jp.fujitsu.com","username":"yukari-papa"},"change_message_id":"4ea283dc31717781b31df041960bd23c756884ad","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        if uuid is None:"},{"line_number":46,"context_line":"            uuid \u003d uuidutils.generate_uuid()"},{"line_number":47,"context_line":"        self.compute_api.get("},{"line_number":48,"context_line":"            self.context, uuid, expected_attrs\u003dmox.IgnoreArg()).AndRaise(exc_info)"},{"line_number":49,"context_line":"        return uuid"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _test_non_existing_instance(self, action, body_map\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_174354b1","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":82},"updated":"2018-05-21 05:56:54.000000000","message":"pep8 error detected.\n\u003eadmin_only_action_common.py:48:80: E501 line too long (82 \u003e 79 characters)\nyou must insert CR in this line.","commit_id":"dce1fb4db8f3ff7d40ec89521f41853184a28fb6"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1b5f3ef8ea1cde966e446dc4914faf4f5952b5c3","unresolved":false,"context_lines":[{"line_number":6538,"context_line":"        # Update instance\u0027s NUMA topology, if it has one, to fit on this"},{"line_number":6539,"context_line":"        # host\u0027s NUMA topology. Raise if we fail."},{"line_number":6540,"context_line":"        if instance.numa_topology:"},{"line_number":6541,"context_line":"            new_topology \u003d hardware.numa_fit_instance_to_host("},{"line_number":6542,"context_line":"                self._get_host_numa_topology(), instance.numa_topology)"},{"line_number":6543,"context_line":"            if new_topology:"},{"line_number":6544,"context_line":"                data.instance_numa_topology \u003d new_topology"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_1a743867","line":6541,"updated":"2018-06-13 18:20:45.000000000","message":"You can\u0027t do that Artom. The resource should be claimed to avoid any race condition. You have to reuse MigrationContext. Please see what it\u0027s done with claims.py MoveClaim.","commit_id":"dd7a5babcd1551b2fdce4f1ae2499df1e0463af1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"2bb578b96c66a7a8834e8491b150a812e0a42d78","unresolved":false,"context_lines":[{"line_number":6538,"context_line":"        # Update instance\u0027s NUMA topology, if it has one, to fit on this"},{"line_number":6539,"context_line":"        # host\u0027s NUMA topology. Raise if we fail."},{"line_number":6540,"context_line":"        if instance.numa_topology:"},{"line_number":6541,"context_line":"            new_topology \u003d hardware.numa_fit_instance_to_host("},{"line_number":6542,"context_line":"                self._get_host_numa_topology(), instance.numa_topology)"},{"line_number":6543,"context_line":"            if new_topology:"},{"line_number":6544,"context_line":"                data.instance_numa_topology \u003d new_topology"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_da03200f","line":6541,"in_reply_to":"5f7c97a3_1a743867","updated":"2018-06-13 18:49:23.000000000","message":"We\u0027re not actually claiming anything here, just fitting the instance on the destination so that we can pass that information back to the source, so that it can generate the correct XML for the migration.\n\nThe scheduler already did that (assuming we didn\u0027t force a host), but that information got thrown away, so we\u0027re re-doing it here.\n\nThe claiming will be done later (full disclosure: now that I\u0027m re-looking at the flow, I don\u0027t really know where to put the claiming. post_live_migration?) Have you read the spec? If there are glaring logic errors in the way I\u0027m approaching this, they\u0027ll be found in the spec first.","commit_id":"dd7a5babcd1551b2fdce4f1ae2499df1e0463af1"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d54382630ea893e8b09112ed2afbf48cd30cea0e","unresolved":false,"context_lines":[{"line_number":6538,"context_line":"        # Update instance\u0027s NUMA topology, if it has one, to fit on this"},{"line_number":6539,"context_line":"        # host\u0027s NUMA topology. Raise if we fail."},{"line_number":6540,"context_line":"        if instance.numa_topology:"},{"line_number":6541,"context_line":"            new_topology \u003d hardware.numa_fit_instance_to_host("},{"line_number":6542,"context_line":"                self._get_host_numa_topology(), instance.numa_topology)"},{"line_number":6543,"context_line":"            if new_topology:"},{"line_number":6544,"context_line":"                data.instance_numa_topology \u003d new_topology"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_e84ac424","line":6541,"in_reply_to":"5f7c97a3_3431fc59","updated":"2018-06-14 10:15:00.000000000","message":"Also since the resources are claimed on destination, the resources returned will be more accurate and we avoid some kind of race conditions during the process of live-migration (which could make some time)","commit_id":"dd7a5babcd1551b2fdce4f1ae2499df1e0463af1"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7854e8c1da82f8f82ebb4a5acb099771cf65d59a","unresolved":false,"context_lines":[{"line_number":6538,"context_line":"        # Update instance\u0027s NUMA topology, if it has one, to fit on this"},{"line_number":6539,"context_line":"        # host\u0027s NUMA topology. Raise if we fail."},{"line_number":6540,"context_line":"        if instance.numa_topology:"},{"line_number":6541,"context_line":"            new_topology \u003d hardware.numa_fit_instance_to_host("},{"line_number":6542,"context_line":"                self._get_host_numa_topology(), instance.numa_topology)"},{"line_number":6543,"context_line":"            if new_topology:"},{"line_number":6544,"context_line":"                data.instance_numa_topology \u003d new_topology"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_f388876b","line":6541,"in_reply_to":"5f7c97a3_da03200f","updated":"2018-06-13 20:47:26.000000000","message":"Scheduler doesn\u0027t claim anything related to NUMA right now, just FYI.","commit_id":"dd7a5babcd1551b2fdce4f1ae2499df1e0463af1"},{"author":{"_account_id":28914,"name":"Hu Zhou","email":"Hu.Zhou@Nokia.com"},"change_message_id":"dba55cf344806ceecf070523332ddb869a36768c","unresolved":false,"context_lines":[{"line_number":6538,"context_line":"        # Update instance\u0027s NUMA topology, if it has one, to fit on this"},{"line_number":6539,"context_line":"        # host\u0027s NUMA topology. Raise if we fail."},{"line_number":6540,"context_line":"        if instance.numa_topology:"},{"line_number":6541,"context_line":"            new_topology \u003d hardware.numa_fit_instance_to_host("},{"line_number":6542,"context_line":"                self._get_host_numa_topology(), instance.numa_topology)"},{"line_number":6543,"context_line":"            if new_topology:"},{"line_number":6544,"context_line":"                data.instance_numa_topology \u003d new_topology"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_15d85cee","line":6541,"in_reply_to":"5f7c97a3_e84ac424","updated":"2018-08-29 07:59:14.000000000","message":"self._get_host_numa_topology() returns host NUMA object which has a list of NUMACell. But NUMACell.pinned_cpus is empty here, so it will offer all available vcpus to instance to fit. CPU Pinning (NUMA aware) live migration will not reallocate(recalculate here) new pinning pCPUs on new host for instance. We need to find out which are the real free vcpus excluding already pinned vcpus. \nMy comments is based on live migration testing on 3 Computes.","commit_id":"dd7a5babcd1551b2fdce4f1ae2499df1e0463af1"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"dbe20218f3121da69d3f3c7624ee509cc1871651","unresolved":false,"context_lines":[{"line_number":6538,"context_line":"        # Update instance\u0027s NUMA topology, if it has one, to fit on this"},{"line_number":6539,"context_line":"        # host\u0027s NUMA topology. Raise if we fail."},{"line_number":6540,"context_line":"        if instance.numa_topology:"},{"line_number":6541,"context_line":"            new_topology \u003d hardware.numa_fit_instance_to_host("},{"line_number":6542,"context_line":"                self._get_host_numa_topology(), instance.numa_topology)"},{"line_number":6543,"context_line":"            if new_topology:"},{"line_number":6544,"context_line":"                data.instance_numa_topology \u003d new_topology"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_3431fc59","line":6541,"in_reply_to":"5f7c97a3_f388876b","updated":"2018-06-14 09:56:00.000000000","message":"Yes, scheduler does not claim anything and actually it\u0027s not its role.\n\nDuring the process we are calling scheduler to find a destination host (based on the NUMATopologyFilter).\n\nNow that we have a potential destination node, We check if this node can \"really\" handle the request by some fine \"migration tests\". (see:live_migrate.py/_call_livem_checks_on_host())\n\nSo it\u0027s here, at this point we call compute/manager/check_can_live_migrate_destination, you have to create a claim object (see: _move_claim in resource_tracker.py) which will do exactly what you are doing here during its test_numa_topology (it\u0027s already implemented).\n\nfinally, at this end of the test/claim in \u0027instance.migration_context.new_numa_topology\u0027 you will have what you are looking for :)\n\nIt\u0027s better to do that so no need for each driver to implemented such check in driver directly.","commit_id":"dd7a5babcd1551b2fdce4f1ae2499df1e0463af1"}]}
