)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"5a1fa9e3a4cf6bb81692806b99c11bbe3e06d923","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Currently there are two main usages for this type of port:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Octavia: For creating the logical port for the virtual IP."},{"line_number":15,"context_line":"* VRRP [1]"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Upon adding an IP address to the allowed_address_pairs field of the"},{"line_number":18,"context_line":"Neutron\u0027s port, networking-ovn will look if that IP matches with the IP"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7faddb67_fc312da3","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":10},"updated":"2019-08-21 07:58:05.000000000","message":"Octavia uses keepalived which consumes VRRP so basically its the same :)","commit_id":"23d6d55be1eb838978c06ca1ff126e0c777b3b2c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"30ee4531e85542f0633a4cd081d680ff37df58d2","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Currently there are two main usages for this type of port:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Octavia: For creating the logical port for the virtual IP."},{"line_number":15,"context_line":"* VRRP [1]"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Upon adding an IP address to the allowed_address_pairs field of the"},{"line_number":18,"context_line":"Neutron\u0027s port, networking-ovn will look if that IP matches with the IP"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7faddb67_1760a2ce","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":10},"in_reply_to":"7faddb67_fc312da3","updated":"2019-08-21 08:28:38.000000000","message":"++","commit_id":"23d6d55be1eb838978c06ca1ff126e0c777b3b2c"}],"networking_ovn/common/ovn_client.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5b1309a0662b99490a84355a2bed0900dafdc779","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            # TODO(lucasagomes): Remove this conditional in the future. The"},{"line_number":451,"context_line":"            # \"virtual\" port type was added in the version 2.12 of OVN"},{"line_number":452,"context_line":"            if self._sb_idl.is_col_present(\u0027Port_Binding\u0027, \u0027virtual_parent\u0027):"},{"line_number":453,"context_line":"                for addr in addr_pairs_diff.added:"},{"line_number":454,"context_line":"                    virt_port \u003d self._plugin.get_ports(admin_context, filters\u003d{"},{"line_number":455,"context_line":"                        \u0027network_id\u0027: [port[\u0027network_id\u0027]],"},{"line_number":456,"context_line":"                        \u0027fixed_ips\u0027: {\u0027ip_address\u0027: [addr]}})"},{"line_number":457,"context_line":"                    if not virt_port:"},{"line_number":458,"context_line":"                        continue"},{"line_number":459,"context_line":"                    # TODO(lucasagomes): Test if len(port) \u003e 1 ? Don\u0027t think"},{"line_number":460,"context_line":"                    # it\u0027s possible to have more than one port with the same"},{"line_number":461,"context_line":"                    # IP in the same network"},{"line_number":462,"context_line":"                    virt_port \u003d virt_port[0]"},{"line_number":463,"context_line":"                    txn.add(self._nb_idl.set_lswitch_port_to_virtual_type("},{"line_number":464,"context_line":"                        virt_port[\u0027id\u0027], vip\u003daddr, virtual_parent\u003dport[\u0027id\u0027],"},{"line_number":465,"context_line":"                        if_exists\u003dTrue))"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"                for addr in addr_pairs_diff.removed:"},{"line_number":468,"context_line":"                    virt_port \u003d self._plugin.get_ports(admin_context, filters\u003d{"},{"line_number":469,"context_line":"                        \u0027network_id\u0027: [port[\u0027network_id\u0027]],"},{"line_number":470,"context_line":"                        \u0027fixed_ips\u0027: {\u0027ip_address\u0027: [addr]}})"},{"line_number":471,"context_line":"                    if not virt_port:"},{"line_number":472,"context_line":"                        continue"},{"line_number":473,"context_line":"                    # TODO(lucasagomes): Test if len(port) \u003e 1 ? Don\u0027t think"},{"line_number":474,"context_line":"                    # it\u0027s possible to have more than one port with the same"},{"line_number":475,"context_line":"                    # IP in the same network"},{"line_number":476,"context_line":"                    virt_port \u003d virt_port[0]"},{"line_number":477,"context_line":"                    txn.add(self._nb_idl.unset_lswitch_port_to_virtual_type("},{"line_number":478,"context_line":"                        virt_port[\u0027id\u0027], virtual_parent\u003dport[\u0027id\u0027],"},{"line_number":479,"context_line":"                        if_exists\u003dTrue))"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"            # NOTE(lizk): Fail port updating if port doesn\u0027t exist. This"},{"line_number":482,"context_line":"            # prevents any new inserted resources to be orphan, such as port"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_0f2d6645","line":479,"range":{"start_line":453,"start_character":0,"end_line":479,"end_character":40},"updated":"2019-08-13 15:40:06.000000000","message":"The code to add or remove is very similar, I will refactor so we can reuse some","commit_id":"3c1464c3f53476eafa10d1456d8f4a639d0a26d5"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"29fe4eb32bfe568718e13273c5b931ce5ec66362","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                \u0027network_id\u0027: [parent_port[\u0027network_id\u0027]],"},{"line_number":436,"context_line":"                \u0027fixed_ips\u0027: {\u0027ip_address\u0027: [addr]}})"},{"line_number":437,"context_line":"            if not virt_port:"},{"line_number":438,"context_line":"                continue"},{"line_number":439,"context_line":"            virt_port \u003d virt_port[0]"},{"line_number":440,"context_line":"            args \u003d {\u0027lport_name\u0027: virt_port[\u0027id\u0027],"},{"line_number":441,"context_line":"                    \u0027virtual_parent\u0027: parent_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_138c01d6","line":438,"range":{"start_line":438,"start_character":16,"end_line":438,"end_character":24},"updated":"2019-11-08 02:06:43.000000000","message":"Let\u0027s add here a debug like:\nLOG.debug(\"Port %(parent_port)s defined with allowed_addresses_set address %(addr)s, which is not allocated within %(network)s. Skipping set of the virtual_parents. \" %","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bc0abb3282ead03acd80726c29725995ad495593","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                \u0027network_id\u0027: [parent_port[\u0027network_id\u0027]],"},{"line_number":436,"context_line":"                \u0027fixed_ips\u0027: {\u0027ip_address\u0027: [addr]}})"},{"line_number":437,"context_line":"            if not virt_port:"},{"line_number":438,"context_line":"                continue"},{"line_number":439,"context_line":"            virt_port \u003d virt_port[0]"},{"line_number":440,"context_line":"            args \u003d {\u0027lport_name\u0027: virt_port[\u0027id\u0027],"},{"line_number":441,"context_line":"                    \u0027virtual_parent\u0027: parent_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_2035aff7","line":438,"range":{"start_line":438,"start_character":16,"end_line":438,"end_character":24},"in_reply_to":"3fa7e38b_138c01d6","updated":"2019-11-18 10:05:23.000000000","message":"I was thinking about it but, the allowed address pairs thingie is not only for VRRP so having this to log something every time it\u0027s looking for a parent port may be a bit too verbose and unrelated to most use cases.\n\nWhat about log something when we find the parent port ?","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c18b8dfaa4520103e9b507d0e9ba88854421342c","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                \u0027network_id\u0027: [parent_port[\u0027network_id\u0027]],"},{"line_number":436,"context_line":"                \u0027fixed_ips\u0027: {\u0027ip_address\u0027: [addr]}})"},{"line_number":437,"context_line":"            if not virt_port:"},{"line_number":438,"context_line":"                continue"},{"line_number":439,"context_line":"            virt_port \u003d virt_port[0]"},{"line_number":440,"context_line":"            args \u003d {\u0027lport_name\u0027: virt_port[\u0027id\u0027],"},{"line_number":441,"context_line":"                    \u0027virtual_parent\u0027: parent_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_e61c9067","line":438,"range":{"start_line":438,"start_character":16,"end_line":438,"end_character":24},"in_reply_to":"3fa7e38b_2035aff7","updated":"2019-11-18 12:31:17.000000000","message":"Ah your right. Doing it here would be painful.","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"29fe4eb32bfe568718e13273c5b931ce5ec66362","unresolved":false,"context_lines":[{"line_number":689,"context_line":"                                ovn_const.LSP_OPTIONS_VIRTUAL_PARENTS_KEY, \u0027\u0027):"},{"line_number":690,"context_line":"                            txn.add(cmd(lsp.name, port_id, if_exists\u003dTrue))"},{"line_number":691,"context_line":"                except idlutils.RowNotFound:"},{"line_number":692,"context_line":"                    pass"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    # TODO(lucasagomes): The ``port_object`` parameter was added to"},{"line_number":695,"context_line":"    # keep things backward compatible. Remove it in the Rocky release."}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_73377500","line":692,"updated":"2019-11-08 02:06:43.000000000","message":"This could happen in two cases:\n1) Port is deleted in meantime and the row doesn\u0027t exist\n2) Network is deleted in meantime and its row doesn\u0027t exist.\n\nLets maybe don\u0027t do this silent-catch for case 2? That would be strange that port is tried to be deleted, but actually the network has been dropped first? idk","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"5bb8e0c5745e024ec4aaec450bb35ff07f9e4b4e","unresolved":false,"context_lines":[{"line_number":689,"context_line":"                                ovn_const.LSP_OPTIONS_VIRTUAL_PARENTS_KEY, \u0027\u0027):"},{"line_number":690,"context_line":"                            txn.add(cmd(lsp.name, port_id, if_exists\u003dTrue))"},{"line_number":691,"context_line":"                except idlutils.RowNotFound:"},{"line_number":692,"context_line":"                    pass"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    # TODO(lucasagomes): The ``port_object`` parameter was added to"},{"line_number":695,"context_line":"    # keep things backward compatible. Remove it in the Rocky release."}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_ac68b9b9","line":692,"in_reply_to":"3fa7e38b_73377500","updated":"2019-11-18 12:32:49.000000000","message":"+1","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bc0abb3282ead03acd80726c29725995ad495593","unresolved":false,"context_lines":[{"line_number":689,"context_line":"                                ovn_const.LSP_OPTIONS_VIRTUAL_PARENTS_KEY, \u0027\u0027):"},{"line_number":690,"context_line":"                            txn.add(cmd(lsp.name, port_id, if_exists\u003dTrue))"},{"line_number":691,"context_line":"                except idlutils.RowNotFound:"},{"line_number":692,"context_line":"                    pass"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    # TODO(lucasagomes): The ``port_object`` parameter was added to"},{"line_number":695,"context_line":"    # keep things backward compatible. Remove it in the Rocky release."}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_a020bfb1","line":692,"in_reply_to":"3fa7e38b_73377500","updated":"2019-11-18 10:05:23.000000000","message":"Great point! Totally agree.\n\nThe port itself won\u0027t even raise an exception because we use the if_exist\u003dTrue in the transaction there.\n\nI think we can get rid of this try...except block, if the network was deleted in the meantime we have a bigger issue and an exception is adequate IMHO","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"}],"networking_ovn/common/utils.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"5bb8e0c5745e024ec4aaec450bb35ff07f9e4b4e","unresolved":false,"context_lines":[{"line_number":438,"context_line":""},{"line_number":439,"context_line":"def compute_address_pairs_diff(ovn_port, neutron_port):"},{"line_number":440,"context_line":"    \"\"\"Compute the differences in the allowed_address_pairs field.\"\"\""},{"line_number":441,"context_line":"    ovn_ap \u003d get_allowed_address_pairs_ip_addresses_from_ovn_port("},{"line_number":442,"context_line":"        ovn_port)"},{"line_number":443,"context_line":"    neutron_ap \u003d get_allowed_address_pairs_ip_addresses(neutron_port)"},{"line_number":444,"context_line":"    added \u003d set(neutron_ap) - set(ovn_ap)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_2c9a89c4","line":441,"updated":"2019-11-18 12:32:49.000000000","message":"nit: maybe make the results already set here to avoid double-computation of the set on L444 and L445","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"aec1b1e202c770734113485668aee97731232ca2","unresolved":false,"context_lines":[{"line_number":438,"context_line":""},{"line_number":439,"context_line":"def compute_address_pairs_diff(ovn_port, neutron_port):"},{"line_number":440,"context_line":"    \"\"\"Compute the differences in the allowed_address_pairs field.\"\"\""},{"line_number":441,"context_line":"    ovn_ap \u003d get_allowed_address_pairs_ip_addresses_from_ovn_port("},{"line_number":442,"context_line":"        ovn_port)"},{"line_number":443,"context_line":"    neutron_ap \u003d get_allowed_address_pairs_ip_addresses(neutron_port)"},{"line_number":444,"context_line":"    added \u003d set(neutron_ap) - set(ovn_ap)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_af498b32","line":441,"in_reply_to":"3fa7e38b_2c9a89c4","updated":"2019-11-18 15:27:56.000000000","message":"good point :) not a big deal as I don\u0027t expect a port to have many address pairs but this may affect port creation times","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"}],"networking_ovn/db/virtual_port.py":[{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"784790d3a5d43e21631ecc16803028153b882249","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron_lib.db import api as db_api"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def get_virtual_port_parents(virtual_ip, network_id):"},{"line_number":22,"context_line":"    session \u003d db_api.get_reader_session()"},{"line_number":23,"context_line":"    query \u003d session.query(models_v2.Port).join("},{"line_number":24,"context_line":"        allowed_address_pair.AllowedAddressPair,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_63002302","line":21,"updated":"2019-10-17 10:10:00.000000000","message":"There can be another alternative implementation of this function.\n\nInstead of querying the neutron db, you can also look into the in-memory NB IDL and figure it out. i.e loop through the logical ports and search for the virtual_ip in the Logical_Switch_Port.port_security.\n\nHaving said this, I am not sure if the above  suggestion ensures correctness.\nThis could be faster as you don\u0027t have to do sql operations.\n\nI have no strong opinions :).","commit_id":"06aaca419b1599b42ed36c0c33dad6518ba77975"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"68568cedfcdb4f0ba9d2609b9ab926004800c1dd","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron_lib.db import api as db_api"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def get_virtual_port_parents(virtual_ip, network_id):"},{"line_number":22,"context_line":"    session \u003d db_api.get_reader_session()"},{"line_number":23,"context_line":"    query \u003d session.query(models_v2.Port).join("},{"line_number":24,"context_line":"        allowed_address_pair.AllowedAddressPair,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_0b012f3a","line":21,"in_reply_to":"3fa7e38b_10d87aee","updated":"2019-10-18 16:09:23.000000000","message":"If I had to guess, I\u0027d say the faster linear scan that the db would do in C opposed to us doing it in-memory in Python would be roughly offset by the cost of the network request. I don\u0027t think it\u0027ll matter much. I\u0027d say throw a bunch of ports at it and see how bad it currently is before worrying about other solutions.","commit_id":"06aaca419b1599b42ed36c0c33dad6518ba77975"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"604bda14a9beb2d0d0f2cbb861ae8f034453eb5b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron_lib.db import api as db_api"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def get_virtual_port_parents(virtual_ip, network_id):"},{"line_number":22,"context_line":"    session \u003d db_api.get_reader_session()"},{"line_number":23,"context_line":"    query \u003d session.query(models_v2.Port).join("},{"line_number":24,"context_line":"        allowed_address_pair.AllowedAddressPair,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_833bdf99","line":21,"in_reply_to":"3fa7e38b_63002302","updated":"2019-10-17 10:20:14.000000000","message":"Hi, \n\nThanks for the suggestion numans. I actually thought about it when I was writing this patch but, looping thru all the ports and inspecting a string sounded very slow depending on the size of the deployment. That\u0027s why i thought about querying the Neutron database instead to make it more performant","commit_id":"06aaca419b1599b42ed36c0c33dad6518ba77975"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"9fe619c066d69f20a435717fa000e6f16a643b52","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron_lib.db import api as db_api"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def get_virtual_port_parents(virtual_ip, network_id):"},{"line_number":22,"context_line":"    session \u003d db_api.get_reader_session()"},{"line_number":23,"context_line":"    query \u003d session.query(models_v2.Port).join("},{"line_number":24,"context_line":"        allowed_address_pair.AllowedAddressPair,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_10d87aee","line":21,"in_reply_to":"3fa7e38b_833bdf99","updated":"2019-10-18 15:11:51.000000000","message":"@Terry, any insights? :)","commit_id":"06aaca419b1599b42ed36c0c33dad6518ba77975"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"22a90b94a92f655bad3697236c6688e2fb356a88","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron_lib.db import api as db_api"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def get_virtual_port_parents(virtual_ip, network_id):"},{"line_number":22,"context_line":"    session \u003d db_api.get_reader_session()"},{"line_number":23,"context_line":"    query \u003d session.query(models_v2.Port).join("},{"line_number":24,"context_line":"        allowed_address_pair.AllowedAddressPair,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_dc744339","line":21,"in_reply_to":"3fa7e38b_833bdf99","updated":"2019-10-18 10:28:49.000000000","message":"Ok. I am fine with this approach and if this is faster than looping through  the list and searching the string, then this is definitely fine :)","commit_id":"06aaca419b1599b42ed36c0c33dad6518ba77975"}],"networking_ovn/ovsdb/commands.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a49c4fd05f94d58e42e24f0c454e6b82c6e63904","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        virtual_parents.add(self.parent)"},{"line_number":1133,"context_line":"        options[ovn_const.LSP_OPTIONS_VIRTUAL_PARENTS_KEY] \u003d \u0027,\u0027.join("},{"line_number":1134,"context_line":"            virtual_parents)"},{"line_number":1135,"context_line":"        setattr(lsp, \u0027options\u0027, options)"},{"line_number":1136,"context_line":"        setattr(lsp, \u0027type\u0027, ovn_const.LSP_TYPE_VIRTUAL)"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_72aa8b71","line":1135,"range":{"start_line":1135,"start_character":8,"end_line":1135,"end_character":40},"updated":"2019-09-25 08:56:32.000000000","message":"Can you do\n\n lsp.options \u003d options\n\n?","commit_id":"4a3615ad03d82b55bb346829d6c764805ef13957"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6d8bad40163a83e15c5b964a51f70610292844f5","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        virtual_parents.add(self.parent)"},{"line_number":1133,"context_line":"        options[ovn_const.LSP_OPTIONS_VIRTUAL_PARENTS_KEY] \u003d \u0027,\u0027.join("},{"line_number":1134,"context_line":"            virtual_parents)"},{"line_number":1135,"context_line":"        setattr(lsp, \u0027options\u0027, options)"},{"line_number":1136,"context_line":"        setattr(lsp, \u0027type\u0027, ovn_const.LSP_TYPE_VIRTUAL)"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_5238a8ec","line":1135,"range":{"start_line":1135,"start_character":8,"end_line":1135,"end_character":40},"in_reply_to":"3fa7e38b_72aa8b71","updated":"2019-09-25 13:25:41.000000000","message":"I think so, tho, most of the commands here are using setattr so I just kept that style.","commit_id":"4a3615ad03d82b55bb346829d6c764805ef13957"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"e2e52d85f1b4a21e185a08bab775892d6a9fbd49","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"        _delvalue_from_list(lrouter, \u0027ports\u0027, lrouter_port)"},{"line_number":1105,"context_line":""},{"line_number":1106,"context_line":""},{"line_number":1107,"context_line":"class SetLSwitchPortToVirtualTypeCommand(command.BaseCommand):"},{"line_number":1108,"context_line":"    def __init__(self, api, lport, vip, parent, if_exists):"},{"line_number":1109,"context_line":"        super(SetLSwitchPortToVirtualTypeCommand, self).__init__(api)"},{"line_number":1110,"context_line":"        self.lport \u003d lport"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_1a307407","line":1107,"range":{"start_line":1107,"start_character":6,"end_line":1107,"end_character":40},"updated":"2019-10-04 13:21:57.000000000","message":"this and the rest of commands would\u0027ve been nice in a separate patch or directly into ovsdbapp :P","commit_id":"4c9904776c88318907d023d129772dabbb681a74"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"cede0be864d5b035bd93bc9f5d4a4d98fe9f659f","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"        _delvalue_from_list(lrouter, \u0027ports\u0027, lrouter_port)"},{"line_number":1105,"context_line":""},{"line_number":1106,"context_line":""},{"line_number":1107,"context_line":"class SetLSwitchPortToVirtualTypeCommand(command.BaseCommand):"},{"line_number":1108,"context_line":"    def __init__(self, api, lport, vip, parent, if_exists):"},{"line_number":1109,"context_line":"        super(SetLSwitchPortToVirtualTypeCommand, self).__init__(api)"},{"line_number":1110,"context_line":"        self.lport \u003d lport"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_5303f542","line":1107,"range":{"start_line":1107,"start_character":6,"end_line":1107,"end_character":40},"in_reply_to":"3fa7e38b_1a307407","updated":"2019-10-09 09:44:26.000000000","message":"True that, we can propose it as a separated patch or you prefer to do it before ?\n\nThere are some cons regarding doing it in ovsdbapp first:\n\n1) We need a ovsdbapp bump\n2) Makes it harder for backporting (if needed) due to the point 1., we can\u0027t bump the minimum requirement of the stable branches.\n\nI think we could leave it as-is and then propose a patch to ovsdbapp, release once merged and then update the code.","commit_id":"4c9904776c88318907d023d129772dabbb681a74"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"4a857d8000815dc1199ec439a7c19aaf818ef6e8","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"        _delvalue_from_list(lrouter, \u0027ports\u0027, lrouter_port)"},{"line_number":1105,"context_line":""},{"line_number":1106,"context_line":""},{"line_number":1107,"context_line":"class SetLSwitchPortToVirtualTypeCommand(command.BaseCommand):"},{"line_number":1108,"context_line":"    def __init__(self, api, lport, vip, parent, if_exists):"},{"line_number":1109,"context_line":"        super(SetLSwitchPortToVirtualTypeCommand, self).__init__(api)"},{"line_number":1110,"context_line":"        self.lport \u003d lport"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_d34b6584","line":1107,"range":{"start_line":1107,"start_character":6,"end_line":1107,"end_character":40},"in_reply_to":"3fa7e38b_5303f542","updated":"2019-10-09 09:47:37.000000000","message":"++ to the follow up!","commit_id":"4c9904776c88318907d023d129772dabbb681a74"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bc0abb3282ead03acd80726c29725995ad495593","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"        except idlutils.RowNotFound:"},{"line_number":1121,"context_line":"            if self.if_exists:"},{"line_number":1122,"context_line":"                return"},{"line_number":1123,"context_line":"            msg \u003d _(\"Logical Switch Port %s does not exist\") % self.lport"},{"line_number":1124,"context_line":"            raise RuntimeError(msg)"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"        options \u003d lsp.options"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_00199386","line":1123,"updated":"2019-11-18 10:05:23.000000000","message":"will remove this i18n too","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"29fe4eb32bfe568718e13273c5b931ce5ec66362","unresolved":false,"context_lines":[{"line_number":1151,"context_line":"        except idlutils.RowNotFound:"},{"line_number":1152,"context_line":"            if self.if_exists:"},{"line_number":1153,"context_line":"                return"},{"line_number":1154,"context_line":"            msg \u003d _(\"Logical Switch Port %s does not exist\") % self.lport"},{"line_number":1155,"context_line":"            raise RuntimeError(msg)"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        options \u003d lsp.options"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_9315514c","line":1154,"range":{"start_line":1154,"start_character":18,"end_line":1154,"end_character":19},"updated":"2019-11-08 02:06:43.000000000","message":"Do we need this translation?","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bc0abb3282ead03acd80726c29725995ad495593","unresolved":false,"context_lines":[{"line_number":1151,"context_line":"        except idlutils.RowNotFound:"},{"line_number":1152,"context_line":"            if self.if_exists:"},{"line_number":1153,"context_line":"                return"},{"line_number":1154,"context_line":"            msg \u003d _(\"Logical Switch Port %s does not exist\") % self.lport"},{"line_number":1155,"context_line":"            raise RuntimeError(msg)"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        options \u003d lsp.options"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_4029cb99","line":1154,"range":{"start_line":1154,"start_character":18,"end_line":1154,"end_character":19},"in_reply_to":"3fa7e38b_9315514c","updated":"2019-11-18 10:05:23.000000000","message":"Done","commit_id":"592204a96595f798c1dbcdb9cba1c6a222aec958"}],"networking_ovn/tests/functional/test_mech_driver.py":[{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"f7b700da0b159725dee324e92117664af8eb07b9","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"@mock.patch(\u0027networking_ovn.common.ovn_client.OVNClient\u0027"},{"line_number":183,"context_line":"            \u0027._is_virtual_port_supported\u0027, lambda *args: True)"},{"line_number":184,"context_line":"class TestVirtualPorts(base.TestOVNFunctionalBase):"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def setUp(self):"},{"line_number":187,"context_line":"        super(TestVirtualPorts, self).setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_af61643b","line":184,"range":{"start_line":184,"start_character":6,"end_line":184,"end_character":22},"updated":"2019-08-19 08:47:38.000000000","message":"This is basically testing DB correctness, which is good but with regards to the actual functionality, are you planning to write some test or rely on tempest octavia?","commit_id":"23d6d55be1eb838978c06ca1ff126e0c777b3b2c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4d71a5ce3c9efb087bdbc44950f792fb84b10ee2","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"@mock.patch(\u0027networking_ovn.common.ovn_client.OVNClient\u0027"},{"line_number":183,"context_line":"            \u0027._is_virtual_port_supported\u0027, lambda *args: True)"},{"line_number":184,"context_line":"class TestVirtualPorts(base.TestOVNFunctionalBase):"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def setUp(self):"},{"line_number":187,"context_line":"        super(TestVirtualPorts, self).setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_66858e59","line":184,"range":{"start_line":184,"start_character":6,"end_line":184,"end_character":22},"in_reply_to":"7faddb67_3c1905d0","updated":"2019-08-22 09:10:06.000000000","message":"++ it would be a great test indeed!","commit_id":"23d6d55be1eb838978c06ca1ff126e0c777b3b2c"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"5a1fa9e3a4cf6bb81692806b99c11bbe3e06d923","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"@mock.patch(\u0027networking_ovn.common.ovn_client.OVNClient\u0027"},{"line_number":183,"context_line":"            \u0027._is_virtual_port_supported\u0027, lambda *args: True)"},{"line_number":184,"context_line":"class TestVirtualPorts(base.TestOVNFunctionalBase):"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def setUp(self):"},{"line_number":187,"context_line":"        super(TestVirtualPorts, self).setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_3c1905d0","line":184,"range":{"start_line":184,"start_character":6,"end_line":184,"end_character":22},"in_reply_to":"7faddb67_880fbede","updated":"2019-08-21 07:58:05.000000000","message":"That would be great to test keepalived double failover:\nmaster -\u003e slave\nslave -\u003e master\nBecause that is why the virtual type has been added to OVN. Maybe we can try as a separate patch add this to tempest? I could do this.\n\nThis test: https://github.com/openstack/octavia-tempest-plugin/blob/master/octavia_tempest_plugin/tests/act_stdby_scenario/v2/test_active_standby_iptables.py\nchecks master failover only, and its limited to an amphora.","commit_id":"23d6d55be1eb838978c06ca1ff126e0c777b3b2c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8d404585cbe0d774811649830b9184a224aee1f8","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"@mock.patch(\u0027networking_ovn.common.ovn_client.OVNClient\u0027"},{"line_number":183,"context_line":"            \u0027._is_virtual_port_supported\u0027, lambda *args: True)"},{"line_number":184,"context_line":"class TestVirtualPorts(base.TestOVNFunctionalBase):"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def setUp(self):"},{"line_number":187,"context_line":"        super(TestVirtualPorts, self).setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_880fbede","line":184,"range":{"start_line":184,"start_character":6,"end_line":184,"end_character":22},"in_reply_to":"7faddb67_af61643b","updated":"2019-08-19 12:20:22.000000000","message":"Right, this is making sure that the information in the OVN NB DB is correct. I think that in order to test this functionality we will need something broader than functional tests. So, either using the octavia tempest tests or writing some new tempest test would do it.","commit_id":"23d6d55be1eb838978c06ca1ff126e0c777b3b2c"}]}
