)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9bf64f744fc67a9c192d09e5752b0db3c2cc90a0","unresolved":true,"context_lines":[{"line_number":21,"context_line":"load. Starting a migration with an already plugged interface circumvents this"},{"line_number":22,"context_line":"situation."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Closes-Bug: 2073254"},{"line_number":25,"context_line":"Depends-On: https://review.opendev.org/c/openstack/os-vif/+/942715"},{"line_number":26,"context_line":"Change-Id: I1a81e67b529414da4042cd234cd2b04a8ebb2cfc"},{"line_number":27,"context_line":"Signed-off-by: Stefan Hoffmann \u003cstefan.hoffmann@cloudandheat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"4f7d4255_1d6ac1bb","line":24,"updated":"2025-02-26 13:45:55.000000000","message":"i think thsi should be tracked as a feature with a spec not a bug\nbecause i belive this should invole change to the neutron ml2/ovn mech driver.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"}],"nova/compute/manager.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":9232,"context_line":"                                bdms\u003dbdms)"},{"line_number":9233,"context_line":""},{"line_number":9234,"context_line":"            # The driver pre_live_migration will plug vifs on the host"},{"line_number":9235,"context_line":"            migrate_data \u003d self.driver.pre_live_migration(context,"},{"line_number":9236,"context_line":"                                           instance,"},{"line_number":9237,"context_line":"                                           block_device_info,"},{"line_number":9238,"context_line":"                                           network_info,"}],"source_content_type":"text/x-python","patch_set":1,"id":"44af703e_8c83e01d","line":9235,"range":{"start_line":9235,"start_character":39,"end_line":9235,"end_character":57},"updated":"2025-02-26 14:47:43.000000000","message":"if we were to add this i am not conviced we shoudl be extended the virt driver interface vs making it internal to this driver specific call\nand perhaps calling self.network_api.setup_networks_on_host ealirer.\n\nif we modify the virt driver interface by adding\npre_live_migration_check_network we need ot provide a default implemantion that will not break other virt dirvers like ironic for example.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":9253,"context_line":"            )"},{"line_number":9254,"context_line":""},{"line_number":9255,"context_line":"            # NOTE(tr3buchet): setup networks on destination host"},{"line_number":9256,"context_line":"            self.network_api.setup_networks_on_host(context, instance,"},{"line_number":9257,"context_line":"                                                             self.host)"},{"line_number":9258,"context_line":"            if CONF.libvirt.migration_wait_for_os_vif_and_create_tap_by_nova:"},{"line_number":9259,"context_line":"                self.driver.pre_live_migration_check_network(network_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1b16f6db_11cf8d8b","line":9256,"range":{"start_line":9256,"start_character":29,"end_line":9256,"end_character":51},"updated":"2025-02-26 14:47:43.000000000","message":"i assume you extened the virt driver api because you wanted to call it after this\nnew wait after we have updated the port bidings with the migration info in neutron triggering neutron to process teh port bdingn and indirctly cause ovn to confgure the host.\n\n\nhowever we are not ment to wait for vif plugged on the dest, that happens on the source host before we start the live migration. This is changing the behavior and timing between the source and dest compute agents\nthis has upgrade implications adn should not be done lightly.\n\nit will delay use returnnign form prelive migrate which means the souce node may miss the vif plugged event for other vifs.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"}],"nova/conf/libvirt.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9bf64f744fc67a9c192d09e5752b0db3c2cc90a0","unresolved":true,"context_lines":[{"line_number":1101,"context_line":"    cfg.BoolOpt(\u0027use_virtio_for_bridges\u0027,"},{"line_number":1102,"context_line":"                default\u003dTrue,"},{"line_number":1103,"context_line":"                help\u003d\u0027Use virtio for bridge interfaces with KVM/QEMU\u0027),"},{"line_number":1104,"context_line":"    cfg.BoolOpt(\u0027migration_wait_for_os_vif_and_create_tap_by_nova\u0027,"},{"line_number":1105,"context_line":"                default\u003dFalse,"},{"line_number":1106,"context_line":"                help\u003d\"\"\""},{"line_number":1107,"context_line":"Let tap interface create by nova-compute instead of libvirt directly."}],"source_content_type":"text/x-python","patch_set":1,"id":"957be61c_202fb76d","line":1104,"updated":"2025-02-26 13:45:55.000000000","message":"this should be contoled by the content of teh vif binding:details field in my opinion.\n\ni don\u0027t think we shoudl\n\nthe use_virtio_for_bridges config is techdebth that shoudl have been removed years ago so i woudl like to avoid buildign on that by adding more config option that alter networking behavior in nova.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"}],"nova/virt/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"        :param network_info: instance network information"},{"line_number":1347,"context_line":"        \"\"\""},{"line_number":1348,"context_line":"        return"},{"line_number":1349,"context_line":""},{"line_number":1350,"context_line":"    def live_migration(self, context, instance, dest,"},{"line_number":1351,"context_line":"                       post_method, recover_method, block_migration\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"a1eafd7b_bddae992","line":1348,"updated":"2025-02-26 14:47:43.000000000","message":"this need wirder dicussion as i have mentioned before.\n\ntoday the network connectivnty check id done via the network-vif-plugged event and its done form the souce node to allow the netroking config to be kicked off async\nwhile we are doing other work.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":1914,"context_line":"        self.vlan \u003d None"},{"line_number":1915,"context_line":"        self.device_addr \u003d None"},{"line_number":1916,"context_line":"        self.mtu \u003d None"},{"line_number":1917,"context_line":"        self.alias \u003d None"},{"line_number":1918,"context_line":""},{"line_number":1919,"context_line":"    def __eq__(self, other):"},{"line_number":1920,"context_line":"        if not isinstance(other, LibvirtConfigGuestInterface):"}],"source_content_type":"text/x-python","patch_set":1,"id":"b45c381c_938361e9","line":1917,"updated":"2025-02-26 14:47:43.000000000","message":"if we do this we woudl add self.managed \u003d False or perhaps None here.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":1987,"context_line":"                dev.append(etree.Element(\"script\", path\u003dself.script))"},{"line_number":1988,"context_line":"            if self.mtu is not None:"},{"line_number":1989,"context_line":"                dev.append(etree.Element(\"mtu\", size\u003dstr(self.mtu)))"},{"line_number":1990,"context_line":"            if CONF.libvirt.migration_wait_for_os_vif_and_create_tap_by_nova:"},{"line_number":1991,"context_line":"                additional_target_dev_options.append((\"managed\", \"no\"))"},{"line_number":1992,"context_line":"        elif self.net_type \u003d\u003d \"direct\":"},{"line_number":1993,"context_line":"            dev.append(etree.Element(\"source\", dev\u003dself.source_dev,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0129826b_797fb4a1","line":1990,"updated":"2025-02-26 14:47:43.000000000","message":"and instead of checkign the config here we would check self.managed and use\n\nself.get_yes_no_str(self.managed) to convert it to the constnat expected in the xml.\n\nif we do that we also dont need additional_target_dev_options as we would just do this where we are handleing the target element already.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":2025,"context_line":"            dev.append(vlan_elem)"},{"line_number":2026,"context_line":""},{"line_number":2027,"context_line":"        if self.target_dev is not None:"},{"line_number":2028,"context_line":"            target_elem \u003d etree.Element(\"target\", dev\u003dself.target_dev)"},{"line_number":2029,"context_line":"            for key, value in additional_target_dev_options:"},{"line_number":2030,"context_line":"                target_elem.set(key, value)"},{"line_number":2031,"context_line":"            dev.append(target_elem)"},{"line_number":2032,"context_line":""},{"line_number":2033,"context_line":"        if self.vporttype is not None:"},{"line_number":2034,"context_line":"            vport \u003d etree.Element(\"virtualport\", type\u003dself.vporttype)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ae8121e9_9b925ff0","line":2031,"range":{"start_line":2028,"start_character":0,"end_line":2031,"end_character":35},"updated":"2025-02-26 14:47:43.000000000","message":"so here we woudl just do \n\ntarget_elem.set(\"managed, self.get_yes_no_str(self.managed))\n\n\n```suggestion\n            target_elem \u003d etree.Element(\"target\", dev\u003dself.target_dev)\n            if self.net_type \u003d\u003d \"ethernet\":\n                target_elem.set(\"managed\", self.get_yes_no_str(self.managed))\n            dev.append(target_elem)\n           \n```\n\nmanged should be set in in vif.py we shoudl be setting  based on if neutorn requested os-vif to create the tap.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":11588,"context_line":""},{"line_number":11589,"context_line":"        return migrate_data"},{"line_number":11590,"context_line":""},{"line_number":11591,"context_line":"    def pre_live_migration_check_network(self, network_info):"},{"line_number":11592,"context_line":"        \"\"\""},{"line_number":11593,"context_line":"        Before live migration check that network is connected on destination."},{"line_number":11594,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"661a713b_e4d64144","line":11591,"range":{"start_line":11591,"start_character":8,"end_line":11591,"end_character":40},"updated":"2025-02-26 14:47:43.000000000","message":"we shoudl not be modifying the virt driver api.\n\nto add this.\n\nit woudl be a part of prelive migation","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"}],"nova/virt/libvirt/vif.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"import typing as ty"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from eventlet import greenthread"},{"line_number":25,"context_line":"import os_vif"},{"line_number":26,"context_line":"from os_vif import exception as osv_exception"},{"line_number":27,"context_line":"from os_vif.objects import fields as osv_fields"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c3fca34_1afd5b03","line":24,"updated":"2025-02-26 14:47:43.000000000","message":"we are avoiding adding new usage of eventlet so we shoudl not be creatign greenthread  or importing the module","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":461,"context_line":"        # if delegating creation to os-vif, create an ethernet-type VIF and let"},{"line_number":462,"context_line":"        # os-vif do the actual wiring up"},{"line_number":463,"context_line":"        if \u0027create_port\u0027 in vif.port_profile and vif.port_profile.create_port:"},{"line_number":464,"context_line":"            self._set_config_VIFGeneric(instance, vif, conf)"},{"line_number":465,"context_line":"        else:"},{"line_number":466,"context_line":"            conf.net_type \u003d \"bridge\""},{"line_number":467,"context_line":"            conf.source_dev \u003d vif.bridge_name"}],"source_content_type":"text/x-python","patch_set":1,"id":"475e849c_71137a10","line":464,"updated":"2025-02-26 14:47:43.000000000","message":"so we woud lupdate teh vif object with manged\u003dture|false here based on the vif binding.s","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":760,"context_line":"                _(\"Plug VIF failed because of unexpected \""},{"line_number":761,"context_line":"                  \"vif_type\u003d%s\") % vif_type)"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"    def wait_for_interface_setup(self, vif):"},{"line_number":764,"context_line":"        \"\"\""},{"line_number":765,"context_line":"        Wait till networking backend has installed/claimed the virtual port."},{"line_number":766,"context_line":"        This helps at live-migration so the network is prepared before the"}],"source_content_type":"text/x-python","patch_set":1,"id":"c14ee118_0f376f6a","line":763,"updated":"2025-02-26 14:47:43.000000000","message":"this is creatign a side chanenl to detect if the port pluggin is done cirumventign our api contract with neutron.\n\nits also backend specific not generic.\n\nif we were to allow that apptoch we shoudl add a verify_plugged function to the\nos-vif public interface and encpsulate this knolwed in teh ovs plugins implemation.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a47404033d1abfa7bdbad3a8076172886798ef8e","unresolved":true,"context_lines":[{"line_number":760,"context_line":"                _(\"Plug VIF failed because of unexpected \""},{"line_number":761,"context_line":"                  \"vif_type\u003d%s\") % vif_type)"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"    def wait_for_interface_setup(self, vif):"},{"line_number":764,"context_line":"        \"\"\""},{"line_number":765,"context_line":"        Wait till networking backend has installed/claimed the virtual port."},{"line_number":766,"context_line":"        This helps at live-migration so the network is prepared before the"}],"source_content_type":"text/x-python","patch_set":1,"id":"e1460a0e_2e248d62","line":763,"in_reply_to":"35bd7956_137286b3","updated":"2025-02-27 16:58:57.000000000","message":"Neutron sending the event is the current api contract between nova and neutron and ovn is con compliant with that so its not that its a large change in neutron\nits how ml2/ovs the other reference plugins\n\nIt\u0027s closing the technical debt in neutron :)","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"},{"author":{"_account_id":26832,"name":"Stefan Hoffmann","email":"stefan.hoffmann@cloudandheat.com","username":"shoffmann"},"change_message_id":"05720313fc2499131aba2a99297171669e89b7eb","unresolved":true,"context_lines":[{"line_number":760,"context_line":"                _(\"Plug VIF failed because of unexpected \""},{"line_number":761,"context_line":"                  \"vif_type\u003d%s\") % vif_type)"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"    def wait_for_interface_setup(self, vif):"},{"line_number":764,"context_line":"        \"\"\""},{"line_number":765,"context_line":"        Wait till networking backend has installed/claimed the virtual port."},{"line_number":766,"context_line":"        This helps at live-migration so the network is prepared before the"}],"source_content_type":"text/x-python","patch_set":1,"id":"35bd7956_137286b3","line":763,"in_reply_to":"c14ee118_0f376f6a","updated":"2025-02-27 16:54:35.000000000","message":"Thanks for the feedback.\nWe will prepare a spec and present it for discussion.\n\nChecking the interface state via os-vif is much faster and the information we get have more quality than the \"event\" from neutron. Also currently nova also don\u0027t wait for neutron, so this would need to be patched as well.\n\nBut the approach where neutron sets some properties to the port and nova plugs the interface based on that + waits, sounds good.\n\nWaiting for a event from neutron instead would mean a big change on neutron side as we need to decide there when to send the event (so did nova plugged the interface or not -\u003e send event when info is at southbound or after ovn-controller applied the change)\nAlso I\u0027m not sure if neutron has the port properties (managed yes/no) at the place changes/events from southbound are handled.\nAt nova-compute, we have all the information we need already there.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9bf64f744fc67a9c192d09e5752b0db3c2cc90a0","unresolved":true,"context_lines":[{"line_number":776,"context_line":"        vif_installed \u003d False"},{"line_number":777,"context_line":"        for cnt in range(max_retry):"},{"line_number":778,"context_line":"            try:"},{"line_number":779,"context_line":"                vif_installed \u003d os_vif.get_vif_external_id(vif_obj, \u0027ovn-installed\u0027)"},{"line_number":780,"context_line":"            except KeyError:"},{"line_number":781,"context_line":"                if cnt \u003d\u003d max_retry - 1:"},{"line_number":782,"context_line":"                    msg \u003d (_(\u0027Timeout waiting for network backend to install \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"0b2fc155_03b5d5c2","line":779,"updated":"2025-02-26 13:45:55.000000000","message":"-1 this is not how we shoudl be detecting if its ovn.\nand its also not how we shoudl be checkign for the flow rules to be installed.\n\nwe have the name of the ml2 dirver in the vif bidning dteail so we cna detech if its ovn via that. the contract with neutron is the shoudl only send the network-vif-plugged event when the dataplane is fully configured.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"18e3c765532eeea6d67edfc83b79528bceb1d0c0","unresolved":true,"context_lines":[{"line_number":787,"context_line":"                    LOG.debug(\u0027check_interface_setup() failed %(cnt)d. Retry \u0027"},{"line_number":788,"context_line":"                              \u0027up to %(max_retry)d.\u0027,"},{"line_number":789,"context_line":"                              {\u0027cnt\u0027: cnt, \u0027max_retry\u0027: max_retry})"},{"line_number":790,"context_line":"                    greenthread.sleep(1)"},{"line_number":791,"context_line":"        if not vif_installed:"},{"line_number":792,"context_line":"            msg \u003d (_(\"Network backend did not installed the vif %(vif)s\")"},{"line_number":793,"context_line":"                   % {\u0027vif\u0027: vif})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ca3b559f_52ba2320","line":790,"range":{"start_line":790,"start_character":19,"end_line":790,"end_character":40},"updated":"2025-02-26 14:47:43.000000000","message":"this shoudl be time.sleep(1) so that it will work after we remove eventlet.","commit_id":"65b9f38de216a39895733b45c7ef5c3104cb2368"}]}
