)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"28c721bdbe2fa20faa2296768e12ce6480ca3594","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u003c/metadata\u003e"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: I45f1df4935905170957c2ea2496c8a698a7464a2"},{"line_number":21,"context_line":"blueprint: libvirt-driver-domain-metadata"},{"line_number":22,"context_line":"Signed-off-by: Nobuhiro MIKI \u003cnmiki@yahoo-corp.jp\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f560f44_80ec7829","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":41},"updated":"2020-09-11 12:32:17.000000000","message":"This is a 6 years old, already closed BP[1]. I see how this current work related to that old BP but I suggest to open a new BP describing your work.\n\n[1] https://blueprints.launchpad.net/nova/+spec/libvirt-driver-domain-metadata","commit_id":"65efb29c65b3f04e54ea52ea10c3923541a420f4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Example:"},{"line_number":14,"context_line":"\u003cmetadata\u003e"},{"line_number":15,"context_line":"  \u003cnova:instance xmlns:nova\u003d\"http://openstack.org/xmlns/libvirt/nova/1.0\"\u003e"},{"line_number":16,"context_line":"    ..."},{"line_number":17,"context_line":"    \u003cnova:ports\u003e"},{"line_number":18,"context_line":"      \u003cnova:port uuid\u003d\"567a4527-b0e4-4d0a-bcc2-71fda37897f7\"\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"a71568e1_1cbf3d35","line":15,"range":{"start_line":15,"start_character":69,"end_line":15,"end_character":72},"updated":"2020-12-08 13:03:56.000000000","message":"now we extended the xml so we might consider bumping the minor version of the definition.","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"}],"nova/tests/unit/virt/libvirt/test_config.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":3646,"context_line":""},{"line_number":3647,"context_line":"        meta.flavor \u003d flavor"},{"line_number":3648,"context_line":""},{"line_number":3649,"context_line":"        meta.ports \u003d config.LibvirtConfigGuestMetaNovaPorts(ports\u003d["},{"line_number":3650,"context_line":"                         config.LibvirtConfigGuestMetaNovaPort("},{"line_number":3651,"context_line":"                             uuid\u003d\u0027567a4527-b0e4-4d0a-bcc2-71fda37897f7\u0027,"},{"line_number":3652,"context_line":"                             ips\u003d[config.LibvirtConfigGuestMetaNovaIp("}],"source_content_type":"text/x-python","patch_set":6,"id":"89ecf6af_ba8220ba","line":3649,"range":{"start_line":3649,"start_character":59,"end_line":3649,"end_character":61},"updated":"2020-12-08 13:03:56.000000000","message":"you could wrap the line here to avoid deep indent","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":3707,"context_line":"          \u003cnova:ip type\u003d\"fixed\" address\u003d\"fdf8:f53b:82e4::52\" ipVersion\u003d\"6\"/\u003e"},{"line_number":3708,"context_line":"          \u003cnova:ip type\u003d\"floating\" address\u003d\"1.2.3.4\" ipVersion\u003d\"4\"/\u003e"},{"line_number":3709,"context_line":"        \u003c/nova:port\u003e"},{"line_number":3710,"context_line":"      \u003c/nova:ports\u003e"},{"line_number":3711,"context_line":"    \u003c/nova:instance\u003e"},{"line_number":3712,"context_line":"        \"\"\")"},{"line_number":3713,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1722719f_bbd47693","line":3710,"updated":"2020-12-08 13:03:56.000000000","message":"nice!","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":23494,"context_line":"                                                               instance)"},{"line_number":23495,"context_line":"            mock_save.assert_called_once_with()"},{"line_number":23496,"context_line":"            mock_set_metadata.assert_called_once_with(config_meta)"},{"line_number":23497,"context_line":""},{"line_number":23498,"context_line":"    @mock.patch.object(objects.Instance, \u0027get_network_info\u0027)"},{"line_number":23499,"context_line":"    @mock.patch.object(objects.Instance, \u0027save\u0027)"},{"line_number":23500,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver, \u0027_build_device_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"8b747e8d_4232b955","line":23497,"updated":"2020-12-08 13:03:56.000000000","message":"Do we have test coverage for the detach case?","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"}],"nova/tests/unit/virt/libvirt/test_guest.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5b5d1955cba2143f9b390a6e7a1c330c9c48a648","unresolved":true,"context_lines":[{"line_number":729,"context_line":"            fakelibvirt.VIR_DOMAIN_METADATA_ELEMENT, \"\u003c/xml\u003e\", \"instance\","},{"line_number":730,"context_line":"            vconfig.NOVA_NS, flags\u003dfakelibvirt.VIR_DOMAIN_AFFECT_CONFIG)"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    def test_set_metadata_device_live(self):"},{"line_number":733,"context_line":"        meta \u003d mock.Mock(spec\u003dvconfig.LibvirtConfigGuestMetaNovaInstance)"},{"line_number":734,"context_line":"        meta.to_xml.return_value \u003d \"\u003c/xml\u003e\""},{"line_number":735,"context_line":"        self.guest.set_metadata(meta, live\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a63a8d55_00dc16cd","line":732,"range":{"start_line":732,"start_character":25,"end_line":732,"end_character":32},"updated":"2021-02-18 10:00:55.000000000","message":"drop\n\n(you\u0027re not doing anything different here except calling it with live instead of persistent, fwict)","commit_id":"838370a49014351051bbef2d1c2ada1f47ac2bfb"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":3414,"context_line":"class LibvirtConfigGuestMetaNovaPorts(LibvirtConfigObject):"},{"line_number":3415,"context_line":""},{"line_number":3416,"context_line":"    def __init__(self, ports\u003dNone):"},{"line_number":3417,"context_line":"        super(LibvirtConfigGuestMetaNovaPorts,"},{"line_number":3418,"context_line":"              self).__init__(root_name\u003d\"ports\","},{"line_number":3419,"context_line":"                             ns_prefix\u003d\"nova\","},{"line_number":3420,"context_line":"                             ns_uri\u003dNOVA_NS)"},{"line_number":3421,"context_line":"        if ports is None:"},{"line_number":3422,"context_line":"            self.ports \u003d []"},{"line_number":3423,"context_line":"        else:"},{"line_number":3424,"context_line":"            self.ports \u003d ports"}],"source_content_type":"text/x-python","patch_set":6,"id":"c66c28a9_2725e073","line":3421,"range":{"start_line":3417,"start_character":1,"end_line":3421,"end_character":1},"updated":"2020-12-08 13:03:56.000000000","message":"nit: I think this is a better wrapping of the lines:\n\n        def __init__(self, ports\u003dNone):\n            super(LibvirtConfigGuestMetaNovaPorts, self).__init__(\n                root_name\u003d\"ports\", ns_prefix\u003d\"nova\", ns_uri\u003dNOVA_NS)","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":3425,"context_line":""},{"line_number":3426,"context_line":"    def format_dom(self):"},{"line_number":3427,"context_line":"        meta \u003d self._new_node(\"ports\")"},{"line_number":3428,"context_line":"        for port in self.ports:"},{"line_number":3429,"context_line":"            meta.append(port.format_dom())"},{"line_number":3430,"context_line":"        return meta"},{"line_number":3431,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"2955e25e_704745f5","line":3428,"range":{"start_line":3428,"start_character":8,"end_line":3428,"end_character":31},"updated":"2020-12-08 13:03:56.000000000","message":"you can say:\n    for port in self.ports or []:\n\nand then drop the whole None check from the __init__","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":3432,"context_line":""},{"line_number":3433,"context_line":"class LibvirtConfigGuestMetaNovaPort(LibvirtConfigObject):"},{"line_number":3434,"context_line":""},{"line_number":3435,"context_line":"    def __init__(self, uuid\u003dNone, ips\u003dNone):"},{"line_number":3436,"context_line":"        super(LibvirtConfigGuestMetaNovaPort,"},{"line_number":3437,"context_line":"              self).__init__(root_name\u003d\"port\","},{"line_number":3438,"context_line":"                             ns_prefix\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":6,"id":"1d890bcc_50e6e404","line":3435,"range":{"start_line":3435,"start_character":28,"end_line":3435,"end_character":32},"updated":"2020-12-08 13:03:56.000000000","message":"uuid is always passed by the driver so it don\u0027t have to be optional","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":3448,"context_line":"        if self.uuid is not None:"},{"line_number":3449,"context_line":"            meta.set(\"uuid\", str(self.uuid))"},{"line_number":3450,"context_line":""},{"line_number":3451,"context_line":"        for ip in self.ips:"},{"line_number":3452,"context_line":"            meta.append(ip.format_dom())"},{"line_number":3453,"context_line":"        return meta"},{"line_number":3454,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5b3b7be9_296abfec","line":3451,"range":{"start_line":3451,"start_character":18,"end_line":3451,"end_character":27},"updated":"2020-12-08 13:03:56.000000000","message":"ditto you can say self.ips or [] and avoid the None check in the __init__","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":3455,"context_line":""},{"line_number":3456,"context_line":"class LibvirtConfigGuestMetaNovaIp(LibvirtConfigObject):"},{"line_number":3457,"context_line":""},{"line_number":3458,"context_line":"    def __init__(self, ip_type\u003dNone, address\u003dNone, ip_version\u003dNone):"},{"line_number":3459,"context_line":"        super(LibvirtConfigGuestMetaNovaIp,"},{"line_number":3460,"context_line":"              self).__init__(root_name\u003d\"ip\","},{"line_number":3461,"context_line":"                             ns_prefix\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":6,"id":"64cabd99_2ca4b58f","line":3458,"range":{"start_line":3458,"start_character":23,"end_line":3458,"end_character":66},"updated":"2020-12-08 13:03:56.000000000","message":"these are all passed in by the driver so you don\u0027t have to make these optional","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":3456,"context_line":"class LibvirtConfigGuestMetaNovaIp(LibvirtConfigObject):"},{"line_number":3457,"context_line":""},{"line_number":3458,"context_line":"    def __init__(self, ip_type\u003dNone, address\u003dNone, ip_version\u003dNone):"},{"line_number":3459,"context_line":"        super(LibvirtConfigGuestMetaNovaIp,"},{"line_number":3460,"context_line":"              self).__init__(root_name\u003d\"ip\","},{"line_number":3461,"context_line":"                             ns_prefix\u003d\"nova\","},{"line_number":3462,"context_line":"                             ns_uri\u003dNOVA_NS)"}],"source_content_type":"text/x-python","patch_set":6,"id":"74ee75ab_63446260","line":3459,"updated":"2020-12-08 13:03:56.000000000","message":"nit: same reformatting suggestion as in LibvirtConfigGuestMetaNovaPorts","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5b5d1955cba2143f9b390a6e7a1c330c9c48a648","unresolved":true,"context_lines":[{"line_number":3413,"context_line":"class LibvirtConfigGuestMetaNovaPorts(LibvirtConfigObject):"},{"line_number":3414,"context_line":""},{"line_number":3415,"context_line":"    def __init__(self, ports\u003dNone):"},{"line_number":3416,"context_line":"        super(LibvirtConfigGuestMetaNovaPorts, self).__init__("},{"line_number":3417,"context_line":"            root_name\u003d\"ports\", ns_prefix\u003d\"nova\", ns_uri\u003dNOVA_NS)"},{"line_number":3418,"context_line":""},{"line_number":3419,"context_line":"        self.ports \u003d ports"}],"source_content_type":"text/x-python","patch_set":10,"id":"27ac31ce_311936c7","line":3416,"range":{"start_line":3416,"start_character":14,"end_line":3416,"end_character":51},"updated":"2021-02-18 10:00:55.000000000","message":"nit: don\u0027t need these now (Python 3)\n\n  super().__init__(...)","commit_id":"838370a49014351051bbef2d1c2ada1f47ac2bfb"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"64f7407b090342cea61ccdf0bb5d70b4178396d8","unresolved":true,"context_lines":[{"line_number":3456,"context_line":"        meta \u003d self._new_node(\"ip\")"},{"line_number":3457,"context_line":"        meta.set(\"type\", str(self.ip_type))"},{"line_number":3458,"context_line":"        meta.set(\"address\", str(self.address))"},{"line_number":3459,"context_line":"        meta.set(\"ipVersion\", str(self.ip_version))"},{"line_number":3460,"context_line":"        return meta"}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb0b15a_56c39c57","line":3459,"range":{"start_line":3459,"start_character":18,"end_line":3459,"end_character":27},"updated":"2021-02-18 09:36:33.000000000","message":"Ah I forgot to ask about this, I know Sean wasn\u0027t happy with this over lowercase_separated_by_underscores or just ip_version. I\u0027m pretty indifferent but we should seek agreement before merging.","commit_id":"838370a49014351051bbef2d1c2ada1f47ac2bfb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f5f78bc399afd6723e43e6843c6d6122d65d3fef","unresolved":true,"context_lines":[{"line_number":3456,"context_line":"        meta \u003d self._new_node(\"ip\")"},{"line_number":3457,"context_line":"        meta.set(\"type\", str(self.ip_type))"},{"line_number":3458,"context_line":"        meta.set(\"address\", str(self.address))"},{"line_number":3459,"context_line":"        meta.set(\"ipVersion\", str(self.ip_version))"},{"line_number":3460,"context_line":"        return meta"}],"source_content_type":"text/x-python","patch_set":10,"id":"a4391a30_01b254ab","line":3459,"range":{"start_line":3459,"start_character":18,"end_line":3459,"end_character":27},"in_reply_to":"4291f13e_97e5fdc6","updated":"2021-02-18 10:20:33.000000000","message":"ipVersion works for me.","commit_id":"838370a49014351051bbef2d1c2ada1f47ac2bfb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"783a20076beabcddde3b472f8292b000710df6fe","unresolved":true,"context_lines":[{"line_number":3456,"context_line":"        meta \u003d self._new_node(\"ip\")"},{"line_number":3457,"context_line":"        meta.set(\"type\", str(self.ip_type))"},{"line_number":3458,"context_line":"        meta.set(\"address\", str(self.address))"},{"line_number":3459,"context_line":"        meta.set(\"ipVersion\", str(self.ip_version))"},{"line_number":3460,"context_line":"        return meta"}],"source_content_type":"text/x-python","patch_set":10,"id":"47e79b80_3865e248","line":3459,"range":{"start_line":3459,"start_character":18,"end_line":3459,"end_character":27},"in_reply_to":"a4391a30_01b254ab","updated":"2021-02-24 12:04:44.000000000","message":"i would still prefer slug_case but this will work we mix case in the xml anyway\n\n\u003ccurrentMemory unit\u003d\u0027KiB\u0027\u003e1048576\u003c/currentMemory\u003e\nvs\n\u003con_reboot\u003erestart\u003c/on_reboot\u003e\n\nthis is \"snake-case\" by the way \"slug_case\" uses \"_\" snake-case uses \"-\"","commit_id":"838370a49014351051bbef2d1c2ada1f47ac2bfb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5b5d1955cba2143f9b390a6e7a1c330c9c48a648","unresolved":true,"context_lines":[{"line_number":3456,"context_line":"        meta \u003d self._new_node(\"ip\")"},{"line_number":3457,"context_line":"        meta.set(\"type\", str(self.ip_type))"},{"line_number":3458,"context_line":"        meta.set(\"address\", str(self.address))"},{"line_number":3459,"context_line":"        meta.set(\"ipVersion\", str(self.ip_version))"},{"line_number":3460,"context_line":"        return meta"}],"source_content_type":"text/x-python","patch_set":10,"id":"4291f13e_97e5fdc6","line":3459,"range":{"start_line":3459,"start_character":18,"end_line":3459,"end_character":27},"in_reply_to":"bfb0b15a_56c39c57","updated":"2021-02-18 10:00:55.000000000","message":"Looking at the output of e.g. \u0027virsh domcapabilities\u0027, camelCase is used everywhere. Unless we have existing snake_case instances, I\u0027d rather keep this as-is\n\nLater: grepping for \"\u0027[a-z]\\+_\" vs \"\u0027[a-z]\\+[A-Z]\" shows plenty of instances of both with no clear winner so snake_case is maybe less of an issue. I\u0027d personally still opt for camelCase though, fwiw 😊","commit_id":"838370a49014351051bbef2d1c2ada1f47ac2bfb"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"577a0f2e70998497bbd9cb7ed8231f35cf9984ab","unresolved":false,"context_lines":[{"line_number":6059,"context_line":"            guest_numa_config.numatune,"},{"line_number":6060,"context_line":"            flavor, image_meta)"},{"line_number":6061,"context_line":""},{"line_number":6062,"context_line":"        guest.metadata.append(self._get_guest_config_meta(instance, network_info))"},{"line_number":6063,"context_line":"        guest.idmaps \u003d self._get_guest_idmaps()"},{"line_number":6064,"context_line":""},{"line_number":6065,"context_line":"        for event in self._supported_perf_events:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_f6fd75b2","line":6062,"updated":"2020-09-09 05:24:53.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"8c25a12ac1bb23ee1a1fb97ae0340689f5f1b1f3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":2207,"context_line":"                    instance_uuid\u003dinstance.uuid)"},{"line_number":2208,"context_line":"        try:"},{"line_number":2209,"context_line":"            guest.set_metadata("},{"line_number":2210,"context_line":"                self._get_guest_config_meta(instance,"},{"line_number":2211,"context_line":"                                            instance.get_network_info()))"},{"line_number":2212,"context_line":"        except libvirt.libvirtError:"},{"line_number":2213,"context_line":"            LOG.warning(\u0027updating libvirt metadata failed.\u0027, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":6,"id":"2cab77de_099e98b4","line":2210,"range":{"start_line":2210,"start_character":43,"end_line":2210,"end_character":45},"updated":"2020-12-08 13:03:56.000000000","message":"nit: wrap the line here instead of after the coma","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":2210,"context_line":"                self._get_guest_config_meta(instance,"},{"line_number":2211,"context_line":"                                            instance.get_network_info()))"},{"line_number":2212,"context_line":"        except libvirt.libvirtError:"},{"line_number":2213,"context_line":"            LOG.warning(\u0027updating libvirt metadata failed.\u0027, instance\u003dinstance)"},{"line_number":2214,"context_line":""},{"line_number":2215,"context_line":"    def detach_interface(self, context, instance, vif):"},{"line_number":2216,"context_line":"        guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":6,"id":"6a6effeb_3d7ec333","line":2213,"updated":"2020-12-08 13:03:56.000000000","message":"+1, I agree not to fail the whole interface attach operation due to this error","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"568d167870402ec3052e94f2e093fde2a7241a5b","unresolved":true,"context_lines":[{"line_number":2317,"context_line":"            guest.set_metadata("},{"line_number":2318,"context_line":"                self._get_guest_config_meta(instance, network_info))"},{"line_number":2319,"context_line":"        except libvirt.libvirtError:"},{"line_number":2320,"context_line":"            LOG.warning(\u0027updating libvirt metadata failed.\u0027, instance\u003dinstance)"},{"line_number":2321,"context_line":""},{"line_number":2322,"context_line":"    def _create_snapshot_metadata(self, image_meta, instance,"},{"line_number":2323,"context_line":"                                  img_fmt, snp_name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"e9a6f0c9_469bba4f","line":2320,"updated":"2020-12-08 13:03:56.000000000","message":"+1","commit_id":"f8dba9c8f3d402fb19ce9cd3283c3787ec381f94"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8e95ec64bc23d7620d0cac09e880c52d71ccbcd","unresolved":true,"context_lines":[{"line_number":2329,"context_line":"            # NOTE(nmiki): In order for the interface to be removed from"},{"line_number":2330,"context_line":"            # network_info, the nova-compute process need to wait for"},{"line_number":2331,"context_line":"            # processing on the neutron side."},{"line_number":2332,"context_line":"            # Here, I simply exclude the target VIF from metadata."},{"line_number":2333,"context_line":"            network_info \u003d list(filter(lambda info: info[\u0027id\u0027] !\u003d vif[\u0027id\u0027],"},{"line_number":2334,"context_line":"                                       instance.get_network_info()))"},{"line_number":2335,"context_line":"            guest.set_metadata("}],"source_content_type":"text/x-python","patch_set":8,"id":"0178026c_9b342b5d","line":2332,"updated":"2021-02-04 15:43:12.000000000","message":"sure but then you create a potential race condition where the Neutron event could fail and then the metadata information would be unreliable.\n\nI\u0027d prefer (if possible) to populate again the metadata information of the guest once we get the successful event back from Neutron.","commit_id":"6e461a3bf919bdf1a2e3b446ca4b5d7bb6d60882"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7ddaf9f02dc55c74730790af522d632a9ff6d756","unresolved":true,"context_lines":[{"line_number":2329,"context_line":"            # NOTE(nmiki): In order for the interface to be removed from"},{"line_number":2330,"context_line":"            # network_info, the nova-compute process need to wait for"},{"line_number":2331,"context_line":"            # processing on the neutron side."},{"line_number":2332,"context_line":"            # Here, I simply exclude the target VIF from metadata."},{"line_number":2333,"context_line":"            network_info \u003d list(filter(lambda info: info[\u0027id\u0027] !\u003d vif[\u0027id\u0027],"},{"line_number":2334,"context_line":"                                       instance.get_network_info()))"},{"line_number":2335,"context_line":"            guest.set_metadata("}],"source_content_type":"text/x-python","patch_set":8,"id":"dcf404ae_e4fd5a02","line":2332,"in_reply_to":"0178026c_9b342b5d","updated":"2021-02-04 16:20:50.000000000","message":"after discussing it on IRC [1], we went on a consensus that it\u0027s acceptable to remove the VIF from the metadata since the NIC on the VM already detached, even if the Neutron action could potentially fail.\n\nNeverming this concern, then.\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2021-02-04.log.html#t2021-02-04T16:14:18","commit_id":"6e461a3bf919bdf1a2e3b446ca4b5d7bb6d60882"},{"author":{"_account_id":31652,"name":"Nobuhiro MIKI","email":"nmiki@lycorp.co.jp","username":"nmiki"},"change_message_id":"02799940b9f0213d16578c039741441dc7f93ecd","unresolved":false,"context_lines":[{"line_number":2329,"context_line":"            # NOTE(nmiki): In order for the interface to be removed from"},{"line_number":2330,"context_line":"            # network_info, the nova-compute process need to wait for"},{"line_number":2331,"context_line":"            # processing on the neutron side."},{"line_number":2332,"context_line":"            # Here, I simply exclude the target VIF from metadata."},{"line_number":2333,"context_line":"            network_info \u003d list(filter(lambda info: info[\u0027id\u0027] !\u003d vif[\u0027id\u0027],"},{"line_number":2334,"context_line":"                                       instance.get_network_info()))"},{"line_number":2335,"context_line":"            guest.set_metadata("}],"source_content_type":"text/x-python","patch_set":8,"id":"f50c0335_8836bdc9","line":2332,"in_reply_to":"dcf404ae_e4fd5a02","updated":"2021-02-08 08:43:04.000000000","message":"Thanks for the confirmation.","commit_id":"6e461a3bf919bdf1a2e3b446ca4b5d7bb6d60882"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8e95ec64bc23d7620d0cac09e880c52d71ccbcd","unresolved":true,"context_lines":[{"line_number":4958,"context_line":""},{"line_number":4959,"context_line":"        return dev"},{"line_number":4960,"context_line":""},{"line_number":4961,"context_line":"    def _get_guest_config_meta(self, instance, network_info):"},{"line_number":4962,"context_line":"        \"\"\"Get metadata config for guest.\"\"\""},{"line_number":4963,"context_line":""},{"line_number":4964,"context_line":"        meta \u003d vconfig.LibvirtConfigGuestMetaNovaInstance()"}],"source_content_type":"text/x-python","patch_set":8,"id":"8abd470b_13fa9a72","line":4961,"updated":"2021-02-04 15:43:12.000000000","message":"I\u0027d have preferred you provide a separate helper method for updating the guest metadata before writing it, instead of touching the existing read-only one which is then now tainting the result.","commit_id":"6e461a3bf919bdf1a2e3b446ca4b5d7bb6d60882"},{"author":{"_account_id":31652,"name":"Nobuhiro MIKI","email":"nmiki@lycorp.co.jp","username":"nmiki"},"change_message_id":"02799940b9f0213d16578c039741441dc7f93ecd","unresolved":true,"context_lines":[{"line_number":4958,"context_line":""},{"line_number":4959,"context_line":"        return dev"},{"line_number":4960,"context_line":""},{"line_number":4961,"context_line":"    def _get_guest_config_meta(self, instance, network_info):"},{"line_number":4962,"context_line":"        \"\"\"Get metadata config for guest.\"\"\""},{"line_number":4963,"context_line":""},{"line_number":4964,"context_line":"        meta \u003d vconfig.LibvirtConfigGuestMetaNovaInstance()"}],"source_content_type":"text/x-python","patch_set":8,"id":"22b1080d_9580e3ed","line":4961,"in_reply_to":"8abd470b_13fa9a72","updated":"2021-02-08 08:43:04.000000000","message":"This function simply generates metadata from the instance object with no side effects. guest.set_metadata is responsible for the actual writing.\n\nAlso, the existing metadata will be completely overwritten by the new metadata, but this is limited to the nova-specific XML Namespace, so I believe it will not conflict with other systems (such as user defined metadata).\n\nIf refactoring is needed, could you pinpoint the statements for me?","commit_id":"6e461a3bf919bdf1a2e3b446ca4b5d7bb6d60882"}],"nova/virt/libvirt/guest.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8e95ec64bc23d7620d0cac09e880c52d71ccbcd","unresolved":true,"context_lines":[{"line_number":304,"context_line":"        self._domain.attachDeviceFlags(device_xml, flags\u003dflags)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def set_metadata(self, metadata, persistent\u003dFalse, live\u003dFalse):"},{"line_number":307,"context_line":"        \"\"\"Set metadata to the guest."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        :param metadata: A LibvirtConfigGuestMetaNovaInstance"},{"line_number":310,"context_line":"        :param persistent: A bool to indicate whether the change is"}],"source_content_type":"text/x-python","patch_set":8,"id":"e2dd5d75_f85109fe","line":307,"updated":"2021-02-04 15:43:12.000000000","message":"Note : This is full rewriting of the metadata, but since you\u0027re geting the existing information before writing again, we\u0027re good.\nThat being said, I\u0027d add a warning docstring explaining that this method is destructive with exiting metadata.","commit_id":"6e461a3bf919bdf1a2e3b446ca4b5d7bb6d60882"},{"author":{"_account_id":31652,"name":"Nobuhiro MIKI","email":"nmiki@lycorp.co.jp","username":"nmiki"},"change_message_id":"02799940b9f0213d16578c039741441dc7f93ecd","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        self._domain.attachDeviceFlags(device_xml, flags\u003dflags)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def set_metadata(self, metadata, persistent\u003dFalse, live\u003dFalse):"},{"line_number":307,"context_line":"        \"\"\"Set metadata to the guest."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        :param metadata: A LibvirtConfigGuestMetaNovaInstance"},{"line_number":310,"context_line":"        :param persistent: A bool to indicate whether the change is"}],"source_content_type":"text/x-python","patch_set":8,"id":"003932c0_170a88ba","line":307,"in_reply_to":"e2dd5d75_f85109fe","updated":"2021-02-08 08:43:04.000000000","message":"Done. I agree with you.","commit_id":"6e461a3bf919bdf1a2e3b446ca4b5d7bb6d60882"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c8e95ec64bc23d7620d0cac09e880c52d71ccbcd","unresolved":true,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        metadata_xml \u003d metadata.to_xml()"},{"line_number":319,"context_line":"        LOG.debug(\"set metadata xml: %s\", metadata_xml)"},{"line_number":320,"context_line":"        self._domain.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT,"},{"line_number":321,"context_line":"                                 metadata_xml, \"instance\","},{"line_number":322,"context_line":"                                 vconfig.NOVA_NS, flags\u003dflags)"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"209cb1f9_3c4954d1","line":320,"range":{"start_line":320,"start_character":32,"end_line":320,"end_character":69},"updated":"2021-02-04 15:43:12.000000000","message":"this sounds the right element to use https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainSetMetadata","commit_id":"6e461a3bf919bdf1a2e3b446ca4b5d7bb6d60882"},{"author":{"_account_id":31652,"name":"Nobuhiro MIKI","email":"nmiki@lycorp.co.jp","username":"nmiki"},"change_message_id":"02799940b9f0213d16578c039741441dc7f93ecd","unresolved":true,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        metadata_xml \u003d metadata.to_xml()"},{"line_number":319,"context_line":"        LOG.debug(\"set metadata xml: %s\", metadata_xml)"},{"line_number":320,"context_line":"        self._domain.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT,"},{"line_number":321,"context_line":"                                 metadata_xml, \"instance\","},{"line_number":322,"context_line":"                                 vconfig.NOVA_NS, flags\u003dflags)"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ffed995a_866133e1","line":320,"range":{"start_line":320,"start_character":32,"end_line":320,"end_character":69},"in_reply_to":"209cb1f9_3c4954d1","updated":"2021-02-08 08:43:04.000000000","message":"Since the target of this patch is XML, VIR_DOMAIN_METADATA_ELEMENT appears to be correct.","commit_id":"6e461a3bf919bdf1a2e3b446ca4b5d7bb6d60882"}]}
