)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     esberglu \u003cesberglu@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-02-13 18:08:37 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: PowerVM Driver: Snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I2691b09d95691915dc1065284d25ad22db41d32b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa0c359_265bf754","line":7,"updated":"2018-03-12 13:56:45.000000000","message":"need a real commit message","commit_id":"dcc81c41ccd24907d8a442b5e8cad01e9d844332"}],"nova/exception.py":[{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":2301,"context_line":"    msg_fmt \u003d _(\"Cannot migrate to the host where the server exists.\")"},{"line_number":2302,"context_line":""},{"line_number":2303,"context_line":""},{"line_number":2304,"context_line":"class InstanceDiskMappingFailed(NovaException):"},{"line_number":2305,"context_line":"    msg_fmt \u003d _(\"Failed to map boot disk of instance %(instance_name)s to \""},{"line_number":2306,"context_line":"                \"the management partition from any Virtual I/O Server.\")"},{"line_number":2307,"context_line":""},{"line_number":2308,"context_line":""},{"line_number":2309,"context_line":"class NewMgmtMappingNotFoundException(NovaException):"},{"line_number":2310,"context_line":"    msg_fmt \u003d _(\"Failed to find newly-created mapping of storage element \""},{"line_number":2311,"context_line":"                \"%(stg_name)s from Virtual I/O Server %(vios_name)s to the \""},{"line_number":2312,"context_line":"                \"management partition.\")"},{"line_number":2313,"context_line":""},{"line_number":2314,"context_line":""},{"line_number":2315,"context_line":"class NoDiskDiscoveryException(NovaException):"},{"line_number":2316,"context_line":"    msg_fmt \u003d _(\"Having scanned SCSI bus %(bus)x on the management partition, \""},{"line_number":2317,"context_line":"                \"disk with UDID %(udid)s failed to appear after %(polls)d \""},{"line_number":2318,"context_line":"                \"polls over %(timeout)d seconds.\")"},{"line_number":2319,"context_line":""},{"line_number":2320,"context_line":""},{"line_number":2321,"context_line":"class UniqueDiskDiscoveryException(NovaException):"},{"line_number":2322,"context_line":"    msg_fmt \u003d _(\"Expected to find exactly one disk on the management \""},{"line_number":2323,"context_line":"                \"partition at %(path_pattern)s; found %(count)d.\")"},{"line_number":2324,"context_line":""},{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"class DeviceDeletionException(NovaException):"},{"line_number":2327,"context_line":"    msg_fmt \u003d _(\"Device %(devpath)s is still present on the management \""},{"line_number":2328,"context_line":"                \"partition after attempting to delete it. Polled %(polls)d \""},{"line_number":2329,"context_line":"                \"times over %(timeout)d seconds.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_f6041617","line":2329,"range":{"start_line":2304,"start_character":0,"end_line":2329,"end_character":50},"updated":"2018-02-13 01:07:24.000000000","message":"Check to see if better location for these","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"}],"nova/tests/unit/virt/powervm/disk/test_ssp.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0012a1175fcdb4404a15a805374ec1a0c064bccb","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        mock_vio_get.side_effect \u003d [vio1, vio2]"},{"line_number":329,"context_line":"        mock_add.side_effect \u003d [Exception(\"mapping failed\"), None]"},{"line_number":330,"context_line":"        # Should hit on the second VIOS"},{"line_number":331,"context_line":"        self.assertIs(vio2, vios)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    @mock.patch(\u0027pypowervm.tasks.scsi_mapper.remove_lu_mapping\u0027, autospec\u003dTrue)"},{"line_number":334,"context_line":"    def test_disconnect_disk_from_mgmt(self, mock_rm_lu_map):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_1af7958d","line":331,"updated":"2018-03-23 15:28:05.000000000","message":"nice test","commit_id":"8439b261da3e3a1836298e6eab9622188fa72db7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0012a1175fcdb4404a15a805374ec1a0c064bccb","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        mock_vio_get.reset_mock()"},{"line_number":422,"context_line":"        mock_vio_get.side_effect \u003d [vio3, vio3]"},{"line_number":423,"context_line":"        self.assertEqual([], list(self.ssp_drv._get_bootdisk_iter(inst)))"},{"line_number":424,"context_line":"        self.assertEqual(2, mock_vio_get.call_count)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def _bld_mocks_for_instance_disk(self):"},{"line_number":427,"context_line":"        inst \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_9a1965d8","line":424,"updated":"2018-03-23 15:28:05.000000000","message":"ditto","commit_id":"8439b261da3e3a1836298e6eab9622188fa72db7"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"4d1565c7bbc82429d90d9f31140977ba9c2aed70","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            self.assertRaises(ValueError,"},{"line_number":121,"context_line":"                              ssp_dvr.SSPDiskAdapter, self.apt, self.host_uuid)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def test_capabilities(self):"},{"line_number":124,"context_line":"        self.assertTrue(self.ssp_drv.capabilities.get(\u0027shared_storage\u0027))"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @mock.patch(\u0027pypowervm.util.get_req_path_uuid\u0027, autospec\u003dTrue)"},{"line_number":127,"context_line":"    def test_vios_uuids(self, mock_rpu):"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_618a816a","line":124,"range":{"start_line":123,"start_character":0,"end_line":124,"end_character":72},"updated":"2018-04-02 19:51:25.000000000","message":"Test other capabilities here","commit_id":"6954093b4dada63b8973832e54b94cc6b36ab334"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d6f53b67e152460f6ec6bfa42bd1963176e3b204","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            self.assertRaises(ValueError,"},{"line_number":121,"context_line":"                              ssp_dvr.SSPDiskAdapter, self.apt, self.host_uuid)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def test_capabilities(self):"},{"line_number":124,"context_line":"        self.assertTrue(self.ssp_drv.capabilities.get(\u0027shared_storage\u0027))"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @mock.patch(\u0027pypowervm.util.get_req_path_uuid\u0027, autospec\u003dTrue)"},{"line_number":127,"context_line":"    def test_vios_uuids(self, mock_rpu):"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_81ef95e7","line":124,"range":{"start_line":123,"start_character":0,"end_line":124,"end_character":72},"in_reply_to":"bf659307_618a816a","updated":"2018-04-02 20:00:29.000000000","message":"Done","commit_id":"6954093b4dada63b8973832e54b94cc6b36ab334"}],"nova/tests/unit/virt/powervm/tasks/test_storage.py":[{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                                                              \u0027stg_name\u0027)"},{"line_number":231,"context_line":"        mock_rm.assert_called_with(\u0027/dev/disk\u0027)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        # Management Partition is VIOS and Novalink hosted storage"},{"line_number":234,"context_line":"        reset_mocks()"},{"line_number":235,"context_line":"        disk_dvr._vios_uuids \u003d [\u0027mp_uuid\u0027]"},{"line_number":236,"context_line":"        dev_name \u003d \u0027/dev/vg/fake_name\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_64aec12f","line":233,"range":{"start_line":233,"start_character":43,"end_line":233,"end_character":51},"updated":"2018-03-12 13:56:45.000000000","message":"nit: NovaLink","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                                                              \u0027stg_name\u0027)"},{"line_number":231,"context_line":"        mock_rm.assert_called_with(\u0027/dev/disk\u0027)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        # Management Partition is VIOS and Novalink hosted storage"},{"line_number":234,"context_line":"        reset_mocks()"},{"line_number":235,"context_line":"        disk_dvr._vios_uuids \u003d [\u0027mp_uuid\u0027]"},{"line_number":236,"context_line":"        dev_name \u003d \u0027/dev/vg/fake_name\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_b42034b2","line":233,"range":{"start_line":233,"start_character":43,"end_line":233,"end_character":51},"in_reply_to":"df7087c5_64aec12f","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        tf \u003d tf_stg.InstanceDiskToMgmt(disk_dvr, mock_instance)"},{"line_number":239,"context_line":"        self.assertEqual((None, None, dev_name), tf.execute())"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # Management Partition is VIOS and not Novalink hosted storage"},{"line_number":242,"context_line":"        reset_mocks()"},{"line_number":243,"context_line":"        disk_dvr._vios_uuids \u003d [\u0027mp_uuid\u0027]"},{"line_number":244,"context_line":"        disk_dvr.boot_disk_path_for_instance.return_value \u003d None"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_04ab451d","line":241,"range":{"start_line":241,"start_character":47,"end_line":241,"end_character":55},"updated":"2018-03-12 13:56:45.000000000","message":"nit: NovaLink","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        tf \u003d tf_stg.InstanceDiskToMgmt(disk_dvr, mock_instance)"},{"line_number":239,"context_line":"        self.assertEqual((None, None, dev_name), tf.execute())"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # Management Partition is VIOS and not Novalink hosted storage"},{"line_number":242,"context_line":"        reset_mocks()"},{"line_number":243,"context_line":"        disk_dvr._vios_uuids \u003d [\u0027mp_uuid\u0027]"},{"line_number":244,"context_line":"        disk_dvr.boot_disk_path_for_instance.return_value \u003d None"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_542f58a0","line":241,"range":{"start_line":241,"start_character":47,"end_line":241,"end_character":55},"in_reply_to":"df7087c5_04ab451d","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"}],"nova/tests/unit/virt/powervm/test_image.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class TestImage(test.TestCase):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @mock.patch(\u0027nova.utils.temporary_chown\u0027, autospec\u003dTrue)"},{"line_number":33,"context_line":"    @mock.patch(_BUILTIN + \u0027.open\u0027, autospec\u003dTrue)"},{"line_number":34,"context_line":"    @mock.patch(\u0027nova.image.api.API\u0027, autospec\u003dTrue)"},{"line_number":35,"context_line":"    def test_stream_blockdev_to_glance(self, mock_api, mock_open, mock_chown):"},{"line_number":36,"context_line":"        mock_open.return_value.__enter__.return_value \u003d \u0027mock_stream\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_d0d8e11e","line":33,"updated":"2018-05-15 20:48:10.000000000","message":"Why not use mock_open?\n\nhttps://docs.python.org/3/library/unittest.mock.html#mock-open","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"}],"nova/virt/powervm/disk/ssp.py":[{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    @staticmethod"},{"line_number":353,"context_line":"    def _get_disk_name(disk_type, instance, short\u003dFalse):"},{"line_number":354,"context_line":"        \"\"\"Generate a name for a virtual disk associated with an instance."},{"line_number":355,"context_line":"        :param disk_type: One of the DiskType enum values."},{"line_number":356,"context_line":"        :param instance: The instance for which the disk is to be created."},{"line_number":357,"context_line":"        :param short: If True, the generated name will be limited to 15"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_36a6feac","line":354,"range":{"start_line":354,"start_character":8,"end_line":354,"end_character":74},"updated":"2018-02-13 01:07:24.000000000","message":"Blank line","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    @staticmethod"},{"line_number":353,"context_line":"    def _get_disk_name(disk_type, instance, short\u003dFalse):"},{"line_number":354,"context_line":"        \"\"\"Generate a name for a virtual disk associated with an instance."},{"line_number":355,"context_line":"        :param disk_type: One of the DiskType enum values."},{"line_number":356,"context_line":"        :param instance: The instance for which the disk is to be created."},{"line_number":357,"context_line":"        :param short: If True, the generated name will be limited to 15"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_122735cc","line":354,"range":{"start_line":354,"start_character":8,"end_line":354,"end_character":74},"in_reply_to":"3fa0c359_36a6feac","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def instance_disk_iter(self, instance, disk_type\u003dDiskType.BOOT,"},{"line_number":370,"context_line":"                           lpar_wrap\u003dNone):"},{"line_number":371,"context_line":"        \"\"\"Return the instance\u0027s storage element wrapper of the specified type."},{"line_number":372,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"},{"line_number":373,"context_line":"                         requested disk."},{"line_number":374,"context_line":"        :param disk_type: The type of disk to find, one of the DiskType enum"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_b69a0e5f","line":371,"range":{"start_line":371,"start_character":8,"end_line":371,"end_character":79},"updated":"2018-02-13 01:07:24.000000000","message":"Blank line","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def instance_disk_iter(self, instance, disk_type\u003dDiskType.BOOT,"},{"line_number":370,"context_line":"                           lpar_wrap\u003dNone):"},{"line_number":371,"context_line":"        \"\"\"Return the instance\u0027s storage element wrapper of the specified type."},{"line_number":372,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"},{"line_number":373,"context_line":"                         requested disk."},{"line_number":374,"context_line":"        :param disk_type: The type of disk to find, one of the DiskType enum"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_723c79e0","line":371,"range":{"start_line":371,"start_character":8,"end_line":371,"end_character":79},"in_reply_to":"3fa0c359_b69a0e5f","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    def boot_disk_path_for_instance(self, instance, vios_uuid):"},{"line_number":263,"context_line":"        \"\"\"Find scsi mappings on given VIOS for the instance."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        This method finds all scsi mappings on a given vios that are associated"},{"line_number":266,"context_line":"        with the instance and disk_type."},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_1f6070ce","line":265,"range":{"start_line":265,"start_character":55,"end_line":265,"end_character":59},"updated":"2018-03-12 13:56:45.000000000","message":"nit: VIOS","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    def boot_disk_path_for_instance(self, instance, vios_uuid):"},{"line_number":263,"context_line":"        \"\"\"Find scsi mappings on given VIOS for the instance."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        This method finds all scsi mappings on a given vios that are associated"},{"line_number":266,"context_line":"        with the instance and disk_type."},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_141b2081","line":265,"range":{"start_line":265,"start_character":55,"end_line":265,"end_character":59},"in_reply_to":"df7087c5_1f6070ce","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                         requested disk."},{"line_number":270,"context_line":"        :param vios_uuid: PowerVM UUID of the VIOS to search for mappings."},{"line_number":271,"context_line":"        :return: Iterator of scsi mappings that are associated with the"},{"line_number":272,"context_line":"                 instance and disk_type."},{"line_number":273,"context_line":"        \"\"\""},{"line_number":274,"context_line":"        vm_uuid \u003d vm.get_pvm_uuid(instance)"},{"line_number":275,"context_line":"        match_func \u003d self.disk_match_func(DiskType.BOOT, instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_df9f58b2","line":272,"range":{"start_line":272,"start_character":25,"end_line":272,"end_character":39},"updated":"2018-03-12 13:56:45.000000000","message":"We don\u0027t have a disk_type param here... \"Iterator of boot disk scsi mappings for the instance\"?","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                         requested disk."},{"line_number":270,"context_line":"        :param vios_uuid: PowerVM UUID of the VIOS to search for mappings."},{"line_number":271,"context_line":"        :return: Iterator of scsi mappings that are associated with the"},{"line_number":272,"context_line":"                 instance and disk_type."},{"line_number":273,"context_line":"        \"\"\""},{"line_number":274,"context_line":"        vm_uuid \u003d vm.get_pvm_uuid(instance)"},{"line_number":275,"context_line":"        match_func \u003d self.disk_match_func(DiskType.BOOT, instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_fae9b319","line":272,"range":{"start_line":272,"start_character":25,"end_line":272,"end_character":39},"in_reply_to":"df7087c5_df9f58b2","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                      made."},{"line_number":291,"context_line":"        :raise InstanceDiskMappingFailed: If the mapping could not be done."},{"line_number":292,"context_line":"        \"\"\""},{"line_number":293,"context_line":"        lpar_wrap \u003d vm.get_instance_wrapper(self._adapter, instance)"},{"line_number":294,"context_line":"        for stg_elem, vios in self.instance_disk_iter(instance,"},{"line_number":295,"context_line":"                                                      lpar_wrap\u003dlpar_wrap):"},{"line_number":296,"context_line":"            msg_args \u003d {\u0027disk_name\u0027: stg_elem.name, \u0027vios_name\u0027: vios.name}"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_f26900be","line":293,"updated":"2018-03-12 13:56:45.000000000","message":"lpar_wrap doesn\u0027t appear to be used anywhere besides passing to instance_disk_iter, and instance_disk_iter isn\u0027t called anywhere else where that\u0027s different, so let\u0027s just get lpar_wrap inside instance_disk_iter instead of getting it and passing it.","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                      made."},{"line_number":291,"context_line":"        :raise InstanceDiskMappingFailed: If the mapping could not be done."},{"line_number":292,"context_line":"        \"\"\""},{"line_number":293,"context_line":"        lpar_wrap \u003d vm.get_instance_wrapper(self._adapter, instance)"},{"line_number":294,"context_line":"        for stg_elem, vios in self.instance_disk_iter(instance,"},{"line_number":295,"context_line":"                                                      lpar_wrap\u003dlpar_wrap):"},{"line_number":296,"context_line":"            msg_args \u003d {\u0027disk_name\u0027: stg_elem.name, \u0027vios_name\u0027: vios.name}"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_1a64a7b8","line":293,"in_reply_to":"df7087c5_f26900be","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                                          stg_elem)"},{"line_number":311,"context_line":"                # If that worked, we\u0027re done.  add_vscsi_mapping logged."},{"line_number":312,"context_line":"                return stg_elem, vios"},{"line_number":313,"context_line":"            except Exception:"},{"line_number":314,"context_line":"                LOG.exception(\"Failed to map boot disk %(disk_name)s to the \""},{"line_number":315,"context_line":"                              \"management partition from Virtual I/O Server \""},{"line_number":316,"context_line":"                              \"%(vios_name)s.\", msg_args, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_b207081d","line":313,"range":{"start_line":313,"start_character":19,"end_line":313,"end_character":28},"updated":"2018-03-12 13:56:45.000000000","message":"There are few reasons to ever catch Exception rather than something more specific. Are we sure we can\u0027t be more specific? pvm_exc.Error should cover most things, though pypowervm does use things like ValueError in places.","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                                          stg_elem)"},{"line_number":311,"context_line":"                # If that worked, we\u0027re done.  add_vscsi_mapping logged."},{"line_number":312,"context_line":"                return stg_elem, vios"},{"line_number":313,"context_line":"            except Exception:"},{"line_number":314,"context_line":"                LOG.exception(\"Failed to map boot disk %(disk_name)s to the \""},{"line_number":315,"context_line":"                              \"management partition from Virtual I/O Server \""},{"line_number":316,"context_line":"                              \"%(vios_name)s.\", msg_args, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_009c36be","line":313,"range":{"start_line":313,"start_character":19,"end_line":313,"end_character":28},"in_reply_to":"df7087c5_b207081d","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        :param disk_type: One of the DiskType enum values."},{"line_number":339,"context_line":"        :param instance: The instance whose disk is to be found."},{"line_number":340,"context_line":"        :return: Callable suitable for the match_func parameter of the"},{"line_number":341,"context_line":"                 pypowervm.tasks.scsi_mapper.find_maps method, with the"},{"line_number":342,"context_line":"                 following specification:"},{"line_number":343,"context_line":"            def match_func(storage_elem)"},{"line_number":344,"context_line":"                param storage_elem: A backing storage element wrapper (VOpt,"},{"line_number":345,"context_line":"                                    VDisk, PV, or LU) to be analyzed."},{"line_number":346,"context_line":"                return: True if the storage_elem\u0027s mapping should be included;"},{"line_number":347,"context_line":"                        False otherwise."},{"line_number":348,"context_line":"        \"\"\""},{"line_number":349,"context_line":"        disk_name \u003d self._get_disk_name(disk_type, instance)"},{"line_number":350,"context_line":"        return tsk_map.gen_match_func(pvm_stg.LU, names\u003d[disk_name])"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_5249cc88","line":347,"range":{"start_line":341,"start_character":61,"end_line":347,"end_character":40},"updated":"2018-03-12 13:56:45.000000000","message":"we don\u0027t need to care about the specification here, because that is abstracted away from us by tsk_map.gen_match_func","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        :param disk_type: One of the DiskType enum values."},{"line_number":339,"context_line":"        :param instance: The instance whose disk is to be found."},{"line_number":340,"context_line":"        :return: Callable suitable for the match_func parameter of the"},{"line_number":341,"context_line":"                 pypowervm.tasks.scsi_mapper.find_maps method, with the"},{"line_number":342,"context_line":"                 following specification:"},{"line_number":343,"context_line":"            def match_func(storage_elem)"},{"line_number":344,"context_line":"                param storage_elem: A backing storage element wrapper (VOpt,"},{"line_number":345,"context_line":"                                    VDisk, PV, or LU) to be analyzed."},{"line_number":346,"context_line":"                return: True if the storage_elem\u0027s mapping should be included;"},{"line_number":347,"context_line":"                        False otherwise."},{"line_number":348,"context_line":"        \"\"\""},{"line_number":349,"context_line":"        disk_name \u003d self._get_disk_name(disk_type, instance)"},{"line_number":350,"context_line":"        return tsk_map.gen_match_func(pvm_stg.LU, names\u003d[disk_name])"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_1a3267a8","line":347,"range":{"start_line":341,"start_character":61,"end_line":347,"end_character":40},"in_reply_to":"df7087c5_5249cc88","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            base, prefix\u003dprefix, max_len\u003dpvm_const.MaxLen.VDISK_NAME if short"},{"line_number":368,"context_line":"            else pvm_const.MaxLen.FILENAME_DEFAULT)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def instance_disk_iter(self, instance, disk_type\u003dDiskType.BOOT,"},{"line_number":371,"context_line":"                           lpar_wrap\u003dNone):"},{"line_number":372,"context_line":"        \"\"\"Return the instance\u0027s storage element wrapper of the specified type."},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_72be5066","line":370,"updated":"2018-03-12 13:56:45.000000000","message":"this is setup to be used generically (else there\u0027s no need for lpar_wrap, and it should be prefixed by _ since it\u0027s only needed in this class) yet it is also assumes BOOT disk_type unless you specify otherwise (and doesn\u0027t support None to match all types), so it doesn\u0027t seem very generic in that way.\n\nLet\u0027s change this to _get_bootdisk_iter(self, instance), since that\u0027s the only way it\u0027s ever called, and it\u0027s only called from this class.","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            base, prefix\u003dprefix, max_len\u003dpvm_const.MaxLen.VDISK_NAME if short"},{"line_number":368,"context_line":"            else pvm_const.MaxLen.FILENAME_DEFAULT)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def instance_disk_iter(self, instance, disk_type\u003dDiskType.BOOT,"},{"line_number":371,"context_line":"                           lpar_wrap\u003dNone):"},{"line_number":372,"context_line":"        \"\"\"Return the instance\u0027s storage element wrapper of the specified type."},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_5aec5ff2","line":370,"in_reply_to":"df7087c5_72be5066","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def instance_disk_iter(self, instance, disk_type\u003dDiskType.BOOT,"},{"line_number":371,"context_line":"                           lpar_wrap\u003dNone):"},{"line_number":372,"context_line":"        \"\"\"Return the instance\u0027s storage element wrapper of the specified type."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"},{"line_number":375,"context_line":"                         requested disk."}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_525d4ce7","line":372,"updated":"2018-03-12 13:56:45.000000000","message":"that\u0027s not what this does","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def instance_disk_iter(self, instance, disk_type\u003dDiskType.BOOT,"},{"line_number":371,"context_line":"                           lpar_wrap\u003dNone):"},{"line_number":372,"context_line":"        \"\"\"Return the instance\u0027s storage element wrapper of the specified type."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"},{"line_number":375,"context_line":"                         requested disk."}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_83936ba3","line":372,"in_reply_to":"df7087c5_525d4ce7","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0012a1175fcdb4404a15a805374ec1a0c064bccb","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                                       match_func\u003dmatch_func)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        # Remove the mapping from *each* VIOS on the LPAR\u0027s host."},{"line_number":142,"context_line":"        # The LPAR\u0027s host has to be self._host_uuid, else the PowerVM API will"},{"line_number":143,"context_line":"        # fail."},{"line_number":144,"context_line":"        #"},{"line_number":145,"context_line":"        # Note - this may not be all the VIOSes on the system...just the ones"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_2e581a2f","line":142,"range":{"start_line":142,"start_character":41,"end_line":142,"end_character":42},"updated":"2018-03-23 15:28:05.000000000","message":"unrelated...\n\n...but good","commit_id":"8439b261da3e3a1836298e6eab9622188fa72db7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0012a1175fcdb4404a15a805374ec1a0c064bccb","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    def _get_bootdisk_iter(self, instance):"},{"line_number":360,"context_line":"        \"\"\"Return an iterator of (storage_elem, VIOS) tuples for the instance."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        This method returns an iterator of (storage_elem, VIOS) tuples, where"},{"line_number":363,"context_line":"        storage_element is a pypowervm storage element wrapper associated with"},{"line_number":364,"context_line":"        the instance boot disk and VIOS is the wrapper of the Virtual I/O"},{"line_number":365,"context_line":"        server owning that storage element."}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_8ee2862f","line":362,"range":{"start_line":362,"start_character":8,"end_line":362,"end_character":77},"updated":"2018-03-23 15:28:05.000000000","message":"We could do without this line.","commit_id":"8439b261da3e3a1836298e6eab9622188fa72db7"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"bc119ca500dd50f1784c1d42d24830806a85a0f0","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    def _get_bootdisk_iter(self, instance):"},{"line_number":360,"context_line":"        \"\"\"Return an iterator of (storage_elem, VIOS) tuples for the instance."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        This method returns an iterator of (storage_elem, VIOS) tuples, where"},{"line_number":363,"context_line":"        storage_element is a pypowervm storage element wrapper associated with"},{"line_number":364,"context_line":"        the instance boot disk and VIOS is the wrapper of the Virtual I/O"},{"line_number":365,"context_line":"        server owning that storage element."}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_717b578b","line":362,"range":{"start_line":362,"start_character":8,"end_line":362,"end_character":77},"in_reply_to":"df7087c5_8ee2862f","updated":"2018-03-23 15:59:55.000000000","message":"Done","commit_id":"8439b261da3e3a1836298e6eab9622188fa72db7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0012a1175fcdb4404a15a805374ec1a0c064bccb","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        \"\"\"Return an iterator of (storage_elem, VIOS) tuples for the instance."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        This method returns an iterator of (storage_elem, VIOS) tuples, where"},{"line_number":363,"context_line":"        storage_element is a pypowervm storage element wrapper associated with"},{"line_number":364,"context_line":"        the instance boot disk and VIOS is the wrapper of the Virtual I/O"},{"line_number":365,"context_line":"        server owning that storage element."},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_4ed22e5e","line":363,"range":{"start_line":363,"start_character":8,"end_line":363,"end_character":23},"updated":"2018-03-23 15:28:05.000000000","message":"storage_elem, for consistency","commit_id":"8439b261da3e3a1836298e6eab9622188fa72db7"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"bc119ca500dd50f1784c1d42d24830806a85a0f0","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        \"\"\"Return an iterator of (storage_elem, VIOS) tuples for the instance."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        This method returns an iterator of (storage_elem, VIOS) tuples, where"},{"line_number":363,"context_line":"        storage_element is a pypowervm storage element wrapper associated with"},{"line_number":364,"context_line":"        the instance boot disk and VIOS is the wrapper of the Virtual I/O"},{"line_number":365,"context_line":"        server owning that storage element."},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_116c5bce","line":363,"range":{"start_line":363,"start_character":8,"end_line":363,"end_character":23},"in_reply_to":"df7087c5_4ed22e5e","updated":"2018-03-23 15:59:55.000000000","message":"Done","commit_id":"8439b261da3e3a1836298e6eab9622188fa72db7"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"530c62060da02e384a78f9cdb9f8027c93c85e2c","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                ret.append(n.vios_uuid)"},{"line_number":258,"context_line":"        return ret"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def boot_disk_path_for_instance(self, instance, vios_uuid):"},{"line_number":261,"context_line":"        \"\"\"Find scsi mappings on given VIOS for the instance."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        This method finds all boot disk scsi mappings on a given vios that are"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_6b48505b","line":260,"updated":"2018-03-29 18:44:31.000000000","message":"get_bootdisk_path would be a better name for this.","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3a052ecafbf4b2acf7d2d97f3f1964b480e0fc94","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                ret.append(n.vios_uuid)"},{"line_number":258,"context_line":"        return ret"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def boot_disk_path_for_instance(self, instance, vios_uuid):"},{"line_number":261,"context_line":"        \"\"\"Find scsi mappings on given VIOS for the instance."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        This method finds all boot disk scsi mappings on a given vios that are"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_b6cd4f32","line":260,"in_reply_to":"bf659307_6b48505b","updated":"2018-03-31 21:03:24.000000000","message":"Done","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"530c62060da02e384a78f9cdb9f8027c93c85e2c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        return ret"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def boot_disk_path_for_instance(self, instance, vios_uuid):"},{"line_number":261,"context_line":"        \"\"\"Find scsi mappings on given VIOS for the instance."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        This method finds all boot disk scsi mappings on a given vios that are"},{"line_number":264,"context_line":"        associated with the instance."}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_6b6130d3","line":261,"updated":"2018-03-29 18:44:31.000000000","message":"this docstring (both description and :return:) doesn\u0027t match what the method really does. It gets the local path for an instance\u0027s boot disk, not scsi mappings.","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3a052ecafbf4b2acf7d2d97f3f1964b480e0fc94","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        return ret"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def boot_disk_path_for_instance(self, instance, vios_uuid):"},{"line_number":261,"context_line":"        \"\"\"Find scsi mappings on given VIOS for the instance."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        This method finds all boot disk scsi mappings on a given vios that are"},{"line_number":264,"context_line":"        associated with the instance."}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_56ce332d","line":261,"in_reply_to":"bf659307_6b6130d3","updated":"2018-03-31 21:03:24.000000000","message":"Done","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"1fc30cee03a7c58e6303b3e890dcc5372d3f6783","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    def boot_disk_path_for_instance(self, instance, vios_uuid):"},{"line_number":261,"context_line":"        \"\"\"Find scsi mappings on given VIOS for the instance."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        This method finds all boot disk scsi mappings on a given vios that are"},{"line_number":264,"context_line":"        associated with the instance."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_d5f8197c","line":263,"updated":"2018-03-29 17:36:55.000000000","message":"nit: capitalize acronyms like SCSI and VIOS","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3a052ecafbf4b2acf7d2d97f3f1964b480e0fc94","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    def boot_disk_path_for_instance(self, instance, vios_uuid):"},{"line_number":261,"context_line":"        \"\"\"Find scsi mappings on given VIOS for the instance."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        This method finds all boot disk scsi mappings on a given vios that are"},{"line_number":264,"context_line":"        associated with the instance."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_f64987b6","line":263,"in_reply_to":"bf659307_d5f8197c","updated":"2018-03-31 21:03:24.000000000","message":"Done","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"1fc30cee03a7c58e6303b3e890dcc5372d3f6783","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"},{"line_number":267,"context_line":"                         requested disk."},{"line_number":268,"context_line":"        :param vios_uuid: PowerVM UUID of the VIOS to search for mappings."},{"line_number":269,"context_line":"        :return: Iterator of boot disk scsi mappings for the instance."},{"line_number":270,"context_line":"        \"\"\""},{"line_number":271,"context_line":"        vm_uuid \u003d vm.get_pvm_uuid(instance)"},{"line_number":272,"context_line":"        match_func \u003d self.disk_match_func(DiskType.BOOT, instance)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_95ee21b2","line":269,"range":{"start_line":269,"start_character":39,"end_line":269,"end_character":43},"updated":"2018-03-29 17:36:55.000000000","message":"ditto","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3a052ecafbf4b2acf7d2d97f3f1964b480e0fc94","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        :param instance: nova.objects.instance.Instance object owning the"},{"line_number":267,"context_line":"                         requested disk."},{"line_number":268,"context_line":"        :param vios_uuid: PowerVM UUID of the VIOS to search for mappings."},{"line_number":269,"context_line":"        :return: Iterator of boot disk scsi mappings for the instance."},{"line_number":270,"context_line":"        \"\"\""},{"line_number":271,"context_line":"        vm_uuid \u003d vm.get_pvm_uuid(instance)"},{"line_number":272,"context_line":"        match_func \u003d self.disk_match_func(DiskType.BOOT, instance)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_96c84b22","line":269,"range":{"start_line":269,"start_character":39,"end_line":269,"end_character":43},"in_reply_to":"bf659307_95ee21b2","updated":"2018-03-31 21:03:24.000000000","message":"Done","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"530c62060da02e384a78f9cdb9f8027c93c85e2c","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                 {\u0027disk_name\u0027: disk_name, \u0027mp_uuid\u0027: self.mp_uuid,"},{"line_number":328,"context_line":"                  \u0027vios_uuid\u0027: vios_uuid})"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def disk_match_func(self, disk_type, instance):"},{"line_number":331,"context_line":"        \"\"\"Return a matching function to locate the disk for an instance."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        :param disk_type: One of the DiskType enum values."}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_ab9988c4","line":330,"updated":"2018-03-29 18:44:31.000000000","message":"make this private and @staticmethod","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3a052ecafbf4b2acf7d2d97f3f1964b480e0fc94","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                 {\u0027disk_name\u0027: disk_name, \u0027mp_uuid\u0027: self.mp_uuid,"},{"line_number":328,"context_line":"                  \u0027vios_uuid\u0027: vios_uuid})"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def disk_match_func(self, disk_type, instance):"},{"line_number":331,"context_line":"        \"\"\"Return a matching function to locate the disk for an instance."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        :param disk_type: One of the DiskType enum values."}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_71ad8199","line":330,"in_reply_to":"bf659307_ab9988c4","updated":"2018-03-31 21:03:24.000000000","message":"Done","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                                       match_func\u003dmatch_func)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        # Remove the mapping from *each* VIOS on the LPAR\u0027s host."},{"line_number":142,"context_line":"        # The LPAR\u0027s host has to be self._host_uuid, else the PowerVM API will"},{"line_number":143,"context_line":"        # fail."},{"line_number":144,"context_line":"        #"},{"line_number":145,"context_line":"        # Note - this may not be all the VIOSes on the system...just the ones"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_9dba82be","line":142,"updated":"2018-05-15 20:48:10.000000000","message":"unrelated cleanup","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            return tsk_map.add_map(vios_w, mapping)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # Add the mapping to *each* VIOS on the LPAR\u0027s host."},{"line_number":232,"context_line":"        # The LPAR\u0027s host has to be self._host_uuid, else the PowerVM API will"},{"line_number":233,"context_line":"        # fail."},{"line_number":234,"context_line":"        #"},{"line_number":235,"context_line":"        # Note: this may not be all the VIOSes on the system - just the ones"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_7db3e6e9","line":232,"updated":"2018-05-15 20:48:10.000000000","message":"same","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        \"\"\""},{"line_number":250,"context_line":"        ret \u003d []"},{"line_number":251,"context_line":"        for n in self._clust.nodes:"},{"line_number":252,"context_line":"            # Skip any nodes that we don\u0027t have the VIOS uuid or uri"},{"line_number":253,"context_line":"            if not (n.vios_uuid and n.vios_uri):"},{"line_number":254,"context_line":"                continue"},{"line_number":255,"context_line":"            if self._host_uuid \u003d\u003d pvm_u.get_req_path_uuid("}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_1dce7262","line":252,"updated":"2018-05-15 20:48:10.000000000","message":"same - this kind of unrelated stuff is small but detracts from the overall large review.","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"}],"nova/virt/powervm/driver.py":[{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            # Convert to a Nova exception"},{"line_number":285,"context_line":"            raise exc.InstanceTerminationFailure(reason\u003dsix.text_type(e))"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":288,"context_line":"        \"\"\"Snapshots the specified instance."},{"line_number":289,"context_line":"        :param context: security context"},{"line_number":290,"context_line":"        :param instance: Instance object as returned by DB layer."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_50f63165","line":287,"range":{"start_line":287,"start_character":8,"end_line":287,"end_character":16},"updated":"2018-02-13 01:07:24.000000000","message":"OOT has a check to see if the disk driver has the snapshot capability. Currently only ssp is IT and snapshot is supported so the check isn\u0027t really needed. But should either leave a TODO or implement the check here anyways so we don\u0027t miss it in the future.","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            # Convert to a Nova exception"},{"line_number":285,"context_line":"            raise exc.InstanceTerminationFailure(reason\u003dsix.text_type(e))"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":288,"context_line":"        \"\"\"Snapshots the specified instance."},{"line_number":289,"context_line":"        :param context: security context"},{"line_number":290,"context_line":"        :param instance: Instance object as returned by DB layer."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_fd75bf32","line":287,"range":{"start_line":287,"start_character":8,"end_line":287,"end_character":16},"in_reply_to":"3fa0c359_50f63165","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            raise exc.InstanceTerminationFailure(reason\u003dsix.text_type(e))"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":288,"context_line":"        \"\"\"Snapshots the specified instance."},{"line_number":289,"context_line":"        :param context: security context"},{"line_number":290,"context_line":"        :param instance: Instance object as returned by DB layer."},{"line_number":291,"context_line":"        :param image_id: Reference to a pre-created image that will"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_d001e139","line":288,"range":{"start_line":288,"start_character":11,"end_line":288,"end_character":44},"updated":"2018-02-13 01:07:24.000000000","message":"Blank Line","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            raise exc.InstanceTerminationFailure(reason\u003dsix.text_type(e))"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":288,"context_line":"        \"\"\"Snapshots the specified instance."},{"line_number":289,"context_line":"        :param context: security context"},{"line_number":290,"context_line":"        :param instance: Instance object as returned by DB layer."},{"line_number":291,"context_line":"        :param image_id: Reference to a pre-created image that will"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_1d718b44","line":288,"range":{"start_line":288,"start_character":11,"end_line":288,"end_character":44},"in_reply_to":"3fa0c359_d001e139","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        \"\"\"Snapshots the specified instance."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        :param context: Security context."},{"line_number":291,"context_line":"        :param instance: Instance object as returned by DB layer."},{"line_number":292,"context_line":"        :param image_id: Reference to a pre-created image to hold the snapshot."},{"line_number":293,"context_line":"        :param update_task_state: Callable to update the state of the snapshot"},{"line_number":294,"context_line":"                                  task with one of the IMAGE_* consts from"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_c90486c9","line":291,"updated":"2018-03-12 13:56:45.000000000","message":"starting here the docstring diverges from the parent class in nova/virt/driver.py. Let\u0027s keep the docstring from the parent unless we have good reason not to, or at least stay as close as we can.","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        \"\"\"Snapshots the specified instance."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        :param context: Security context."},{"line_number":291,"context_line":"        :param instance: Instance object as returned by DB layer."},{"line_number":292,"context_line":"        :param image_id: Reference to a pre-created image to hold the snapshot."},{"line_number":293,"context_line":"        :param update_task_state: Callable to update the state of the snapshot"},{"line_number":294,"context_line":"                                  task with one of the IMAGE_* consts from"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_ffd3e536","line":291,"in_reply_to":"df7087c5_c90486c9","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"}],"nova/virt/powervm/image.py":[{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    # Make the device file owned by the current user for the duration of the"},{"line_number":33,"context_line":"    # operation."},{"line_number":34,"context_line":"    with utils.temporary_chown(devpath), open(devpath, \u0027rb\u0027) as stream:"},{"line_number":35,"context_line":"        # Stream it.  This is synchronous."},{"line_number":36,"context_line":"        image_api.update(context, image_id, metadata, stream)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_e9662a52","line":34,"updated":"2018-03-12 13:56:45.000000000","message":"I would really love to avoid using this if we can. But if there\u0027s no easy way to do that, I\u0027m ok with it for this commit.","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        image_api.update(context, image_id, metadata, stream)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def snapshot_metadata(context, image_api, image_id, instance):"},{"line_number":40,"context_line":"    \"\"\"Generate a metadata dictionary for an instance snapshot."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    :param context: Nova security context."}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_69f69a92","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":21},"updated":"2018-03-12 13:56:45.000000000","message":"let\u0027s rename this with a verb rather than a noun... maybe generate_metadata or generate_snapshot_metadata","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        image_api.update(context, image_id, metadata, stream)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def snapshot_metadata(context, image_api, image_id, instance):"},{"line_number":40,"context_line":"    \"\"\"Generate a metadata dictionary for an instance snapshot."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    :param context: Nova security context."}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_7fd115fb","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":21},"in_reply_to":"df7087c5_69f69a92","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        image_api.update(context, image_id, metadata, stream)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def generate_snapshot_metadata(context, image_api, image_id, instance):"},{"line_number":40,"context_line":"    \"\"\"Generate a metadata dictionary for an instance snapshot."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    :param context: Nova security context."}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_1ddd12df","line":39,"updated":"2018-05-15 20:48:10.000000000","message":"OK I guess this is similar to the libvirt driver:\n\nhttps://github.com/openstack/nova/blob/2fd7ae67a242f065e22373ee38719f7152cfcaff/nova/virt/libvirt/driver.py#L1734","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    :param image_api: Handle to the glance image API."},{"line_number":44,"context_line":"    :param image_id: UUID of the prepared glance image."},{"line_number":45,"context_line":"    :param instance: The Nova instance whose disk is to be snapshotted."},{"line_number":46,"context_line":"    :return: A dict of metadata suitable for image_api.upload."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":"    image \u003d image_api.get(context, image_id)"},{"line_number":49,"context_line":"    metadata \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_9df2826f","line":46,"range":{"start_line":46,"start_character":55,"end_line":46,"end_character":61},"updated":"2018-05-15 20:48:10.000000000","message":"update","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    image \u003d image_api.get(context, image_id)"},{"line_number":49,"context_line":"    metadata \u003d {"},{"line_number":50,"context_line":"        \u0027name\u0027: image[\u0027name\u0027],"},{"line_number":51,"context_line":"        \u0027is_public\u0027: False,"},{"line_number":52,"context_line":"        \u0027status\u0027: \u0027active\u0027,"},{"line_number":53,"context_line":"        \u0027disk_format\u0027: \u0027raw\u0027,"},{"line_number":54,"context_line":"        \u0027container_format\u0027: \u0027bare\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_dd7ebaad","line":51,"updated":"2018-05-15 20:48:10.000000000","message":"This will get changed to visibility\u003d\u0027private\u0027:\n\nhttps://github.com/openstack/nova/blob/2fd7ae67a242f065e22373ee38719f7152cfcaff/nova/image/glance.py#L707","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    metadata \u003d {"},{"line_number":50,"context_line":"        \u0027name\u0027: image[\u0027name\u0027],"},{"line_number":51,"context_line":"        \u0027is_public\u0027: False,"},{"line_number":52,"context_line":"        \u0027status\u0027: \u0027active\u0027,"},{"line_number":53,"context_line":"        \u0027disk_format\u0027: \u0027raw\u0027,"},{"line_number":54,"context_line":"        \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":55,"context_line":"        \u0027properties\u0027: {"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_fd8b76bc","line":52,"updated":"2018-05-15 20:48:10.000000000","message":"Apparently this will get stripped out on update():\n\nhttps://github.com/openstack/nova/blob/2fd7ae67a242f065e22373ee38719f7152cfcaff/nova/image/glance.py#L845","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        \u0027status\u0027: \u0027active\u0027,"},{"line_number":53,"context_line":"        \u0027disk_format\u0027: \u0027raw\u0027,"},{"line_number":54,"context_line":"        \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":55,"context_line":"        \u0027properties\u0027: {"},{"line_number":56,"context_line":"            \u0027image_location\u0027: \u0027snapshot\u0027,"},{"line_number":57,"context_line":"            \u0027image_state\u0027: \u0027available\u0027,"},{"line_number":58,"context_line":"            \u0027owner_id\u0027: instance.project_id,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_9d65a220","line":55,"updated":"2018-05-15 20:48:10.000000000","message":"This is the glance v1 format, but luckily our glance image API client code has a translation routine:\n\nhttps://github.com/openstack/nova/blob/2fd7ae67a242f065e22373ee38719f7152cfcaff/nova/image/glance.py#L686\n\nOver time we should probably get rid of our reliance on that from the drivers though.","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"}],"nova/virt/powervm/mgmt.py":[{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"f88076a49675591e9791445aebce28277086ac44","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    return _MP_UUID"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def _tee_as_root(fpath, payload):"},{"line_number":50,"context_line":"    \"\"\"Executes \u0027echo $payload | sudo tee -a $fpath\u0027."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    :param fpath: The file system path to which to tee."},{"line_number":53,"context_line":"    :param payload: The string to pipe to the file."},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":"    utils.execute(\u0027tee\u0027, \u0027-a\u0027, fpath, process_input\u003dpayload, run_as_root\u003dTrue)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def discover_vscsi_disk(mapping, scan_timeout\u003d300):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_96655c48","line":55,"range":{"start_line":49,"start_character":0,"end_line":55,"end_character":78},"updated":"2018-02-14 18:06:16.000000000","message":"Remove","commit_id":"dcc81c41ccd24907d8a442b5e8cad01e9d844332"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5b02a325fc2ba824df7f5b255a31633ff619cb50","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    return _MP_UUID"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def _tee_as_root(fpath, payload):"},{"line_number":50,"context_line":"    \"\"\"Executes \u0027echo $payload | sudo tee -a $fpath\u0027."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    :param fpath: The file system path to which to tee."},{"line_number":53,"context_line":"    :param payload: The string to pipe to the file."},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":"    utils.execute(\u0027tee\u0027, \u0027-a\u0027, fpath, process_input\u003dpayload, run_as_root\u003dTrue)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def discover_vscsi_disk(mapping, scan_timeout\u003d300):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_99926c4b","line":55,"range":{"start_line":49,"start_character":0,"end_line":55,"end_character":78},"in_reply_to":"3fa0c359_96655c48","updated":"2018-02-14 20:26:13.000000000","message":"Done","commit_id":"dcc81c41ccd24907d8a442b5e8cad01e9d844332"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"f88076a49675591e9791445aebce28277086ac44","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    for scanpath in glob.glob("},{"line_number":95,"context_line":"            \u0027/sys/bus/vio/devices/%x/host*/scsi_host/host*/scan\u0027 % lslot):"},{"line_number":96,"context_line":"        # echo \u0027- - -\u0027 | sudo tee -a /path/to/scan"},{"line_number":97,"context_line":"        _tee_as_root(scanpath, \u0027- - -\u0027)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    # Now see if our device showed up. If so, we can reliably match it based"},{"line_number":100,"context_line":"    # on its Linux ID, which ends with the disk\u0027s UDID."}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_f653806b","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":39},"updated":"2018-02-14 18:06:16.000000000","message":"replace with privsep","commit_id":"dcc81c41ccd24907d8a442b5e8cad01e9d844332"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5b02a325fc2ba824df7f5b255a31633ff619cb50","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    for scanpath in glob.glob("},{"line_number":95,"context_line":"            \u0027/sys/bus/vio/devices/%x/host*/scsi_host/host*/scan\u0027 % lslot):"},{"line_number":96,"context_line":"        # echo \u0027- - -\u0027 | sudo tee -a /path/to/scan"},{"line_number":97,"context_line":"        _tee_as_root(scanpath, \u0027- - -\u0027)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    # Now see if our device showed up. If so, we can reliably match it based"},{"line_number":100,"context_line":"    # on its Linux ID, which ends with the disk\u0027s UDID."}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_798d2029","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":39},"in_reply_to":"3fa0c359_f653806b","updated":"2018-02-14 20:26:13.000000000","message":"Done","commit_id":"dcc81c41ccd24907d8a442b5e8cad01e9d844332"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"f88076a49675591e9791445aebce28277086ac44","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    LOG.debug(\"Deleting block device %(devpath)s from the management \""},{"line_number":159,"context_line":"              \"partition via special file %(delpath)s.\","},{"line_number":160,"context_line":"              {\u0027devpath\u0027: devpath, \u0027delpath\u0027: delpath})"},{"line_number":161,"context_line":"    _tee_as_root(delpath, \u00271\u0027)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    # The bus scan is asynchronous. Need to poll, waiting for the device to"},{"line_number":164,"context_line":"    # disappear. Stop when stat raises OSError (dev file not found) - which is"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_16514c63","line":161,"range":{"start_line":161,"start_character":4,"end_line":161,"end_character":30},"updated":"2018-02-14 18:06:16.000000000","message":"replace with privsep","commit_id":"dcc81c41ccd24907d8a442b5e8cad01e9d844332"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5b02a325fc2ba824df7f5b255a31633ff619cb50","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    LOG.debug(\"Deleting block device %(devpath)s from the management \""},{"line_number":159,"context_line":"              \"partition via special file %(delpath)s.\","},{"line_number":160,"context_line":"              {\u0027devpath\u0027: devpath, \u0027delpath\u0027: delpath})"},{"line_number":161,"context_line":"    _tee_as_root(delpath, \u00271\u0027)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    # The bus scan is asynchronous. Need to poll, waiting for the device to"},{"line_number":164,"context_line":"    # disappear. Stop when stat raises OSError (dev file not found) - which is"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_b975e834","line":161,"range":{"start_line":161,"start_character":4,"end_line":161,"end_character":30},"in_reply_to":"3fa0c359_16514c63","updated":"2018-02-14 20:26:13.000000000","message":"Done","commit_id":"dcc81c41ccd24907d8a442b5e8cad01e9d844332"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"The PowerVM Nova Compute service runs on the management partition."},{"line_number":23,"context_line":"\"\"\""},{"line_number":24,"context_line":"import glob"},{"line_number":25,"context_line":"from nova import exception"},{"line_number":26,"context_line":"from nova.privsep import path as priv_path"},{"line_number":27,"context_line":"import os"},{"line_number":28,"context_line":"from os import path"},{"line_number":29,"context_line":"from oslo_concurrency import lockutils"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_d55e2611","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":42},"updated":"2018-03-12 13:56:45.000000000","message":"nova imports should be after all others (and a blank line) since this code is going into nova.","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":22,"context_line":"The PowerVM Nova Compute service runs on the management partition."},{"line_number":23,"context_line":"\"\"\""},{"line_number":24,"context_line":"import glob"},{"line_number":25,"context_line":"from nova import exception"},{"line_number":26,"context_line":"from nova.privsep import path as priv_path"},{"line_number":27,"context_line":"import os"},{"line_number":28,"context_line":"from os import path"},{"line_number":29,"context_line":"from oslo_concurrency import lockutils"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_1fed7924","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":42},"in_reply_to":"df7087c5_d55e2611","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    :raise UniqueDiskDiscoveryException: If more than one disk appears with the"},{"line_number":70,"context_line":"                                         expected UDID."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    # TODO(IBM): Support for other host platforms."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    # Calculate the Linux slot number from the client adapter slot number."},{"line_number":75,"context_line":"    lslot \u003d 0x30000000 | mapping.client_adapter.lpar_slot_num"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_2b1e0370","line":72,"updated":"2018-03-12 13:56:45.000000000","message":"The NovaLink management partition is always Linux, so what do we mean by \"other host platforms\"?","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    :raise UniqueDiskDiscoveryException: If more than one disk appears with the"},{"line_number":70,"context_line":"                                         expected UDID."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    # TODO(IBM): Support for other host platforms."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    # Calculate the Linux slot number from the client adapter slot number."},{"line_number":75,"context_line":"    lslot \u003d 0x30000000 | mapping.client_adapter.lpar_slot_num"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_83cccb61","line":72,"in_reply_to":"df7087c5_2b1e0370","updated":"2018-03-12 21:34:39.000000000","message":"Not sure, this comment just got pulled over from OOT. Removed","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"1fc30cee03a7c58e6303b3e890dcc5372d3f6783","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from nova import exception"},{"line_number":34,"context_line":"from nova.privsep import path as priv_path"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"_MP_UUID \u003d None"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_15ed318a","line":35,"updated":"2018-03-29 17:36:55.000000000","message":"nit: lost a blank line here","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3a052ecafbf4b2acf7d2d97f3f1964b480e0fc94","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from nova import exception"},{"line_number":34,"context_line":"from nova.privsep import path as priv_path"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"_MP_UUID \u003d None"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_76d337d6","line":35,"in_reply_to":"bf659307_15ed318a","updated":"2018-03-31 21:03:24.000000000","message":"Done","commit_id":"6e95981719348c33c124ed6debb7eddfe44f5bd2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from oslo_concurrency import lockutils"},{"line_number":29,"context_line":"from oslo_log import log as logging"},{"line_number":30,"context_line":"from pypowervm.tasks import partition as pvm_par"},{"line_number":31,"context_line":"import retrying"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from nova import exception"},{"line_number":34,"context_line":"from nova.privsep import path as priv_path"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_1d2752cc","line":31,"updated":"2018-05-15 20:48:10.000000000","message":"We don\u0027t have this in our requirements.txt:\n\nhttps://github.com/openstack/nova/blob/2fd7ae67a242f065e22373ee38719f7152cfcaff/requirements.txt\n\nI guess this was already violated by existing code so I don\u0027t really want to block on it, we can handle it separately:\n\nhttps://github.com/openstack/nova/blob/2fd7ae67a242f065e22373ee38719f7152cfcaff/nova/virt/powervm/media.py#L29","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"12c8c860d70cdb8ad63c34fac77dd2f91c1e515a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from oslo_concurrency import lockutils"},{"line_number":29,"context_line":"from oslo_log import log as logging"},{"line_number":30,"context_line":"from pypowervm.tasks import partition as pvm_par"},{"line_number":31,"context_line":"import retrying"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from nova import exception"},{"line_number":34,"context_line":"from nova.privsep import path as priv_path"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_b067654d","line":31,"in_reply_to":"5f7c97a3_1d2752cc","updated":"2018-05-15 20:51:40.000000000","message":"https://review.openstack.org/#/c/568692/","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    # The bus scan is asynchronous.  Need to poll, waiting for the device to"},{"line_number":95,"context_line":"    # spring into existence. Stop when glob finds at least one device, or"},{"line_number":96,"context_line":"    # after the specified timeout.  Sleep 1/4 second between polls."},{"line_number":97,"context_line":"    @retrying.retry(retry_on_result\u003dlambda result: not result, wait_fixed\u003d250,"},{"line_number":98,"context_line":"                    stop_max_delay\u003dscan_timeout * 1000)"},{"line_number":99,"context_line":"    def _poll_for_dev(globpat):"},{"line_number":100,"context_line":"        return glob.glob(globpat)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_700a2d20","line":97,"updated":"2018-05-15 20:48:10.000000000","message":"We could have also used RetryDecorator from oslo.service:\n\nhttps://github.com/openstack/oslo.service/blob/master/oslo_service/loopingcall.py#L401","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"}],"nova/virt/powervm/tasks/image.py":[{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \"\"\"Task around streaming a block device to glance.\"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __init__(self, context, image_api, image_id, instance):"},{"line_number":57,"context_line":"        \"\"\"Initialize the flow for streaming a block device to glance."},{"line_number":58,"context_line":"        Requires: disk_path: path to the block device file for the instance\u0027s"},{"line_number":59,"context_line":"                             boot disk."},{"line_number":60,"context_line":"        :param context: Nova security context."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_9620329d","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":70},"updated":"2018-02-13 01:07:24.000000000","message":"Blank Line","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \"\"\"Task around streaming a block device to glance.\"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __init__(self, context, image_api, image_id, instance):"},{"line_number":57,"context_line":"        \"\"\"Initialize the flow for streaming a block device to glance."},{"line_number":58,"context_line":"        Requires: disk_path: path to the block device file for the instance\u0027s"},{"line_number":59,"context_line":"                             boot disk."},{"line_number":60,"context_line":"        :param context: Nova security context."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_8f4fa269","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":70},"in_reply_to":"3fa0c359_9620329d","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.image_api \u003d image_api"},{"line_number":67,"context_line":"        self.image_id \u003d image_id"},{"line_number":68,"context_line":"        self.instance \u003d instance"},{"line_number":69,"context_line":"        super(StreamToGlance, self).__init__(\u0027stream_to_glance\u0027,"},{"line_number":70,"context_line":"                                             requires\u003d\u0027disk_path\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def execute(self, disk_path):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_563e2ac1","line":69,"range":{"start_line":69,"start_character":45,"end_line":69,"end_character":63},"updated":"2018-02-13 01:07:24.000000000","message":"Use name kwarg","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.image_api \u003d image_api"},{"line_number":67,"context_line":"        self.image_id \u003d image_id"},{"line_number":68,"context_line":"        self.instance \u003d instance"},{"line_number":69,"context_line":"        super(StreamToGlance, self).__init__(\u0027stream_to_glance\u0027,"},{"line_number":70,"context_line":"                                             requires\u003d\u0027disk_path\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def execute(self, disk_path):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_cf484a5d","line":69,"range":{"start_line":69,"start_character":45,"end_line":69,"end_character":63},"in_reply_to":"3fa0c359_563e2ac1","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def __init__(self, context, image_api, image_id, instance):"},{"line_number":57,"context_line":"        \"\"\"Initialize the flow for streaming a block device to glance."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        Requires: disk_path: Path to the block device file for the instance\u0027s"},{"line_number":60,"context_line":"                             boot disk."},{"line_number":61,"context_line":"        :param context: Nova security context."},{"line_number":62,"context_line":"        :param image_api: Handle to the glance API."}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_f04ddd3a","line":59,"updated":"2018-05-15 20:48:10.000000000","message":"OK and this comes from here:\n\nhttps://review.openstack.org/#/c/543023/20/nova/virt/powervm/tasks/storage.py@238","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"}],"nova/virt/powervm/tasks/storage.py":[{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        :param instance: The nova instance whose boot disk is to be connected."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        super(InstanceDiskToMgmt, self).__init__("},{"line_number":234,"context_line":"            \u0027connect_and_discover_instance_disk_to_mgmt\u0027,"},{"line_number":235,"context_line":"            provides\u003d[\u0027stg_elem\u0027, \u0027vios_wrap\u0027, \u0027disk_path\u0027])"},{"line_number":236,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":237,"context_line":"        self.instance \u003d instance"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_7667a6ea","line":234,"range":{"start_line":234,"start_character":12,"end_line":234,"end_character":56},"updated":"2018-02-13 01:07:24.000000000","message":"Use name kwarg","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        :param instance: The nova instance whose boot disk is to be connected."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        super(InstanceDiskToMgmt, self).__init__("},{"line_number":234,"context_line":"            \u0027connect_and_discover_instance_disk_to_mgmt\u0027,"},{"line_number":235,"context_line":"            provides\u003d[\u0027stg_elem\u0027, \u0027vios_wrap\u0027, \u0027disk_path\u0027])"},{"line_number":236,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":237,"context_line":"        self.instance \u003d instance"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_2f920e58","line":234,"range":{"start_line":234,"start_character":12,"end_line":234,"end_character":56},"in_reply_to":"3fa0c359_7667a6ea","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        return self.stg_elem, self.vios_wrap, self.disk_path"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def revert(self, result, flow_failures):"},{"line_number":273,"context_line":"        \"\"\"Unmap the disk and then remove it from the management partition."},{"line_number":274,"context_line":"        We use this order to avoid rediscovering the device in case some other"},{"line_number":275,"context_line":"        thread scans the SCSI bus between when we remove and when we unmap."},{"line_number":276,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_1662e2d8","line":273,"range":{"start_line":273,"start_character":8,"end_line":273,"end_character":75},"updated":"2018-02-13 01:07:24.000000000","message":"Blank line","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        return self.stg_elem, self.vios_wrap, self.disk_path"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def revert(self, result, flow_failures):"},{"line_number":273,"context_line":"        \"\"\"Unmap the disk and then remove it from the management partition."},{"line_number":274,"context_line":"        We use this order to avoid rediscovering the device in case some other"},{"line_number":275,"context_line":"        thread scans the SCSI bus between when we remove and when we unmap."},{"line_number":276,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_ef974644","line":273,"range":{"start_line":273,"start_character":8,"end_line":273,"end_character":75},"in_reply_to":"3fa0c359_1662e2d8","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    \"\"\"Unmap and remove an instance\u0027s boot disk from the mgmt partition.\"\"\""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def __init__(self, disk_dvr, instance):"},{"line_number":300,"context_line":"        \"\"\"Unmap and remove an instance\u0027s boot disk from the mgmt partition."},{"line_number":301,"context_line":"        Requires (from InstanceDiskToMgmt):"},{"line_number":302,"context_line":"        stg_elem: The storage element wrapper (pypowervm LU, PV, etc.) that was"},{"line_number":303,"context_line":"                  connected."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_365d9e14","line":300,"range":{"start_line":300,"start_character":8,"end_line":300,"end_character":76},"updated":"2018-02-13 01:07:24.000000000","message":"Blank line","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    \"\"\"Unmap and remove an instance\u0027s boot disk from the mgmt partition.\"\"\""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def __init__(self, disk_dvr, instance):"},{"line_number":300,"context_line":"        \"\"\"Unmap and remove an instance\u0027s boot disk from the mgmt partition."},{"line_number":301,"context_line":"        Requires (from InstanceDiskToMgmt):"},{"line_number":302,"context_line":"        stg_elem: The storage element wrapper (pypowervm LU, PV, etc.) that was"},{"line_number":303,"context_line":"                  connected."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_8f8c8236","line":300,"range":{"start_line":300,"start_character":8,"end_line":300,"end_character":76},"in_reply_to":"3fa0c359_365d9e14","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"89cb3835228b4ee4840ccead5b9af4c59e088fe5","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":313,"context_line":"        self.instance \u003d instance"},{"line_number":314,"context_line":"        super(RemoveInstanceDiskFromMgmt, self).__init__("},{"line_number":315,"context_line":"            \u0027remove_inst_disk_from_mgmt\u0027,"},{"line_number":316,"context_line":"            requires\u003d[\u0027stg_elem\u0027, \u0027vios_wrap\u0027, \u0027disk_path\u0027])"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def execute(self, stg_elem, vios_wrap, disk_path):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_f6a096f6","line":315,"range":{"start_line":315,"start_character":12,"end_line":315,"end_character":40},"updated":"2018-02-13 01:07:24.000000000","message":"name kwarg","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d40b0561f00ca58126ede5ed4f2ab0959d816079","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":313,"context_line":"        self.instance \u003d instance"},{"line_number":314,"context_line":"        super(RemoveInstanceDiskFromMgmt, self).__init__("},{"line_number":315,"context_line":"            \u0027remove_inst_disk_from_mgmt\u0027,"},{"line_number":316,"context_line":"            requires\u003d[\u0027stg_elem\u0027, \u0027vios_wrap\u0027, \u0027disk_path\u0027])"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def execute(self, stg_elem, vios_wrap, disk_path):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_6f857606","line":315,"range":{"start_line":315,"start_character":12,"end_line":315,"end_character":40},"in_reply_to":"3fa0c359_f6a096f6","updated":"2018-02-13 23:42:32.000000000","message":"Done","commit_id":"7f76a76e48c15adc2c3b5d16f6740a898f6378e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"c4bd947e80c4038d37ba90a337469fd262030811","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        \"\"\"Map the instance\u0027s boot disk and discover it.\"\"\""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        # Search for boot disk on the Novalink partition"},{"line_number":246,"context_line":"        if self.disk_dvr.mp_uuid in self.disk_dvr.vios_uuids:"},{"line_number":247,"context_line":"            dev_name \u003d self.disk_dvr.boot_disk_path_for_instance("},{"line_number":248,"context_line":"                self.instance, self.disk_dvr.mp_uuid)"},{"line_number":249,"context_line":"            if dev_name is not None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_36448874","line":246,"range":{"start_line":246,"start_character":50,"end_line":246,"end_character":60},"updated":"2018-02-14 18:14:46.000000000","message":"_vios_uuids","commit_id":"dcc81c41ccd24907d8a442b5e8cad01e9d844332"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5b02a325fc2ba824df7f5b255a31633ff619cb50","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        \"\"\"Map the instance\u0027s boot disk and discover it.\"\"\""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        # Search for boot disk on the Novalink partition"},{"line_number":246,"context_line":"        if self.disk_dvr.mp_uuid in self.disk_dvr.vios_uuids:"},{"line_number":247,"context_line":"            dev_name \u003d self.disk_dvr.boot_disk_path_for_instance("},{"line_number":248,"context_line":"                self.instance, self.disk_dvr.mp_uuid)"},{"line_number":249,"context_line":"            if dev_name is not None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_3997983d","line":246,"range":{"start_line":246,"start_character":50,"end_line":246,"end_character":60},"in_reply_to":"3fa0c359_36448874","updated":"2018-02-14 20:26:13.000000000","message":"Done","commit_id":"dcc81c41ccd24907d8a442b5e8cad01e9d844332"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from taskflow import task"},{"line_number":19,"context_line":"from taskflow.types import failure as task_fail"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova import exception as exc"},{"line_number":22,"context_line":"from nova.virt.powervm import media"},{"line_number":23,"context_line":"from nova.virt.powervm import mgmt"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_8e287de2","line":21,"updated":"2018-03-12 13:56:45.000000000","message":"nit: don\u0027t really need to \"as exc\" here, and most places don\u0027t.","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from taskflow import task"},{"line_number":19,"context_line":"from taskflow.types import failure as task_fail"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova import exception as exc"},{"line_number":22,"context_line":"from nova.virt.powervm import media"},{"line_number":23,"context_line":"from nova.virt.powervm import mgmt"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_ffff65fe","line":21,"in_reply_to":"df7087c5_8e287de2","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class InstanceDiskToMgmt(task.Task):"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    \"\"\"Connect an instance\u0027s disk to the management partition and discover it."},{"line_number":216,"context_line":"    We do these two pieces together because their reversion happens in the same"},{"line_number":217,"context_line":"    order."},{"line_number":218,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_49039643","line":215,"updated":"2018-03-12 13:56:45.000000000","message":"Let\u0027s continue to follow the pattern of \"The task to ...\", and to make it still fit on one line you may want to not mention discover until the next sentence.","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class InstanceDiskToMgmt(task.Task):"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    \"\"\"Connect an instance\u0027s disk to the management partition and discover it."},{"line_number":216,"context_line":"    We do these two pieces together because their reversion happens in the same"},{"line_number":217,"context_line":"    order."},{"line_number":218,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_6572e413","line":215,"in_reply_to":"df7087c5_49039643","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":213,"context_line":"class InstanceDiskToMgmt(task.Task):"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    \"\"\"Connect an instance\u0027s disk to the management partition and discover it."},{"line_number":216,"context_line":"    We do these two pieces together because their reversion happens in the same"},{"line_number":217,"context_line":"    order."},{"line_number":218,"context_line":"    \"\"\""},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_899e8e05","line":216,"updated":"2018-03-12 13:56:45.000000000","message":"put a blank line before this. The first sentence of a docstring should stand on its own.","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":213,"context_line":"class InstanceDiskToMgmt(task.Task):"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    \"\"\"Connect an instance\u0027s disk to the management partition and discover it."},{"line_number":216,"context_line":"    We do these two pieces together because their reversion happens in the same"},{"line_number":217,"context_line":"    order."},{"line_number":218,"context_line":"    \"\"\""},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_052c4800","line":216,"in_reply_to":"df7087c5_899e8e05","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                   element was mapped."},{"line_number":228,"context_line":"        disk_path: The local path to the mapped-and-discovered device, e.g."},{"line_number":229,"context_line":"                   \u0027/dev/sde\u0027."},{"line_number":230,"context_line":"        :param disk_dvr: The disk driver."},{"line_number":231,"context_line":"        :param instance: The nova instance whose boot disk is to be connected."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        super(InstanceDiskToMgmt, self).__init__("}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_09ab5e1d","line":230,"updated":"2018-03-12 13:56:45.000000000","message":"lets add another blank line separating :params from what this provides","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                   element was mapped."},{"line_number":228,"context_line":"        disk_path: The local path to the mapped-and-discovered device, e.g."},{"line_number":229,"context_line":"                   \u0027/dev/sde\u0027."},{"line_number":230,"context_line":"        :param disk_dvr: The disk driver."},{"line_number":231,"context_line":"        :param instance: The nova instance whose boot disk is to be connected."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        super(InstanceDiskToMgmt, self).__init__("}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_7f411539","line":230,"in_reply_to":"df7087c5_09ab5e1d","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        :param instance: The nova instance whose boot disk is to be connected."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        super(InstanceDiskToMgmt, self).__init__("},{"line_number":234,"context_line":"            name\u003d\u0027connect_and_discover_instance_disk_to_mgmt\u0027,"},{"line_number":235,"context_line":"            provides\u003d[\u0027stg_elem\u0027, \u0027vios_wrap\u0027, \u0027disk_path\u0027])"},{"line_number":236,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":237,"context_line":"        self.instance \u003d instance"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_2956622b","line":234,"updated":"2018-03-12 13:56:45.000000000","message":"this is really long... maybe just instance_disk_to_mgmt, more like the class name?","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        :param instance: The nova instance whose boot disk is to be connected."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        super(InstanceDiskToMgmt, self).__init__("},{"line_number":234,"context_line":"            name\u003d\u0027connect_and_discover_instance_disk_to_mgmt\u0027,"},{"line_number":235,"context_line":"            provides\u003d[\u0027stg_elem\u0027, \u0027vios_wrap\u0027, \u0027disk_path\u0027])"},{"line_number":236,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":237,"context_line":"        self.instance \u003d instance"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_bf700da7","line":234,"in_reply_to":"df7087c5_2956622b","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"3df9ab758ed9e707f9086ccd3c763784ff67297f","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    def execute(self):"},{"line_number":243,"context_line":"        \"\"\"Map the instance\u0027s boot disk and discover it.\"\"\""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        # Search for boot disk on the Novalink partition."},{"line_number":246,"context_line":"        if self.disk_dvr.mp_uuid in self.disk_dvr._vios_uuids:"},{"line_number":247,"context_line":"            dev_name \u003d self.disk_dvr.boot_disk_path_for_instance("},{"line_number":248,"context_line":"                self.instance, self.disk_dvr.mp_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_04fd8539","line":245,"range":{"start_line":245,"start_character":38,"end_line":245,"end_character":46},"updated":"2018-03-12 13:56:45.000000000","message":"nit: NovaLink","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"92c775a8a322a0ab4e9952a60c0cc0273e9dab45","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    def execute(self):"},{"line_number":243,"context_line":"        \"\"\"Map the instance\u0027s boot disk and discover it.\"\"\""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        # Search for boot disk on the Novalink partition."},{"line_number":246,"context_line":"        if self.disk_dvr.mp_uuid in self.disk_dvr._vios_uuids:"},{"line_number":247,"context_line":"            dev_name \u003d self.disk_dvr.boot_disk_path_for_instance("},{"line_number":248,"context_line":"                self.instance, self.disk_dvr.mp_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_ff9be5c5","line":245,"range":{"start_line":245,"start_character":38,"end_line":245,"end_character":46},"in_reply_to":"df7087c5_04fd8539","updated":"2018-03-12 21:34:39.000000000","message":"Done","commit_id":"b8eaa57363a6b0c9afe0f96b699a1503a70c5ad4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0012a1175fcdb4404a15a805374ec1a0c064bccb","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            return"},{"line_number":294,"context_line":"        LOG.warning(\"Removing disk %(dpath)s from the management partition.\","},{"line_number":295,"context_line":"                    {\u0027dpath\u0027: self.disk_path}, instance\u003dself.instance)"},{"line_number":296,"context_line":"        mgmt.remove_block_dev(self.disk_path)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"class RemoveInstanceDiskFromMgmt(task.Task):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_8e9a866c","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":45},"updated":"2018-03-23 15:28:05.000000000","message":"This should trap \u0026 log/ignore exceptions (since we\u0027re in a revert flow).","commit_id":"8439b261da3e3a1836298e6eab9622188fa72db7"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"bc119ca500dd50f1784c1d42d24830806a85a0f0","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            return"},{"line_number":294,"context_line":"        LOG.warning(\"Removing disk %(dpath)s from the management partition.\","},{"line_number":295,"context_line":"                    {\u0027dpath\u0027: self.disk_path}, instance\u003dself.instance)"},{"line_number":296,"context_line":"        mgmt.remove_block_dev(self.disk_path)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"class RemoveInstanceDiskFromMgmt(task.Task):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_918dcb7d","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":45},"in_reply_to":"df7087c5_8e9a866c","updated":"2018-03-23 15:59:55.000000000","message":"Done","commit_id":"8439b261da3e3a1836298e6eab9622188fa72db7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"281b2655f04285ad9dd6036059d022994f40bf4b","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class InstanceDiskToMgmt(task.Task):"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    \"\"\"The task to connect an instance\u0027s disk to the management partition.\""},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    This task will connect the instance\u0027s disk to the management partition and"},{"line_number":218,"context_line":"    discover it. We do these two pieces together because their reversion"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_f0b15d45","line":215,"range":{"start_line":215,"start_character":74,"end_line":215,"end_character":75},"updated":"2018-05-15 20:48:10.000000000","message":"nix","commit_id":"3bb59e393f51eeef7299e331a033bd9385867e31"}]}
