)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6e0eb81094ca4a59e5f71b6cf892f109eafb3c94","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch bumps the service version and adds source and dest service"},{"line_number":10,"context_line":"version checking before starting a live migration of an instance with"},{"line_number":11,"context_line":"an instance NUMA topology. The actual support for NUMA live migration"},{"line_number":12,"context_line":"will come in a subsequent patch."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint numa-aware-live-migration"},{"line_number":15,"context_line":"Change-Id: If0fdb5da6cc447769dc5811ac6ba77425b4f91e3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_e1683a22","line":12,"range":{"start_line":11,"start_character":27,"end_line":12,"end_character":32},"updated":"2018-05-09 00:33:36.000000000","message":"This doesn\u0027t really make sense to me - if we don\u0027t support live migration with NUMA yet, why would we bump the compute service version? Why wouldn\u0027t we bump the compute service versoin when the compute actually does support it and then we can block on it?","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"464950b3238e023aaf75f509c623752519a338e0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch bumps the service version and adds source and dest service"},{"line_number":10,"context_line":"version checking before starting a live migration of an instance with"},{"line_number":11,"context_line":"an instance NUMA topology. The actual support for NUMA live migration"},{"line_number":12,"context_line":"will come in a subsequent patch."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint numa-aware-live-migration"},{"line_number":15,"context_line":"Change-Id: If0fdb5da6cc447769dc5811ac6ba77425b4f91e3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_44d33c61","line":12,"range":{"start_line":11,"start_character":27,"end_line":12,"end_character":32},"in_reply_to":"5f7c97a3_e1683a22","updated":"2018-05-09 01:18:40.000000000","message":"My misguided logic was that we had to do it before, otherwise we could end up with a source upgraded to the new code talking to an old dest without the new code. But then I realised that this can never happen, because unless you run master in production, a release will always have both patches (service check and new code), regardless of which order they came in. So yeah, will mark this as WIP, and insert the actual new NUMA live migration code below it.","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"}],"nova/conductor/tasks/live_migrate.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"417f0f540df6dc9460c584138db123b63432f9f7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.migration.dest_compute \u003d self.destination"},{"line_number":106,"context_line":"        self.migration.save()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        self._check_can_numa_live_migrate()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # TODO(johngarbutt) need to move complexity out of compute manager"},{"line_number":111,"context_line":"        # TODO(johngarbutt) disk_over_commit?"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_a1724210","line":108,"range":{"start_line":108,"start_character":13,"end_line":108,"end_character":41},"updated":"2018-05-09 00:39:43.000000000","message":"Why are you calling this again? And don\u0027t you need to pass a host?","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"464950b3238e023aaf75f509c623752519a338e0","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.migration.dest_compute \u003d self.destination"},{"line_number":106,"context_line":"        self.migration.save()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        self._check_can_numa_live_migrate()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # TODO(johngarbutt) need to move complexity out of compute manager"},{"line_number":111,"context_line":"        # TODO(johngarbutt) disk_over_commit?"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_04cd44b7","line":108,"range":{"start_line":108,"start_character":13,"end_line":108,"end_character":41},"in_reply_to":"5f7c97a3_a1724210","updated":"2018-05-09 01:18:40.000000000","message":"Because I forgot to remove this line from a previous iteration :)","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"417f0f540df6dc9460c584138db123b63432f9f7","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        if \u0027numa_topology\u0027 in self.instance and self.instance.numa_topology:"},{"line_number":142,"context_line":"            NUMA_LIVE_MIGRATION_SERVICE_VERSION \u003d 31"},{"line_number":143,"context_line":"            service \u003d objects.Service.get_by_compute_host(self.context,"},{"line_number":144,"context_line":"                                                             host)"},{"line_number":145,"context_line":"            if service.version \u003c NUMA_LIVE_MIGRATION_SERVICE_VERSION:"},{"line_number":146,"context_line":"                raise exception.NUMALiveMigrationNotSupported("},{"line_number":147,"context_line":"                    instance\u003dself.instance.uuid, source\u003dself.source,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_c1565e5d","line":144,"range":{"start_line":144,"start_character":58,"end_line":144,"end_character":61},"updated":"2018-05-09 00:39:43.000000000","message":"indent","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"464950b3238e023aaf75f509c623752519a338e0","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        if \u0027numa_topology\u0027 in self.instance and self.instance.numa_topology:"},{"line_number":142,"context_line":"            NUMA_LIVE_MIGRATION_SERVICE_VERSION \u003d 31"},{"line_number":143,"context_line":"            service \u003d objects.Service.get_by_compute_host(self.context,"},{"line_number":144,"context_line":"                                                             host)"},{"line_number":145,"context_line":"            if service.version \u003c NUMA_LIVE_MIGRATION_SERVICE_VERSION:"},{"line_number":146,"context_line":"                raise exception.NUMALiveMigrationNotSupported("},{"line_number":147,"context_line":"                    instance\u003dself.instance.uuid, source\u003dself.source,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_24d08050","line":144,"range":{"start_line":144,"start_character":58,"end_line":144,"end_character":61},"in_reply_to":"5f7c97a3_c1565e5d","updated":"2018-05-09 01:18:40.000000000","message":"Done","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"417f0f540df6dc9460c584138db123b63432f9f7","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def _call_livem_checks_on_host(self, destination):"},{"line_number":240,"context_line":"        try:"},{"line_number":241,"context_line":"            self._check_can_numa_live_migrate(destination)"},{"line_number":242,"context_line":"            self.migrate_data \u003d self.compute_rpcapi.\\"},{"line_number":243,"context_line":"                check_can_live_migrate_destination(self.context, self.instance,"},{"line_number":244,"context_line":"                    destination, self.block_migration, self.disk_over_commit)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_21607232","line":241,"updated":"2018-05-09 00:39:43.000000000","message":"Why not having this in it\u0027s own try/except and handle NUMALiveMigrationNotSupported so you can raise MigrationPreCheckError and get an opportunity to find another candidate destination host that does support numa-aware live migration?","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"464950b3238e023aaf75f509c623752519a338e0","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def _call_livem_checks_on_host(self, destination):"},{"line_number":240,"context_line":"        try:"},{"line_number":241,"context_line":"            self._check_can_numa_live_migrate(destination)"},{"line_number":242,"context_line":"            self.migrate_data \u003d self.compute_rpcapi.\\"},{"line_number":243,"context_line":"                check_can_live_migrate_destination(self.context, self.instance,"},{"line_number":244,"context_line":"                    destination, self.block_migration, self.disk_over_commit)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_04422411","line":241,"in_reply_to":"5f7c97a3_21607232","updated":"2018-05-09 01:18:40.000000000","message":"Yep, done.","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"cc13316f05bdc7a373eb599080e20f713e0c78fd","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        :raises: NUMALiveMigrationNotSupported if the host does not support"},{"line_number":137,"context_line":"                 NUMA-aware live migration."},{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        if \u0027numa_topology\u0027 in self.instance and self.instance.numa_topology:"},{"line_number":140,"context_line":"            NUMA_LIVE_MIGRATION_SERVICE_VERSION \u003d 31"},{"line_number":141,"context_line":"            service \u003d objects.Service.get_by_compute_host(self.context,"},{"line_number":142,"context_line":"                                                          host)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_61562b2d","line":139,"range":{"start_line":139,"start_character":11,"end_line":139,"end_character":43},"updated":"2018-05-28 17:56:17.000000000","message":"Just curious, how could this not be true given that we\u0027re asking for it in the API?","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b74d856ae1d24d50767121bb399cc41c85e339f8","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        :raises: NUMALiveMigrationNotSupported if the host does not support"},{"line_number":137,"context_line":"                 NUMA-aware live migration."},{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        if \u0027numa_topology\u0027 in self.instance and self.instance.numa_topology:"},{"line_number":140,"context_line":"            NUMA_LIVE_MIGRATION_SERVICE_VERSION \u003d 31"},{"line_number":141,"context_line":"            service \u003d objects.Service.get_by_compute_host(self.context,"},{"line_number":142,"context_line":"                                                          host)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_e8ff7231","line":139,"range":{"start_line":139,"start_character":11,"end_line":139,"end_character":43},"in_reply_to":"5f7c97a3_61562b2d","updated":"2018-06-11 17:27:10.000000000","message":"Yeah, suppose I could remove it. I\u0027m just always super careful about these things, since it\u0027s still mostly a mystery to me how exactly attributes show up if they\u0027re absent, or present and None, or whatever other black magic goes on.","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f616012c8794892d965967426be24cac423d64b4","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        :raises: NUMALiveMigrationNotSupported if the host does not support"},{"line_number":137,"context_line":"                 NUMA-aware live migration."},{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        if \u0027numa_topology\u0027 in self.instance and self.instance.numa_topology:"},{"line_number":140,"context_line":"            NUMA_LIVE_MIGRATION_SERVICE_VERSION \u003d 31"},{"line_number":141,"context_line":"            service \u003d objects.Service.get_by_compute_host(self.context,"},{"line_number":142,"context_line":"                                                          host)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_e509b930","line":139,"range":{"start_line":139,"start_character":11,"end_line":139,"end_character":43},"in_reply_to":"5f7c97a3_e8ff7231","updated":"2018-06-12 20:36:45.000000000","message":"Heh, it made the unit tests damn simpler though ;) When I removed this I had to mock up _check_can_numa_live_migrate all over the place, because in unit tests, unlike the API, numa_topology is *not* loaded into the instance.","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"64c8f0415f8f153a13bef1837804632fe084cbf3","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def _execute(self):"},{"line_number":57,"context_line":"        self._check_instance_is_active()"},{"line_number":58,"context_line":"        self._check_host_is_up(self.source)"},{"line_number":59,"context_line":"        self._check_can_numa_live_migrate(self.source)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if should_do_migration_allocation(self.context):"},{"line_number":62,"context_line":"            self._source_cn, self._held_allocations \u003d ("}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_4e7d056b","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":54},"updated":"2018-06-14 07:43:52.000000000","message":"Does the source host affects the action? protential rollback?","commit_id":"061ae5d5809fa79e2aa9920f6bd0a0fa1d62b4ab"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"10b60d2ae00547f53a6d81c095ed0f2702e1a5c4","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def _execute(self):"},{"line_number":57,"context_line":"        self._check_instance_is_active()"},{"line_number":58,"context_line":"        self._check_host_is_up(self.source)"},{"line_number":59,"context_line":"        self._check_can_numa_live_migrate(self.source)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if should_do_migration_allocation(self.context):"},{"line_number":62,"context_line":"            self._source_cn, self._held_allocations \u003d ("}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_244b2eb1","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":54},"in_reply_to":"5f7c97a3_4e7d056b","updated":"2018-06-25 23:30:25.000000000","message":"For NUMA live migration the source host needs to pass in modified XML as part of the call to libvirt to trigger the live migration.  So yes, the source host affects things.","commit_id":"061ae5d5809fa79e2aa9920f6bd0a0fa1d62b4ab"}],"nova/objects/service.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"417f0f540df6dc9460c584138db123b63432f9f7","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    {\u0027compute_rpc\u0027: \u00274.22\u0027},"},{"line_number":132,"context_line":"    # Version 30: Compute RPC version 5.0"},{"line_number":133,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":134,"context_line":"    # Version 31: Add support for NUMA-aware live migration, and fail unless"},{"line_number":135,"context_line":"    # both source and dest are updated"},{"line_number":136,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":137,"context_line":")"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_01d216d3","line":136,"range":{"start_line":134,"start_character":4,"end_line":136,"end_character":27},"updated":"2018-05-09 00:39:43.000000000","message":"But nova-compute doesn\u0027t yet support numa-aware live migration, right? If so, then please prefix the commit title with WIP to make it clear this goes at the end of the series rather than the beginning. See how I\u0027ve done this for port binding:\n\nhttps://review.openstack.org/#/c/522537/","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"464950b3238e023aaf75f509c623752519a338e0","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    {\u0027compute_rpc\u0027: \u00274.22\u0027},"},{"line_number":132,"context_line":"    # Version 30: Compute RPC version 5.0"},{"line_number":133,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":134,"context_line":"    # Version 31: Add support for NUMA-aware live migration, and fail unless"},{"line_number":135,"context_line":"    # both source and dest are updated"},{"line_number":136,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":137,"context_line":")"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_a4bb300c","line":136,"range":{"start_line":134,"start_character":4,"end_line":136,"end_character":27},"in_reply_to":"5f7c97a3_01d216d3","updated":"2018-05-09 01:18:40.000000000","message":"Yeah, I was using faulty logic, see my response to your comment on PS5\u0027s commit message.","commit_id":"c4c9c0ec7dca01dc9cfca766a1be647e22441532"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"519e471797142cfd17d50ea80a6e1b22c7c1361b","unresolved":false,"context_lines":[{"line_number":2997,"context_line":"            service.version \u003d 30"},{"line_number":2998,"context_line":"            return service"},{"line_number":2999,"context_line":"        with mock.patch.object(objects.Service, \u0027get_by_compute_host\u0027,"},{"line_number":3000,"context_line":"                               side_effect\u003dpatch_version):"},{"line_number":3001,"context_line":"            post \u003d {"},{"line_number":3002,"context_line":"                \u0027os-migrateLive\u0027: {"},{"line_number":3003,"context_line":"                    \u0027host\u0027: dest_hostname,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_dfae45e6","line":3000,"updated":"2018-05-08 14:19:15.000000000","message":"I think we should avoid mocks whenever possible. Also, this would affect any version-checking done on either service, which I think isn\u0027t what you want.\n\nI would just start the services, then look up and mangle the version as you want before calling the migrate. So:\n\n srv \u003d objects.Service.get_by_compute_host(context.admin_context(), self.compute1.host)\n srv.version \u003d 30\n srv.save()\n\n ...\n\n self.api.post_server_action(...)","commit_id":"9fee10b287e7e77203202bf4c7113b584357d526"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"cc13316f05bdc7a373eb599080e20f713e0c78fd","unresolved":false,"context_lines":[{"line_number":2983,"context_line":"        instance.numa_topology \u003d objects.InstanceNUMATopology("},{"line_number":2984,"context_line":"            cells\u003d[objects.InstanceNUMACell(id\u003d0, cpuset\u003dset([1]),"},{"line_number":2985,"context_line":"                                            memory\u003d512),"},{"line_number":2986,"context_line":"                   objects.InstanceNUMACell(id\u003d1, cpuset\u003dset([3]),"},{"line_number":2987,"context_line":"                                            memory\u003d512)])"},{"line_number":2988,"context_line":"        instance.save()"},{"line_number":2989,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_a10e8338","line":2986,"range":{"start_line":2986,"start_character":62,"end_line":2986,"end_character":63},"updated":"2018-05-28 17:56:17.000000000","message":"can we ever have this in reality?  I thought we would normally number vCPUs starting at zero.","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b74d856ae1d24d50767121bb399cc41c85e339f8","unresolved":false,"context_lines":[{"line_number":2983,"context_line":"        instance.numa_topology \u003d objects.InstanceNUMATopology("},{"line_number":2984,"context_line":"            cells\u003d[objects.InstanceNUMACell(id\u003d0, cpuset\u003dset([1]),"},{"line_number":2985,"context_line":"                                            memory\u003d512),"},{"line_number":2986,"context_line":"                   objects.InstanceNUMACell(id\u003d1, cpuset\u003dset([3]),"},{"line_number":2987,"context_line":"                                            memory\u003d512)])"},{"line_number":2988,"context_line":"        instance.save()"},{"line_number":2989,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_888d9ed5","line":2986,"range":{"start_line":2986,"start_character":62,"end_line":2986,"end_character":63},"in_reply_to":"5f7c97a3_a10e8338","updated":"2018-06-11 17:27:10.000000000","message":"Done","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"cc13316f05bdc7a373eb599080e20f713e0c78fd","unresolved":false,"context_lines":[{"line_number":3027,"context_line":""},{"line_number":3028,"context_line":"        self._delete_and_check_allocations(server)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"    def test_live_migate_numa_dest_check_fails(self):"},{"line_number":3031,"context_line":"        source_hostname \u003d self.compute1.host"},{"line_number":3032,"context_line":"        dest_hostname \u003d self.compute2.host"},{"line_number":3033,"context_line":"        source_rp_uuid \u003d self._get_provider_uuid_by_host(source_hostname)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_694db170","line":3030,"range":{"start_line":3030,"start_character":8,"end_line":3030,"end_character":53},"updated":"2018-05-28 17:56:17.000000000","message":"These two testcases are almost duplicates...it might make sense to have one helper function with an arg that determines whether to modify the service version on the source or the dest, and then have both testcases call the helper.","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b74d856ae1d24d50767121bb399cc41c85e339f8","unresolved":false,"context_lines":[{"line_number":3027,"context_line":""},{"line_number":3028,"context_line":"        self._delete_and_check_allocations(server)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"    def test_live_migate_numa_dest_check_fails(self):"},{"line_number":3031,"context_line":"        source_hostname \u003d self.compute1.host"},{"line_number":3032,"context_line":"        dest_hostname \u003d self.compute2.host"},{"line_number":3033,"context_line":"        source_rp_uuid \u003d self._get_provider_uuid_by_host(source_hostname)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_46f3f709","line":3030,"range":{"start_line":3030,"start_character":8,"end_line":3030,"end_character":53},"in_reply_to":"5f7c97a3_694db170","updated":"2018-06-11 17:27:10.000000000","message":"Done","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"}],"nova/tests/unit/conductor/tasks/test_live_migrate.py":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"cc13316f05bdc7a373eb599080e20f713e0c78fd","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        self.instance.numa_topology \u003d None"},{"line_number":202,"context_line":"        service \u003d objects.Service()"},{"line_number":203,"context_line":"        service.version \u003d 31"},{"line_number":204,"context_line":"        with mock.patch.object(objects.Service, \u0027get_by_compute_host\u0027,"},{"line_number":205,"context_line":"                               return_value\u003dservice):"},{"line_number":206,"context_line":"            self.task._check_can_numa_live_migrate(\u0027fake-host\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def test_check_numa_has_topology_and_new_service(self):"},{"line_number":209,"context_line":"        self.instance.numa_topology \u003d objects.InstanceNUMATopology("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_e969c1bd","line":206,"range":{"start_line":204,"start_character":0,"end_line":206,"end_character":63},"updated":"2018-05-28 17:56:17.000000000","message":"I guess we\u0027re implicitly asserting that no exception is raised?","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"edb3be4e494be67d79fc09d18817ab3b76233f51","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        self.instance.numa_topology \u003d None"},{"line_number":202,"context_line":"        service \u003d objects.Service()"},{"line_number":203,"context_line":"        service.version \u003d 31"},{"line_number":204,"context_line":"        with mock.patch.object(objects.Service, \u0027get_by_compute_host\u0027,"},{"line_number":205,"context_line":"                               return_value\u003dservice):"},{"line_number":206,"context_line":"            self.task._check_can_numa_live_migrate(\u0027fake-host\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def test_check_numa_has_topology_and_new_service(self):"},{"line_number":209,"context_line":"        self.instance.numa_topology \u003d objects.InstanceNUMATopology("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_01708971","line":206,"range":{"start_line":204,"start_character":0,"end_line":206,"end_character":63},"in_reply_to":"5f7c97a3_26c7db9a","updated":"2018-06-11 18:12:37.000000000","message":"I dunno...would have to let someone with more experience with unit tests answer that.  The other tests in the file seem to use explicit assertions.","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b74d856ae1d24d50767121bb399cc41c85e339f8","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        self.instance.numa_topology \u003d None"},{"line_number":202,"context_line":"        service \u003d objects.Service()"},{"line_number":203,"context_line":"        service.version \u003d 31"},{"line_number":204,"context_line":"        with mock.patch.object(objects.Service, \u0027get_by_compute_host\u0027,"},{"line_number":205,"context_line":"                               return_value\u003dservice):"},{"line_number":206,"context_line":"            self.task._check_can_numa_live_migrate(\u0027fake-host\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def test_check_numa_has_topology_and_new_service(self):"},{"line_number":209,"context_line":"        self.instance.numa_topology \u003d objects.InstanceNUMATopology("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_26c7db9a","line":206,"range":{"start_line":204,"start_character":0,"end_line":206,"end_character":63},"in_reply_to":"5f7c97a3_e969c1bd","updated":"2018-06-11 17:27:10.000000000","message":"Yeah - is that not a thing?","commit_id":"13cc36b4b717c8e25c012081a8952b539a063192"}]}
