)]}'
{"nova/conductor/tasks/cross_cell_migrate.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f86b92ca663b0d463f42f2904e1f3bcad82a73e8","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        self._completed_tasks[\u0027TargetDBSetupTask\u0027] \u003d task"},{"line_number":257,"context_line":"        return target_cell_migration"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def _execute(self):"},{"line_number":260,"context_line":"        \"\"\"Execute high-level orchestration of the cross-cell resize\"\"\""},{"line_number":261,"context_line":"        # The first thing we need to do is create the instance record data"},{"line_number":262,"context_line":"        # in the target cell database since we cannot do anything in the"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_8d9f0202","line":259,"range":{"start_line":259,"start_character":8,"end_line":259,"end_character":16},"updated":"2019-01-26 00:23:46.000000000","message":"Need to do _perform_external_api_checks first in here, and then probably split out the _setup_target_cell_db stuff to a new change.","commit_id":"b741dd172f6d2ef4cd67231ad2471b745658726d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7c14fb699870d96663438050f704c02205160459","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        self._completed_tasks[\u0027TargetDBSetupTask\u0027] \u003d task"},{"line_number":257,"context_line":"        return target_cell_migration"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def _execute(self):"},{"line_number":260,"context_line":"        \"\"\"Execute high-level orchestration of the cross-cell resize\"\"\""},{"line_number":261,"context_line":"        # The first thing we need to do is create the instance record data"},{"line_number":262,"context_line":"        # in the target cell database since we cannot do anything in the"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_703fe0b3","line":259,"range":{"start_line":259,"start_character":8,"end_line":259,"end_character":16},"in_reply_to":"9fdfeff1_8d9f0202","updated":"2019-01-29 23:48:50.000000000","message":"Done","commit_id":"b741dd172f6d2ef4cd67231ad2471b745658726d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f86b92ca663b0d463f42f2904e1f3bcad82a73e8","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        for task_name in reversed(self._completed_tasks):"},{"line_number":280,"context_line":"            try:"},{"line_number":281,"context_line":"                self._completed_tasks[task_name].rollback()"},{"line_number":282,"context_line":"            except Exception:"},{"line_number":283,"context_line":"                LOG.exception(\u0027Rollback for task %s failed.\u0027, task_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_cd950ae6","line":282,"updated":"2019-01-26 00:23:46.000000000","message":"Need to test that one task rollback failure doesn\u0027t cause others to fail, even though the failures could snowball.","commit_id":"b741dd172f6d2ef4cd67231ad2471b745658726d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7c14fb699870d96663438050f704c02205160459","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        for task_name in reversed(self._completed_tasks):"},{"line_number":280,"context_line":"            try:"},{"line_number":281,"context_line":"                self._completed_tasks[task_name].rollback()"},{"line_number":282,"context_line":"            except Exception:"},{"line_number":283,"context_line":"                LOG.exception(\u0027Rollback for task %s failed.\u0027, task_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_d09c8cc1","line":282,"in_reply_to":"9fdfeff1_cd950ae6","updated":"2019-01-29 23:48:50.000000000","message":"Done","commit_id":"b741dd172f6d2ef4cd67231ad2471b745658726d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b9895a921e77a52de50ca9179e433de98a05b99b","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        # Check that Cinder API 3.44 is available otherwise we can\u0027t use the"},{"line_number":245,"context_line":"        # volume attachments API."},{"line_number":246,"context_line":"        try:"},{"line_number":247,"context_line":"            cinder.is_microversion_supported(\u00273.44\u0027)"},{"line_number":248,"context_line":"        except exception.CinderAPIVersionNotAvailable as ex:"},{"line_number":249,"context_line":"            raise exception.MigrationPreCheckError("},{"line_number":250,"context_line":"                reason\u003dex.format_message())"}],"source_content_type":"text/x-python","patch_set":17,"id":"5fc1f717_0b5ed944","line":247,"updated":"2019-04-03 01:44:46.000000000","message":"Apr 03 01:30:11 crosscell nova-conductor[24834]: WARNING nova.scheduler.utils [None req-08783c9f-a23e-4b89-993f-f442a79bd2c2 admin admin] Failed to compute_task_migrate_server: is_microversion_supported() takes exactly 2 arguments (1 given)\n\nMissed this in testing somehow.","commit_id":"e52832c4bcef534241678e04c5dce4601d95ebb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e76430c137e772fb688700f83d736a5406292128","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        # Check that Cinder API 3.44 is available otherwise we can\u0027t use the"},{"line_number":245,"context_line":"        # volume attachments API."},{"line_number":246,"context_line":"        try:"},{"line_number":247,"context_line":"            cinder.is_microversion_supported(\u00273.44\u0027)"},{"line_number":248,"context_line":"        except exception.CinderAPIVersionNotAvailable as ex:"},{"line_number":249,"context_line":"            raise exception.MigrationPreCheckError("},{"line_number":250,"context_line":"                reason\u003dex.format_message())"}],"source_content_type":"text/x-python","patch_set":17,"id":"5fc1f717_22cde6b6","line":247,"in_reply_to":"5fc1f717_0b5ed944","updated":"2019-04-03 19:08:06.000000000","message":"Done","commit_id":"e52832c4bcef534241678e04c5dce4601d95ebb3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bac5c0850e869b4c3ba811651b786cb8bfae873b","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        :param flavor: The new flavor if performing resize and not just a"},{"line_number":206,"context_line":"            cold migration"},{"line_number":207,"context_line":"        :param request_spec: nova.objects.RequestSpec with scheduling details"},{"line_number":208,"context_line":"        :param migration: nova.objects.Migration record for this operation"},{"line_number":209,"context_line":"        :param compute_rpcapi: instance of nova.compute.rpcapi.ComputeAPI"},{"line_number":210,"context_line":"        :param host_selection: nova.objects.Selection of the initial"},{"line_number":211,"context_line":"            selected target host from the scheduler where the selected host"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fb8cfa7_2328aae0","line":208,"range":{"start_line":208,"start_character":25,"end_line":208,"end_character":74},"updated":"2019-06-05 12:18:35.000000000","message":"in the source or in the target cell?","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7cf9d189f0048f2159ffacad3d02dcfec47e2e61","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        :param flavor: The new flavor if performing resize and not just a"},{"line_number":206,"context_line":"            cold migration"},{"line_number":207,"context_line":"        :param request_spec: nova.objects.RequestSpec with scheduling details"},{"line_number":208,"context_line":"        :param migration: nova.objects.Migration record for this operation"},{"line_number":209,"context_line":"        :param compute_rpcapi: instance of nova.compute.rpcapi.ComputeAPI"},{"line_number":210,"context_line":"        :param host_selection: nova.objects.Selection of the initial"},{"line_number":211,"context_line":"            selected target host from the scheduler where the selected host"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fb8cfa7_d29903c4","line":208,"range":{"start_line":208,"start_character":25,"end_line":208,"end_character":74},"in_reply_to":"9fb8cfa7_2328aae0","updated":"2019-06-10 19:44:23.000000000","message":"Source, I\u0027ll add something like I have for the instance parameter above.","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bac5c0850e869b4c3ba811651b786cb8bfae873b","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        \"\"\"Execute high-level orchestration of the cross-cell resize\"\"\""},{"line_number":261,"context_line":"        # We are committed to a cross-cell move at this point so update the"},{"line_number":262,"context_line":"        # migration record to reflect that."},{"line_number":263,"context_line":"        self.migration.cross_cell_move \u003d True"},{"line_number":264,"context_line":"        self.migration.save()"},{"line_number":265,"context_line":"        # Make sure neutron and cinder APIs we need are available."},{"line_number":266,"context_line":"        self._perform_external_api_checks()"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fb8cfa7_a379fafc","line":263,"range":{"start_line":263,"start_character":8,"end_line":263,"end_character":45},"updated":"2019-06-05 12:18:35.000000000","message":"Do we need to do this update on the migration object both in the source and in the target cell?","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4c122ea55b8d5af541a8da993ddb62ee9b5406cb","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        \"\"\"Execute high-level orchestration of the cross-cell resize\"\"\""},{"line_number":261,"context_line":"        # We are committed to a cross-cell move at this point so update the"},{"line_number":262,"context_line":"        # migration record to reflect that."},{"line_number":263,"context_line":"        self.migration.cross_cell_move \u003d True"},{"line_number":264,"context_line":"        self.migration.save()"},{"line_number":265,"context_line":"        # Make sure neutron and cinder APIs we need are available."},{"line_number":266,"context_line":"        self._perform_external_api_checks()"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fb8cfa7_4098a273","line":263,"range":{"start_line":263,"start_character":8,"end_line":263,"end_character":45},"in_reply_to":"9fb8cfa7_52ebd311","updated":"2019-06-13 13:13:04.000000000","message":"Ahh, yes.","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7cf9d189f0048f2159ffacad3d02dcfec47e2e61","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        \"\"\"Execute high-level orchestration of the cross-cell resize\"\"\""},{"line_number":261,"context_line":"        # We are committed to a cross-cell move at this point so update the"},{"line_number":262,"context_line":"        # migration record to reflect that."},{"line_number":263,"context_line":"        self.migration.cross_cell_move \u003d True"},{"line_number":264,"context_line":"        self.migration.save()"},{"line_number":265,"context_line":"        # Make sure neutron and cinder APIs we need are available."},{"line_number":266,"context_line":"        self._perform_external_api_checks()"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fb8cfa7_52ebd311","line":263,"range":{"start_line":263,"start_character":8,"end_line":263,"end_character":45},"in_reply_to":"9fb8cfa7_a379fafc","updated":"2019-06-10 19:44:23.000000000","message":"At this point none of the resources exist in the target cell db, that happens when we execute TargetDBSetupTask.","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bac5c0850e869b4c3ba811651b786cb8bfae873b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"9fb8cfa7_838636db","line":282,"updated":"2019-06-05 12:18:35.000000000","message":"After rolling back subtasks do we have to rollback what this task did in _execute by resetting self.migration.cross_cell_move to False?","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7cf9d189f0048f2159ffacad3d02dcfec47e2e61","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"9fb8cfa7_f2dbe778","line":282,"in_reply_to":"9fb8cfa7_838636db","updated":"2019-06-10 19:44:23.000000000","message":"No I don\u0027t think so. Eventually the migration status will go to \u0027error\u0027:\n\nhttps://github.com/openstack/nova/blob/1316c1c2850d2f966f335b628f7f5fe88cef611c/nova/conductor/tasks/migrate.py#L309\n\nand the vm_state would get reverted here:\n\nhttps://github.com/openstack/nova/blob/1316c1c2850d2f966f335b628f7f5fe88cef611c/nova/conductor/manager.py#L361\n\nI think it\u0027s also useful to leave the cross_cell_move flag set to True since once we start off down the path of doing a cross-cell move we\u0027re stuck, so it\u0027s good to leave this set for audit/debug purposes.","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4c122ea55b8d5af541a8da993ddb62ee9b5406cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"9fb8cfa7_807bfa25","line":282,"in_reply_to":"9fb8cfa7_f2dbe778","updated":"2019-06-13 13:13:04.000000000","message":"So this migration object will not be reused for anything. Then it is OK to keep it in its last state.","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"72776514d5ea1ad123a35934839f132b8404c3c1","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                         \"not found.\") %"},{"line_number":252,"context_line":"                neutron_constants.PORT_BINDING_EXTENDED)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        # Check that Cinder API 3.44 is available otherwise we can\u0027t use the"},{"line_number":255,"context_line":"        # volume attachments API."},{"line_number":256,"context_line":"        try:"},{"line_number":257,"context_line":"            cinder.is_microversion_supported(self.context, \u00273.44\u0027)"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_797aacba","line":254,"updated":"2019-08-13 14:44:53.000000000","message":"This can be removed now - I wrote this before https://review.opendev.org/#/c/649759/.\n\nI prefer to do that cleanup in a follow up though so I don\u0027t have to rebase the whole series just for this.","commit_id":"5bd0b580d89168768a4be2fdd2d0fec21fcbf1b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"144ea1e86b02df93ae8baa96096f5947d30541d4","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                         \"not found.\") %"},{"line_number":252,"context_line":"                neutron_constants.PORT_BINDING_EXTENDED)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        # Check that Cinder API 3.44 is available otherwise we can\u0027t use the"},{"line_number":255,"context_line":"        # volume attachments API."},{"line_number":256,"context_line":"        try:"},{"line_number":257,"context_line":"            cinder.is_microversion_supported(self.context, \u00273.44\u0027)"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_12d26d35","line":254,"in_reply_to":"7faddb67_797aacba","updated":"2019-08-13 16:10:18.000000000","message":"Done: https://review.opendev.org/676231","commit_id":"5bd0b580d89168768a4be2fdd2d0fec21fcbf1b0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a78107d2c008f1231e4a6575fd2b56818e08b9da","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def _execute(self):"},{"line_number":263,"context_line":"        \"\"\"Execute high-level orchestration of the cross-cell resize\"\"\""},{"line_number":264,"context_line":"        # We are committed to a cross-cell move at this point so update the"},{"line_number":265,"context_line":"        # migration record to reflect that."},{"line_number":266,"context_line":"        self.migration.cross_cell_move \u003d True"},{"line_number":267,"context_line":"        self.migration.save()"},{"line_number":268,"context_line":"        # Make sure neutron and cinder APIs we need are available."},{"line_number":269,"context_line":"        self._perform_external_api_checks()"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def rollback(self):"},{"line_number":272,"context_line":"        \"\"\"Rollback based on how sub-tasks completed"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_3908b48f","line":269,"range":{"start_line":264,"start_character":0,"end_line":269,"end_character":43},"updated":"2019-08-13 14:37:21.000000000","message":"Isn\u0027t this backwards? Surely API support is a precursor to anything else","commit_id":"5bd0b580d89168768a4be2fdd2d0fec21fcbf1b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca07e3eb6fbe6bedde544bec99367f6ec9261a28","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def _execute(self):"},{"line_number":263,"context_line":"        \"\"\"Execute high-level orchestration of the cross-cell resize\"\"\""},{"line_number":264,"context_line":"        # We are committed to a cross-cell move at this point so update the"},{"line_number":265,"context_line":"        # migration record to reflect that."},{"line_number":266,"context_line":"        self.migration.cross_cell_move \u003d True"},{"line_number":267,"context_line":"        self.migration.save()"},{"line_number":268,"context_line":"        # Make sure neutron and cinder APIs we need are available."},{"line_number":269,"context_line":"        self._perform_external_api_checks()"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def rollback(self):"},{"line_number":272,"context_line":"        \"\"\"Rollback based on how sub-tasks completed"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_791b8cc9","line":269,"range":{"start_line":264,"start_character":0,"end_line":269,"end_character":43},"in_reply_to":"7faddb67_3908b48f","updated":"2019-08-13 14:41:33.000000000","message":"It doesn\u0027t really matter. As the comment above says, at this point we\u0027ve started executing this cross-cell move migration and if we fail here we\u0027re not going to go back and try to run the (normal) MigrationTask to do a same-cell migration, so I set the cross_cell_move flag early for audit/debug in case something fails later and the operator wants to know if this was a cross-cell or same-cell move operation (they could also figure that out from the source and dest computes on the Migration record itself, but it\u0027s more work unless you\u0027re naming your computes per-cell and have a scheme for all that to make it obvious).\n\nAnyway, we could flip these but I don\u0027t think it matters.","commit_id":"5bd0b580d89168768a4be2fdd2d0fec21fcbf1b0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbda9b77908b5b6ab5ee9c88fe69748bb03ef744","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def _execute(self):"},{"line_number":263,"context_line":"        \"\"\"Execute high-level orchestration of the cross-cell resize\"\"\""},{"line_number":264,"context_line":"        # We are committed to a cross-cell move at this point so update the"},{"line_number":265,"context_line":"        # migration record to reflect that."},{"line_number":266,"context_line":"        self.migration.cross_cell_move \u003d True"},{"line_number":267,"context_line":"        self.migration.save()"},{"line_number":268,"context_line":"        # Make sure neutron and cinder APIs we need are available."},{"line_number":269,"context_line":"        self._perform_external_api_checks()"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def rollback(self):"},{"line_number":272,"context_line":"        \"\"\"Rollback based on how sub-tasks completed"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_99b0c88d","line":269,"range":{"start_line":264,"start_character":0,"end_line":269,"end_character":43},"in_reply_to":"7faddb67_791b8cc9","updated":"2019-08-13 14:43:29.000000000","message":"Okay, cool, that all makes sense. I\u0027d appreciate a little of that being added to the comment in follow-up, if you\u0027ve time later","commit_id":"5bd0b580d89168768a4be2fdd2d0fec21fcbf1b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"144ea1e86b02df93ae8baa96096f5947d30541d4","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def _execute(self):"},{"line_number":263,"context_line":"        \"\"\"Execute high-level orchestration of the cross-cell resize\"\"\""},{"line_number":264,"context_line":"        # We are committed to a cross-cell move at this point so update the"},{"line_number":265,"context_line":"        # migration record to reflect that."},{"line_number":266,"context_line":"        self.migration.cross_cell_move \u003d True"},{"line_number":267,"context_line":"        self.migration.save()"},{"line_number":268,"context_line":"        # Make sure neutron and cinder APIs we need are available."},{"line_number":269,"context_line":"        self._perform_external_api_checks()"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def rollback(self):"},{"line_number":272,"context_line":"        \"\"\"Rollback based on how sub-tasks completed"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_521a2517","line":269,"range":{"start_line":264,"start_character":0,"end_line":269,"end_character":43},"in_reply_to":"7faddb67_99b0c88d","updated":"2019-08-13 16:10:18.000000000","message":"Done: https://review.opendev.org/676231","commit_id":"5bd0b580d89168768a4be2fdd2d0fec21fcbf1b0"}],"nova/tests/unit/conductor/tasks/test_cross_cell_migrate.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f86b92ca663b0d463f42f2904e1f3bcad82a73e8","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            self, target_db_setup_task_execute, set_target_cell,"},{"line_number":238,"context_line":"            cell_get_by_uuid):"},{"line_number":239,"context_line":"        \"\"\"Happy path test to execute CrossCellMigrationTask to run the"},{"line_number":240,"context_line":"        TargetDBSetupTask sub-task and rollback."},{"line_number":241,"context_line":"        \"\"\""},{"line_number":242,"context_line":"        source_context \u003d nova_context.get_context()"},{"line_number":243,"context_line":"        host_selection \u003d objects.Selection(cell_uuid\u003duuids.cell_uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_0d9312fc","line":240,"range":{"start_line":240,"start_character":8,"end_line":240,"end_character":25},"updated":"2019-01-26 00:23:46.000000000","message":"This gets a bit unwieldy when we start adding more tasks. This test should probably just run execute and rollback and mock out everything called within, and then do more detailed unit tests on the private methods that execute calls.","commit_id":"b741dd172f6d2ef4cd67231ad2471b745658726d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7c14fb699870d96663438050f704c02205160459","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            self, target_db_setup_task_execute, set_target_cell,"},{"line_number":238,"context_line":"            cell_get_by_uuid):"},{"line_number":239,"context_line":"        \"\"\"Happy path test to execute CrossCellMigrationTask to run the"},{"line_number":240,"context_line":"        TargetDBSetupTask sub-task and rollback."},{"line_number":241,"context_line":"        \"\"\""},{"line_number":242,"context_line":"        source_context \u003d nova_context.get_context()"},{"line_number":243,"context_line":"        host_selection \u003d objects.Selection(cell_uuid\u003duuids.cell_uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_f07c3084","line":240,"range":{"start_line":240,"start_character":8,"end_line":240,"end_character":25},"in_reply_to":"9fdfeff1_0d9312fc","updated":"2019-01-29 23:48:50.000000000","message":"Done","commit_id":"b741dd172f6d2ef4cd67231ad2471b745658726d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bac5c0850e869b4c3ba811651b786cb8bfae873b","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            ex \u003d self.assertRaises(exception.MigrationPreCheckError,"},{"line_number":428,"context_line":"                                   self.task._perform_external_api_checks)"},{"line_number":429,"context_line":"            self.assertIn(\u0027Required networking service API extension\u0027,"},{"line_number":430,"context_line":"                          six.text_type(ex))"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    @mock.patch(\u0027nova.volume.cinder.is_microversion_supported\u0027,"},{"line_number":433,"context_line":"                side_effect\u003dexception.CinderAPIVersionNotAvailable("}],"source_content_type":"text/x-python","patch_set":33,"id":"9fb8cfa7_236d0a32","line":430,"updated":"2019-06-05 12:18:35.000000000","message":"Do we need to assert that rollback is called?","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7cf9d189f0048f2159ffacad3d02dcfec47e2e61","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            ex \u003d self.assertRaises(exception.MigrationPreCheckError,"},{"line_number":428,"context_line":"                                   self.task._perform_external_api_checks)"},{"line_number":429,"context_line":"            self.assertIn(\u0027Required networking service API extension\u0027,"},{"line_number":430,"context_line":"                          six.text_type(ex))"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    @mock.patch(\u0027nova.volume.cinder.is_microversion_supported\u0027,"},{"line_number":433,"context_line":"                side_effect\u003dexception.CinderAPIVersionNotAvailable("}],"source_content_type":"text/x-python","patch_set":33,"id":"9fb8cfa7_92e4eb3d","line":430,"in_reply_to":"9fb8cfa7_236d0a32","updated":"2019-06-10 19:44:23.000000000","message":"No because that\u0027s something that happens outside of this method and tested elsewhere in here.","commit_id":"572de8430557c3115d4bc7eadf39954528a0a131"}]}
