)]}'
{"nova/virt/libvirt/driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5b8b3e6197145a4d115c5f233c9bb53ae1883429","unresolved":true,"context_lines":[{"line_number":1483,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":1484,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":1485,"context_line":"        network_info: ty.Dict[str, ty.Any],"},{"line_number":1486,"context_line":"        block_device_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1487,"context_line":"        destroy_disks: bool \u003d True,"},{"line_number":1488,"context_line":"        migrate_data: \u0027objects.LibvirtLiveMigrateData\u0027 \u003d None,"},{"line_number":1489,"context_line":"        destroy_vifs: bool \u003d True,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c0657675_e98a9048","line":1486,"range":{"start_line":1486,"start_character":27,"end_line":1486,"end_character":47},"updated":"2021-06-08 11:08:51.000000000","message":"this should be\n\n  ty.Optional[ty.Dict[str, ty.Any]]\n\nassuming it\u0027s possible for us to _not_ pass this argument or to pass a None value. Weird that this didn\u0027t pick up on the change. I guess we haven\u0027t typed any callers yet?","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"3beaa71530f9b6f408ff76c14a19b337bc295418","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":1484,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":1485,"context_line":"        network_info: ty.Dict[str, ty.Any],"},{"line_number":1486,"context_line":"        block_device_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1487,"context_line":"        destroy_disks: bool \u003d True,"},{"line_number":1488,"context_line":"        migrate_data: \u0027objects.LibvirtLiveMigrateData\u0027 \u003d None,"},{"line_number":1489,"context_line":"        destroy_vifs: bool \u003d True,"}],"source_content_type":"text/x-python","patch_set":2,"id":"355c5ac5_513e4b89","line":1486,"range":{"start_line":1486,"start_character":27,"end_line":1486,"end_character":47},"in_reply_to":"c0657675_e98a9048","updated":"2021-06-11 13:37:20.000000000","message":"Done","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca1dd62857f0a1d081af450f7648d41098014400","unresolved":true,"context_lines":[{"line_number":1485,"context_line":"        network_info: ty.Dict[str, ty.Any],"},{"line_number":1486,"context_line":"        block_device_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1487,"context_line":"        destroy_disks: bool \u003d True,"},{"line_number":1488,"context_line":"        migrate_data: \u0027objects.LibvirtLiveMigrateData\u0027 \u003d None,"},{"line_number":1489,"context_line":"        destroy_vifs: bool \u003d True,"},{"line_number":1490,"context_line":"        destroy_secrets: bool \u003d True"},{"line_number":1491,"context_line":"    ) -\u003e None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"c6261b2d_0159a737","line":1488,"updated":"2021-06-09 10:38:59.000000000","message":"If the above holds then this also needs to be Optional[\u0027objects.LibvirtLiveMigrateData\u0027] to allow the None value","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"3beaa71530f9b6f408ff76c14a19b337bc295418","unresolved":false,"context_lines":[{"line_number":1485,"context_line":"        network_info: ty.Dict[str, ty.Any],"},{"line_number":1486,"context_line":"        block_device_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1487,"context_line":"        destroy_disks: bool \u003d True,"},{"line_number":1488,"context_line":"        migrate_data: \u0027objects.LibvirtLiveMigrateData\u0027 \u003d None,"},{"line_number":1489,"context_line":"        destroy_vifs: bool \u003d True,"},{"line_number":1490,"context_line":"        destroy_secrets: bool \u003d True"},{"line_number":1491,"context_line":"    ) -\u003e None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"74d519c0_ad43f624","line":1488,"in_reply_to":"c6261b2d_0159a737","updated":"2021-06-11 13:37:20.000000000","message":"Done","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca1dd62857f0a1d081af450f7648d41098014400","unresolved":true,"context_lines":[{"line_number":1543,"context_line":"        self,"},{"line_number":1544,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":1545,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":1546,"context_line":"        network_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1547,"context_line":"        block_device_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1548,"context_line":"        destroy_vifs: bool \u003d True,"},{"line_number":1549,"context_line":"        cleanup_instance_dir: bool \u003d False,"},{"line_number":1550,"context_line":"        cleanup_instance_disks: bool \u003d False,"}],"source_content_type":"text/x-python","patch_set":2,"id":"d7b1b652_935f29b7","line":1547,"range":{"start_line":1546,"start_character":0,"end_line":1547,"end_character":55},"updated":"2021-06-09 10:38:59.000000000","message":"ditto","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b8201d6b75958471c006ae64fa1d85184364ec27","unresolved":false,"context_lines":[{"line_number":1543,"context_line":"        self,"},{"line_number":1544,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":1545,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":1546,"context_line":"        network_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1547,"context_line":"        block_device_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1548,"context_line":"        destroy_vifs: bool \u003d True,"},{"line_number":1549,"context_line":"        cleanup_instance_dir: bool \u003d False,"},{"line_number":1550,"context_line":"        cleanup_instance_disks: bool \u003d False,"}],"source_content_type":"text/x-python","patch_set":2,"id":"f0adcc5a_e284c7a6","line":1547,"range":{"start_line":1546,"start_character":0,"end_line":1547,"end_character":55},"in_reply_to":"d3f3a073_7229507c","updated":"2021-06-14 11:48:07.000000000","message":"Looks like you didn\u0027t actually drop the default for the latter","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"3beaa71530f9b6f408ff76c14a19b337bc295418","unresolved":false,"context_lines":[{"line_number":1543,"context_line":"        self,"},{"line_number":1544,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":1545,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":1546,"context_line":"        network_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1547,"context_line":"        block_device_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1548,"context_line":"        destroy_vifs: bool \u003d True,"},{"line_number":1549,"context_line":"        cleanup_instance_dir: bool \u003d False,"},{"line_number":1550,"context_line":"        cleanup_instance_disks: bool \u003d False,"}],"source_content_type":"text/x-python","patch_set":2,"id":"d3f3a073_7229507c","line":1547,"range":{"start_line":1546,"start_character":0,"end_line":1547,"end_character":55},"in_reply_to":"d7b1b652_935f29b7","updated":"2021-06-11 13:37:20.000000000","message":"These aren\u0027t actually optional and are provided by all callers so I\u0027m going to remove \u003d None for both.","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca1dd62857f0a1d081af450f7648d41098014400","unresolved":true,"context_lines":[{"line_number":1917,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":1918,"context_line":"        connection_info: ty.Dict[str, ty.Any],"},{"line_number":1919,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":1920,"context_line":"        encryption: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1921,"context_line":"        destroy_secrets: bool \u003d True,"},{"line_number":1922,"context_line":"    ) -\u003e None:"},{"line_number":1923,"context_line":"        \"\"\"Disconnect a volume identified by the provided connection_info"}],"source_content_type":"text/x-python","patch_set":2,"id":"58b0e650_beb9520a","line":1920,"updated":"2021-06-09 10:38:59.000000000","message":"ditto","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"3beaa71530f9b6f408ff76c14a19b337bc295418","unresolved":false,"context_lines":[{"line_number":1917,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":1918,"context_line":"        connection_info: ty.Dict[str, ty.Any],"},{"line_number":1919,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":1920,"context_line":"        encryption: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":1921,"context_line":"        destroy_secrets: bool \u003d True,"},{"line_number":1922,"context_line":"    ) -\u003e None:"},{"line_number":1923,"context_line":"        \"\"\"Disconnect a volume identified by the provided connection_info"}],"source_content_type":"text/x-python","patch_set":2,"id":"63d0bc4c_23988214","line":1920,"in_reply_to":"58b0e650_beb9520a","updated":"2021-06-11 13:37:20.000000000","message":"Done","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca1dd62857f0a1d081af450f7648d41098014400","unresolved":true,"context_lines":[{"line_number":1994,"context_line":"        self,"},{"line_number":1995,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":1996,"context_line":"        # FIXME(lyarwood): connection_info.get(\u0027data\u0027).get(\u0027device_path\u0027)"},{"line_number":1997,"context_line":"        # breaks mypy here so for the time being use ty.Any."},{"line_number":1998,"context_line":"        connection_info: ty.Any,"},{"line_number":1999,"context_line":"        encryption: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":2000,"context_line":"    ) -\u003e None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9bf92b4a_6b3aba7d","line":1997,"updated":"2021-06-09 10:38:59.000000000","message":"This is actually showing a potential bug in our code. If connection_info is a dict then dict.get(\u0027data\u0027) can return None and then None.get(\u0027device_path\u0027) is a TypeError.\n\nOne solution is to ensure dict.get returns a dict even if the \u0027data\u0027 key is missing. \n\n   device_path \u003d connection_info.get(\u0027data\u0027, {}).get(\u0027device_path\u0027)\n\nStill we can say that we want to keep the original behavior of the code to raise a TypeError if there is no \u0027data\u0027 key in the connection_info. Then I don\u0027t have any idea (other than ty.Any you use) to make mypy understand our intention.","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca1dd62857f0a1d081af450f7648d41098014400","unresolved":true,"context_lines":[{"line_number":1996,"context_line":"        # FIXME(lyarwood): connection_info.get(\u0027data\u0027).get(\u0027device_path\u0027)"},{"line_number":1997,"context_line":"        # breaks mypy here so for the time being use ty.Any."},{"line_number":1998,"context_line":"        connection_info: ty.Any,"},{"line_number":1999,"context_line":"        encryption: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":2000,"context_line":"    ) -\u003e None:"},{"line_number":2001,"context_line":"        \"\"\"Attach the frontend encryptor if one is required by the volume."},{"line_number":2002,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba45fbe3_52dfef3f","line":1999,"updated":"2021-06-09 10:38:59.000000000","message":"ditto","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b8201d6b75958471c006ae64fa1d85184364ec27","unresolved":false,"context_lines":[{"line_number":1996,"context_line":"        # FIXME(lyarwood): connection_info.get(\u0027data\u0027).get(\u0027device_path\u0027)"},{"line_number":1997,"context_line":"        # breaks mypy here so for the time being use ty.Any."},{"line_number":1998,"context_line":"        connection_info: ty.Any,"},{"line_number":1999,"context_line":"        encryption: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":2000,"context_line":"    ) -\u003e None:"},{"line_number":2001,"context_line":"        \"\"\"Attach the frontend encryptor if one is required by the volume."},{"line_number":2002,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"cca1ad66_10dd22e4","line":1999,"in_reply_to":"22f0287a_7ce8ff81","updated":"2021-06-14 11:48:07.000000000","message":"Didn\u0027t drop this either","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"3beaa71530f9b6f408ff76c14a19b337bc295418","unresolved":false,"context_lines":[{"line_number":1996,"context_line":"        # FIXME(lyarwood): connection_info.get(\u0027data\u0027).get(\u0027device_path\u0027)"},{"line_number":1997,"context_line":"        # breaks mypy here so for the time being use ty.Any."},{"line_number":1998,"context_line":"        connection_info: ty.Any,"},{"line_number":1999,"context_line":"        encryption: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":2000,"context_line":"    ) -\u003e None:"},{"line_number":2001,"context_line":"        \"\"\"Attach the frontend encryptor if one is required by the volume."},{"line_number":2002,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"22f0287a_7ce8ff81","line":1999,"in_reply_to":"ba45fbe3_52dfef3f","updated":"2021-06-11 13:37:20.000000000","message":"Again always provided so I\u0027ve dropped the \u003d None.","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca1dd62857f0a1d081af450f7648d41098014400","unresolved":true,"context_lines":[{"line_number":2060,"context_line":"        self,"},{"line_number":2061,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":2062,"context_line":"        connection_info: ty.Dict[str, ty.Any],"},{"line_number":2063,"context_line":"        encryption: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":2064,"context_line":"        destroy_secrets: bool \u003d True,"},{"line_number":2065,"context_line":"    ) -\u003e None:"},{"line_number":2066,"context_line":"        \"\"\"Detach the frontend encryptor if one is required by the volume."}],"source_content_type":"text/x-python","patch_set":2,"id":"ce8d334e_edcc1924","line":2063,"updated":"2021-06-09 10:38:59.000000000","message":"ditto","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5b8b3e6197145a4d115c5f233c9bb53ae1883429","unresolved":true,"context_lines":[{"line_number":2073,"context_line":"        Libvirt volume secret from the host."},{"line_number":2074,"context_line":""},{"line_number":2075,"context_line":"        :param context: security context"},{"line_number":2076,"context_line":"        :param connction_info: The connection_info associated with the volume"},{"line_number":2077,"context_line":"        :param encryption: The encryption metadata dict associated with the vol"},{"line_number":2078,"context_line":"        :param destroy_secrets: Indicates if secrets should be destroyed"},{"line_number":2079,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"8803e3d8_0aea06b7","line":2076,"range":{"start_line":2076,"start_character":15,"end_line":2076,"end_character":24},"updated":"2021-06-08 11:08:51.000000000","message":"connection","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca1dd62857f0a1d081af450f7648d41098014400","unresolved":true,"context_lines":[{"line_number":3822,"context_line":"        context: \u0027nova.context.Context\u0027,"},{"line_number":3823,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3824,"context_line":"        network_info: ty.Dict[str, ty.Any],"},{"line_number":3825,"context_line":"        block_device_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":3826,"context_line":"        accel_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":3827,"context_line":"    ) -\u003e None:"},{"line_number":3828,"context_line":"        \"\"\"Undefine and then rebuild the given instance."},{"line_number":3829,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ab19e80b_5b8ba17b","line":3826,"range":{"start_line":3825,"start_character":0,"end_line":3826,"end_character":48},"updated":"2021-06-09 10:38:59.000000000","message":"ditto","commit_id":"baedb81219bea9e78abc5ceefbfab1298663e2d9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b8201d6b75958471c006ae64fa1d85184364ec27","unresolved":true,"context_lines":[{"line_number":2071,"context_line":"        Libvirt volume secret from the host."},{"line_number":2072,"context_line":""},{"line_number":2073,"context_line":"        :param context: security context"},{"line_number":2074,"context_line":"        :param connction_info: The connection_info associated with the volume"},{"line_number":2075,"context_line":"        :param encryption: The encryption metadata dict associated with the vol"},{"line_number":2076,"context_line":"        :param destroy_secrets: Indicates if secrets should be destroyed"},{"line_number":2077,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"0426f5be_28b66cdf","line":2074,"range":{"start_line":2074,"start_character":15,"end_line":2074,"end_character":24},"updated":"2021-06-14 11:48:07.000000000","message":"connection","commit_id":"ce79f479e6ef915a0dd2850de42c7801e4964813"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b8201d6b75958471c006ae64fa1d85184364ec27","unresolved":true,"context_lines":[{"line_number":3821,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3822,"context_line":"        network_info: ty.Dict[str, ty.Any],"},{"line_number":3823,"context_line":"        block_device_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":3824,"context_line":"        accel_info: ty.Dict[str, ty.Any] \u003d None,"},{"line_number":3825,"context_line":"    ) -\u003e None:"},{"line_number":3826,"context_line":"        \"\"\"Undefine and then rebuild the given instance."},{"line_number":3827,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"64689ea1_db0ce002","line":3824,"updated":"2021-06-14 11:48:07.000000000","message":"Still incorrect?","commit_id":"ce79f479e6ef915a0dd2850de42c7801e4964813"}]}
