)]}'
{"nova/conf/powervm.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"055b7b1e782ef9584f3f58bfbab1f8b8882bd3ef","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\"\"\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"ssp_opts \u003d ["},{"line_number":27,"context_line":"    cfg.StrOpt(\u0027cluster_name\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":29,"context_line":"               help\u003d\u0027Cluster hosting the Shared Storage Pool to use for \u0027"},{"line_number":30,"context_line":"                    \u0027storage operations.  If none specified, the host is \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_8f5e7e10","line":27,"updated":"2017-03-08 16:30:22.000000000","message":"ssp_cluster_name?\n\nWonder if a simplifying effort we could add this option in a subsequent one?","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"86ff760dd10ab5f94a0008032168b4f4ce03ad6d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\"\"\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"ssp_opts \u003d ["},{"line_number":27,"context_line":"    cfg.StrOpt(\u0027cluster_name\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":29,"context_line":"               help\u003d\u0027Cluster hosting the Shared Storage Pool to use for \u0027"},{"line_number":30,"context_line":"                    \u0027storage operations.  If none specified, the host is \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_eba44da7","line":27,"in_reply_to":"9a30ddce_8f5e7e10","updated":"2017-03-08 16:56:25.000000000","message":"Considered it.  It would mean that we don\u0027t support a dual-VIOS environment where each VIOS is in a separate cluster.  I would think that should be fairly rare.  Willing to live with that limitation?","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"09dbcda2d3ce739e2ddc3d7e5f5552a0f72ce7ab","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\"\"\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"ssp_opts \u003d ["},{"line_number":27,"context_line":"    cfg.StrOpt(\u0027cluster_name\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":29,"context_line":"               help\u003d\u0027Cluster hosting the Shared Storage Pool to use for \u0027"},{"line_number":30,"context_line":"                    \u0027storage operations.  If none specified, the host is \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_68893626","line":27,"in_reply_to":"9a30ddce_eba44da7","updated":"2017-03-08 23:16:43.000000000","message":"Done on the rename.","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"}],"nova/virt/powervm/disk/ssp.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"055b7b1e782ef9584f3f58bfbab1f8b8882bd3ef","unresolved":false,"context_lines":[{"line_number":174,"context_line":"            image_meta.size, upload_type\u003dtsk_stg.UploadType.FUNC)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        boot_lu_name \u003d disk.get_disk_name(image_type, instance)"},{"line_number":177,"context_line":"        LOG.info(_LI(\u0027SSP: Disk name is %s\u0027), boot_lu_name)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        return tsk_stg.crt_lu(self._tier, boot_lu_name, disk_size_gb,"},{"line_number":180,"context_line":"                              typ\u003dpvm_stg.LUType.DISK, clone\u003dimage_lu)[1]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_54089b2d","line":177,"updated":"2017-03-08 16:30:22.000000000","message":"The standard \u0027instance\u003dinstance\u0027","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"09dbcda2d3ce739e2ddc3d7e5f5552a0f72ce7ab","unresolved":false,"context_lines":[{"line_number":174,"context_line":"            image_meta.size, upload_type\u003dtsk_stg.UploadType.FUNC)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        boot_lu_name \u003d disk.get_disk_name(image_type, instance)"},{"line_number":177,"context_line":"        LOG.info(_LI(\u0027SSP: Disk name is %s\u0027), boot_lu_name)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        return tsk_stg.crt_lu(self._tier, boot_lu_name, disk_size_gb,"},{"line_number":180,"context_line":"                              typ\u003dpvm_stg.LUType.DISK, clone\u003dimage_lu)[1]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_88be6ad2","line":177,"in_reply_to":"9a30ddce_54089b2d","updated":"2017-03-08 23:16:43.000000000","message":"Done","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"055b7b1e782ef9584f3f58bfbab1f8b8882bd3ef","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        def add_func(vios_w):"},{"line_number":199,"context_line":"            LOG.info(_LI(\"Adding SSP disk connection between VM %(vm)s and \""},{"line_number":200,"context_line":"                         \"VIOS %(vios)s.\"),"},{"line_number":201,"context_line":"                     {\u0027vm\u0027: instance.name, \u0027vios\u0027: vios_w.name})"},{"line_number":202,"context_line":"            mapping \u003d tsk_map.build_vscsi_mapping("},{"line_number":203,"context_line":"                self.host_uuid, vios_w, lpar_uuid, lu)"},{"line_number":204,"context_line":"            return tsk_map.add_map(vios_w, mapping)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_2f14b242","line":201,"updated":"2017-03-08 16:30:22.000000000","message":"instance thing...","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"09dbcda2d3ce739e2ddc3d7e5f5552a0f72ce7ab","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        def add_func(vios_w):"},{"line_number":199,"context_line":"            LOG.info(_LI(\"Adding SSP disk connection between VM %(vm)s and \""},{"line_number":200,"context_line":"                         \"VIOS %(vios)s.\"),"},{"line_number":201,"context_line":"                     {\u0027vm\u0027: instance.name, \u0027vios\u0027: vios_w.name})"},{"line_number":202,"context_line":"            mapping \u003d tsk_map.build_vscsi_mapping("},{"line_number":203,"context_line":"                self.host_uuid, vios_w, lpar_uuid, lu)"},{"line_number":204,"context_line":"            return tsk_map.add_map(vios_w, mapping)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_a8b5eeee","line":201,"in_reply_to":"9a30ddce_2f14b242","updated":"2017-03-08 23:16:43.000000000","message":"Done","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"0faa6f5d9c933b1e034cbacb1ab8f001c65bb815","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        def rm_func(vwrap):"},{"line_number":104,"context_line":"            LOG.info(_LI(\"Removing SSP disk connection between VM %(vm)s and \""},{"line_number":105,"context_line":"                         \"VIOS %(vios)s.\"),"},{"line_number":106,"context_line":"                     {\u0027vm\u0027: instance.name, \u0027vios\u0027: vwrap.name},"},{"line_number":107,"context_line":"                     instance\u003dinstance)"},{"line_number":108,"context_line":"            return tsk_map.remove_maps(vwrap, lpar_uuid,"},{"line_number":109,"context_line":"                                       match_func\u003dmatch_func)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_0b9a18b9","line":106,"range":{"start_line":106,"start_character":22,"end_line":106,"end_character":41},"updated":"2017-03-10 19:15:31.000000000","message":"I\u0027ve been advocating taking these out now...\n\n\"Detaching SSP disk from instance on VIOS %(vios)s\", instance\u003dinstance\n\nSame info.","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5b6e702c4286cfd0b40f563fcdba37c07a36bb26","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        def rm_func(vwrap):"},{"line_number":104,"context_line":"            LOG.info(_LI(\"Removing SSP disk connection between VM %(vm)s and \""},{"line_number":105,"context_line":"                         \"VIOS %(vios)s.\"),"},{"line_number":106,"context_line":"                     {\u0027vm\u0027: instance.name, \u0027vios\u0027: vwrap.name},"},{"line_number":107,"context_line":"                     instance\u003dinstance)"},{"line_number":108,"context_line":"            return tsk_map.remove_maps(vwrap, lpar_uuid,"},{"line_number":109,"context_line":"                                       match_func\u003dmatch_func)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_778b7368","line":106,"range":{"start_line":106,"start_character":22,"end_line":106,"end_character":41},"in_reply_to":"9a30ddce_0b9a18b9","updated":"2017-03-10 21:20:14.000000000","message":"Done.  Though it\u0027s not quiiite the same info - instance UUID instead of name - but the name isn\u0027t all that meaningful anyway in the log files.","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"0faa6f5d9c933b1e034cbacb1ab8f001c65bb815","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        LOG.info(_LI(\u0027SSP: Create boot disk from image %s.\u0027), image_meta.id,"},{"line_number":166,"context_line":"                 instance\u003dinstance)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        def upload(path):"},{"line_number":169,"context_line":"            IMAGE_API.download(context, image_meta.id, dest_path\u003dpath)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        image_lu \u003d tsk_cs.get_or_upload_image_lu("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_cbf2c005","line":168,"updated":"2017-03-10 19:15:31.000000000","message":"Wonder if we want a TODO in here for image conversion.","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5b6e702c4286cfd0b40f563fcdba37c07a36bb26","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        LOG.info(_LI(\u0027SSP: Create boot disk from image %s.\u0027), image_meta.id,"},{"line_number":166,"context_line":"                 instance\u003dinstance)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        def upload(path):"},{"line_number":169,"context_line":"            IMAGE_API.download(context, image_meta.id, dest_path\u003dpath)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        image_lu \u003d tsk_cs.get_or_upload_image_lu("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_17e1572d","line":168,"in_reply_to":"9a30ddce_cbf2c005","updated":"2017-03-10 21:20:14.000000000","message":"What would that look like?","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"0faa6f5d9c933b1e034cbacb1ab8f001c65bb815","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        def add_func(vios_w):"},{"line_number":203,"context_line":"            LOG.info(_LI(\"Adding SSP disk connection between VM %(vm)s and \""},{"line_number":204,"context_line":"                         \"VIOS %(vios)s.\"),"},{"line_number":205,"context_line":"                     {\u0027vm\u0027: instance.name, \u0027vios\u0027: vios_w.name},"},{"line_number":206,"context_line":"                     instance\u003dinstance)"},{"line_number":207,"context_line":"            mapping \u003d tsk_map.build_vscsi_mapping("},{"line_number":208,"context_line":"                self._host_uuid, vios_w, lpar_uuid, lu)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_8bd3685f","line":205,"range":{"start_line":205,"start_character":22,"end_line":205,"end_character":41},"updated":"2017-03-10 19:15:31.000000000","message":"See above.  Just a personal nit, I don\u0027t mind if its kept as is.","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5b6e702c4286cfd0b40f563fcdba37c07a36bb26","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        def add_func(vios_w):"},{"line_number":203,"context_line":"            LOG.info(_LI(\"Adding SSP disk connection between VM %(vm)s and \""},{"line_number":204,"context_line":"                         \"VIOS %(vios)s.\"),"},{"line_number":205,"context_line":"                     {\u0027vm\u0027: instance.name, \u0027vios\u0027: vios_w.name},"},{"line_number":206,"context_line":"                     instance\u003dinstance)"},{"line_number":207,"context_line":"            mapping \u003d tsk_map.build_vscsi_mapping("},{"line_number":208,"context_line":"                self._host_uuid, vios_w, lpar_uuid, lu)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_37dc9b72","line":205,"range":{"start_line":205,"start_character":22,"end_line":205,"end_character":41},"in_reply_to":"9a30ddce_8bd3685f","updated":"2017-03-10 21:20:14.000000000","message":"Done","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dcd909c690bad21c2981dcacef93e96e9af2a4e2","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            self._ssp \u003d pvm_stg.SSP.get_by_href("},{"line_number":94,"context_line":"                self._adapter, self._clust.ssp_uri)"},{"line_number":95,"context_line":"            self._tier \u003d tsk_stg.default_tier_for_ssp(self._ssp)"},{"line_number":96,"context_line":"        except Exception as e:"},{"line_number":97,"context_line":"            LOG.error(_LE(\"A unique PowerVM Cluster and Shared Storage Pool \""},{"line_number":98,"context_line":"                          \"is required in the default Tier.\"))"},{"line_number":99,"context_line":"            LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_da8b7b1c","line":96,"range":{"start_line":96,"start_character":15,"end_line":96,"end_character":24},"updated":"2017-04-20 22:29:07.000000000","message":"Made exception narrower.","commit_id":"217745a5ad5a986b672fe6ea70e5a87e98e46883"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"56d8f3bcdfbaa6fe7e0043b6154c4c0abfd9b011","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                self._adapter, self._clust.ssp_uri)"},{"line_number":95,"context_line":"            self._tier \u003d tsk_stg.default_tier_for_ssp(self._ssp)"},{"line_number":96,"context_line":"        except Exception as e:"},{"line_number":97,"context_line":"            LOG.error(_LE(\"A unique PowerVM Cluster and Shared Storage Pool \""},{"line_number":98,"context_line":"                          \"is required in the default Tier.\"))"},{"line_number":99,"context_line":"            LOG.exception(e)"},{"line_number":100,"context_line":"            raise exception.NotFound()"}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_52d87d79","line":97,"range":{"start_line":97,"start_character":22,"end_line":97,"end_character":25},"updated":"2017-04-20 15:58:30.000000000","message":"we don\u0027t translate log messages any more","commit_id":"217745a5ad5a986b672fe6ea70e5a87e98e46883"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dcd909c690bad21c2981dcacef93e96e9af2a4e2","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                self._adapter, self._clust.ssp_uri)"},{"line_number":95,"context_line":"            self._tier \u003d tsk_stg.default_tier_for_ssp(self._ssp)"},{"line_number":96,"context_line":"        except Exception as e:"},{"line_number":97,"context_line":"            LOG.error(_LE(\"A unique PowerVM Cluster and Shared Storage Pool \""},{"line_number":98,"context_line":"                          \"is required in the default Tier.\"))"},{"line_number":99,"context_line":"            LOG.exception(e)"},{"line_number":100,"context_line":"            raise exception.NotFound()"}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_7aad8799","line":97,"range":{"start_line":97,"start_character":22,"end_line":97,"end_character":25},"in_reply_to":"7ffa3b31_52d87d79","updated":"2017-04-20 22:29:07.000000000","message":"Done throughout.","commit_id":"217745a5ad5a986b672fe6ea70e5a87e98e46883"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"56d8f3bcdfbaa6fe7e0043b6154c4c0abfd9b011","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        except Exception as e:"},{"line_number":97,"context_line":"            LOG.error(_LE(\"A unique PowerVM Cluster and Shared Storage Pool \""},{"line_number":98,"context_line":"                          \"is required in the default Tier.\"))"},{"line_number":99,"context_line":"            LOG.exception(e)"},{"line_number":100,"context_line":"            raise exception.NotFound()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        LOG.info(_LI("}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_92b96516","line":99,"updated":"2017-04-20 15:58:30.000000000","message":"Drop the log error and just put that message in the LOG.exception","commit_id":"217745a5ad5a986b672fe6ea70e5a87e98e46883"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dcd909c690bad21c2981dcacef93e96e9af2a4e2","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        except Exception as e:"},{"line_number":97,"context_line":"            LOG.error(_LE(\"A unique PowerVM Cluster and Shared Storage Pool \""},{"line_number":98,"context_line":"                          \"is required in the default Tier.\"))"},{"line_number":99,"context_line":"            LOG.exception(e)"},{"line_number":100,"context_line":"            raise exception.NotFound()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        LOG.info(_LI("}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_3a937f5d","line":99,"in_reply_to":"7ffa3b31_92b96516","updated":"2017-04-20 22:29:07.000000000","message":"Done","commit_id":"217745a5ad5a986b672fe6ea70e5a87e98e46883"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"ebbe88f3fbda1e889ac5ce9748220fa7d0e9a596","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova import image"},{"line_number":31,"context_line":"from nova.virt.powervm import vm"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_540c8493","line":32,"updated":"2017-05-25 18:29:20.000000000","message":"need 2 blank lines after imports","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"17ad9aca5ef16fcd0a9ce1423ef7846d9be9923c","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova import image"},{"line_number":31,"context_line":"from nova.virt.powervm import vm"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_21230dc1","line":32,"in_reply_to":"ff0f0b1f_540c8493","updated":"2017-05-25 21:21:44.000000000","message":"Done","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2babbf6808eb833ff12a1f08949102cbfccd2e66","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class DiskType(object):"},{"line_number":41,"context_line":"    BOOT \u003d \u0027boot\u0027"},{"line_number":42,"context_line":"    IMAGE \u003d \u0027image\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class IterableToFileAdapter(object):"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_422b4d2f","line":42,"updated":"2017-05-31 20:11:34.000000000","message":"always makes me uneasy seeing the redefinition of various constants... isn\u0027t a \"boot disk\" just an image that is bootable? but, meh :)","commit_id":"f112dc686dadd643410575cc3487cf1632e4f689"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d7aa287234ce1aff43c38ec6d15a7da943c21d70","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class DiskType(object):"},{"line_number":41,"context_line":"    BOOT \u003d \u0027boot\u0027"},{"line_number":42,"context_line":"    IMAGE \u003d \u0027image\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class IterableToFileAdapter(object):"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_c393dea2","line":42,"in_reply_to":"df140735_422b4d2f","updated":"2017-05-31 21:26:32.000000000","message":"Fair point, probably deserving of some code comments.\n\nWhat we\u0027re getting at here is that an \"image disk\" is a (read-only) source of the bits used to populate a (writable) \"boot disk\" initially.  We use image disks for two things: imagecache (which isn\u0027t needed/used here, but will appear when we drop the localdisk driver); and thin cloning, which is the whole basis for the awesomeness of the SSP driver.  get_or_upload_image_lu (L191) has to transfer the whole image from glance to the SSP - but only once, ever.  Then crt_lu (L204) is super quick, cause it creates a COW thin clone backed by that image disk.\n\nTBH, the term \"image\" probably comes from the SSP vernacular itself.  (SSP calls the other one \"disk\" - easy to see why we chose a different term there.)","commit_id":"f112dc686dadd643410575cc3487cf1632e4f689"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2babbf6808eb833ff12a1f08949102cbfccd2e66","unresolved":false,"context_lines":[{"line_number":106,"context_line":"             \u0027tier_name\u0027: self._tier.name})"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @property"},{"line_number":109,"context_line":"    def capacity(self):"},{"line_number":110,"context_line":"        \"\"\"Capacity of the storage in gigabytes.\"\"\""},{"line_number":111,"context_line":"        # Retrieving the Tier is faster (because don\u0027t have to refresh LUs.)"},{"line_number":112,"context_line":"        return float(self._tier.refresh().capacity)"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_62353146","line":109,"updated":"2017-05-31 20:11:34.000000000","message":"how about naming this \"total_gb\"?","commit_id":"f112dc686dadd643410575cc3487cf1632e4f689"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2babbf6808eb833ff12a1f08949102cbfccd2e66","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        return float(self._tier.refresh().capacity)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @property"},{"line_number":115,"context_line":"    def capacity_used(self):"},{"line_number":116,"context_line":"        \"\"\"Capacity of the storage in gigabytes that is used.\"\"\""},{"line_number":117,"context_line":"        self._ssp \u003d self._ssp.refresh()"},{"line_number":118,"context_line":"        return float(self._ssp.capacity) - float(self._ssp.free_space)"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_c2ee3db3","line":115,"updated":"2017-05-31 20:11:34.000000000","message":"meh, you could just name this property \"used_gb\"","commit_id":"f112dc686dadd643410575cc3487cf1632e4f689"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2babbf6808eb833ff12a1f08949102cbfccd2e66","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                suffix\u003d\u0027_\u0027 + image_meta.checksum),"},{"line_number":195,"context_line":"            random.choice(self._vios_uuids), IterableToFileAdapter("},{"line_number":196,"context_line":"                IMAGE_API.download(context, image_meta.id)), image_meta.size,"},{"line_number":197,"context_line":"            upload_type\u003dtsk_stg.UploadType.IO_STREAM)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        boot_lu_name \u003d pvm_u.sanitize_file_name_for_api("},{"line_number":200,"context_line":"            instance.name, prefix\u003dDiskType.BOOT + \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_3d0cfc39","line":197,"updated":"2017-05-31 20:11:34.000000000","message":"err... perhaps think about cleaning the above mess up a bit :) You could break various parameters into local scope variables to make it readable.","commit_id":"f112dc686dadd643410575cc3487cf1632e4f689"}],"nova/virt/powervm/driver.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"055b7b1e782ef9584f3f58bfbab1f8b8882bd3ef","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        LOG.info(_LI(\"Clearing stale I/O connections on driver init.\"))"},{"line_number":82,"context_line":"        pvm_stor.ComprehensiveScrub(self.adapter).execute()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # Initialize the disk adapter"},{"line_number":85,"context_line":"        self.disk_dvr \u003d ssp.SSPDiskAdapter(self.adapter,"},{"line_number":86,"context_line":"                                           self.host_wrapper.uuid)"},{"line_number":87,"context_line":"        self.image_api \u003d image.API()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_947db3b3","line":84,"updated":"2017-03-08 16:30:22.000000000","message":"TODO: Additional disk drivers?","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"09dbcda2d3ce739e2ddc3d7e5f5552a0f72ce7ab","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        LOG.info(_LI(\"Clearing stale I/O connections on driver init.\"))"},{"line_number":82,"context_line":"        pvm_stor.ComprehensiveScrub(self.adapter).execute()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # Initialize the disk adapter"},{"line_number":85,"context_line":"        self.disk_dvr \u003d ssp.SSPDiskAdapter(self.adapter,"},{"line_number":86,"context_line":"                                           self.host_wrapper.uuid)"},{"line_number":87,"context_line":"        self.image_api \u003d image.API()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_685f76e5","line":84,"in_reply_to":"9a30ddce_947db3b3","updated":"2017-03-08 23:16:43.000000000","message":"Done","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"0faa6f5d9c933b1e034cbacb1ab8f001c65bb815","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            # TODO(thorst, efried) Add volume disconnect tasks"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"            # Detach the disk storage adapters (when the stg_ftsk runs)"},{"line_number":252,"context_line":"            flow.add(tf_stg.DetachDisk(self.disk_dvr, instance))"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"            # Delete the storage disks"},{"line_number":255,"context_line":"            # The disks shouldn\u0027t be destroyed until the unmappings are done."}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_2baefce5","line":252,"updated":"2017-03-10 19:15:31.000000000","message":"Confused.  Don\u0027t we need a stg_ftsk here?  Per the comment?","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5b6e702c4286cfd0b40f563fcdba37c07a36bb26","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            # TODO(thorst, efried) Add volume disconnect tasks"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"            # Detach the disk storage adapters (when the stg_ftsk runs)"},{"line_number":252,"context_line":"            flow.add(tf_stg.DetachDisk(self.disk_dvr, instance))"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"            # Delete the storage disks"},{"line_number":255,"context_line":"            # The disks shouldn\u0027t be destroyed until the unmappings are done."}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_9708e7db","line":252,"in_reply_to":"9a30ddce_2baefce5","updated":"2017-03-10 21:20:14.000000000","message":"Ah, nice find on the comment - artifact from earlier revs.\n\nWe don\u0027t need a FeedTask here.  The destroy sequence only does storage connectivity stuff within the detach, so I\u0027m just building and executing the FeedTask locally in that one method rather than passing it around.\n\nIn contrast, the spawn flow uses the FeedTask 1) in Create to scrub stale mappings, and 2) in Connect; so we do create it up front and pass it around in that method.","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"ebbe88f3fbda1e889ac5ce9748220fa7d0e9a596","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        flow_spawn \u003d tf_lf.Flow(\"spawn\")"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        # This FeedTask accumulates VIOS storage connection operations to be"},{"line_number":177,"context_line":"        # run in parallel.  Include both SCSI and fibre channel mappings for"},{"line_number":178,"context_line":"        # the scrubber."},{"line_number":179,"context_line":"        stg_ftsk \u003d pvm_par.build_active_vio_feed_task("},{"line_number":180,"context_line":"            self.adapter, xag\u003d{pvm_const.XAG.VIO_SMAP, pvm_const.XAG.VIO_FMAP})"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_545804f9","line":177,"updated":"2017-05-25 18:29:20.000000000","message":"single space between sentences","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"17ad9aca5ef16fcd0a9ce1423ef7846d9be9923c","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        flow_spawn \u003d tf_lf.Flow(\"spawn\")"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        # This FeedTask accumulates VIOS storage connection operations to be"},{"line_number":177,"context_line":"        # run in parallel.  Include both SCSI and fibre channel mappings for"},{"line_number":178,"context_line":"        # the scrubber."},{"line_number":179,"context_line":"        stg_ftsk \u003d pvm_par.build_active_vio_feed_task("},{"line_number":180,"context_line":"            self.adapter, xag\u003d{pvm_const.XAG.VIO_SMAP, pvm_const.XAG.VIO_FMAP})"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_a1183d84","line":177,"in_reply_to":"ff0f0b1f_545804f9","updated":"2017-05-25 21:21:44.000000000","message":"Done","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"ebbe88f3fbda1e889ac5ce9748220fa7d0e9a596","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # TODO(thorst, efried) Add the config drive"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        # Add the transaction manager flow to the end of the \u0027I/O"},{"line_number":197,"context_line":"        # connection\u0027 tasks.  This will run all the connections in parallel."},{"line_number":198,"context_line":"        flow_spawn.add(stg_ftsk)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_f41cb814","line":196,"range":{"start_line":196,"start_character":43,"end_line":196,"end_character":45},"updated":"2017-05-25 18:29:20.000000000","message":"s/to/at/","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"17ad9aca5ef16fcd0a9ce1423ef7846d9be9923c","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # TODO(thorst, efried) Add the config drive"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        # Add the transaction manager flow to the end of the \u0027I/O"},{"line_number":197,"context_line":"        # connection\u0027 tasks.  This will run all the connections in parallel."},{"line_number":198,"context_line":"        flow_spawn.add(stg_ftsk)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_e1051516","line":196,"range":{"start_line":196,"start_character":43,"end_line":196,"end_character":45},"in_reply_to":"ff0f0b1f_f41cb814","updated":"2017-05-25 21:21:44.000000000","message":"Whaaa?  Okaaay... done.","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"}],"nova/virt/powervm/tasks/storage.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"05866f0d69149fd296db4f8fa19c42077b0df7bf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015, 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_ae0d0392","line":1,"updated":"2017-03-08 17:27:02.000000000","message":"Add UT for these.","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"09dbcda2d3ce739e2ddc3d7e5f5552a0f72ce7ab","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015, 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_08c19a80","line":1,"in_reply_to":"9a30ddce_ae0d0392","updated":"2017-03-08 23:16:43.000000000","message":"Done","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"0faa6f5d9c933b1e034cbacb1ab8f001c65bb815","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        :param disk_dvr: The disk driver."},{"line_number":77,"context_line":"        :param instance: The nova instance."},{"line_number":78,"context_line":"        :param stg_ftsk: The pypowervm transaction FeedTask for I/O Operations."},{"line_number":79,"context_line":"                         The Virtual I/O Server mapping updates will be added"},{"line_number":80,"context_line":"                         to the FeedTask.  This defers the updates to a later"},{"line_number":81,"context_line":"                         time.  The caller is responsible for executing the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_6b18f475","line":78,"updated":"2017-03-10 19:15:31.000000000","message":"You had a more succinct definition of this in vm.py that you may want to use throughout.\n\nSomething like \"The pypowervm FeedTask for deferred storage connection tasks\"","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5b6e702c4286cfd0b40f563fcdba37c07a36bb26","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        :param disk_dvr: The disk driver."},{"line_number":77,"context_line":"        :param instance: The nova instance."},{"line_number":78,"context_line":"        :param stg_ftsk: The pypowervm transaction FeedTask for I/O Operations."},{"line_number":79,"context_line":"                         The Virtual I/O Server mapping updates will be added"},{"line_number":80,"context_line":"                         to the FeedTask.  This defers the updates to a later"},{"line_number":81,"context_line":"                         time.  The caller is responsible for executing the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_f7df6337","line":78,"in_reply_to":"9a30ddce_6b18f475","updated":"2017-03-10 21:20:14.000000000","message":"Thanks, done.","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"0faa6f5d9c933b1e034cbacb1ab8f001c65bb815","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def revert_impl(self, disk_dev_info, result, flow_failures):"},{"line_number":93,"context_line":"        # Note that the FeedTask is None - to force instant disconnect."},{"line_number":94,"context_line":"        self.disk_dvr.disconnect_disk(self.instance)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class DetachDisk(pvm_task.PowerVMTask):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_2b399cd7","line":94,"updated":"2017-03-10 19:15:31.000000000","message":"Per comment, even though I know in the code it does this...maybe a stg_ftsk\u003dNone","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5b6e702c4286cfd0b40f563fcdba37c07a36bb26","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def revert_impl(self, disk_dev_info, result, flow_failures):"},{"line_number":93,"context_line":"        # Note that the FeedTask is None - to force instant disconnect."},{"line_number":94,"context_line":"        self.disk_dvr.disconnect_disk(self.instance)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class DetachDisk(pvm_task.PowerVMTask):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_d725ff5b","line":94,"in_reply_to":"9a30ddce_2b399cd7","updated":"2017-03-10 21:20:14.000000000","message":"Again, the comment is an artifact from an earlier rev.  We don\u0027t pass the FeedTask around at all - just need to remove the comment.","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"0faa6f5d9c933b1e034cbacb1ab8f001c65bb815","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    \"\"\"The task to detach the disk storage from the instance.\"\"\""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def __init__(self, disk_dvr, instance):"},{"line_number":102,"context_line":"        \"\"\"Creates the Task to detach the storage adapters."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        Provides the stor_adpt_mappings.  A list of pypowervm"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_6b463450","line":101,"updated":"2017-03-10 19:15:31.000000000","message":"This doesn\u0027t need the FeedTask?  I thought these were deferred too...","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5b6e702c4286cfd0b40f563fcdba37c07a36bb26","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    \"\"\"The task to detach the disk storage from the instance.\"\"\""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def __init__(self, disk_dvr, instance):"},{"line_number":102,"context_line":"        \"\"\"Creates the Task to detach the storage adapters."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        Provides the stor_adpt_mappings.  A list of pypowervm"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_771533e3","line":101,"in_reply_to":"9a30ddce_6b463450","updated":"2017-03-10 21:20:14.000000000","message":"Right - see comment in driver.py.  Since DetachDisk is the only thing that needs to POST the VIOS, we just create \u0026 execute the FeedTask therein.","commit_id":"f88b993dae03a74445c1de403ed3652ce01ec4dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"17ad9aca5ef16fcd0a9ce1423ef7846d9be9923c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from pypowervm import exceptions as pvm_exc"},{"line_number":17,"context_line":"from taskflow import task"},{"line_number":18,"context_line":"from taskflow.types import failure as task_fail"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_6420f39c","line":19,"updated":"2017-05-25 21:21:44.000000000","message":"Done","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"ebbe88f3fbda1e889ac5ce9748220fa7d0e9a596","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                          instance\u003dself.instance)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class ConnectDisk(task.Task):"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    \"\"\"The task to connect the disk to the instance.\"\"\""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_b4452046","line":66,"range":{"start_line":66,"start_character":6,"end_line":66,"end_character":17},"updated":"2017-05-25 18:29:20.000000000","message":"nit: is there a reason we\u0027re using \"Connect\" instead of the more common term \"Attach\"? We do still use \"Detach\" below instead of \"Disconnect\", so this seems inconsistent.","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"17ad9aca5ef16fcd0a9ce1423ef7846d9be9923c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                          instance\u003dself.instance)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class ConnectDisk(task.Task):"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    \"\"\"The task to connect the disk to the instance.\"\"\""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_9a2c824b","line":66,"range":{"start_line":66,"start_character":6,"end_line":66,"end_character":17},"in_reply_to":"ff0f0b1f_b4452046","updated":"2017-05-25 21:21:44.000000000","message":"Done","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"ebbe88f3fbda1e889ac5ce9748220fa7d0e9a596","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        super(ConnectDisk, self).__init__("},{"line_number":81,"context_line":"            \u0027connect_disk\u0027, requires\u003d[\u0027disk_dev_info\u0027])"},{"line_number":82,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":83,"context_line":"        self.instance \u003d instance"},{"line_number":84,"context_line":"        self.stg_ftsk \u003d stg_ftsk"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_74d54843","line":81,"range":{"start_line":81,"start_character":13,"end_line":81,"end_character":25},"updated":"2017-05-25 18:29:20.000000000","message":"\u0027connect_disk\u0027 vs. \u0027detach_storage\u0027 is likewise inconsistent.","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"17ad9aca5ef16fcd0a9ce1423ef7846d9be9923c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        super(ConnectDisk, self).__init__("},{"line_number":81,"context_line":"            \u0027connect_disk\u0027, requires\u003d[\u0027disk_dev_info\u0027])"},{"line_number":82,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":83,"context_line":"        self.instance \u003d instance"},{"line_number":84,"context_line":"        self.stg_ftsk \u003d stg_ftsk"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_5a26ea6a","line":81,"range":{"start_line":81,"start_character":13,"end_line":81,"end_character":25},"in_reply_to":"ff0f0b1f_74d54843","updated":"2017-05-25 21:21:44.000000000","message":"Done","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"ebbe88f3fbda1e889ac5ce9748220fa7d0e9a596","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        :param disk_dvr: The DiskAdapter for the VM."},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        super(DeleteDisk, self).__init__("},{"line_number":132,"context_line":"            \u0027dlt_storage\u0027, requires\u003d[\u0027stor_adpt_mappings\u0027])"},{"line_number":133,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def execute(self, stor_adpt_mappings):"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_94357cab","line":132,"range":{"start_line":132,"start_character":13,"end_line":132,"end_character":24},"updated":"2017-05-25 18:29:20.000000000","message":"s/dlt/delete/","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"17ad9aca5ef16fcd0a9ce1423ef7846d9be9923c","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        :param disk_dvr: The DiskAdapter for the VM."},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        super(DeleteDisk, self).__init__("},{"line_number":132,"context_line":"            \u0027dlt_storage\u0027, requires\u003d[\u0027stor_adpt_mappings\u0027])"},{"line_number":133,"context_line":"        self.disk_dvr \u003d disk_dvr"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def execute(self, stor_adpt_mappings):"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_3a44561b","line":132,"range":{"start_line":132,"start_character":13,"end_line":132,"end_character":24},"in_reply_to":"ff0f0b1f_94357cab","updated":"2017-05-25 21:21:44.000000000","message":"Done","commit_id":"075ec800eb71bacbb433f3abef08073744bf505e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2babbf6808eb833ff12a1f08949102cbfccd2e66","unresolved":false,"context_lines":[{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class CreateDiskForImg(task.Task):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\"The Task to create the disk from an image in the storage.\"\"\""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_1da6d711","line":24,"updated":"2017-05-31 20:11:34.000000000","message":"phew, thank goodness you saved the \"a\" and \"e\" characters from Image ;)","commit_id":"f112dc686dadd643410575cc3487cf1632e4f689"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"9dd448a9597ffbd855e0ca5b5cdf3ec57fc2efd9","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            self.disk_dvr.delete_disks([result])"},{"line_number":61,"context_line":"        except pvm_exc.Error:"},{"line_number":62,"context_line":"            # Don\u0027t allow revert exceptions to interrupt the revert flow."},{"line_number":63,"context_line":"            LOG.exception(\"Disk deletion failed during revert. Ignoring.\","},{"line_number":64,"context_line":"                          instance\u003dself.instance)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ff0f0b1f_2c7c00b4","line":63,"updated":"2017-05-26 19:40:47.000000000","message":"do you really want to log the stack trace here, or is this considered normal?","commit_id":"f112dc686dadd643410575cc3487cf1632e4f689"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"67351b84d1efb4312b674b5671df1f907b97d7df","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            self.disk_dvr.delete_disks([result])"},{"line_number":61,"context_line":"        except pvm_exc.Error:"},{"line_number":62,"context_line":"            # Don\u0027t allow revert exceptions to interrupt the revert flow."},{"line_number":63,"context_line":"            LOG.exception(\"Disk deletion failed during revert. Ignoring.\","},{"line_number":64,"context_line":"                          instance\u003dself.instance)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ff0f0b1f_c7a31d00","line":63,"in_reply_to":"ff0f0b1f_2c7c00b4","updated":"2017-05-26 19:46:51.000000000","message":"It\u0027s not normal, so I definitely want to see the stack trace; but I also don\u0027t want to blow up the TaskFlow because of it, hence \u0027ignoring\u0027.\n\nCF our discussion on IRC: http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2017-05-26.log.html#t2017-05-26T19:37:48","commit_id":"f112dc686dadd643410575cc3487cf1632e4f689"}],"nova/virt/powervm/tasks/vm.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"055b7b1e782ef9584f3f58bfbab1f8b8882bd3ef","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Get rid of any stale storage and/or mappings associated with the new"},{"line_number":69,"context_line":"        # LPAR\u0027s ID, so it doesn\u0027t accidentally have access to something it"},{"line_number":70,"context_line":"        # oughtn\u0027t."},{"line_number":71,"context_line":"        pvm_stg.add_lpar_storage_scrub_tasks([wrap.id], self.stg_ftsk,"},{"line_number":72,"context_line":"                                             lpars_exist\u003dTrue)"},{"line_number":73,"context_line":"        return wrap"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_74783ff3","line":72,"range":{"start_line":71,"start_character":7,"end_line":72,"end_character":7},"updated":"2017-03-08 16:30:22.000000000","message":"I don\u0027t really understand why that block got removed...","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"09dbcda2d3ce739e2ddc3d7e5f5552a0f72ce7ab","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Get rid of any stale storage and/or mappings associated with the new"},{"line_number":69,"context_line":"        # LPAR\u0027s ID, so it doesn\u0027t accidentally have access to something it"},{"line_number":70,"context_line":"        # oughtn\u0027t."},{"line_number":71,"context_line":"        pvm_stg.add_lpar_storage_scrub_tasks([wrap.id], self.stg_ftsk,"},{"line_number":72,"context_line":"                                             lpars_exist\u003dTrue)"},{"line_number":73,"context_line":"        return wrap"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_08c7da45","line":72,"range":{"start_line":71,"start_character":7,"end_line":72,"end_character":7},"in_reply_to":"9a30ddce_14937ea4","updated":"2017-03-08 23:16:43.000000000","message":"Okay, so it did get removed.  Before, we were always creating and executing the FeedTask locally, because this scrubber was the only VIOS POST-ish thing happening in the flow.  Now we\u0027re adding the disk driver with its SCSI mappings, so we need the ftsk passed in.  But we don\u0027t have the rebuild code paths, so we don\u0027t need to allow the ftsk to be None - we can always require it to be built by the caller.","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"61c50e47048d1ffbef05ddd2e58150e09856ea4a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Get rid of any stale storage and/or mappings associated with the new"},{"line_number":69,"context_line":"        # LPAR\u0027s ID, so it doesn\u0027t accidentally have access to something it"},{"line_number":70,"context_line":"        # oughtn\u0027t."},{"line_number":71,"context_line":"        pvm_stg.add_lpar_storage_scrub_tasks([wrap.id], self.stg_ftsk,"},{"line_number":72,"context_line":"                                             lpars_exist\u003dTrue)"},{"line_number":73,"context_line":"        return wrap"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_14937ea4","line":72,"range":{"start_line":71,"start_character":7,"end_line":72,"end_character":7},"in_reply_to":"9a30ddce_6bbbfde5","updated":"2017-03-08 18:08:24.000000000","message":"[Later] Actually, this block didn\u0027t get \"removed\" - it was never there in the first place.  That\u0027ll become clearer when this change set is rebased properly on the rest.","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"86ff760dd10ab5f94a0008032168b4f4ce03ad6d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Get rid of any stale storage and/or mappings associated with the new"},{"line_number":69,"context_line":"        # LPAR\u0027s ID, so it doesn\u0027t accidentally have access to something it"},{"line_number":70,"context_line":"        # oughtn\u0027t."},{"line_number":71,"context_line":"        pvm_stg.add_lpar_storage_scrub_tasks([wrap.id], self.stg_ftsk,"},{"line_number":72,"context_line":"                                             lpars_exist\u003dTrue)"},{"line_number":73,"context_line":"        return wrap"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_6bbbfde5","line":72,"range":{"start_line":71,"start_character":7,"end_line":72,"end_character":7},"in_reply_to":"9a30ddce_74783ff3","updated":"2017-03-08 16:56:25.000000000","message":"Trying not to include any unnecessary complexity.  Until we support things like rebuild, there\u0027s never a code path that will build and execute the FeedTask locally, so I just made the param mandatory and ripped out the conditions.\n\nReally, I should have done that in the TaskFlow change set.  Mebbe I go back and do that..","commit_id":"96c1ae903b5162b9025b31c4962095d78848bc3c"}]}
