)]}'
{"nova/conf/scaleio.py":[{"author":{"_account_id":25033,"name":"Eric Young","email":"eric.young@dell.com","username":"tssgery"},"change_message_id":"0d5659c00011d852e8f2f8c62ce7286cbd240461","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 EMC Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ffa3b31_69d84e1d","line":1,"updated":"2017-04-21 19:16:27.000000000","message":"# Copyright (C) 2017 Dell Inc. or its subsidiaries.","commit_id":"2a15410c21e4aa7c6c1e2708937444a3094b836f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8113a7f50c8452002c7891e982ee8087110e878","unresolved":false,"context_lines":[{"line_number":38,"context_line":"               help\u003d\u0027The ScaleIO gateway port.\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027rest_server_username\u0027,"},{"line_number":40,"context_line":"               help\u003d\u0027The ScaleIO gateway username.\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027rest_server_password\u0027,"},{"line_number":42,"context_line":"               help\u003d\u0027The ScaleIO gateway password.\u0027),"},{"line_number":43,"context_line":"    cfg.BoolOpt(\u0027verify_server_certificate\u0027,"},{"line_number":44,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_a11bfe7e","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":14},"updated":"2017-07-17 23:34:31.000000000","message":"You need to set the secret\u003dTrue kwarg on this so it\u0027s not logged, along with anything else in here that\u0027s sensitive.","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"6cfc8011d034f382e5bca542f5242d5a72668c29","unresolved":false,"context_lines":[{"line_number":38,"context_line":"               help\u003d\u0027The ScaleIO gateway port.\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027rest_server_username\u0027,"},{"line_number":40,"context_line":"               help\u003d\u0027The ScaleIO gateway username.\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027rest_server_password\u0027,"},{"line_number":42,"context_line":"               help\u003d\u0027The ScaleIO gateway password.\u0027),"},{"line_number":43,"context_line":"    cfg.BoolOpt(\u0027verify_server_certificate\u0027,"},{"line_number":44,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_0c3ad0ca","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":14},"in_reply_to":"1f1a1f67_a11bfe7e","updated":"2017-07-18 17:46:02.000000000","message":"Done","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"79fe764ce2c1caec3a2e5555d9a1975337a9ca2e","unresolved":false,"context_lines":[{"line_number":6655,"context_line":"                    CONF.config_drive_format \u003d\u003d \u0027iso9660\u0027 and"},{"line_number":6656,"context_line":"                    (not is_shared_block_storage or"},{"line_number":6657,"context_line":"                     self._get_disk_config_image_type() !\u003d"},{"line_number":6658,"context_line":"                     CONF.libvirt.images_type)):"},{"line_number":6659,"context_line":"                # NOTE(pkoniszewski): Due to a bug in libvirt iso config"},{"line_number":6660,"context_line":"                # drive needs to be copied to destination prior to"},{"line_number":6661,"context_line":"                # migration when instance path is not shared and block"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_60605b36","line":6658,"updated":"2016-12-09 12:05:02.000000000","message":"This logic is getting too obtuse.\n\nMore pertinently, why aren\u0027t we storing the config drive on SIO?","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"96b050f062155fd37094f49767c95110f9175d30","unresolved":false,"context_lines":[{"line_number":6655,"context_line":"                    CONF.config_drive_format \u003d\u003d \u0027iso9660\u0027 and"},{"line_number":6656,"context_line":"                    (not is_shared_block_storage or"},{"line_number":6657,"context_line":"                     self._get_disk_config_image_type() !\u003d"},{"line_number":6658,"context_line":"                     CONF.libvirt.images_type)):"},{"line_number":6659,"context_line":"                # NOTE(pkoniszewski): Due to a bug in libvirt iso config"},{"line_number":6660,"context_line":"                # drive needs to be copied to destination prior to"},{"line_number":6661,"context_line":"                # migration when instance path is not shared and block"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_b5dc4fe5","line":6658,"in_reply_to":"3a71b18c_60605b36","updated":"2016-12-10 07:23:56.000000000","message":"As i understand, rbd behaviour brings the complexity. All other backends do not store config drive, and they require neither get_disk_config_image_type, nor this check. The reason why rbd became to store config drive is that this workaround (copying of the config drive during live migration) was not added timely, Nova team was waiting for libvirt team to fix bugs around. As the result, someone add the workaround to rbd backend, but libvirt does not support this fully, and the copying is required.\n\nSo i think that sio backend does not complicate the code, but rbd backend does.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"79fe764ce2c1caec3a2e5555d9a1975337a9ca2e","unresolved":false,"context_lines":[{"line_number":6988,"context_line":""},{"line_number":6989,"context_line":"            if no_block_devices and disk_type \u003d\u003d \u0027block\u0027:"},{"line_number":6990,"context_line":"                LOG.debug(\u0027skipping disk %(path)s as it may belong to \u0027"},{"line_number":6991,"context_line":"                          \u0027used shared block storage\u0027)"},{"line_number":6992,"context_line":"                continue"},{"line_number":6993,"context_line":""},{"line_number":6994,"context_line":"            # get the real disk size or"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_6004db7d","line":6991,"updated":"2016-12-09 12:05:02.000000000","message":"Why would we want to skip that?","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"601ca25a1de762a84a4d3c219d381eb38dbf9352","unresolved":false,"context_lines":[{"line_number":6988,"context_line":""},{"line_number":6989,"context_line":"            if no_block_devices and disk_type \u003d\u003d \u0027block\u0027:"},{"line_number":6990,"context_line":"                LOG.debug(\u0027skipping disk %(path)s as it may belong to \u0027"},{"line_number":6991,"context_line":"                          \u0027used shared block storage\u0027)"},{"line_number":6992,"context_line":"                continue"},{"line_number":6993,"context_line":""},{"line_number":6994,"context_line":"            # get the real disk size or"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_c13f6a23","line":6991,"in_reply_to":"3a71b18c_6004db7d","updated":"2016-12-09 15:53:39.000000000","message":"Because the result of the function is used to various file operations, like copy over ssh, which does not work with scaleio volumes.\n\nAt the moment i\u0027m trying to look if it\u0027s possible to change something in the method or its usage or elsewhere to avoid this hack","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"83c54d3ddc53720e81d1c4c007236531110be66e","unresolved":false,"context_lines":[{"line_number":6988,"context_line":""},{"line_number":6989,"context_line":"            if no_block_devices and disk_type \u003d\u003d \u0027block\u0027:"},{"line_number":6990,"context_line":"                LOG.debug(\u0027skipping disk %(path)s as it may belong to \u0027"},{"line_number":6991,"context_line":"                          \u0027used shared block storage\u0027)"},{"line_number":6992,"context_line":"                continue"},{"line_number":6993,"context_line":""},{"line_number":6994,"context_line":"            # get the real disk size or"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_41c4b591","line":6991,"in_reply_to":"3a71b18c_c13f6a23","updated":"2016-12-29 16:30:39.000000000","message":"I\u0027ve thought over that. Now i think it\u0027s better to filter out not file based disks where we iterate over disk_info (migrate_disks_and_power_off, _create_images_and_backing, finish_migration). See PS 8. And i\u0027m going to make a separate review with this change.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"79fe764ce2c1caec3a2e5555d9a1975337a9ca2e","unresolved":false,"context_lines":[{"line_number":7454,"context_line":"            self._cleanup_failed_migration(inst_base)"},{"line_number":7455,"context_line":"            utils.execute(\u0027mv\u0027, inst_base_resize, inst_base)"},{"line_number":7456,"context_line":""},{"line_number":7457,"context_line":"        self.image_backend.backend().connect_disks(instance, with_no_wait\u003dTrue)"},{"line_number":7458,"context_line":"        root_disk \u003d self.image_backend.by_name(instance, \u0027disk\u0027)"},{"line_number":7459,"context_line":"        # Once we rollback, the snapshot is no longer needed, so remove it"},{"line_number":7460,"context_line":"        # TODO(nic): Remove the try/except/finally in a future release"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_6005bbc0","line":7457,"range":{"start_line":7457,"start_character":61,"end_line":7457,"end_character":78},"updated":"2016-12-09 12:05:02.000000000","message":"This is a race to _create_domain_and_network below. At the very least you\u0027d have to call connect_disks again below without with_no_wait.\n\nAlso, why is this required? Shouldn\u0027t these still be connected until the resize is confirmed?","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"601ca25a1de762a84a4d3c219d381eb38dbf9352","unresolved":false,"context_lines":[{"line_number":7454,"context_line":"            self._cleanup_failed_migration(inst_base)"},{"line_number":7455,"context_line":"            utils.execute(\u0027mv\u0027, inst_base_resize, inst_base)"},{"line_number":7456,"context_line":""},{"line_number":7457,"context_line":"        self.image_backend.backend().connect_disks(instance, with_no_wait\u003dTrue)"},{"line_number":7458,"context_line":"        root_disk \u003d self.image_backend.by_name(instance, \u0027disk\u0027)"},{"line_number":7459,"context_line":"        # Once we rollback, the snapshot is no longer needed, so remove it"},{"line_number":7460,"context_line":"        # TODO(nic): Remove the try/except/finally in a future release"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_acf6e5f6","line":7457,"range":{"start_line":7457,"start_character":61,"end_line":7457,"end_character":78},"in_reply_to":"3a71b18c_6005bbc0","updated":"2016-12-09 15:53:39.000000000","message":"It\u0027s synchronized in imagebackend\u0027s libvirt_info via ensure_path.\n\nThis is required because manager.revert_resize calls driver.destroy before to call finish_revert_resize. That call of driver.destroy disconnects disks. Do yet not know, how this can be handle smarter.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":25033,"name":"Eric Young","email":"eric.young@dell.com","username":"tssgery"},"change_message_id":"0d5659c00011d852e8f2f8c62ce7286cbd240461","unresolved":false,"context_lines":[{"line_number":2946,"context_line":"                      specified_fs\u003dspecified_fs)"},{"line_number":2947,"context_line":""},{"line_number":2948,"context_line":"    @staticmethod"},{"line_number":2949,"context_line":"    def _create_swap(target, swap_mb, is_block_dev\u003dFalse, context\u003dNone):"},{"line_number":2950,"context_line":"        \"\"\"Create a swap file of specified size.\"\"\""},{"line_number":2951,"context_line":"        if not is_block_dev:"},{"line_number":2952,"context_line":"            libvirt_utils.create_image(\u0027raw\u0027, target, \u0027%dM\u0027 % swap_mb)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ffa3b31_09c54af1","line":2949,"updated":"2017-04-21 19:16:27.000000000","message":"Should is_block_dev be specified as the final argument in case existing calls to _create_swap use 3 arguments (without using  names)?","commit_id":"2a15410c21e4aa7c6c1e2708937444a3094b836f"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"ee959aa624d6a1ece39f42fb90626554bcc6176e","unresolved":false,"context_lines":[{"line_number":2946,"context_line":"                      specified_fs\u003dspecified_fs)"},{"line_number":2947,"context_line":""},{"line_number":2948,"context_line":"    @staticmethod"},{"line_number":2949,"context_line":"    def _create_swap(target, swap_mb, is_block_dev\u003dFalse, context\u003dNone):"},{"line_number":2950,"context_line":"        \"\"\"Create a swap file of specified size.\"\"\""},{"line_number":2951,"context_line":"        if not is_block_dev:"},{"line_number":2952,"context_line":"            libvirt_utils.create_image(\u0027raw\u0027, target, \u0027%dM\u0027 % swap_mb)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_632c7699","line":2949,"in_reply_to":"5ff73747_2018a47f","updated":"2017-04-21 22:47:48.000000000","message":"Although it\u0027s not a big deal, will change on the next PS","commit_id":"2a15410c21e4aa7c6c1e2708937444a3094b836f"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"fb34cda184438d47b2f56c2fe60846758b3875ff","unresolved":false,"context_lines":[{"line_number":2946,"context_line":"                      specified_fs\u003dspecified_fs)"},{"line_number":2947,"context_line":""},{"line_number":2948,"context_line":"    @staticmethod"},{"line_number":2949,"context_line":"    def _create_swap(target, swap_mb, is_block_dev\u003dFalse, context\u003dNone):"},{"line_number":2950,"context_line":"        \"\"\"Create a swap file of specified size.\"\"\""},{"line_number":2951,"context_line":"        if not is_block_dev:"},{"line_number":2952,"context_line":"            libvirt_utils.create_image(\u0027raw\u0027, target, \u0027%dM\u0027 % swap_mb)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_2018a47f","line":2949,"in_reply_to":"7ffa3b31_09c54af1","updated":"2017-04-21 22:46:36.000000000","message":"All existing calls are indirect, situated in imagebackend. They call prepare_template with *args and **kwargs, which in they turn come to imagebackend from this file. There are two usages of _create_swap, both ones specify arguments by names.","commit_id":"2a15410c21e4aa7c6c1e2708937444a3094b836f"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"4c57ee0207a77a9d21dd694478fdb04a43e57f30","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"                rbd_user\u003dCONF.libvirt.rbd_user)"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    @staticmethod"},{"line_number":1068,"context_line":"    def _get_sio_driver():"},{"line_number":1069,"context_line":"        return sio_utils.SIODriver()"},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"    def _cleanup_rbd(self, instance):"},{"line_number":1072,"context_line":"        # NOTE(nic): On revert_resize, the cleanup steps for the root"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_c401b108","line":1069,"range":{"start_line":1068,"start_character":0,"end_line":1069,"end_character":36},"updated":"2017-07-11 16:09:38.000000000","message":"This is an anti-pattern. I think this can be confined to imagebackend.","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"6cfc8011d034f382e5bca542f5242d5a72668c29","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"                rbd_user\u003dCONF.libvirt.rbd_user)"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    @staticmethod"},{"line_number":1068,"context_line":"    def _get_sio_driver():"},{"line_number":1069,"context_line":"        return sio_utils.SIODriver()"},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"    def _cleanup_rbd(self, instance):"},{"line_number":1072,"context_line":"        # NOTE(nic): On revert_resize, the cleanup steps for the root"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_91c4b9f6","line":1069,"range":{"start_line":1068,"start_character":0,"end_line":1069,"end_character":36},"in_reply_to":"3f1d235d_c401b108","updated":"2017-07-18 17:46:02.000000000","message":"Done","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"fe261dffe68ae9e48c35e0673c5c7aca763718bb","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"                rbd_user\u003dCONF.libvirt.rbd_user)"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    @staticmethod"},{"line_number":1068,"context_line":"    def _get_sio_driver():"},{"line_number":1069,"context_line":"        return sio_utils.SIODriver()"},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"    def _cleanup_rbd(self, instance):"},{"line_number":1072,"context_line":"        # NOTE(nic): On revert_resize, the cleanup steps for the root"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_d549af60","line":1069,"range":{"start_line":1068,"start_character":0,"end_line":1069,"end_character":36},"in_reply_to":"3f1d235d_c401b108","updated":"2017-07-12 15:04:20.000000000","message":"How do you want to get it there? Previously you disliked static methods of Image class. Do you want to create another class here, or something else?","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"}],"nova/virt/libvirt/imagebackend.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"79fe764ce2c1caec3a2e5555d9a1975337a9ca2e","unresolved":false,"context_lines":[{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"    _sio_id \u003d None"},{"line_number":1109,"context_line":"    _sio_name \u003d None"},{"line_number":1110,"context_line":"    _exists \u003d None"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"    def __init__(self, instance\u003dNone, disk_name\u003dNone, path\u003dNone):"},{"line_number":1113,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_5d4d0871","line":1110,"updated":"2016-12-09 12:05:02.000000000","message":"This is a weird pattern. These values are never altered, but act as defaults until they are set on an instance object. I\u0027m pretty sure this is what you intended, but I had to read it a couple of times to convince myself it wasn\u0027t a mistake. Is this pattern common compared to just setting them in __init__?","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"601ca25a1de762a84a4d3c219d381eb38dbf9352","unresolved":false,"context_lines":[{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"    _sio_id \u003d None"},{"line_number":1109,"context_line":"    _sio_name \u003d None"},{"line_number":1110,"context_line":"    _exists \u003d None"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"    def __init__(self, instance\u003dNone, disk_name\u003dNone, path\u003dNone):"},{"line_number":1113,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_e6f39c9d","line":1110,"in_reply_to":"3a71b18c_5d4d0871","updated":"2016-12-09 15:53:39.000000000","message":"ok, i\u0027ll move them into __init__","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"44bf286055ae850805a0dacd1c6a76791da4a4c8","unresolved":false,"context_lines":[{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"    _sio_id \u003d None"},{"line_number":1109,"context_line":"    _sio_name \u003d None"},{"line_number":1110,"context_line":"    _exists \u003d None"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"    def __init__(self, instance\u003dNone, disk_name\u003dNone, path\u003dNone):"},{"line_number":1113,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_4fa39e9e","line":1110,"in_reply_to":"3a71b18c_e6f39c9d","updated":"2016-12-20 11:45:04.000000000","message":"Done","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"79fe764ce2c1caec3a2e5555d9a1975337a9ca2e","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        return True"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"    @staticmethod"},{"line_number":1135,"context_line":"    def connect_disks(instance, with_no_wait\u003dFalse):"},{"line_number":1136,"context_line":"        sio_utils.SIODriver().map_volumes(instance, with_no_wait\u003dwith_no_wait)"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_60313b0b","line":1135,"range":{"start_line":1135,"start_character":32,"end_line":1135,"end_character":50},"updated":"2016-12-09 12:05:02.000000000","message":"I think any use of with_no_wait\u003dTrue is inevitably a race without a corresponding method to wait for it to complete, which doesn\u0027t exist.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"601ca25a1de762a84a4d3c219d381eb38dbf9352","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        return True"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"    @staticmethod"},{"line_number":1135,"context_line":"    def connect_disks(instance, with_no_wait\u003dFalse):"},{"line_number":1136,"context_line":"        sio_utils.SIODriver().map_volumes(instance, with_no_wait\u003dwith_no_wait)"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_6615cc99","line":1135,"range":{"start_line":1135,"start_character":32,"end_line":1135,"end_character":50},"in_reply_to":"3a71b18c_60313b0b","updated":"2016-12-09 15:53:39.000000000","message":"ensure_path does the waiting","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"79fe764ce2c1caec3a2e5555d9a1975337a9ca2e","unresolved":false,"context_lines":[{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"    @staticmethod"},{"line_number":1135,"context_line":"    def connect_disks(instance, with_no_wait\u003dFalse):"},{"line_number":1136,"context_line":"        sio_utils.SIODriver().map_volumes(instance, with_no_wait\u003dwith_no_wait)"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"    @staticmethod"},{"line_number":1139,"context_line":"    def disconnect_disks(instance):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_402b5f94","line":1136,"updated":"2016-12-09 12:05:02.000000000","message":"In every other case Imagebackend operates on individual disks, but this interface implies an operation on all disks of an instance, as determined by the backend. This is a major change. Not sure I\u0027m a fan.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"601ca25a1de762a84a4d3c219d381eb38dbf9352","unresolved":false,"context_lines":[{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"    @staticmethod"},{"line_number":1135,"context_line":"    def connect_disks(instance, with_no_wait\u003dFalse):"},{"line_number":1136,"context_line":"        sio_utils.SIODriver().map_volumes(instance, with_no_wait\u003dwith_no_wait)"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"    @staticmethod"},{"line_number":1139,"context_line":"    def disconnect_disks(instance):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_a63e04d8","line":1136,"in_reply_to":"3a71b18c_402b5f94","updated":"2016-12-09 15:53:39.000000000","message":"I can move this to sio_utils, which requires to add more conditions like\n\n if CONF.images_type \u003d\u003d \u0027sio\u0027:\n   sio_utils.connect_instance_disks(instane)\n\nI\u0027m not a fan of such code. Objects make it more pleasant. But of course, your concern is also right - Image class should work with the only disk. Probably we need another class hierarchy to encapsulate such code in driver.py...","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"44bf286055ae850805a0dacd1c6a76791da4a4c8","unresolved":false,"context_lines":[{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"    @staticmethod"},{"line_number":1135,"context_line":"    def connect_disks(instance, with_no_wait\u003dFalse):"},{"line_number":1136,"context_line":"        sio_utils.SIODriver().map_volumes(instance, with_no_wait\u003dwith_no_wait)"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"    @staticmethod"},{"line_number":1139,"context_line":"    def disconnect_disks(instance):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_af8b5267","line":1136,"in_reply_to":"3a71b18c_a63e04d8","updated":"2016-12-20 11:45:04.000000000","message":"Done","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"79fe764ce2c1caec3a2e5555d9a1975337a9ca2e","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"            self._exists \u003d bool(self._sio_id)"},{"line_number":1168,"context_line":"        return self._exists"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"    def ensure_path(self):"},{"line_number":1171,"context_line":"        if self.path is None:"},{"line_number":1172,"context_line":"            try:"},{"line_number":1173,"context_line":"                self.path \u003d self.driver.get_volume_path(self.sio_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_5d7988fb","line":1170,"updated":"2016-12-09 12:05:02.000000000","message":"Ugly. We should work on removing all use of path by the base class.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"601ca25a1de762a84a4d3c219d381eb38dbf9352","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"            self._exists \u003d bool(self._sio_id)"},{"line_number":1168,"context_line":"        return self._exists"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"    def ensure_path(self):"},{"line_number":1171,"context_line":"        if self.path is None:"},{"line_number":1172,"context_line":"            try:"},{"line_number":1173,"context_line":"                self.path \u003d self.driver.get_volume_path(self.sio_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_01916299","line":1170,"in_reply_to":"3a71b18c_5d7988fb","updated":"2016-12-09 15:53:39.000000000","message":"I\u0027ve not understood. We want to use path by base class only, to do not use path by base class, or to do not use path at all?","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"79fe764ce2c1caec3a2e5555d9a1975337a9ca2e","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"        return self.driver.get_volume_size(self.sio_id)"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"    def get_model(self, connection):"},{"line_number":1224,"context_line":"        return imgmodel.SIOImage()"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"    def libvirt_info(self, disk_bus, disk_dev, device_type, cache_mode,"},{"line_number":1227,"context_line":"                     extra_specs, hypervisor_version, boot_order\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_fd3a5433","line":1224,"updated":"2016-12-09 12:05:02.000000000","message":"This doesn\u0027t identify a disk, so injection can\u0027t possibly work.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"601ca25a1de762a84a4d3c219d381eb38dbf9352","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"        return self.driver.get_volume_size(self.sio_id)"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"    def get_model(self, connection):"},{"line_number":1224,"context_line":"        return imgmodel.SIOImage()"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"    def libvirt_info(self, disk_bus, disk_dev, device_type, cache_mode,"},{"line_number":1227,"context_line":"                     extra_specs, hypervisor_version, boot_order\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_816e52c7","line":1224,"in_reply_to":"3a71b18c_fd3a5433","updated":"2016-12-09 15:53:39.000000000","message":"Right. Injection are not supported for ScaleIO now. This is a stub and known TODO for the future.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"4c57ee0207a77a9d21dd694478fdb04a43e57f30","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            self.connect_disk()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if size:"},{"line_number":234,"context_line":"            if size \u003e self.get_disk_size(self.path):"},{"line_number":235,"context_line":"                self.resize_image(size)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            if (self.preallocate and self._can_fallocate() and"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_433a3498","line":234,"range":{"start_line":234,"start_character":0,"end_line":234,"end_character":52},"updated":"2017-07-11 16:09:38.000000000","message":"Can you please put this in a separate change? I have a suspicion that this breaks a corner case, but I can\u0027t put my finger on it right now.","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"6cfc8011d034f382e5bca542f5242d5a72668c29","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            self.connect_disk()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if size:"},{"line_number":234,"context_line":"            if size \u003e self.get_disk_size(self.path):"},{"line_number":235,"context_line":"                self.resize_image(size)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            if (self.preallocate and self._can_fallocate() and"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_54796591","line":234,"range":{"start_line":234,"start_character":0,"end_line":234,"end_character":52},"in_reply_to":"1f1a1f67_d562cfd8","updated":"2017-07-18 17:46:02.000000000","message":"i\u0027ll create a separate review for that, but i\u0027d like to keep this change here until that review is merged (or get any decision). I\u0027d prefer not to construct a patch series here.","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"8d4c8a0a0b7264aa4b221ce6d57685d39341954c","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            self.connect_disk()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if size:"},{"line_number":234,"context_line":"            if size \u003e self.get_disk_size(self.path):"},{"line_number":235,"context_line":"                self.resize_image(size)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            if (self.preallocate and self._can_fallocate() and"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_0c062221","line":234,"range":{"start_line":234,"start_character":0,"end_line":234,"end_character":52},"in_reply_to":"3f1d235d_433a3498","updated":"2017-07-19 15:17:47.000000000","message":"Done\nsee Idffd4246","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"fe261dffe68ae9e48c35e0673c5c7aca763718bb","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            self.connect_disk()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if size:"},{"line_number":234,"context_line":"            if size \u003e self.get_disk_size(self.path):"},{"line_number":235,"context_line":"                self.resize_image(size)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            if (self.preallocate and self._can_fallocate() and"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_d562cfd8","line":234,"range":{"start_line":234,"start_character":0,"end_line":234,"end_character":52},"in_reply_to":"3f1d235d_433a3498","updated":"2017-07-12 15:04:20.000000000","message":"ok","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"}],"nova/virt/libvirt/storage/sio_utils.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"79fe764ce2c1caec3a2e5555d9a1975337a9ca2e","unresolved":false,"context_lines":[{"line_number":511,"context_line":"            else:"},{"line_number":512,"context_line":"                self.remove_volume(volume[\u0027id\u0027], ignore_mappings\u003dTrue)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def cleanup_rescue_volumes(self, instance):"},{"line_number":515,"context_line":"        \"\"\"Cleanup instance volumes used in rescue mode."},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        :param instance: Instance object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_c0b76ff3","line":514,"updated":"2016-12-09 12:05:02.000000000","message":"This module must not assume what disks are called. The Rbd driver uses a filter function here. If you could re-use the same filter function, that would be great.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"601ca25a1de762a84a4d3c219d381eb38dbf9352","unresolved":false,"context_lines":[{"line_number":511,"context_line":"            else:"},{"line_number":512,"context_line":"                self.remove_volume(volume[\u0027id\u0027], ignore_mappings\u003dTrue)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def cleanup_rescue_volumes(self, instance):"},{"line_number":515,"context_line":"        \"\"\"Cleanup instance volumes used in rescue mode."},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        :param instance: Instance object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_06aed884","line":514,"in_reply_to":"3a71b18c_c0b76ff3","updated":"2016-12-09 15:53:39.000000000","message":"In fact the module knows it. See get_sio_volume_name here. Although \u0027rescue\u0027 is not used there, but this is because the suffix has appropriate length, and root disk name, evaluated with the function, fits sio limit.\n\nWith any other rescue disk this no more works, get_sio_volume_name has to be upgraded (to convert \u0027rescue\u0027 to something else), and a filter function like rbd will not work.","commit_id":"f8f9819d2139c2313ff489154ec2695ece147940"},{"author":{"_account_id":25033,"name":"Eric Young","email":"eric.young@dell.com","username":"tssgery"},"change_message_id":"0d5659c00011d852e8f2f8c62ce7286cbd240461","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 - 2016 EMC Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ffa3b31_29080690","line":1,"updated":"2017-04-21 19:16:27.000000000","message":"# Copyright (C) 2017 Dell Inc. or its subsidiaries.","commit_id":"2a15410c21e4aa7c6c1e2708937444a3094b836f"},{"author":{"_account_id":25033,"name":"Eric Young","email":"eric.young@dell.com","username":"tssgery"},"change_message_id":"0d5659c00011d852e8f2f8c62ce7286cbd240461","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    ScaleIO creates volumes in multiples of 8."},{"line_number":61,"context_line":"    :param requested_size: Size in bytes"},{"line_number":62,"context_line":"    :return: True if the size fit to ScaleIO, False otherwise"},{"line_number":63,"context_line":"    \"\"\""},{"line_number":64,"context_line":"    if (not requested_size or"},{"line_number":65,"context_line":"            requested_size % (units.Gi * VOLSIZE_MULTIPLE_GB)):"},{"line_number":66,"context_line":"        raise exception.NovaException("}],"source_content_type":"text/x-python","patch_set":10,"id":"7ffa3b31_1a8c27d5","line":63,"updated":"2017-04-21 19:16:27.000000000","message":"Similar to the cinder option for scaleio volumes, we should have a configuration setting that rounds the volume sizes up to multiples of 8GB). The cinder option is \u0027sio_round_volume_capacity\u0027 and the default it \u0027True\u0027","commit_id":"2a15410c21e4aa7c6c1e2708937444a3094b836f"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"fb34cda184438d47b2f56c2fe60846758b3875ff","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    ScaleIO creates volumes in multiples of 8."},{"line_number":61,"context_line":"    :param requested_size: Size in bytes"},{"line_number":62,"context_line":"    :return: True if the size fit to ScaleIO, False otherwise"},{"line_number":63,"context_line":"    \"\"\""},{"line_number":64,"context_line":"    if (not requested_size or"},{"line_number":65,"context_line":"            requested_size % (units.Gi * VOLSIZE_MULTIPLE_GB)):"},{"line_number":66,"context_line":"        raise exception.NovaException("}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_409e1008","line":63,"in_reply_to":"7ffa3b31_1a8c27d5","updated":"2017-04-21 22:46:36.000000000","message":"Unlike Cinder, Nova is not able to receive true allocated size from ephemeral driver. As the result Nova will report that an instance consumes 1GB whereas in fact it consumes 8GB. This will confuse operators. Also this question was considered in the spec as an alternative.","commit_id":"2a15410c21e4aa7c6c1e2708937444a3094b836f"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"4c57ee0207a77a9d21dd694478fdb04a43e57f30","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    return _sdc_guid"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class SIODriver(object):"},{"line_number":214,"context_line":"    \"\"\"Backend image type driver for ScaleIO\"\"\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def __init__(self):"},{"line_number":217,"context_line":"        \"\"\"Initialize ScaleIODriver object."}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_3a24fcae","line":214,"range":{"start_line":213,"start_character":0,"end_line":214,"end_character":47},"updated":"2017-07-11 16:09:38.000000000","message":"This class doesn\u0027t have any state. If you defined a common function to return a siolib.ScaleIO, all of its methods could be module-level.","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"6cfc8011d034f382e5bca542f5242d5a72668c29","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    return _sdc_guid"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class SIODriver(object):"},{"line_number":214,"context_line":"    \"\"\"Backend image type driver for ScaleIO\"\"\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def __init__(self):"},{"line_number":217,"context_line":"        \"\"\"Initialize ScaleIODriver object."}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_f1a88d20","line":214,"range":{"start_line":213,"start_character":0,"end_line":214,"end_character":47},"in_reply_to":"3f1d235d_3a24fcae","updated":"2017-07-18 17:46:02.000000000","message":"Done","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"fe261dffe68ae9e48c35e0673c5c7aca763718bb","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    return _sdc_guid"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class SIODriver(object):"},{"line_number":214,"context_line":"    \"\"\"Backend image type driver for ScaleIO\"\"\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def __init__(self):"},{"line_number":217,"context_line":"        \"\"\"Initialize ScaleIODriver object."}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_a11395b8","line":214,"range":{"start_line":213,"start_character":0,"end_line":214,"end_character":47},"in_reply_to":"3f1d235d_3a24fcae","updated":"2017-07-12 15:04:20.000000000","message":"ok, will do","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"4c57ee0207a77a9d21dd694478fdb04a43e57f30","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        :param intance: Instance object"},{"line_number":487,"context_line":"        :return: Nothing"},{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        volumes \u003d self.ioctx.list_volume_infos()"},{"line_number":490,"context_line":"        prefix \u003d _uuid_to_base64(instance.uuid)"},{"line_number":491,"context_line":"        volumes \u003d [vol for vol in volumes if vol[\u0027name\u0027].startswith(prefix)]"},{"line_number":492,"context_line":"        for volume in volumes:"},{"line_number":493,"context_line":"            self.map_volume(volume[\u0027id\u0027], with_no_wait\u003dTrue)"},{"line_number":494,"context_line":"        if not with_no_wait:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_03b55ccd","line":491,"range":{"start_line":489,"start_character":8,"end_line":491,"end_character":76},"updated":"2017-07-11 16:09:38.000000000","message":"This looks like it would scale extremely poorly with a large number of instances.\n\nWe should already know the names, we don\u0027t need to do a global search for them.","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"fe261dffe68ae9e48c35e0673c5c7aca763718bb","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        :param intance: Instance object"},{"line_number":487,"context_line":"        :return: Nothing"},{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        volumes \u003d self.ioctx.list_volume_infos()"},{"line_number":490,"context_line":"        prefix \u003d _uuid_to_base64(instance.uuid)"},{"line_number":491,"context_line":"        volumes \u003d [vol for vol in volumes if vol[\u0027name\u0027].startswith(prefix)]"},{"line_number":492,"context_line":"        for volume in volumes:"},{"line_number":493,"context_line":"            self.map_volume(volume[\u0027id\u0027], with_no_wait\u003dTrue)"},{"line_number":494,"context_line":"        if not with_no_wait:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_056374de","line":491,"range":{"start_line":489,"start_character":8,"end_line":491,"end_character":76},"in_reply_to":"3f1d235d_03b55ccd","updated":"2017-07-12 15:04:20.000000000","message":"(see also cleanup_volumes for similar case)\n\nWe should know that but we did not. All your review for that were abandoned. I doubt that we can refactor that part of driver.py right now especially for this bp (sio driver).\n\nSo i propose to leave this as is for the first version, adding comments about that.\n\nAnother option is to move this filtering to siolib, to reach ScaleIO developers to improve their API, and later make use the improvement inside siolib not touching Nova.\n\nWhat do you prefer?","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"6cfc8011d034f382e5bca542f5242d5a72668c29","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        :param intance: Instance object"},{"line_number":487,"context_line":"        :return: Nothing"},{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        volumes \u003d self.ioctx.list_volume_infos()"},{"line_number":490,"context_line":"        prefix \u003d _uuid_to_base64(instance.uuid)"},{"line_number":491,"context_line":"        volumes \u003d [vol for vol in volumes if vol[\u0027name\u0027].startswith(prefix)]"},{"line_number":492,"context_line":"        for volume in volumes:"},{"line_number":493,"context_line":"            self.map_volume(volume[\u0027id\u0027], with_no_wait\u003dTrue)"},{"line_number":494,"context_line":"        if not with_no_wait:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_0534de48","line":491,"range":{"start_line":489,"start_character":8,"end_line":491,"end_character":76},"in_reply_to":"3f1d235d_03b55ccd","updated":"2017-07-18 17:46:02.000000000","message":"Done","commit_id":"520c516574850c3167114d73b710ba1e730ae2e1"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5818f3c4405f53bec6804965972d279acb9058e2","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            wait_for_new_size()"},{"line_number":322,"context_line":"        except exception.ResizeError:"},{"line_number":323,"context_line":"            LOG.warning("},{"line_number":324,"context_line":"                _LW(\u0027Host system could not get new size of disk %s\u0027),"},{"line_number":325,"context_line":"                vol_path)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_f7effce6","line":324,"range":{"start_line":324,"start_character":16,"end_line":324,"end_character":20},"updated":"2017-09-22 07:44:56.000000000","message":"It is not necessary.","commit_id":"a80a04184ba45f7be208bbc984d22a5f41160ae6"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5818f3c4405f53bec6804965972d279acb9058e2","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        pd_name \u003d extra_specs.get(LEGACY_PROTECTION_DOMAIN_KEY)"},{"line_number":458,"context_line":"        if pd_name:"},{"line_number":459,"context_line":"            LOG.warning("},{"line_number":460,"context_line":"                _LW(\"Deprecated \u0027%(legacy_key)s\u0027 flavor key is used to \""},{"line_number":461,"context_line":"                    \"specify ScaleIO provisioning type. Please use \u0027%(key)s\u0027 \""},{"line_number":462,"context_line":"                    \"instead.\"),"},{"line_number":463,"context_line":"                {\u0027legacy_key\u0027: LEGACY_PROTECTION_DOMAIN_KEY,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_77b54cee","line":460,"range":{"start_line":460,"start_character":16,"end_line":460,"end_character":20},"updated":"2017-09-22 07:44:56.000000000","message":"ditto","commit_id":"a80a04184ba45f7be208bbc984d22a5f41160ae6"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5818f3c4405f53bec6804965972d279acb9058e2","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        sp_name \u003d extra_specs.get(LEGACY_STORAGE_POOL_KEY)"},{"line_number":474,"context_line":"        if sp_name:"},{"line_number":475,"context_line":"            LOG.warning("},{"line_number":476,"context_line":"                _LW(\"Deprecated \u0027%(legacy_key)s\u0027 flavor key is used to \""},{"line_number":477,"context_line":"                    \"specify ScaleIO provisioning type. Please use \u0027%(key)s\u0027 \""},{"line_number":478,"context_line":"                    \"instead.\"),"},{"line_number":479,"context_line":"                {\u0027legacy_key\u0027: LEGACY_STORAGE_POOL_KEY,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_57ba50de","line":476,"range":{"start_line":476,"start_character":16,"end_line":476,"end_character":20},"updated":"2017-09-22 07:44:56.000000000","message":"ditto","commit_id":"a80a04184ba45f7be208bbc984d22a5f41160ae6"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5818f3c4405f53bec6804965972d279acb9058e2","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        ptype \u003d extra_specs.get(LEGACY_PROVISIONING_TYPE_KEY)"},{"line_number":491,"context_line":"        if ptype:"},{"line_number":492,"context_line":"            LOG.warning("},{"line_number":493,"context_line":"                _LW(\"Deprecated \u0027%(legacy_key)s\u0027 flavor key is used to \""},{"line_number":494,"context_line":"                    \"specify ScaleIO provisioning type. Please use \u0027%(key)s\u0027 \""},{"line_number":495,"context_line":"                    \"instead.\"),"},{"line_number":496,"context_line":"                {\u0027legacy_key\u0027: LEGACY_PROVISIONING_TYPE_KEY,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_17ccd887","line":493,"range":{"start_line":493,"start_character":16,"end_line":493,"end_character":20},"updated":"2017-09-22 07:44:56.000000000","message":"ditto","commit_id":"a80a04184ba45f7be208bbc984d22a5f41160ae6"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5818f3c4405f53bec6804965972d279acb9058e2","unresolved":false,"context_lines":[{"line_number":503,"context_line":"        value_to_use \u003d {\u0027ThickProvisioned\u0027: \u0027thick\u0027,"},{"line_number":504,"context_line":"                        \u0027ThinProvisioned\u0027: \u0027thin\u0027}[ptype]"},{"line_number":505,"context_line":"        LOG.warning("},{"line_number":506,"context_line":"            _LW(\"Deprecated provisioning type \u0027%(legacy_type)s\u0027 is specified \""},{"line_number":507,"context_line":"                \"in %(source)s. Please change the value to \u0027%(type)s\u0027, \""},{"line_number":508,"context_line":"                \"because it will not be supported in next Nova releases.\"),"},{"line_number":509,"context_line":"            {\u0027legacy_type\u0027: ptype, \u0027source\u0027: opt_source, \u0027type\u0027: value_to_use})"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_d7c5205d","line":506,"range":{"start_line":506,"start_character":12,"end_line":506,"end_character":16},"updated":"2017-09-22 07:44:56.000000000","message":"ditto","commit_id":"a80a04184ba45f7be208bbc984d22a5f41160ae6"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5818f3c4405f53bec6804965972d279acb9058e2","unresolved":false,"context_lines":[{"line_number":522,"context_line":"                drv_cfg \u003d \u0027drv_cfg\u0027"},{"line_number":523,"context_line":"            (out, _err) \u003d utils.execute(drv_cfg, \u0027--query_guid\u0027,"},{"line_number":524,"context_line":"                                        run_as_root\u003dTrue)"},{"line_number":525,"context_line":"            LOG.info(_LI(\u0027Acquire ScaleIO SDC guid %s\u0027), out)"},{"line_number":526,"context_line":"            _sdc_guid \u003d out"},{"line_number":527,"context_line":"    return _sdc_guid"},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_97a568b8","line":525,"range":{"start_line":525,"start_character":21,"end_line":525,"end_character":25},"updated":"2017-09-22 07:44:56.000000000","message":"ditto","commit_id":"a80a04184ba45f7be208bbc984d22a5f41160ae6"}]}
