)]}'
{"nova/virt/libvirt/driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f764f9c916f9211225963fbde3b9df72cb4e2f0b","unresolved":true,"context_lines":[{"line_number":187,"context_line":"    \u0027smbfs\u0027: \u0027nova.virt.libvirt.volume.smbfs.LibvirtSMBFSVolumeDriver\u0027,"},{"line_number":188,"context_line":"    \u0027fibre_channel\u0027:"},{"line_number":189,"context_line":"        \u0027nova.virt.libvirt.volume.fibrechannel\u0027"},{"line_number":190,"context_line":"        \u0027.LibvirtFibreChannelVolumeDriver\u0027,"},{"line_number":191,"context_line":"    \u0027gpfs\u0027: \u0027nova.virt.libvirt.volume.gpfs.LibvirtGPFSVolumeDriver\u0027,"},{"line_number":192,"context_line":"    \u0027quobyte\u0027: \u0027nova.virt.libvirt.volume.quobyte.LibvirtQuobyteVolumeDriver\u0027,"},{"line_number":193,"context_line":"    \u0027scaleio\u0027: \u0027nova.virt.libvirt.volume.scaleio.LibvirtScaleIOVolumeDriver\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"35d1d2d8_95a38c81","line":190,"updated":"2021-01-21 15:13:36.000000000","message":"nit: I know this isn\u0027t you originally, but I\u0027d personally just put this on one line and \u0027# noqa: E501\u0027 it","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c7f7490b364bff0c79db51cab29b7c8d350904a9","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    \u0027smbfs\u0027: \u0027nova.virt.libvirt.volume.smbfs.LibvirtSMBFSVolumeDriver\u0027,"},{"line_number":188,"context_line":"    \u0027fibre_channel\u0027:"},{"line_number":189,"context_line":"        \u0027nova.virt.libvirt.volume.fibrechannel\u0027"},{"line_number":190,"context_line":"        \u0027.LibvirtFibreChannelVolumeDriver\u0027,"},{"line_number":191,"context_line":"    \u0027gpfs\u0027: \u0027nova.virt.libvirt.volume.gpfs.LibvirtGPFSVolumeDriver\u0027,"},{"line_number":192,"context_line":"    \u0027quobyte\u0027: \u0027nova.virt.libvirt.volume.quobyte.LibvirtQuobyteVolumeDriver\u0027,"},{"line_number":193,"context_line":"    \u0027scaleio\u0027: \u0027nova.virt.libvirt.volume.scaleio.LibvirtScaleIOVolumeDriver\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf06f4b3_4c7298eb","line":190,"in_reply_to":"35d1d2d8_95a38c81","updated":"2021-01-21 16:47:51.000000000","message":"Done","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f764f9c916f9211225963fbde3b9df72cb4e2f0b","unresolved":true,"context_lines":[{"line_number":192,"context_line":"    \u0027quobyte\u0027: \u0027nova.virt.libvirt.volume.quobyte.LibvirtQuobyteVolumeDriver\u0027,"},{"line_number":193,"context_line":"    \u0027scaleio\u0027: \u0027nova.virt.libvirt.volume.scaleio.LibvirtScaleIOVolumeDriver\u0027,"},{"line_number":194,"context_line":"    \u0027vzstorage\u0027:"},{"line_number":195,"context_line":"        \u0027nova.virt.libvirt.volume.vzstorage.LibvirtVZStorageVolumeDriver\u0027,"},{"line_number":196,"context_line":"    \u0027storpool\u0027:"},{"line_number":197,"context_line":"        \u0027nova.virt.libvirt.volume.storpool.LibvirtStorPoolVolumeDriver\u0027,"},{"line_number":198,"context_line":"    \u0027nvmeof\u0027: \u0027nova.virt.libvirt.volume.nvme.LibvirtNVMEVolumeDriver\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fd3115c6_a2c09cc3","line":195,"updated":"2021-01-21 15:13:36.000000000","message":"ditto","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c7f7490b364bff0c79db51cab29b7c8d350904a9","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    \u0027quobyte\u0027: \u0027nova.virt.libvirt.volume.quobyte.LibvirtQuobyteVolumeDriver\u0027,"},{"line_number":193,"context_line":"    \u0027scaleio\u0027: \u0027nova.virt.libvirt.volume.scaleio.LibvirtScaleIOVolumeDriver\u0027,"},{"line_number":194,"context_line":"    \u0027vzstorage\u0027:"},{"line_number":195,"context_line":"        \u0027nova.virt.libvirt.volume.vzstorage.LibvirtVZStorageVolumeDriver\u0027,"},{"line_number":196,"context_line":"    \u0027storpool\u0027:"},{"line_number":197,"context_line":"        \u0027nova.virt.libvirt.volume.storpool.LibvirtStorPoolVolumeDriver\u0027,"},{"line_number":198,"context_line":"    \u0027nvmeof\u0027: \u0027nova.virt.libvirt.volume.nvme.LibvirtNVMEVolumeDriver\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"e5cf0c8d_5be5332d","line":195,"in_reply_to":"fd3115c6_a2c09cc3","updated":"2021-01-21 16:47:51.000000000","message":"Done","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f764f9c916f9211225963fbde3b9df72cb4e2f0b","unresolved":true,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        self.vif_driver \u003d libvirt_vif.LibvirtGenericVIFDriver()"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # NOTE(lyarwood): Volume drivers are now loaded on-demand"},{"line_number":329,"context_line":"        self.volume_drivers \u003d {}"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        self._disk_cachemode \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"3588a7b1_a353ac7e","line":328,"range":{"start_line":328,"start_character":45,"end_line":328,"end_character":48},"updated":"2021-01-21 15:13:36.000000000","message":"strike","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c7f7490b364bff0c79db51cab29b7c8d350904a9","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        self.vif_driver \u003d libvirt_vif.LibvirtGenericVIFDriver()"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # NOTE(lyarwood): Volume drivers are now loaded on-demand"},{"line_number":329,"context_line":"        self.volume_drivers \u003d {}"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        self._disk_cachemode \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"e5bdc9f7_dbe9d5ed","line":328,"range":{"start_line":328,"start_character":45,"end_line":328,"end_character":48},"in_reply_to":"3588a7b1_a353ac7e","updated":"2021-01-21 16:47:51.000000000","message":"Done","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f764f9c916f9211225963fbde3b9df72cb4e2f0b","unresolved":true,"context_lines":[{"line_number":326,"context_line":"        self.vif_driver \u003d libvirt_vif.LibvirtGenericVIFDriver()"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # NOTE(lyarwood): Volume drivers are now loaded on-demand"},{"line_number":329,"context_line":"        self.volume_drivers \u003d {}"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        self._disk_cachemode \u003d None"},{"line_number":332,"context_line":"        self.image_cache_manager \u003d imagecache.ImageCacheManager()"}],"source_content_type":"text/x-python","patch_set":2,"id":"0e4bd876_41ee6bb6","line":329,"range":{"start_line":329,"start_character":27,"end_line":329,"end_character":28},"updated":"2021-01-21 15:13:36.000000000","message":"type hints would help me later when I finally get to this file. I think:\n\n  ty.Dict[str, volume.LibvirtBaseVolumeDriver]\n\nwould do the trick, if you added\n\n  from nova.virt.libvirt.volume import volume\n\nabove","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c7f7490b364bff0c79db51cab29b7c8d350904a9","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        self.vif_driver \u003d libvirt_vif.LibvirtGenericVIFDriver()"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # NOTE(lyarwood): Volume drivers are now loaded on-demand"},{"line_number":329,"context_line":"        self.volume_drivers \u003d {}"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        self._disk_cachemode \u003d None"},{"line_number":332,"context_line":"        self.image_cache_manager \u003d imagecache.ImageCacheManager()"}],"source_content_type":"text/x-python","patch_set":2,"id":"2ba174ca_de9f8900","line":329,"range":{"start_line":329,"start_character":27,"end_line":329,"end_character":28},"in_reply_to":"0e4bd876_41ee6bb6","updated":"2021-01-21 16:47:51.000000000","message":"Done","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f764f9c916f9211225963fbde3b9df72cb4e2f0b","unresolved":true,"context_lines":[{"line_number":1569,"context_line":"            except exception.InternalError as e:"},{"line_number":1570,"context_line":"                LOG.debug(e, instance\u003dinstance)"},{"line_number":1571,"context_line":""},{"line_number":1572,"context_line":"    def _get_volume_driver(self, connection_info):"},{"line_number":1573,"context_line":"        \"\"\"Fetch the nova.virt.libvirt.volume driver"},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"        Based on the provided connection_info return a nova.virt.libvirt.volume"}],"source_content_type":"text/x-python","patch_set":2,"id":"97909218_b62f9b30","line":1572,"range":{"start_line":1572,"start_character":33,"end_line":1572,"end_character":48},"updated":"2021-01-21 15:13:36.000000000","message":"This is an arbitrary dict, right? Could we say so?\n\n  connection_info: ty.Dict[str, ty.Any]","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c7f7490b364bff0c79db51cab29b7c8d350904a9","unresolved":false,"context_lines":[{"line_number":1569,"context_line":"            except exception.InternalError as e:"},{"line_number":1570,"context_line":"                LOG.debug(e, instance\u003dinstance)"},{"line_number":1571,"context_line":""},{"line_number":1572,"context_line":"    def _get_volume_driver(self, connection_info):"},{"line_number":1573,"context_line":"        \"\"\"Fetch the nova.virt.libvirt.volume driver"},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"        Based on the provided connection_info return a nova.virt.libvirt.volume"}],"source_content_type":"text/x-python","patch_set":2,"id":"6e7056de_f7c8a358","line":1572,"range":{"start_line":1572,"start_character":33,"end_line":1572,"end_character":48},"in_reply_to":"97909218_b62f9b30","updated":"2021-01-21 16:47:51.000000000","message":"Done","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f764f9c916f9211225963fbde3b9df72cb4e2f0b","unresolved":true,"context_lines":[{"line_number":1578,"context_line":""},{"line_number":1579,"context_line":"        :param connection_info: The connection_info associated with the volume"},{"line_number":1580,"context_line":"        :raises: VolumeDriverNotFound if no driver is found or if the host"},{"line_number":1581,"context_line":"                 doesn\u0027t support the requested driver. This retains legacy"},{"line_number":1582,"context_line":"                 behaviour when only supported drivers were loaded on startup"},{"line_number":1583,"context_line":"                 leading to a VolumeDriverNotFound being raised later if an"},{"line_number":1584,"context_line":"                 invalid driver was requested."}],"source_content_type":"text/x-python","patch_set":2,"id":"05f28e95_8c7de0bb","line":1581,"range":{"start_line":1581,"start_character":12,"end_line":1581,"end_character":17},"updated":"2021-01-21 15:13:36.000000000","message":"nit: can we drop this extra indentation?","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c7f7490b364bff0c79db51cab29b7c8d350904a9","unresolved":false,"context_lines":[{"line_number":1578,"context_line":""},{"line_number":1579,"context_line":"        :param connection_info: The connection_info associated with the volume"},{"line_number":1580,"context_line":"        :raises: VolumeDriverNotFound if no driver is found or if the host"},{"line_number":1581,"context_line":"                 doesn\u0027t support the requested driver. This retains legacy"},{"line_number":1582,"context_line":"                 behaviour when only supported drivers were loaded on startup"},{"line_number":1583,"context_line":"                 leading to a VolumeDriverNotFound being raised later if an"},{"line_number":1584,"context_line":"                 invalid driver was requested."}],"source_content_type":"text/x-python","patch_set":2,"id":"263dea9e_7c7b6739","line":1581,"range":{"start_line":1581,"start_character":12,"end_line":1581,"end_character":17},"in_reply_to":"05f28e95_8c7de0bb","updated":"2021-01-21 16:47:51.000000000","message":"Done","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f764f9c916f9211225963fbde3b9df72cb4e2f0b","unresolved":true,"context_lines":[{"line_number":1606,"context_line":"                return self.volume_drivers.get(driver_type)"},{"line_number":1607,"context_line":"            except brick_exception.InvalidConnectorProtocol:"},{"line_number":1608,"context_line":"                LOG.debug(\u0027Unable to load volume driver %s. It is not \u0027"},{"line_number":1609,"context_line":"                          \u0027supported on this host.\u0027, driver_type)"},{"line_number":1610,"context_line":"                raise exception.VolumeDriverNotFound(driver_type\u003ddriver_type)"},{"line_number":1611,"context_line":""},{"line_number":1612,"context_line":"        # Cache the volume driver if it hasn\u0027t already been"}],"source_content_type":"text/x-python","patch_set":2,"id":"d3f3a8fd_e47430ef","line":1609,"updated":"2021-01-21 15:13:36.000000000","message":"Rather than doing this, could we add a new exception that subclasses \u0027VolumeDriverNotFound\u0027 called e.g. \u0027VolumeDriverNotSupported\u0027? No change to handling code but easier to grok in logs if debug-level logging is disabled","commit_id":"5e93b1f134883e5158f7b7969287bcdc9c80d86c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"33d65ec6a5ff201e16e6d9e3b0f14fe8109c2bfc","unresolved":true,"context_lines":[{"line_number":186,"context_line":"    \u0027rbd\u0027: \u0027nova.virt.libvirt.volume.net.LibvirtNetVolumeDriver\u0027,"},{"line_number":187,"context_line":"    \u0027nfs\u0027: \u0027nova.virt.libvirt.volume.nfs.LibvirtNFSVolumeDriver\u0027,"},{"line_number":188,"context_line":"    \u0027smbfs\u0027: \u0027nova.virt.libvirt.volume.smbfs.LibvirtSMBFSVolumeDriver\u0027,"},{"line_number":189,"context_line":"    \u0027fibre_channel\u0027: \u0027nova.virt.libvirt.volume.fibrechannel.LibvirtFibreChannelVolumeDriver\u0027,  # noqa:E501"},{"line_number":190,"context_line":"    \u0027gpfs\u0027: \u0027nova.virt.libvirt.volume.gpfs.LibvirtGPFSVolumeDriver\u0027,"},{"line_number":191,"context_line":"    \u0027quobyte\u0027: \u0027nova.virt.libvirt.volume.quobyte.LibvirtQuobyteVolumeDriver\u0027,"},{"line_number":192,"context_line":"    \u0027scaleio\u0027: \u0027nova.virt.libvirt.volume.scaleio.LibvirtScaleIOVolumeDriver\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf13124f_6b306e66","line":189,"range":{"start_line":189,"start_character":59,"end_line":189,"end_character":60},"updated":"2021-01-22 10:30:39.000000000","message":"nit: I prefer wrapping over noqa but I wont block on this","commit_id":"684780ac0d9d76af336bb6d8c43ccc8e92d5444c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"33d65ec6a5ff201e16e6d9e3b0f14fe8109c2bfc","unresolved":true,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        self.vif_driver \u003d libvirt_vif.LibvirtGenericVIFDriver()"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # NOTE(lyarwood): Volume drivers are loaded on-demand"},{"line_number":326,"context_line":"        self.volume_drivers: ty.Dict[str, volume.LibvirtBaseVolumeDriver] \u003d {}"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        self._disk_cachemode \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"c6cf0eda_41306ed3","line":325,"updated":"2021-01-22 10:30:39.000000000","message":"I would add info about the key of the dict here. Is it connection_info[\u0027driver_volume_type\u0027] ?","commit_id":"684780ac0d9d76af336bb6d8c43ccc8e92d5444c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"33d65ec6a5ff201e16e6d9e3b0f14fe8109c2bfc","unresolved":true,"context_lines":[{"line_number":1567,"context_line":"                LOG.debug(e, instance\u003dinstance)"},{"line_number":1568,"context_line":""},{"line_number":1569,"context_line":"    def _get_volume_driver("},{"line_number":1570,"context_line":"        self, connection_info: ty.Dict[str, ty.Any]"},{"line_number":1571,"context_line":"    ) -\u003e \u0027volume.LibvirtBaseVolumeDriver\u0027:"},{"line_number":1572,"context_line":"        \"\"\"Fetch the nova.virt.libvirt.volume driver"},{"line_number":1573,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"6c54b22d_00e44fc8","line":1570,"range":{"start_line":1570,"start_character":44,"end_line":1570,"end_character":50},"updated":"2021-01-22 10:30:39.000000000","message":"yeah, I guess it is a complicated nested structure","commit_id":"684780ac0d9d76af336bb6d8c43ccc8e92d5444c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"33d65ec6a5ff201e16e6d9e3b0f14fe8109c2bfc","unresolved":true,"context_lines":[{"line_number":1572,"context_line":"        \"\"\"Fetch the nova.virt.libvirt.volume driver"},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":"        Based on the provided connection_info return a nova.virt.libvirt.volume"},{"line_number":1575,"context_line":"        driver. This will call out to os-brick to construct an connector and"},{"line_number":1576,"context_line":"        check if the connector is valid on the underlying host."},{"line_number":1577,"context_line":""},{"line_number":1578,"context_line":"        :param connection_info: The connection_info associated with the volume"}],"source_content_type":"text/x-python","patch_set":4,"id":"66c2b765_002b5c87","line":1575,"range":{"start_line":1575,"start_character":60,"end_line":1575,"end_character":62},"updated":"2021-01-22 10:30:39.000000000","message":"a","commit_id":"684780ac0d9d76af336bb6d8c43ccc8e92d5444c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"33d65ec6a5ff201e16e6d9e3b0f14fe8109c2bfc","unresolved":true,"context_lines":[{"line_number":1589,"context_line":"            raise exception.VolumeDriverNotFound(driver_type\u003ddriver_type)"},{"line_number":1590,"context_line":""},{"line_number":1591,"context_line":"        # Return the cached driver"},{"line_number":1592,"context_line":"        if driver_type in self.volume_drivers:"},{"line_number":1593,"context_line":"            return self.volume_drivers.get(driver_type)"},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"        @utils.synchronized(\u0027cache_volume_driver\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"f19a49d7_729c6820","line":1592,"range":{"start_line":1592,"start_character":11,"end_line":1592,"end_character":45},"updated":"2021-01-22 10:30:39.000000000","message":"first I was like: Don\u0027t we need to do this under the same lock too? Without the lock it allows two request to cache the same driver as both sees that the driver is not cached yet so both call go into _cache_volume_driver() in parallel.\n\nthen I saw that there is a second check under the lock. So this is just an optimization to avoid grabbing the lock the driver is already cached. Looks good","commit_id":"684780ac0d9d76af336bb6d8c43ccc8e92d5444c"}]}
