)]}'
{"whitebox_tempest_plugin/api/compute/base.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9d5405838dcc827f8634967d8d88569ad6dcaaff","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        cls.image_client \u003d cls.os_admin.image_client_v2"},{"line_number":42,"context_line":"        cls.admin_migration_client \u003d cls.os_admin.migrations_client"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def parse_cpu_spec(self, spec):"},{"line_number":45,"context_line":"        \"\"\"Parse a CPU set specification."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        NOTE(artom): This has been lifted from Nova with minor"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_23995a6c","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":22},"updated":"2020-09-10 01:12:43.000000000","message":"it feels a little strange to have this in the base test class rather then in a until module or in a mixing class but i think this is ok in the context of whitebox","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"d7488b8968c95e0f8f38329aa79af03f0674cee3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        cls.image_client \u003d cls.os_admin.image_client_v2"},{"line_number":42,"context_line":"        cls.admin_migration_client \u003d cls.os_admin.migrations_client"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def parse_cpu_spec(self, spec):"},{"line_number":45,"context_line":"        \"\"\"Parse a CPU set specification."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        NOTE(artom): This has been lifted from Nova with minor"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_cacb2a47","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":22},"in_reply_to":"9f560f44_23995a6c","updated":"2020-09-11 15:06:55.000000000","message":"This can move to the util module instead.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7b6b7b356d4d6ac72a10e79cce28c9b4123b3ca7","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self.assertEqual(target_host, self.get_host_for_server(server_id),"},{"line_number":136,"context_line":"                         msg)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def get_all_cpus(self):"},{"line_number":139,"context_line":"        \"\"\"Aggregate the dictionary values of [whitebox]/cpu_topology from"},{"line_number":140,"context_line":"        tempest.conf into a list of pCPU ids."},{"line_number":141,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_90bd6605","line":138,"updated":"2020-10-05 18:43:33.000000000","message":"In the future we might want to put all the \"NUMA\" helpers into a mixin class to organize them better, but this is fine for now.","commit_id":"04ecf196873a60f5ec90e555e44ec5b3eb43cc14"}],"whitebox_tempest_plugin/api/compute/test_cpu_pinning.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"27f096530fe848e5349c5db721d2614928a9a382","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            raise cls.skipException(\u0027DifferentHostFilter required.\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    @decorators.skip_because(bug\u003d\u00272007395\u0027, bug_type\u003d\u0027storyboard\u0027)"},{"line_number":431,"context_line":"    def test_cpu_pinning(self):"},{"line_number":432,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":433,"context_line":"        ctlplane1, ctlplane2 \u003d [whitebox_utils.get_ctlplane_address(host) for"},{"line_number":434,"context_line":"                                host in [host1, host2]]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_9ee879df","line":431,"updated":"2020-09-10 01:53:25.000000000","message":"Your new test effectively tests NUMA live migration with CPU pinning, right? So this test can go away - it\u0027ll never run upstream anyways (not until OE or some other multi-NUMA provider comes online, at any rate).","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"d7488b8968c95e0f8f38329aa79af03f0674cee3","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            raise cls.skipException(\u0027DifferentHostFilter required.\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    @decorators.skip_because(bug\u003d\u00272007395\u0027, bug_type\u003d\u0027storyboard\u0027)"},{"line_number":431,"context_line":"    def test_cpu_pinning(self):"},{"line_number":432,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":433,"context_line":"        ctlplane1, ctlplane2 \u003d [whitebox_utils.get_ctlplane_address(host) for"},{"line_number":434,"context_line":"                                host in [host1, host2]]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_6ab81ec7","line":431,"in_reply_to":"9f560f44_2172e8e3","updated":"2020-09-11 15:06:55.000000000","message":"There is some additional coverage here that is not really handled by the CVE reboot test, e.g. multi-instance migration and updating acceptable pCPU ranges with VMs currently active on the host. Outside of the general live-migration tasks I\u0027m not sure how much of these two tests share in terms of procedure to make a common parent class. I do think from an organizational standpoint since it\u0027s not testing NUMA as you said, it should either move to its own class in this module or move over to test_live_migration.  With emulator thread pinning [1] following a similar design pattern for how I\u0027m handling vcpu_pin_set/cpu_dedicated_set maybe some new design pattern should be implemented to handle all these use cases?\n\n[1] https://review.opendev.org/#/c/687643/","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"3d1af2292d1176b8fb0c0f169fa85cd6769326f4","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            raise cls.skipException(\u0027DifferentHostFilter required.\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    @decorators.skip_because(bug\u003d\u00272007395\u0027, bug_type\u003d\u0027storyboard\u0027)"},{"line_number":431,"context_line":"    def test_cpu_pinning(self):"},{"line_number":432,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":433,"context_line":"        ctlplane1, ctlplane2 \u003d [whitebox_utils.get_ctlplane_address(host) for"},{"line_number":434,"context_line":"                                host in [host1, host2]]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_4746117d","line":431,"in_reply_to":"9f560f44_27967df1","updated":"2020-09-10 11:33:17.000000000","message":"Fair point, except that our current multi-NUMA test doesn\u0027t actually test NUMA node memory pinning. It just uses 2 NUMA nodes to test CPU pinning, which can be achieved like James did in this patch.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"eb2a1cd6992e9237058c2287b8ff7223b981a7cc","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            raise cls.skipException(\u0027DifferentHostFilter required.\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    @decorators.skip_because(bug\u003d\u00272007395\u0027, bug_type\u003d\u0027storyboard\u0027)"},{"line_number":431,"context_line":"    def test_cpu_pinning(self):"},{"line_number":432,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":433,"context_line":"        ctlplane1, ctlplane2 \u003d [whitebox_utils.get_ctlplane_address(host) for"},{"line_number":434,"context_line":"                                host in [host1, host2]]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_614060a3","line":431,"in_reply_to":"9f560f44_4746117d","updated":"2020-09-10 13:33:10.000000000","message":"Does it make sense to try to have a goal of three general tests? #1 Being the live migration plus reboot, #2 would take the general approach of this test (multi-instance with just dedicated cpu pinning and live migration) but would be moved to another class, #3 live-migration with a focus on NUMA node memory pinning which would go here instead? When I say 3 tests I also just mean high level areas to test, with vcpu_pin_set and cpu_dedicated_set I know there is potential for additional variants.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"dfd47ec64ec6f8b32905d543a06ab79d840f0498","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            raise cls.skipException(\u0027DifferentHostFilter required.\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    @decorators.skip_because(bug\u003d\u00272007395\u0027, bug_type\u003d\u0027storyboard\u0027)"},{"line_number":431,"context_line":"    def test_cpu_pinning(self):"},{"line_number":432,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":433,"context_line":"        ctlplane1, ctlplane2 \u003d [whitebox_utils.get_ctlplane_address(host) for"},{"line_number":434,"context_line":"                                host in [host1, host2]]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_2172e8e3","line":431,"in_reply_to":"9f560f44_614060a3","updated":"2020-09-10 13:43:49.000000000","message":"Yeah, that sounds about right. Ideally we\u0027d somehow reuse the CPU pinning live migration for both the NUMA live migration test and the soft reboot CVE test, since the latter is basically the former with a soft reboot tacked on.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"96519c4bb93b1ac9ab57b26400d88c48886ce724","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            raise cls.skipException(\u0027DifferentHostFilter required.\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    @decorators.skip_because(bug\u003d\u00272007395\u0027, bug_type\u003d\u0027storyboard\u0027)"},{"line_number":431,"context_line":"    def test_cpu_pinning(self):"},{"line_number":432,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":433,"context_line":"        ctlplane1, ctlplane2 \u003d [whitebox_utils.get_ctlplane_address(host) for"},{"line_number":434,"context_line":"                                host in [host1, host2]]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_3c6634f0","line":431,"in_reply_to":"9f560f44_6ab81ec7","updated":"2020-09-15 21:17:45.000000000","message":"\u003e There is some additional coverage here that is not really handled\n \u003e by the CVE reboot test, e.g. multi-instance migration and updating\n \u003e acceptable pCPU ranges with VMs currently active on the host.\n\nTrue, but that\u0027s more of an implementation side effect, as opposed to explicit design choice.\n\n \u003e Outside of the general live-migration tasks I\u0027m not sure how much\n \u003e of these two tests share in terms of procedure to make a common\n \u003e parent class. I do think from an organizational standpoint since\n \u003e it\u0027s not testing NUMA as you said, it should either move to its own\n \u003e class in this module or move over to test_live_migration.  With\n \u003e emulator thread pinning [1] following a similar design pattern for\n \u003e how I\u0027m handling vcpu_pin_set/cpu_dedicated_set maybe some new\n \u003e design pattern should be implemented to handle all these use cases?\n\nI\u0027d be careful of over-designing stuff. Let\u0027s do this one test at a time, refactoring if necessary. For this patch I\u0027ve brought this up because we end up have two tests for essentially the same thing.\n\nBut... maybe in the interest of keeping things moving, and not block on overthinking stuff, we can start by adding your new test, and figure out this one later.\n\n \u003e \n \u003e [1] https://review.opendev.org/#/c/687643/","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5ca5e8a32969e8c5ad0fab4d388fb3235c1fc000","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            raise cls.skipException(\u0027DifferentHostFilter required.\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    @decorators.skip_because(bug\u003d\u00272007395\u0027, bug_type\u003d\u0027storyboard\u0027)"},{"line_number":431,"context_line":"    def test_cpu_pinning(self):"},{"line_number":432,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":433,"context_line":"        ctlplane1, ctlplane2 \u003d [whitebox_utils.get_ctlplane_address(host) for"},{"line_number":434,"context_line":"                                host in [host1, host2]]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_27967df1","line":431,"in_reply_to":"9f560f44_9ee879df","updated":"2020-09-10 11:27:49.000000000","message":"i dont like have large test that test muplile things.\nand we do want to have multi num tests and we ant to test usng the vcpu#_pin_set too so im not really ok with removing this and i want use to figure out how to run this upstream again. have we spoken to vexhost or limestone to see if they can proved the multi numa flavor.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f56ddc024fc5e3d33cb97b6fb5eb3cd7951c496d","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        host2_sm \u003d clients.NovaServiceManager(host2, \u0027nova-compute\u0027,"},{"line_number":459,"context_line":"                                              self.os_admin.services_client)"},{"line_number":460,"context_line":"        with whitebox_utils.multicontext("},{"line_number":461,"context_line":"            host1_sm.config_options((\u0027DEFAULT\u0027, \u0027vcpu_pin_set\u0027,"},{"line_number":462,"context_line":"                                     self._get_cpu_spec(topo_1[0]))),"},{"line_number":463,"context_line":"            host2_sm.config_options((\u0027DEFAULT\u0027, \u0027vcpu_pin_set\u0027,"},{"line_number":464,"context_line":"                                     self._get_cpu_spec(topo_2[0])))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_22778ba2","line":461,"range":{"start_line":461,"start_character":49,"end_line":461,"end_character":61},"updated":"2020-09-10 11:45:25.000000000","message":"we still need test for this case.\n\nbut ya maybe there is a better way to reuse this or converge it","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f56ddc024fc5e3d33cb97b6fb5eb3cd7951c496d","unresolved":false,"context_lines":[{"line_number":464,"context_line":"                                     self._get_cpu_spec(topo_2[0])))"},{"line_number":465,"context_line":"        ):"},{"line_number":466,"context_line":"            # Boot 2 servers such that their vCPUs \"fill\" a NUMA node."},{"line_number":467,"context_line":"            specs \u003d {\u0027hw:cpu_policy\u0027: \u0027dedicated\u0027}"},{"line_number":468,"context_line":"            flavor \u003d self.create_flavor(vcpus\u003dcpus_per_node.pop(),"},{"line_number":469,"context_line":"                                        extra_specs\u003dspecs)"},{"line_number":470,"context_line":"            server_a \u003d self.create_test_server(flavor\u003dflavor[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_a241db3b","line":467,"range":{"start_line":467,"start_character":12,"end_line":467,"end_character":50},"updated":"2020-09-10 11:45:25.000000000","message":"oh this doesnt have hw:numa_nodes.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"}],"whitebox_tempest_plugin/api/compute/test_live_migration.py":[{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"9b986f239e145154024e4ac54fba7805392fbee9","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class LiveMigrationTest(base.BaseWhiteboxComputeTest):"},{"line_number":35,"context_line":"    # First support for block_migration\u003d\u0027auto\u0027: since Mitaka (OSP9)"},{"line_number":36,"context_line":"    min_microversion \u003d \u00272.74\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_8f06d21f","line":36,"updated":"2020-09-04 15:44:05.000000000","message":"This needs to go back to being 2.25.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"63183f5b601d22f53a84b86a42333506099b12df","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class LiveMigrationReboot(LiveMigrationTest):"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    min_microversion \u003d \u00272.74\u0027"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_0aff5067","line":93,"range":{"start_line":93,"start_character":3,"end_line":93,"end_character":29},"updated":"2020-09-04 16:14:57.000000000","message":"Do we actually need this?","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"774fa02e7b08d864f56a4b54d44c91ad2e695f46","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class LiveMigrationReboot(LiveMigrationTest):"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    min_microversion \u003d \u00272.74\u0027"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_4a0ca841","line":93,"range":{"start_line":93,"start_character":3,"end_line":93,"end_character":29},"in_reply_to":"9f560f44_0aff5067","updated":"2020-09-04 16:34:28.000000000","message":"For the host specific scheduling used by create_test_server on L141 and L146, it is required. The original approach for this type of deployment would be to rely on samehostfilter and differenthostfilter when scheduling instances (which we can switch to if necessary), but we are trying to move away from that with newer testcases.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"63183f5b601d22f53a84b86a42333506099b12df","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @utils.services(\u0027volume\u0027)"},{"line_number":102,"context_line":"    def test_reboot_after_live_migration(self):"},{"line_number":103,"context_line":"        \"\"\"Adds test coverage for Nova Bug #1890501. Validates instance\u0027s XML"},{"line_number":104,"context_line":"        does not revert to its original source after a live-migration and soft"},{"line_number":105,"context_line":"        reboot. It confirms this by monitoring the instance\u0027s source disk"},{"line_number":106,"context_line":"        devices before and after live-migration/reboot and validating they do"},{"line_number":107,"context_line":"        not return to their original values."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        disk_count \u003d 2"},{"line_number":110,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_4ad948f2","line":108,"range":{"start_line":103,"start_character":0,"end_line":108,"end_character":11},"updated":"2020-09-04 16:14:57.000000000","message":"So this is specifically looking at block devices but you could just as easily compare the output of get_server_xml after the migration with get_server_xml after a soft reboot.\n\nYou\u0027ve already done the work to check for disks anyway so feel free to keep things as they are.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"774fa02e7b08d864f56a4b54d44c91ad2e695f46","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @utils.services(\u0027volume\u0027)"},{"line_number":102,"context_line":"    def test_reboot_after_live_migration(self):"},{"line_number":103,"context_line":"        \"\"\"Adds test coverage for Nova Bug #1890501. Validates instance\u0027s XML"},{"line_number":104,"context_line":"        does not revert to its original source after a live-migration and soft"},{"line_number":105,"context_line":"        reboot. It confirms this by monitoring the instance\u0027s source disk"},{"line_number":106,"context_line":"        devices before and after live-migration/reboot and validating they do"},{"line_number":107,"context_line":"        not return to their original values."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        disk_count \u003d 2"},{"line_number":110,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_a529378a","line":108,"range":{"start_line":103,"start_character":0,"end_line":108,"end_character":11},"in_reply_to":"9f560f44_4ad948f2","updated":"2020-09-04 16:34:28.000000000","message":"Are there any acceptable deltas that may arise in the XML after the reboot? If not, I am ok with doing a full XML check before and after the reboot simply because the check extends coverage beyond checking the block devices.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"178ba7925f367181448ffbb55b02b7984a95b45c","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @utils.services(\u0027volume\u0027)"},{"line_number":102,"context_line":"    def test_reboot_after_live_migration(self):"},{"line_number":103,"context_line":"        \"\"\"Adds test coverage for Nova Bug #1890501. Validates instance\u0027s XML"},{"line_number":104,"context_line":"        does not revert to its original source after a live-migration and soft"},{"line_number":105,"context_line":"        reboot. It confirms this by monitoring the instance\u0027s source disk"},{"line_number":106,"context_line":"        devices before and after live-migration/reboot and validating they do"},{"line_number":107,"context_line":"        not return to their original values."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        disk_count \u003d 2"},{"line_number":110,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_2c04c6c5","line":108,"range":{"start_line":103,"start_character":0,"end_line":108,"end_character":11},"in_reply_to":"9f560f44_8ae19bd3","updated":"2020-09-08 20:15:33.000000000","message":"I will first try and setup the test based on your comment on #L150 and focus on purely asserting the cpu topology does not revert. Once that is ironed out, I will look at utilizing a full XML matcher for all important elements.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b72df4723059e8563b5097f957c15a8cb4a883e4","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @utils.services(\u0027volume\u0027)"},{"line_number":102,"context_line":"    def test_reboot_after_live_migration(self):"},{"line_number":103,"context_line":"        \"\"\"Adds test coverage for Nova Bug #1890501. Validates instance\u0027s XML"},{"line_number":104,"context_line":"        does not revert to its original source after a live-migration and soft"},{"line_number":105,"context_line":"        reboot. It confirms this by monitoring the instance\u0027s source disk"},{"line_number":106,"context_line":"        devices before and after live-migration/reboot and validating they do"},{"line_number":107,"context_line":"        not return to their original values."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        disk_count \u003d 2"},{"line_number":110,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_8ae19bd3","line":108,"range":{"start_line":103,"start_character":0,"end_line":108,"end_character":11},"in_reply_to":"9f560f44_a529378a","updated":"2020-09-04 22:21:40.000000000","message":"yo wont be able to do a string comarison but if you use the xml matcher then a full compare should work.\n\n\nthe order of some element might change but in general the xml content should not change hence why a sting compare would not work but an xml compare should.\n\n\nthat said i would still prefer to check the xml for the block devices.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"63183f5b601d22f53a84b86a42333506099b12df","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        img_id \u003d self.copy_default_image(hw_scsi_model\u003d\u0027virtio-scsi\u0027,"},{"line_number":123,"context_line":"                                         hw_disk_bus\u003d\u0027scsi\u0027)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Create the boot volume dictionary for each instance"},{"line_number":126,"context_line":"        bdms \u003d []"},{"line_number":127,"context_line":"        for i in range(disk_count):"},{"line_number":128,"context_line":"            boot_dict \u003d {}"},{"line_number":129,"context_line":"            if i \u003d\u003d 0:"},{"line_number":130,"context_line":"                boot_dict[\u0027uuid\u0027] \u003d img_id"},{"line_number":131,"context_line":"                boot_dict[\u0027source_type\u0027] \u003d \u0027image\u0027"},{"line_number":132,"context_line":"            else:"},{"line_number":133,"context_line":"                boot_dict[\u0027source_type\u0027] \u003d \u0027blank\u0027"},{"line_number":134,"context_line":"            boot_dict.update({\u0027destination_type\u0027: \u0027volume\u0027,"},{"line_number":135,"context_line":"                              \u0027volume_size\u0027: 1,"},{"line_number":136,"context_line":"                              \u0027boot_index\u0027: i,"},{"line_number":137,"context_line":"                              \u0027disk_bus\u0027: \u0027scsi\u0027,"},{"line_number":138,"context_line":"                              \u0027delete_on_termination\u0027: True})"},{"line_number":139,"context_line":"            bdms.append(boot_dict)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        server_1 \u003d self.create_test_server(flavor\u003dflavor[\u0027id\u0027],"},{"line_number":142,"context_line":"                                           block_device_mapping_v2\u003dbdms,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ea365c51","line":139,"range":{"start_line":125,"start_character":0,"end_line":139,"end_character":34},"updated":"2020-09-04 16:14:57.000000000","message":"I think it would be easier to just create the dict by hand here.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"774fa02e7b08d864f56a4b54d44c91ad2e695f46","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        img_id \u003d self.copy_default_image(hw_scsi_model\u003d\u0027virtio-scsi\u0027,"},{"line_number":123,"context_line":"                                         hw_disk_bus\u003d\u0027scsi\u0027)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Create the boot volume dictionary for each instance"},{"line_number":126,"context_line":"        bdms \u003d []"},{"line_number":127,"context_line":"        for i in range(disk_count):"},{"line_number":128,"context_line":"            boot_dict \u003d {}"},{"line_number":129,"context_line":"            if i \u003d\u003d 0:"},{"line_number":130,"context_line":"                boot_dict[\u0027uuid\u0027] \u003d img_id"},{"line_number":131,"context_line":"                boot_dict[\u0027source_type\u0027] \u003d \u0027image\u0027"},{"line_number":132,"context_line":"            else:"},{"line_number":133,"context_line":"                boot_dict[\u0027source_type\u0027] \u003d \u0027blank\u0027"},{"line_number":134,"context_line":"            boot_dict.update({\u0027destination_type\u0027: \u0027volume\u0027,"},{"line_number":135,"context_line":"                              \u0027volume_size\u0027: 1,"},{"line_number":136,"context_line":"                              \u0027boot_index\u0027: i,"},{"line_number":137,"context_line":"                              \u0027disk_bus\u0027: \u0027scsi\u0027,"},{"line_number":138,"context_line":"                              \u0027delete_on_termination\u0027: True})"},{"line_number":139,"context_line":"            bdms.append(boot_dict)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        server_1 \u003d self.create_test_server(flavor\u003dflavor[\u0027id\u0027],"},{"line_number":142,"context_line":"                                           block_device_mapping_v2\u003dbdms,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_052103a0","line":139,"range":{"start_line":125,"start_character":0,"end_line":139,"end_character":34},"in_reply_to":"9f560f44_ea365c51","updated":"2020-09-04 16:34:28.000000000","message":"Done","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b72df4723059e8563b5097f957c15a8cb4a883e4","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                              \u0027delete_on_termination\u0027: True})"},{"line_number":139,"context_line":"            bdms.append(boot_dict)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        server_1 \u003d self.create_test_server(flavor\u003dflavor[\u0027id\u0027],"},{"line_number":142,"context_line":"                                           block_device_mapping_v2\u003dbdms,"},{"line_number":143,"context_line":"                                           clients\u003dself.os_admin,"},{"line_number":144,"context_line":"                                           image_id\u003d\u0027\u0027,"},{"line_number":145,"context_line":"                                           host\u003dhost1)"},{"line_number":146,"context_line":"        server_2 \u003d self.create_test_server(flavor\u003dflavor[\u0027id\u0027],"},{"line_number":147,"context_line":"                                           block_device_mapping_v2\u003dbdms,"},{"line_number":148,"context_line":"                                           clients\u003dself.os_admin,"},{"line_number":149,"context_line":"                                           image_id\u003d\u0027\u0027,"},{"line_number":150,"context_line":"                                           host\u003dhost2)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        # Get the source disk devices for both Server 1 and Server 2 before"},{"line_number":153,"context_line":"        # migration"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_0acd8b5c","line":150,"range":{"start_line":141,"start_character":5,"end_line":150,"end_character":54},"updated":"2020-09-04 22:21:40.000000000","message":"so your not asserting that the volumes used by both servers are mounted on the same host path. \nwithout that we wont have anything visable in the xml\n\nunless we ignore blockdevice and use numa.\n\none way to fort this would be on one host enable only cores on numa node 0 and on the other host enable cores only on numa node 1.\n\nwith the numa migration we should udate the xml so the vm mvoe from node 0 to 1. if we then assert the toloy does not revert after a hard reboot we coud remove all the volume stuff.\n\ni know i orginally suggested to use volumes since that was the orgincal usecase reported in the bug but that might be more reliable.\n\nas it stands since you have not done anything ot force the same host block device to be used on each host other then booting a 2 vms one on each this test might fail intermitently if we happen to not use the same host path for each vm.\n\nwell i guess the bug is already fixed so it wont fail but this is a less robust test then we could do if we used pinning or numa instead since we can use the vcpu_pin_set or cpu_dedicated_set to force the xmls to be different trivially.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"178ba7925f367181448ffbb55b02b7984a95b45c","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                              \u0027delete_on_termination\u0027: True})"},{"line_number":139,"context_line":"            bdms.append(boot_dict)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        server_1 \u003d self.create_test_server(flavor\u003dflavor[\u0027id\u0027],"},{"line_number":142,"context_line":"                                           block_device_mapping_v2\u003dbdms,"},{"line_number":143,"context_line":"                                           clients\u003dself.os_admin,"},{"line_number":144,"context_line":"                                           image_id\u003d\u0027\u0027,"},{"line_number":145,"context_line":"                                           host\u003dhost1)"},{"line_number":146,"context_line":"        server_2 \u003d self.create_test_server(flavor\u003dflavor[\u0027id\u0027],"},{"line_number":147,"context_line":"                                           block_device_mapping_v2\u003dbdms,"},{"line_number":148,"context_line":"                                           clients\u003dself.os_admin,"},{"line_number":149,"context_line":"                                           image_id\u003d\u0027\u0027,"},{"line_number":150,"context_line":"                                           host\u003dhost2)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        # Get the source disk devices for both Server 1 and Server 2 before"},{"line_number":153,"context_line":"        # migration"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ecebeed9","line":150,"range":{"start_line":141,"start_character":5,"end_line":150,"end_character":54},"in_reply_to":"9f560f44_0acd8b5c","updated":"2020-09-08 20:15:33.000000000","message":"The setup you mentioned is similar to what was just committed here [1].  I will follow up with that approach and update the test to track the cpu topology after reboot.\n\n[1] https://review.opendev.org/#/c/704420/","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"63183f5b601d22f53a84b86a42333506099b12df","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        server_1_src_devs \u003d get_source_disk_devs(server_1[\u0027id\u0027])"},{"line_number":155,"context_line":"        server_2_src_devs_pre_migration \u003d get_source_disk_devs(server_2[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # Migrate Server 2 to the host with Server 1, soft reboot it after"},{"line_number":158,"context_line":"        # migration, and validate it reaches an ACTIVE state"},{"line_number":159,"context_line":"        self.live_migrate(server_2[\u0027id\u0027], host1, \u0027ACTIVE\u0027)"},{"line_number":160,"context_line":"        server_2_src_devs_post_migration \u003d get_source_disk_devs(server_2[\u0027id\u0027])"},{"line_number":161,"context_line":"        self.servers_client.reboot_server(server_2[\u0027id\u0027], type\u003d\u0027SOFT\u0027)"},{"line_number":162,"context_line":"        waiters.wait_for_server_status(self.servers_client,"},{"line_number":163,"context_line":"                                       server_2[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":164,"context_line":"        server_2_src_devs_post_reboot \u003d get_source_disk_devs(server_2[\u0027id\u0027])"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        # Validate Server 2\u0027s source disk devices are not the same as they"},{"line_number":167,"context_line":"        # were before the migration. Ensure they are the same after the soft"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_aa15849d","line":164,"range":{"start_line":157,"start_character":0,"end_line":164,"end_character":76},"updated":"2020-09-04 16:14:57.000000000","message":"I\u0027d break this up to make it a little more readable","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"774fa02e7b08d864f56a4b54d44c91ad2e695f46","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        server_1_src_devs \u003d get_source_disk_devs(server_1[\u0027id\u0027])"},{"line_number":155,"context_line":"        server_2_src_devs_pre_migration \u003d get_source_disk_devs(server_2[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # Migrate Server 2 to the host with Server 1, soft reboot it after"},{"line_number":158,"context_line":"        # migration, and validate it reaches an ACTIVE state"},{"line_number":159,"context_line":"        self.live_migrate(server_2[\u0027id\u0027], host1, \u0027ACTIVE\u0027)"},{"line_number":160,"context_line":"        server_2_src_devs_post_migration \u003d get_source_disk_devs(server_2[\u0027id\u0027])"},{"line_number":161,"context_line":"        self.servers_client.reboot_server(server_2[\u0027id\u0027], type\u003d\u0027SOFT\u0027)"},{"line_number":162,"context_line":"        waiters.wait_for_server_status(self.servers_client,"},{"line_number":163,"context_line":"                                       server_2[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":164,"context_line":"        server_2_src_devs_post_reboot \u003d get_source_disk_devs(server_2[\u0027id\u0027])"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        # Validate Server 2\u0027s source disk devices are not the same as they"},{"line_number":167,"context_line":"        # were before the migration. Ensure they are the same after the soft"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_e5232fa6","line":164,"range":{"start_line":157,"start_character":0,"end_line":164,"end_character":76},"in_reply_to":"9f560f44_aa15849d","updated":"2020-09-04 16:34:28.000000000","message":"Done","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"63183f5b601d22f53a84b86a42333506099b12df","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        # were before the migration. Ensure they are the same after the soft"},{"line_number":168,"context_line":"        # reboot. Finally ensure Server 2\u0027s source disk devices are disjointed"},{"line_number":169,"context_line":"        # from the devices of Server 1."},{"line_number":170,"context_line":"        self.assertTrue(set(server_2_src_devs_post_reboot).isdisjoint("},{"line_number":171,"context_line":"                        set(server_2_src_devs_pre_migration)),"},{"line_number":172,"context_line":"                        \u0027Server %s should not have the same source it had \u0027"},{"line_number":173,"context_line":"                        \u0027pre-migration %s\u0027 %"},{"line_number":174,"context_line":"                        (server_2[\u0027id\u0027], server_2_src_devs_pre_migration))"},{"line_number":175,"context_line":"        self.assertEqual(server_2_src_devs_post_reboot,"},{"line_number":176,"context_line":"                         server_2_src_devs_post_migration,"},{"line_number":177,"context_line":"                         \u0027Server %s should have the same source devices \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_6a708c09","line":174,"range":{"start_line":170,"start_character":0,"end_line":174,"end_character":74},"updated":"2020-09-04 16:14:57.000000000","message":"I get why you\u0027re testing this but I don\u0027t think it\u0027s required as there is an outside chance that they could be depending on the other volume based tests running in the environment.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"774fa02e7b08d864f56a4b54d44c91ad2e695f46","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        # were before the migration. Ensure they are the same after the soft"},{"line_number":168,"context_line":"        # reboot. Finally ensure Server 2\u0027s source disk devices are disjointed"},{"line_number":169,"context_line":"        # from the devices of Server 1."},{"line_number":170,"context_line":"        self.assertTrue(set(server_2_src_devs_post_reboot).isdisjoint("},{"line_number":171,"context_line":"                        set(server_2_src_devs_pre_migration)),"},{"line_number":172,"context_line":"                        \u0027Server %s should not have the same source it had \u0027"},{"line_number":173,"context_line":"                        \u0027pre-migration %s\u0027 %"},{"line_number":174,"context_line":"                        (server_2[\u0027id\u0027], server_2_src_devs_pre_migration))"},{"line_number":175,"context_line":"        self.assertEqual(server_2_src_devs_post_reboot,"},{"line_number":176,"context_line":"                         server_2_src_devs_post_migration,"},{"line_number":177,"context_line":"                         \u0027Server %s should have the same source devices \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_453adbcc","line":174,"range":{"start_line":170,"start_character":0,"end_line":174,"end_character":74},"in_reply_to":"9f560f44_6a708c09","updated":"2020-09-04 16:34:28.000000000","message":"Done","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"63183f5b601d22f53a84b86a42333506099b12df","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                        \u0027Server %s should not have the same source it had \u0027"},{"line_number":173,"context_line":"                        \u0027pre-migration %s\u0027 %"},{"line_number":174,"context_line":"                        (server_2[\u0027id\u0027], server_2_src_devs_pre_migration))"},{"line_number":175,"context_line":"        self.assertEqual(server_2_src_devs_post_reboot,"},{"line_number":176,"context_line":"                         server_2_src_devs_post_migration,"},{"line_number":177,"context_line":"                         \u0027Server %s should have the same source devices \u0027"},{"line_number":178,"context_line":"                         \u0027after it has been soft rebooted\u0027 % server_2[\u0027id\u0027])"},{"line_number":179,"context_line":"        self.assertTrue(set(server_2_src_devs_post_reboot).isdisjoint("},{"line_number":180,"context_line":"                        set(server_1_src_devs)), \u0027Server %s should not have \u0027"},{"line_number":181,"context_line":"                        \u0027the same source devices %s as Server %s\u0027 %"},{"line_number":182,"context_line":"                        ((server_2[\u0027id\u0027]), server_2_src_devs_post_migration,"},{"line_number":183,"context_line":"                            server_1[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_6a49acb5","line":183,"range":{"start_line":175,"start_character":0,"end_line":183,"end_character":44},"updated":"2020-09-04 16:14:57.000000000","message":"As above, I\u0027d break these up with their own comments detailing what you\u0027re asserting here and why, the failure message is great but I find individual comments for each assert easier to follow.","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"774fa02e7b08d864f56a4b54d44c91ad2e695f46","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                        \u0027Server %s should not have the same source it had \u0027"},{"line_number":173,"context_line":"                        \u0027pre-migration %s\u0027 %"},{"line_number":174,"context_line":"                        (server_2[\u0027id\u0027], server_2_src_devs_pre_migration))"},{"line_number":175,"context_line":"        self.assertEqual(server_2_src_devs_post_reboot,"},{"line_number":176,"context_line":"                         server_2_src_devs_post_migration,"},{"line_number":177,"context_line":"                         \u0027Server %s should have the same source devices \u0027"},{"line_number":178,"context_line":"                         \u0027after it has been soft rebooted\u0027 % server_2[\u0027id\u0027])"},{"line_number":179,"context_line":"        self.assertTrue(set(server_2_src_devs_post_reboot).isdisjoint("},{"line_number":180,"context_line":"                        set(server_1_src_devs)), \u0027Server %s should not have \u0027"},{"line_number":181,"context_line":"                        \u0027the same source devices %s as Server %s\u0027 %"},{"line_number":182,"context_line":"                        ((server_2[\u0027id\u0027]), server_2_src_devs_post_migration,"},{"line_number":183,"context_line":"                            server_1[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_8534f3df","line":183,"range":{"start_line":175,"start_character":0,"end_line":183,"end_character":44},"in_reply_to":"9f560f44_6a49acb5","updated":"2020-09-04 16:34:28.000000000","message":"Done","commit_id":"f2bceabcb5837306704120a976ed806ddf740090"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9d5405838dcc827f8634967d8d88569ad6dcaaff","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        host1, host2 \u003d self.list_compute_hosts()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Create two different cpu dedicated ranges for each host in order"},{"line_number":113,"context_line":"        # to force different domain XML after instance migration"},{"line_number":114,"context_line":"        host1_dedicated_set \u003d cpu_list[:2]"},{"line_number":115,"context_line":"        host2_dedicated_set \u003d cpu_list[2:4]"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        dedicated_flavor \u003d self.create_flavor("},{"line_number":118,"context_line":"            vcpus\u003dflavor_vcpu_size,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_23e79ae5","line":115,"range":{"start_line":112,"start_character":0,"end_line":115,"end_character":43},"updated":"2020-09-10 01:12:43.000000000","message":"cool so this will result in different cpu being selected.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9d5405838dcc827f8634967d8d88569ad6dcaaff","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            # Gather the pinned CPUs for the instance prior to migration"},{"line_number":139,"context_line":"            pinned_cpus_pre_migration \u003d self.get_pinning_as_set(server[\u0027id\u0027])"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            # Determine the destination migration host and migrate the server"},{"line_number":142,"context_line":"            # to that host"},{"line_number":143,"context_line":"            compute_dest \u003d self.get_host_other_than(server[\u0027id\u0027])"},{"line_number":144,"context_line":"            self.live_migrate(server[\u0027id\u0027], compute_dest, \u0027ACTIVE\u0027)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            # After successful migration determine the instances pinned CPUs"},{"line_number":147,"context_line":"            pinned_cpus_post_migration \u003d self.get_pinning_as_set(server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_833f8623","line":144,"range":{"start_line":141,"start_character":11,"end_line":144,"end_character":67},"updated":"2020-09-10 01:12:43.000000000","message":"nit: technically you can live migrate without passing a dest host and it will always go to the other host in this case since you cannot live migrate to the same host. so you dont need to do this. i a followup we might want to make the host optional here and in in other tests.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9d5405838dcc827f8634967d8d88569ad6dcaaff","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            compute_dest \u003d self.get_host_other_than(server[\u0027id\u0027])"},{"line_number":144,"context_line":"            self.live_migrate(server[\u0027id\u0027], compute_dest, \u0027ACTIVE\u0027)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            # After successful migration determine the instances pinned CPUs"},{"line_number":147,"context_line":"            pinned_cpus_post_migration \u003d self.get_pinning_as_set(server[\u0027id\u0027])"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            # Confirm the pCPUs are no longer the same as they were when"},{"line_number":150,"context_line":"            # on the source compute host"},{"line_number":151,"context_line":"            self.assertTrue("},{"line_number":152,"context_line":"                pinned_cpus_post_migration.isdisjoint("},{"line_number":153,"context_line":"                    pinned_cpus_pre_migration),"},{"line_number":154,"context_line":"                \u0027After migration the the server %s\\\u0027s current pinned CPU\\\u0027s \u0027"},{"line_number":155,"context_line":"                \u0027%s should no longer match the pinned CPU\\\u0027s it had pre \u0027"},{"line_number":156,"context_line":"                \u0027 migration %s\u0027 % (server[\u0027id\u0027], pinned_cpus_post_migration,"},{"line_number":157,"context_line":"                                   pinned_cpus_pre_migration)"},{"line_number":158,"context_line":"            )"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"            # Soft reboot the server"},{"line_number":161,"context_line":"            self.servers_client.reboot_server(server[\u0027id\u0027], type\u003d\u0027SOFT\u0027)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            # Gather the server\u0027s pinned CPUs after the soft reboot"},{"line_number":164,"context_line":"            pinned_cpus_post_reboot \u003d self.get_pinning_as_set(server[\u0027id\u0027])"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"            # Validate the server\u0027s pinned CPUs remain the same after the"},{"line_number":167,"context_line":"            # reboot"},{"line_number":168,"context_line":"            self.assertTrue("},{"line_number":169,"context_line":"                pinned_cpus_post_migration \u003d\u003d pinned_cpus_post_reboot,"},{"line_number":170,"context_line":"                \u0027After soft rebooting server %s its pinned CPUs should have \u0027"},{"line_number":171,"context_line":"                \u0027remained the same as %s, but are instead now %s\u0027 % ("},{"line_number":172,"context_line":"                    server[\u0027id\u0027], pinned_cpus_post_migration,"},{"line_number":173,"context_line":"                    pinned_cpus_post_reboot)"},{"line_number":174,"context_line":"            )"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            self.delete_server(server[\u0027id\u0027])"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_c3733e15","line":174,"range":{"start_line":146,"start_character":0,"end_line":174,"end_character":13},"updated":"2020-09-10 01:12:43.000000000","message":"+1","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9d5405838dcc827f8634967d8d88569ad6dcaaff","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                    pinned_cpus_post_reboot)"},{"line_number":174,"context_line":"            )"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            self.delete_server(server[\u0027id\u0027])"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"class VCPUPinSetMigrateAndReboot(LiveMigrationAndReboot):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_8304a64b","line":176,"range":{"start_line":176,"start_character":8,"end_line":176,"end_character":44},"updated":"2020-09-10 01:12:43.000000000","message":"you might want to put this in a finally block\nincase we ever throw an excption form on of those operation that you do not expect.\n\nthat way the server will always be celaned up\nthat also means that everythin inside the with statement should proably be in a try too.\n\nwe may wnat to have create_test_server retrun a context manager at somepoint so we can do something like\n\nwith self.create_server() as server:\n  ....\n\nand  not need to worry about cleaning up the servers.\n\nthis is can be done later by the way as a followup\n\nbut in genreal i dont really like having raw create and delete calls as its easy to leak resouces that way.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"d7488b8968c95e0f8f38329aa79af03f0674cee3","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                    pinned_cpus_post_reboot)"},{"line_number":174,"context_line":"            )"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            self.delete_server(server[\u0027id\u0027])"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"class VCPUPinSetMigrateAndReboot(LiveMigrationAndReboot):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_4a171aa4","line":176,"range":{"start_line":176,"start_character":8,"end_line":176,"end_character":44},"in_reply_to":"9f560f44_8304a64b","updated":"2020-09-11 15:06:55.000000000","message":"Agreed, this has already caused me problems in the past when doing local development of testcases and hitting an exception that prevents the deletion of the servers.","commit_id":"9bd678475f1989ba8c57cb2f4a0fe188ce1f2a2f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7b6b7b356d4d6ac72a10e79cce28c9b4123b3ca7","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            self.assertTrue("},{"line_number":157,"context_line":"                pinned_cpus_post_migration.isdisjoint("},{"line_number":158,"context_line":"                    pinned_cpus_pre_migration),"},{"line_number":159,"context_line":"                \u0027After migration the the server %s\\\u0027s current pinned CPU\\\u0027s \u0027"},{"line_number":160,"context_line":"                \u0027%s should no longer match the pinned CPU\\\u0027s it had pre \u0027"},{"line_number":161,"context_line":"                \u0027 migration %s\u0027 % (server[\u0027id\u0027], pinned_cpus_post_migration,"},{"line_number":162,"context_line":"                                   pinned_cpus_pre_migration)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_7057f2cb","line":159,"updated":"2020-10-05 18:43:33.000000000","message":"nit: If you put the string in double quotes \" you can use single quotes inside it without escaping","commit_id":"04ecf196873a60f5ec90e555e44ec5b3eb43cc14"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7b6b7b356d4d6ac72a10e79cce28c9b4123b3ca7","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            )"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"            # Soft reboot the server"},{"line_number":166,"context_line":"            self.servers_client.reboot_server(server[\u0027id\u0027], type\u003d\u0027SOFT\u0027)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"            # Gather the server\u0027s pinned CPUs after the soft reboot"},{"line_number":169,"context_line":"            pinned_cpus_post_reboot \u003d self.get_pinning_as_set(server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_30d0da2b","line":166,"updated":"2020-10-05 18:43:33.000000000","message":"We may have a bit of an issue here, in that libvirt will do a hard reboot if the soft reboot fails [1]. It\u0027s fully silent (to the user) except for a log message, but when if it happens it could mean a falsely passing test here.\n\nI think the likelihood of that happening systematically is fairly low (and the difficulty of detecting it is quite high - we\u0027d have to parse the logs), so we can go ahead with this, but I\u0027d like at least a NOTE or TODO.\n\n[1] https://github.com/openstack/nova/blob/43801cf24a06b11f80d3c2a4f2d856305349d093/nova/virt/libvirt/driver.py#L3172-L3181","commit_id":"04ecf196873a60f5ec90e555e44ec5b3eb43cc14"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7b6b7b356d4d6ac72a10e79cce28c9b4123b3ca7","unresolved":false,"context_lines":[{"line_number":194,"context_line":"class CPUDedicatedMigrateAndReboot(LiveMigrationAndReboot):"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    compute_min_microversion \u003d \u00272.79\u0027"},{"line_number":197,"context_line":"    compute_max_microversion \u003d \u0027latest\u0027"},{"line_number":198,"context_line":"    pin_set_mode \u003d \u0027cpu_dedicated_set\u0027"},{"line_number":199,"context_line":"    pin_section \u003d \u0027compute\u0027"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_90de063a","line":197,"updated":"2020-10-05 18:43:33.000000000","message":"nit: why is the \u0027compute_\u0027 prefix here, is it necessary?","commit_id":"04ecf196873a60f5ec90e555e44ec5b3eb43cc14"}]}
