)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"68b6a765237f9748df113449ff6ed03534812bcf","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If new segment is created/old deleted we should update its"},{"line_number":10,"context_line":"localnet port in related Logical_Switch."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I6b864ba1c168643640a64bd7c25e1d0fc0ea348a"},{"line_number":13,"context_line":"Related-Bug: 1865889"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"df33271e_17eea887","line":11,"updated":"2020-04-06 07:36:45.000000000","message":"Add information that new naming convention for provider network localnet ports needs to be applied.\n\nOld one: provnet-\u003c\u003cuuid-of-network\u003e\u003e\nnew one: provnet-\u003c\u003cuuid-of-segment\u003e\u003e","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py":[{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"2b4db5acdc3b8ff197bf362320c7595cd9b34fe3","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def delete_segment_provnet_port(self, resource, event, trigger,"},{"line_number":338,"context_line":"                                    payload\u003dNone):"},{"line_number":339,"context_line":"        if not payload:"},{"line_number":340,"context_line":"            return"},{"line_number":341,"context_line":"        segment \u003d payload.states[-1]"},{"line_number":342,"context_line":"        if segment.get(segment_def.PHYSICAL_NETWORK):"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_c6bacfdf","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":23},"updated":"2020-04-06 08:50:10.000000000","message":"if payload is optional and defaults to none, does it really matter? Maybe make it non optional or just don\u0027t bother having that caller case?","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"031e35e62473689347436f04ad219287c9d3ee12","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def delete_segment_provnet_port(self, resource, event, trigger,"},{"line_number":338,"context_line":"                                    payload\u003dNone):"},{"line_number":339,"context_line":"        if not payload:"},{"line_number":340,"context_line":"            return"},{"line_number":341,"context_line":"        segment \u003d payload.states[-1]"},{"line_number":342,"context_line":"        if segment.get(segment_def.PHYSICAL_NETWORK):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_29c9e477","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":23},"in_reply_to":"1f493fa4_293564db","updated":"2020-05-12 07:00:59.000000000","message":"Ok, I think can remove this default \u0027None\u0027.","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"11630340c7638187e4f930de8416e4e43cb9f95c","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def delete_segment_provnet_port(self, resource, event, trigger,"},{"line_number":338,"context_line":"                                    payload\u003dNone):"},{"line_number":339,"context_line":"        if not payload:"},{"line_number":340,"context_line":"            return"},{"line_number":341,"context_line":"        segment \u003d payload.states[-1]"},{"line_number":342,"context_line":"        if segment.get(segment_def.PHYSICAL_NETWORK):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_293564db","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":23},"in_reply_to":"df33271e_c6bacfdf","updated":"2020-04-21 09:17:32.000000000","message":"I cannot make it non optional, because other event handling functions also have it functional and I think I should be following it.\n\nI haven\u0027t found any event that doesn\u0027t include the payload, because the \u0027AFTER_DELETE\u0027 event always have to has this payload. I *think* I can remove this check.","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"adfe40b8689e1541f8e85ef201c76f3b619faa78","unresolved":false,"context_lines":[{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def delete_segment_provnet_port(self, resource, event, trigger,"},{"line_number":392,"context_line":"                                    payload):"},{"line_number":393,"context_line":"        segment \u003d payload.states[-1]"},{"line_number":394,"context_line":"        if segment.get(segment_def.PHYSICAL_NETWORK):"},{"line_number":395,"context_line":"            self._ovn_client._delete_provnet_port("},{"line_number":396,"context_line":"                segment[\u0027network_id\u0027], segment)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_4f891873","line":393,"range":{"start_line":393,"start_character":18,"end_line":393,"end_character":36},"updated":"2020-06-03 08:50:28.000000000","message":"Would be good to have some explanation why we do this, it\u0027s not clear for ppl reading the code (me right now :D)","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"4e59e4cc5231980c09b4110aac1ea4a5de044699","unresolved":false,"context_lines":[{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def delete_segment_provnet_port(self, resource, event, trigger,"},{"line_number":392,"context_line":"                                    payload):"},{"line_number":393,"context_line":"        segment \u003d payload.states[-1]"},{"line_number":394,"context_line":"        if segment.get(segment_def.PHYSICAL_NETWORK):"},{"line_number":395,"context_line":"            self._ovn_client._delete_provnet_port("},{"line_number":396,"context_line":"                segment[\u0027network_id\u0027], segment)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_0f8547ad","line":393,"range":{"start_line":393,"start_character":18,"end_line":393,"end_character":36},"in_reply_to":"ff570b3c_4f891873","updated":"2020-06-04 10:27:46.000000000","message":"For events like event.AFTER_DELETE, there is always payload added that shows on which resource the event is triggered.\n\nIn this place the payload.states means the states of the resource, and I\u0027m trying to get the last state, so means the fresh information :D \n\nExample:\n\n(Pdb++) pp payload.states\n({\u0027created_at\u0027: \u00272020-06-04T09:56:19Z\u0027,\n  \u0027description\u0027: \u0027\u0027,\n  \u0027hosts\u0027: [],\n  \u0027id\u0027: \u0027521f9911-db29-4ee0-ab51-cc5298138a3b\u0027,\n  \u0027name\u0027: \u0027segment-2\u0027,\n  \u0027network_id\u0027: \u00271c104c46-2e38-419f-870c-61dac7e47c46\u0027,\n  \u0027network_type\u0027: \u0027vlan\u0027,\n  \u0027physical_network\u0027: \u0027segment-2\u0027,\n  \u0027revision_number\u0027: 1,\n  \u0027segment_index\u0027: 1,\n  \u0027segmentation_id\u0027: 200,\n  \u0027tags\u0027: [],\n  \u0027updated_at\u0027: \u00272020-06-04T09:56:19Z\u0027},)\n(Pdb++)\n\nIn 99% of cases it will end with the same as payload.states[0], but I\u0027m not sure if there is possibility of having more payloads.states. Potentially yes, because that is a list. So that is why I get the last element of that list.","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5b545bc3c2e4a3c5f61461cce6c62e90c806cc60","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        # NOTE(mjozefcz): Get the last state of segment resource."},{"line_number":394,"context_line":"        segment \u003d payload.states[-1]"},{"line_number":395,"context_line":"        if segment.get(segment_def.PHYSICAL_NETWORK):"},{"line_number":396,"context_line":"            self._ovn_client._delete_provnet_port("},{"line_number":397,"context_line":"                segment[\u0027network_id\u0027], segment)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    def create_network_precommit(self, context):"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_29a3b9b3","line":396,"range":{"start_line":396,"start_character":29,"end_line":396,"end_character":49},"updated":"2020-06-08 10:33:49.000000000","message":"I might be wrong but _delete_provnet_port (note the leading underscore) is only called from here. Yet it\u0027s defined as \u0027private\u0027 to the ovn client module.\nThis contrasts to the create_provnet_port method (call in L389). Shall we name them consistently?","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c9eb6f1d2486acdd8b5109fc58c66c9024cf1dc4","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        # NOTE(mjozefcz): Get the last state of segment resource."},{"line_number":394,"context_line":"        segment \u003d payload.states[-1]"},{"line_number":395,"context_line":"        if segment.get(segment_def.PHYSICAL_NETWORK):"},{"line_number":396,"context_line":"            self._ovn_client._delete_provnet_port("},{"line_number":397,"context_line":"                segment[\u0027network_id\u0027], segment)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    def create_network_precommit(self, context):"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_256747ed","line":396,"range":{"start_line":396,"start_character":29,"end_line":396,"end_character":49},"in_reply_to":"ff570b3c_29a3b9b3","updated":"2020-06-09 12:18:46.000000000","message":"Yes, I forgot to change _delete_provnet_port after changing _create_provnet_port :) thanks for pointing this","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py":[{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"de6a0a30c5702f1b12dbc88b6b8b9c707dfe8baf","unresolved":false,"context_lines":[{"line_number":56,"context_line":"# and therefor allows networking-ovn to manage connection scope on its own"},{"line_number":57,"context_line":"class Backend(ovs_idl.Backend):"},{"line_number":58,"context_line":"    lookup_table \u003d {}"},{"line_number":59,"context_line":"    ovsdb_connection \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def __init__(self, connection):"},{"line_number":62,"context_line":"        self.ovsdb_connection \u003d connection"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff570b3c_cafe41ad","line":59,"range":{"start_line":59,"start_character":4,"end_line":59,"end_character":27},"updated":"2020-05-26 10:15:57.000000000","message":"this class variable was intentional? It was missing before?!?","commit_id":"5d2b6e3e41f6b3df9acacee8df050222bc7778fb"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"bf0cd99b5bce88735cc059171e072cf91e01261f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"# and therefor allows networking-ovn to manage connection scope on its own"},{"line_number":57,"context_line":"class Backend(ovs_idl.Backend):"},{"line_number":58,"context_line":"    lookup_table \u003d {}"},{"line_number":59,"context_line":"    ovsdb_connection \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def __init__(self, connection):"},{"line_number":62,"context_line":"        self.ovsdb_connection \u003d connection"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff570b3c_89b8902a","line":59,"range":{"start_line":59,"start_character":4,"end_line":59,"end_character":27},"in_reply_to":"ff570b3c_cafe41ad","updated":"2020-05-29 10:48:35.000000000","message":"This has been added during code rebase. Original change: \nhttps://review.opendev.org/#/c/727232/","commit_id":"5d2b6e3e41f6b3df9acacee8df050222bc7778fb"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/maintenance.py":[{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"2b4db5acdc3b8ff197bf362320c7595cd9b34fe3","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            legacy_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":625,"context_line":"            port_names \u003d [lsp.name for lsp in ls.ports]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"            if legacy_name in port_names:"},{"line_number":628,"context_line":"                legacy_port \u003d None"},{"line_number":629,"context_line":"                segment_id \u003d None"},{"line_number":630,"context_line":"                for lsp in ls.ports:"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_c6dbef1e","line":627,"range":{"start_line":627,"start_character":12,"end_line":627,"end_character":41},"updated":"2020-04-06 08:50:10.000000000","message":"the nesting of for and ifs makes this a little hard to read.\nhow about turning this\n\nif legacy_name not on port_names:\n    continue\n\nand avoid doing this whole block inside that identation,\nof move it to a new function?","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"031e35e62473689347436f04ad219287c9d3ee12","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            legacy_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":625,"context_line":"            port_names \u003d [lsp.name for lsp in ls.ports]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"            if legacy_name in port_names:"},{"line_number":628,"context_line":"                legacy_port \u003d None"},{"line_number":629,"context_line":"                segment_id \u003d None"},{"line_number":630,"context_line":"                for lsp in ls.ports:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_698e4c28","line":627,"range":{"start_line":627,"start_character":12,"end_line":627,"end_character":41},"in_reply_to":"df33271e_bac19ce7","updated":"2020-05-12 07:00:59.000000000","message":"Done","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ff7a1d1c5e2b7c2713a7ea9442b00f463f7f18af","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            legacy_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":625,"context_line":"            port_names \u003d [lsp.name for lsp in ls.ports]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"            if legacy_name in port_names:"},{"line_number":628,"context_line":"                legacy_port \u003d None"},{"line_number":629,"context_line":"                segment_id \u003d None"},{"line_number":630,"context_line":"                for lsp in ls.ports:"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_bac19ce7","line":627,"range":{"start_line":627,"start_character":12,"end_line":627,"end_character":41},"in_reply_to":"df33271e_c6dbef1e","updated":"2020-04-06 12:44:24.000000000","message":"+1 to use the invert logic to avoid the extra indentation","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"031e35e62473689347436f04ad219287c9d3ee12","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            legacy_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":625,"context_line":"            port_names \u003d [lsp.name for lsp in ls.ports]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"            if legacy_name in port_names:"},{"line_number":628,"context_line":"                legacy_port \u003d None"},{"line_number":629,"context_line":"                segment_id \u003d None"},{"line_number":630,"context_line":"                for lsp in ls.ports:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_49939050","line":627,"range":{"start_line":627,"start_character":12,"end_line":627,"end_character":41},"in_reply_to":"df33271e_c6dbef1e","updated":"2020-05-12 07:00:59.000000000","message":"Done","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"11630340c7638187e4f930de8416e4e43cb9f95c","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            legacy_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":625,"context_line":"            port_names \u003d [lsp.name for lsp in ls.ports]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"            if legacy_name in port_names:"},{"line_number":628,"context_line":"                legacy_port \u003d None"},{"line_number":629,"context_line":"                segment_id \u003d None"},{"line_number":630,"context_line":"                for lsp in ls.ports:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_096068ce","line":627,"range":{"start_line":627,"start_character":12,"end_line":627,"end_character":41},"in_reply_to":"df33271e_c6dbef1e","updated":"2020-04-21 09:17:32.000000000","message":"cool, I\u0027ll do","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"96ab3e0e87472da3ff436a7109b7622ece0a4e20","unresolved":false,"context_lines":[{"line_number":643,"context_line":"                cmds.append(self._nb_idl.db_set(\u0027Logical_Switch_Port\u0027,"},{"line_number":644,"context_line":"                                                legacy_port.uuid,"},{"line_number":645,"context_line":"                                                (\u0027name\u0027, new_p_name)))"},{"line_number":646,"context_line":"        if not cmds:"},{"line_number":647,"context_line":"            raise periodics.NeverAgain()"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":650,"context_line":"            for cmd in cmds:"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_52795e2d","line":647,"range":{"start_line":646,"start_character":8,"end_line":647,"end_character":40},"updated":"2020-04-06 08:19:22.000000000","message":"Could be changed like:\n\nif cmds:\n   with self....\n\nraise periodics.NeverAgain()","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ff7a1d1c5e2b7c2713a7ea9442b00f463f7f18af","unresolved":false,"context_lines":[{"line_number":643,"context_line":"                cmds.append(self._nb_idl.db_set(\u0027Logical_Switch_Port\u0027,"},{"line_number":644,"context_line":"                                                legacy_port.uuid,"},{"line_number":645,"context_line":"                                                (\u0027name\u0027, new_p_name)))"},{"line_number":646,"context_line":"        if not cmds:"},{"line_number":647,"context_line":"            raise periodics.NeverAgain()"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":650,"context_line":"            for cmd in cmds:"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_ba66bc28","line":647,"range":{"start_line":646,"start_character":8,"end_line":647,"end_character":40},"in_reply_to":"df33271e_52795e2d","updated":"2020-04-06 12:44:24.000000000","message":"+1","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"031e35e62473689347436f04ad219287c9d3ee12","unresolved":false,"context_lines":[{"line_number":643,"context_line":"                cmds.append(self._nb_idl.db_set(\u0027Logical_Switch_Port\u0027,"},{"line_number":644,"context_line":"                                                legacy_port.uuid,"},{"line_number":645,"context_line":"                                                (\u0027name\u0027, new_p_name)))"},{"line_number":646,"context_line":"        if not cmds:"},{"line_number":647,"context_line":"            raise periodics.NeverAgain()"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":650,"context_line":"            for cmd in cmds:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_e9a1bc97","line":647,"range":{"start_line":646,"start_character":8,"end_line":647,"end_character":40},"in_reply_to":"df33271e_ba66bc28","updated":"2020-05-12 07:00:59.000000000","message":"Done","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"2b230c874f78a0e7b00cca3f969b6e27b0450f3c","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        for ls in self._nb_idl.ls_list().execute(check_error\u003dTrue):"},{"line_number":623,"context_line":"            network_id \u003d ls.name.strip(\u0027neutron-\u0027)"},{"line_number":624,"context_line":"            legacy_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":625,"context_line":"            port_names \u003d [lsp.name for lsp in ls.ports]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"            if legacy_name not in port_names:"},{"line_number":628,"context_line":"                continue"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"            legacy_port \u003d None"},{"line_number":631,"context_line":"            segment_id \u003d None"},{"line_number":632,"context_line":"            for lsp in ls.ports:"},{"line_number":633,"context_line":"                if legacy_name \u003d\u003d lsp.name:"},{"line_number":634,"context_line":"                    legacy_port \u003d lsp"},{"line_number":635,"context_line":"                    break"},{"line_number":636,"context_line":"            for segment in segments_db.get_network_segments("},{"line_number":637,"context_line":"                    admin_context, network_id):"},{"line_number":638,"context_line":"                if (segment.get(segment_def.PHYSICAL_NETWORK) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff570b3c_e25de1e9","line":635,"range":{"start_line":625,"start_character":1,"end_line":635,"end_character":25},"updated":"2020-05-15 09:37:08.000000000","message":"i see a little redundancy here. How about leveraging else in that for loop? Something like:\n\n            legacy_port \u003d None\n            segment_id \u003d None\n            for lsp in ls.ports:\n                if legacy_name \u003d\u003d lsp.name:\n                    legacy_port \u003d lsp\n                    break\n            else:\n                # legacy_name not in ls.ports\n                continue","commit_id":"902cce84701e0b3f49652f6208eec5795fd43592"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"23ba7939e99831a64079bd5dced3583ad48408ba","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        for ls in self._nb_idl.ls_list().execute(check_error\u003dTrue):"},{"line_number":623,"context_line":"            network_id \u003d ls.name.strip(\u0027neutron-\u0027)"},{"line_number":624,"context_line":"            legacy_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":625,"context_line":"            port_names \u003d [lsp.name for lsp in ls.ports]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"            if legacy_name not in port_names:"},{"line_number":628,"context_line":"                continue"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"            legacy_port \u003d None"},{"line_number":631,"context_line":"            segment_id \u003d None"},{"line_number":632,"context_line":"            for lsp in ls.ports:"},{"line_number":633,"context_line":"                if legacy_name \u003d\u003d lsp.name:"},{"line_number":634,"context_line":"                    legacy_port \u003d lsp"},{"line_number":635,"context_line":"                    break"},{"line_number":636,"context_line":"            for segment in segments_db.get_network_segments("},{"line_number":637,"context_line":"                    admin_context, network_id):"},{"line_number":638,"context_line":"                if (segment.get(segment_def.PHYSICAL_NETWORK) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff570b3c_22ffd934","line":635,"range":{"start_line":625,"start_character":1,"end_line":635,"end_character":25},"in_reply_to":"ff570b3c_e25de1e9","updated":"2020-05-15 09:54:10.000000000","message":"++ good idea, I\u0027ll do","commit_id":"902cce84701e0b3f49652f6208eec5795fd43592"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"de6a0a30c5702f1b12dbc88b6b8b9c707dfe8baf","unresolved":false,"context_lines":[{"line_number":628,"context_line":"                if legacy_name \u003d\u003d lsp.name:"},{"line_number":629,"context_line":"                    legacy_port \u003d lsp"},{"line_number":630,"context_line":"                    break"},{"line_number":631,"context_line":"                else:"},{"line_number":632,"context_line":"                    continue"},{"line_number":633,"context_line":"            for segment in segments_db.get_network_segments("},{"line_number":634,"context_line":"                    admin_context, network_id):"},{"line_number":635,"context_line":"                if (segment.get(segment_def.PHYSICAL_NETWORK) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff570b3c_2a5ffde5","line":632,"range":{"start_line":631,"start_character":1,"end_line":632,"end_character":28},"updated":"2020-05-26 10:15:57.000000000","message":"This else is to be aligned with the \"for\" in line 627\nNot the \"if\" in line 628...\nMeaning, if we reach the end of the for loop then we\nknow there is no legacy port and we can move onto the\nnext logical switch.\n\nref: https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops","commit_id":"5d2b6e3e41f6b3df9acacee8df050222bc7778fb"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"bf0cd99b5bce88735cc059171e072cf91e01261f","unresolved":false,"context_lines":[{"line_number":628,"context_line":"                if legacy_name \u003d\u003d lsp.name:"},{"line_number":629,"context_line":"                    legacy_port \u003d lsp"},{"line_number":630,"context_line":"                    break"},{"line_number":631,"context_line":"                else:"},{"line_number":632,"context_line":"                    continue"},{"line_number":633,"context_line":"            for segment in segments_db.get_network_segments("},{"line_number":634,"context_line":"                    admin_context, network_id):"},{"line_number":635,"context_line":"                if (segment.get(segment_def.PHYSICAL_NETWORK) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff570b3c_e9802c49","line":632,"range":{"start_line":631,"start_character":1,"end_line":632,"end_character":28},"in_reply_to":"ff570b3c_2a5ffde5","updated":"2020-05-29 10:48:35.000000000","message":"Ah.. sure you\u0027re right. :) ++","commit_id":"5d2b6e3e41f6b3df9acacee8df050222bc7778fb"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"5764cc49bddd5730d1cf3c07f9e63abb711b9cf9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from neutron.common.ovn import utils"},{"line_number":41,"context_line":"from neutron.conf.plugins.ml2.drivers.ovn import ovn_conf"},{"line_number":42,"context_line":"from neutron.db import ovn_revision_numbers_db as db_rev"},{"line_number":43,"context_line":"from neutron.db import segments_db"},{"line_number":44,"context_line":"from neutron.scheduler import l3_ovn_scheduler"},{"line_number":45,"context_line":"from neutron.services.qos.drivers.ovn import driver as qos_driver"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_c07c7ced","line":43,"range":{"start_line":43,"start_character":0,"end_line":43,"end_character":34},"updated":"2020-04-05 18:11:05.000000000","message":"Reviewers: What do you think about registering segments_plugin here instead using DB?","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"5764cc49bddd5730d1cf3c07f9e63abb711b9cf9","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            self._plugin_property \u003d directory.get_plugin()"},{"line_number":77,"context_line":"        return self._plugin_property"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @property"},{"line_number":80,"context_line":"    def _l3_plugin(self):"},{"line_number":81,"context_line":"        if self._l3_plugin_property is None:"},{"line_number":82,"context_line":"            self._l3_plugin_property \u003d directory.get_plugin("},{"line_number":83,"context_line":"                plugin_constants.L3)"},{"line_number":84,"context_line":"        return self._l3_plugin_property"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def _transaction(self, commands, txn\u003dNone):"},{"line_number":87,"context_line":"        \"\"\"Create a new transaction or add the commands to an existing one.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_208288c9","line":84,"range":{"start_line":79,"start_character":0,"end_line":84,"end_character":39},"updated":"2020-04-05 18:11:05.000000000","message":"Example: register segments_plugin same way?","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ff7a1d1c5e2b7c2713a7ea9442b00f463f7f18af","unresolved":false,"context_lines":[{"line_number":1743,"context_line":"        tag \u003d segment.get(segment_def.SEGMENTATION_ID)"},{"line_number":1744,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"},{"line_number":1745,"context_line":"        cmd \u003d self._nb_idl.create_lswitch_port("},{"line_number":1746,"context_line":"            lport_name\u003dutils.ovn_provnet_port_name(segment[\u0027id\u0027]),"},{"line_number":1747,"context_line":"            lswitch_name\u003dutils.ovn_name(network_id),"},{"line_number":1748,"context_line":"            addresses\u003d[ovn_const.UNKNOWN_ADDR],"},{"line_number":1749,"context_line":"            external_ids\u003d{},"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_9ae3f8a4","line":1746,"range":{"start_line":1746,"start_character":52,"end_line":1746,"end_character":64},"updated":"2020-04-06 12:44:24.000000000","message":"Can we have problems when upgrading existing environments?\n\nI think we should, for now, retrieve the existing lswitch_ports with name\u003dnetworkd_id and \"convert\" the name.\n\nCould we have this problem or is this just my imagination?","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"11630340c7638187e4f930de8416e4e43cb9f95c","unresolved":false,"context_lines":[{"line_number":1743,"context_line":"        tag \u003d segment.get(segment_def.SEGMENTATION_ID)"},{"line_number":1744,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"},{"line_number":1745,"context_line":"        cmd \u003d self._nb_idl.create_lswitch_port("},{"line_number":1746,"context_line":"            lport_name\u003dutils.ovn_provnet_port_name(segment[\u0027id\u0027]),"},{"line_number":1747,"context_line":"            lswitch_name\u003dutils.ovn_name(network_id),"},{"line_number":1748,"context_line":"            addresses\u003d[ovn_const.UNKNOWN_ADDR],"},{"line_number":1749,"context_line":"            external_ids\u003d{},"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_e9ad3ceb","line":1746,"range":{"start_line":1746,"start_character":52,"end_line":1746,"end_character":64},"in_reply_to":"df33271e_9ae3f8a4","updated":"2020-04-21 09:17:32.000000000","message":"We will not have this problem, because while starting neutron with new code we\u0027ll use the function:\n\n```def check_for_localnet_legacy_port_name(self):```\n\nfrom \n\n```neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/maintenance.py```\n\nthat will convert all existing provnet ports to new convention in the first seconds after restart.","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"abe512412fdb3e199295a5196fe1bd7aa441bd6f","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"        legacy_port_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":1673,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"},{"line_number":1674,"context_line":"        lswitch \u003d self._nb_idl.get_lswitch(utils.ovn_name(network_id))"},{"line_number":1675,"context_line":"        lports \u003d [l.name for l in lswitch.ports]"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        # NOTE(mjozefcz): Cover the situation where localnet ports"},{"line_number":1678,"context_line":"        # were named after network_id and not segment_id."}],"source_content_type":"text/x-python","patch_set":12,"id":"ff570b3c_d381c34c","line":1675,"updated":"2020-05-13 11:33:43.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"9871784e3852739c9288d2b3b36cd579dc3c36d9"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"2b230c874f78a0e7b00cca3f969b6e27b0450f3c","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"    def _create_provnet_port(self, network_id, segment, txn\u003dNone):"},{"line_number":1654,"context_line":"        tag \u003d segment.get(segment_def.SEGMENTATION_ID)"},{"line_number":1655,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"},{"line_number":1656,"context_line":"        cmd \u003d self._nb_idl.create_lswitch_port("},{"line_number":1657,"context_line":"            lport_name\u003dutils.ovn_provnet_port_name(segment[\u0027id\u0027]),"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff570b3c_c2a1bdab","line":1654,"range":{"start_line":1654,"start_character":8,"end_line":1654,"end_character":54},"updated":"2020-05-15 09:37:08.000000000","message":"nit: if you use default as [] we can make line 1662 simpler:\ntag \u003d segment.get(segment_def.SEGMENTATION_ID, [])\n...\ntag\u003dtag","commit_id":"902cce84701e0b3f49652f6208eec5795fd43592"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"23ba7939e99831a64079bd5dced3583ad48408ba","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"    def _create_provnet_port(self, network_id, segment, txn\u003dNone):"},{"line_number":1654,"context_line":"        tag \u003d segment.get(segment_def.SEGMENTATION_ID)"},{"line_number":1655,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"},{"line_number":1656,"context_line":"        cmd \u003d self._nb_idl.create_lswitch_port("},{"line_number":1657,"context_line":"            lport_name\u003dutils.ovn_provnet_port_name(segment[\u0027id\u0027]),"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff570b3c_c2f09d6a","line":1654,"range":{"start_line":1654,"start_character":8,"end_line":1654,"end_character":54},"in_reply_to":"ff570b3c_c2a1bdab","updated":"2020-05-15 09:54:10.000000000","message":"++ I\u0027ll do, thanks!","commit_id":"902cce84701e0b3f49652f6208eec5795fd43592"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"2b230c874f78a0e7b00cca3f969b6e27b0450f3c","unresolved":false,"context_lines":[{"line_number":1674,"context_line":"        lswitch \u003d self._nb_idl.get_lswitch(utils.ovn_name(network_id))"},{"line_number":1675,"context_line":"        lports \u003d [lp.name for lp in lswitch.ports]"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        # NOTE(mjozefcz): Cover the situation where localnet ports"},{"line_number":1678,"context_line":"        # were named after network_id and not segment_id."},{"line_number":1679,"context_line":"        if (port_to_del not in lports and"},{"line_number":1680,"context_line":"                legacy_port_name in lports):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff570b3c_629a716e","line":1677,"range":{"start_line":1677,"start_character":10,"end_line":1677,"end_character":14},"updated":"2020-05-15 09:37:08.000000000","message":"FIXME or TODO better than NOTE ?\nI ask because I actually don\u0027t know the difference. ;P","commit_id":"902cce84701e0b3f49652f6208eec5795fd43592"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"23ba7939e99831a64079bd5dced3583ad48408ba","unresolved":false,"context_lines":[{"line_number":1674,"context_line":"        lswitch \u003d self._nb_idl.get_lswitch(utils.ovn_name(network_id))"},{"line_number":1675,"context_line":"        lports \u003d [lp.name for lp in lswitch.ports]"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        # NOTE(mjozefcz): Cover the situation where localnet ports"},{"line_number":1678,"context_line":"        # were named after network_id and not segment_id."},{"line_number":1679,"context_line":"        if (port_to_del not in lports and"},{"line_number":1680,"context_line":"                legacy_port_name in lports):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff570b3c_a2cac916","line":1677,"range":{"start_line":1677,"start_character":10,"end_line":1677,"end_character":14},"in_reply_to":"ff570b3c_629a716e","updated":"2020-05-15 09:54:10.000000000","message":"Yes,I\u0027ll add: TODO + information to drop this in next release ++","commit_id":"902cce84701e0b3f49652f6208eec5795fd43592"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"adfe40b8689e1541f8e85ef201c76f3b619faa78","unresolved":false,"context_lines":[{"line_number":1656,"context_line":"                    for network in networks]"},{"line_number":1657,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1658,"context_line":""},{"line_number":1659,"context_line":"    def _create_provnet_port(self, network_id, segment, txn\u003dNone):"},{"line_number":1660,"context_line":"        tag \u003d segment.get(segment_def.SEGMENTATION_ID, [])"},{"line_number":1661,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"},{"line_number":1662,"context_line":"        cmd \u003d self._nb_idl.create_lswitch_port("}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_8f585031","line":1659,"range":{"start_line":1659,"start_character":8,"end_line":1659,"end_character":28},"updated":"2020-06-03 08:50:28.000000000","message":"nit: maybe we should remove the _ prefix from this method since now it\u0027s been accessed externally (mech_driver.py)","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"4e59e4cc5231980c09b4110aac1ea4a5de044699","unresolved":false,"context_lines":[{"line_number":1656,"context_line":"                    for network in networks]"},{"line_number":1657,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1658,"context_line":""},{"line_number":1659,"context_line":"    def _create_provnet_port(self, network_id, segment, txn\u003dNone):"},{"line_number":1660,"context_line":"        tag \u003d segment.get(segment_def.SEGMENTATION_ID, [])"},{"line_number":1661,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"},{"line_number":1662,"context_line":"        cmd \u003d self._nb_idl.create_lswitch_port("}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_0faee72c","line":1659,"range":{"start_line":1659,"start_character":8,"end_line":1659,"end_character":28},"in_reply_to":"ff570b3c_8f585031","updated":"2020-06-04 10:27:46.000000000","message":"++ done","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"adfe40b8689e1541f8e85ef201c76f3b619faa78","unresolved":false,"context_lines":[{"line_number":1667,"context_line":"            type\u003dovn_const.LSP_TYPE_LOCALNET,"},{"line_number":1668,"context_line":"            tag\u003dtag,"},{"line_number":1669,"context_line":"            options\u003d{\u0027network_name\u0027: physnet})"},{"line_number":1670,"context_line":"        if txn:"},{"line_number":1671,"context_line":"            txn.add(cmd)"},{"line_number":1672,"context_line":"        else:"},{"line_number":1673,"context_line":"            with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1674,"context_line":"                txn.add(cmd)"},{"line_number":1675,"context_line":""},{"line_number":1676,"context_line":"    def _delete_provnet_port(self, network_id, segment):"},{"line_number":1677,"context_line":"        port_to_del \u003d utils.ovn_provnet_port_name(segment[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_4fd7584c","line":1674,"range":{"start_line":1670,"start_character":0,"end_line":1674,"end_character":28},"updated":"2020-06-03 08:50:28.000000000","message":"There\u0027s a small wrapper in this class for this:\n\n self._transaction([cmd], txn\u003dtxn)\n\nhttps://github.com/openstack/neutron/blob/31280695a26cdcf211cb964ac5f401296398a19f/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py#L87-L95","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"4e59e4cc5231980c09b4110aac1ea4a5de044699","unresolved":false,"context_lines":[{"line_number":1667,"context_line":"            type\u003dovn_const.LSP_TYPE_LOCALNET,"},{"line_number":1668,"context_line":"            tag\u003dtag,"},{"line_number":1669,"context_line":"            options\u003d{\u0027network_name\u0027: physnet})"},{"line_number":1670,"context_line":"        if txn:"},{"line_number":1671,"context_line":"            txn.add(cmd)"},{"line_number":1672,"context_line":"        else:"},{"line_number":1673,"context_line":"            with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1674,"context_line":"                txn.add(cmd)"},{"line_number":1675,"context_line":""},{"line_number":1676,"context_line":"    def _delete_provnet_port(self, network_id, segment):"},{"line_number":1677,"context_line":"        port_to_del \u003d utils.ovn_provnet_port_name(segment[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_ef43b36a","line":1674,"range":{"start_line":1670,"start_character":0,"end_line":1674,"end_character":28},"in_reply_to":"ff570b3c_4fd7584c","updated":"2020-06-04 10:27:46.000000000","message":"Good one! Thanks ++","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"adfe40b8689e1541f8e85ef201c76f3b619faa78","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"            with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1674,"context_line":"                txn.add(cmd)"},{"line_number":1675,"context_line":""},{"line_number":1676,"context_line":"    def _delete_provnet_port(self, network_id, segment):"},{"line_number":1677,"context_line":"        port_to_del \u003d utils.ovn_provnet_port_name(segment[\u0027id\u0027])"},{"line_number":1678,"context_line":"        legacy_port_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":1679,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_6f769ca6","line":1676,"range":{"start_line":1676,"start_character":8,"end_line":1676,"end_character":9},"updated":"2020-06-03 08:50:28.000000000","message":"ditto removing the prefix","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"4e59e4cc5231980c09b4110aac1ea4a5de044699","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"            with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1674,"context_line":"                txn.add(cmd)"},{"line_number":1675,"context_line":""},{"line_number":1676,"context_line":"    def _delete_provnet_port(self, network_id, segment):"},{"line_number":1677,"context_line":"        port_to_del \u003d utils.ovn_provnet_port_name(segment[\u0027id\u0027])"},{"line_number":1678,"context_line":"        legacy_port_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":1679,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_4fa45f4b","line":1676,"range":{"start_line":1676,"start_character":8,"end_line":1676,"end_character":9},"in_reply_to":"ff570b3c_6f769ca6","updated":"2020-06-04 10:27:46.000000000","message":"++ done","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"adfe40b8689e1541f8e85ef201c76f3b619faa78","unresolved":false,"context_lines":[{"line_number":1717,"context_line":"        # NOTE(mjozefcz): Remove this workaround when bug"},{"line_number":1718,"context_line":"        # 1869877 will be fixed."},{"line_number":1719,"context_line":"        segments \u003d segments_db.get_network_segments("},{"line_number":1720,"context_line":"            context, network.get(\u0027id\u0027))"},{"line_number":1721,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1722,"context_line":"            txn.add(self._nb_idl.ls_add(lswitch_name, **lswitch_params,"},{"line_number":1723,"context_line":"                                        may_exist\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_8f105002","line":1720,"range":{"start_line":1720,"start_character":21,"end_line":1720,"end_character":38},"updated":"2020-06-03 08:50:28.000000000","message":"nit: network[\u0027id\u0027] as we expect it to be present","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"4e59e4cc5231980c09b4110aac1ea4a5de044699","unresolved":false,"context_lines":[{"line_number":1717,"context_line":"        # NOTE(mjozefcz): Remove this workaround when bug"},{"line_number":1718,"context_line":"        # 1869877 will be fixed."},{"line_number":1719,"context_line":"        segments \u003d segments_db.get_network_segments("},{"line_number":1720,"context_line":"            context, network.get(\u0027id\u0027))"},{"line_number":1721,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1722,"context_line":"            txn.add(self._nb_idl.ls_add(lswitch_name, **lswitch_params,"},{"line_number":1723,"context_line":"                                        may_exist\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff570b3c_ef11f35e","line":1720,"range":{"start_line":1720,"start_character":21,"end_line":1720,"end_character":38},"in_reply_to":"ff570b3c_8f105002","updated":"2020-06-04 10:27:46.000000000","message":"Done","commit_id":"6dcf83c4fcd2cfef6f85eb2f75e75c7999081472"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5b545bc3c2e4a3c5f61461cce6c62e90c806cc60","unresolved":false,"context_lines":[{"line_number":1669,"context_line":"            options\u003d{\u0027network_name\u0027: physnet})"},{"line_number":1670,"context_line":"        self._transaction([cmd], txn\u003dtxn)"},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"    def _delete_provnet_port(self, network_id, segment):"},{"line_number":1673,"context_line":"        port_to_del \u003d utils.ovn_provnet_port_name(segment[\u0027id\u0027])"},{"line_number":1674,"context_line":"        legacy_port_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":1675,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_298c5934","line":1672,"updated":"2020-06-08 10:33:49.000000000","message":"Can we do the same thing as we\u0027re doing in the create_provnet_port? ie. pass the txn along and leverage self._transaction ?","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c9eb6f1d2486acdd8b5109fc58c66c9024cf1dc4","unresolved":false,"context_lines":[{"line_number":1669,"context_line":"            options\u003d{\u0027network_name\u0027: physnet})"},{"line_number":1670,"context_line":"        self._transaction([cmd], txn\u003dtxn)"},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"    def _delete_provnet_port(self, network_id, segment):"},{"line_number":1673,"context_line":"        port_to_del \u003d utils.ovn_provnet_port_name(segment[\u0027id\u0027])"},{"line_number":1674,"context_line":"        legacy_port_name \u003d utils.ovn_provnet_port_name(network_id)"},{"line_number":1675,"context_line":"        physnet \u003d segment.get(segment_def.PHYSICAL_NETWORK)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_25daa778","line":1672,"in_reply_to":"ff570b3c_298c5934","updated":"2020-06-09 12:18:46.000000000","message":"The _delete_provnet_port() is executed only on event from mechanism driver (resources.SEGMENT, events.AFTER_DELETE).\n\nSo I don\u0027t have any OVN txn there, but anyways I used self._transaction(), without passing txn there, because the method still looks better than opening new context manager here.","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5b545bc3c2e4a3c5f61461cce6c62e90c806cc60","unresolved":false,"context_lines":[{"line_number":1676,"context_line":"        lswitch \u003d self._nb_idl.get_lswitch(utils.ovn_name(network_id))"},{"line_number":1677,"context_line":"        lports \u003d [lp.name for lp in lswitch.ports]"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"        # NOTE(mjozefcz): Cover the situation where localnet ports"},{"line_number":1680,"context_line":"        # were named after network_id and not segment_id."},{"line_number":1681,"context_line":"        # TODO(mjozefcz): Remove this in w-release."},{"line_number":1682,"context_line":"        if (port_to_del not in lports and"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_090075ab","line":1679,"range":{"start_line":1679,"start_character":10,"end_line":1679,"end_character":25},"updated":"2020-06-08 10:33:49.000000000","message":"nit: should just be a regular comment and not a note?","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c9eb6f1d2486acdd8b5109fc58c66c9024cf1dc4","unresolved":false,"context_lines":[{"line_number":1676,"context_line":"        lswitch \u003d self._nb_idl.get_lswitch(utils.ovn_name(network_id))"},{"line_number":1677,"context_line":"        lports \u003d [lp.name for lp in lswitch.ports]"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"        # NOTE(mjozefcz): Cover the situation where localnet ports"},{"line_number":1680,"context_line":"        # were named after network_id and not segment_id."},{"line_number":1681,"context_line":"        # TODO(mjozefcz): Remove this in w-release."},{"line_number":1682,"context_line":"        if (port_to_del not in lports and"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_458cfb7e","line":1679,"range":{"start_line":1679,"start_character":10,"end_line":1679,"end_character":25},"in_reply_to":"ff570b3c_090075ab","updated":"2020-06-09 12:18:46.000000000","message":"Done","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5b545bc3c2e4a3c5f61461cce6c62e90c806cc60","unresolved":false,"context_lines":[{"line_number":1686,"context_line":"                        lport.options[\u0027network_name\u0027] \u003d\u003d physnet):"},{"line_number":1687,"context_line":"                    port_to_del \u003d legacy_port_name"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1690,"context_line":"            txn.add(self._nb_idl.delete_lswitch_port("},{"line_number":1691,"context_line":"                      lport_name\u003dport_to_del,"},{"line_number":1692,"context_line":"                      lswitch_name\u003dutils.ovn_name(network_id)))"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_69865116","line":1689,"range":{"start_line":1689,"start_character":8,"end_line":1689,"end_character":63},"updated":"2020-06-08 10:33:49.000000000","message":"See my comment above","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c9eb6f1d2486acdd8b5109fc58c66c9024cf1dc4","unresolved":false,"context_lines":[{"line_number":1686,"context_line":"                        lport.options[\u0027network_name\u0027] \u003d\u003d physnet):"},{"line_number":1687,"context_line":"                    port_to_del \u003d legacy_port_name"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1690,"context_line":"            txn.add(self._nb_idl.delete_lswitch_port("},{"line_number":1691,"context_line":"                      lport_name\u003dport_to_del,"},{"line_number":1692,"context_line":"                      lswitch_name\u003dutils.ovn_name(network_id)))"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_65bdbf01","line":1689,"range":{"start_line":1689,"start_character":8,"end_line":1689,"end_character":63},"in_reply_to":"ff570b3c_69865116","updated":"2020-06-09 12:18:46.000000000","message":"Done","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_db_sync.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"ffc2d5b9aabe673dd0bfdff41bbd54ce137fa8b9","unresolved":false,"context_lines":[{"line_number":966,"context_line":"        ovn_all_dhcp_options \u003d self.ovn_api.get_all_dhcp_options()"},{"line_number":967,"context_line":"        db_network_cache \u003d dict(db_networks)"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"        # TODO(mjozefcz): We need to verify this method."},{"line_number":970,"context_line":"        ports_need_sync_dhcp_opts \u003d []"},{"line_number":971,"context_line":"        lswitches \u003d self.ovn_api.get_all_logical_switches_with_ports()"},{"line_number":972,"context_line":"        del_lswitchs_list \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_149a66b7","line":969,"range":{"start_line":969,"start_character":8,"end_line":969,"end_character":55},"updated":"2020-04-02 12:20:45.000000000","message":"Not anymore ;)","commit_id":"c55a3049435c2e2cddcd848d3c6193ef88926395"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ff7a1d1c5e2b7c2713a7ea9442b00f463f7f18af","unresolved":false,"context_lines":[{"line_number":987,"context_line":"                for db_segment in db_segments:"},{"line_number":988,"context_line":"                    physnet \u003d db_segment.get(segment_def.PHYSICAL_NETWORK)"},{"line_number":989,"context_line":"                    pname \u003d utils.ovn_provnet_port_name(db_segment[\u0027id\u0027])"},{"line_number":990,"context_line":"                    # Updating provider attributes is forbidden by neutron,"},{"line_number":991,"context_line":"                    # thus we only need to consider missing provnet-ports"},{"line_number":992,"context_line":"                    # in OVN DB."},{"line_number":993,"context_line":"                    if physnet and pname not in lswitch[\u0027provnet_ports\u0027]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_d599d3d0","line":990,"range":{"start_line":990,"start_character":21,"end_line":990,"end_character":74},"updated":"2020-04-06 12:44:24.000000000","message":"nit: for networks with OVS or unbond ports and just one segment, we can change the segmentation ID","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"11630340c7638187e4f930de8416e4e43cb9f95c","unresolved":false,"context_lines":[{"line_number":987,"context_line":"                for db_segment in db_segments:"},{"line_number":988,"context_line":"                    physnet \u003d db_segment.get(segment_def.PHYSICAL_NETWORK)"},{"line_number":989,"context_line":"                    pname \u003d utils.ovn_provnet_port_name(db_segment[\u0027id\u0027])"},{"line_number":990,"context_line":"                    # Updating provider attributes is forbidden by neutron,"},{"line_number":991,"context_line":"                    # thus we only need to consider missing provnet-ports"},{"line_number":992,"context_line":"                    # in OVN DB."},{"line_number":993,"context_line":"                    if physnet and pname not in lswitch[\u0027provnet_ports\u0027]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_89f758f6","line":990,"range":{"start_line":990,"start_character":21,"end_line":990,"end_character":74},"in_reply_to":"df33271e_d599d3d0","updated":"2020-04-21 09:17:32.000000000","message":"I can remove this comment from here, wdyf?","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5b545bc3c2e4a3c5f61461cce6c62e90c806cc60","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"            for provnet_port_info in add_provnet_ports_list:"},{"line_number":1047,"context_line":"                network \u003d provnet_port_info[\u0027network\u0027]"},{"line_number":1048,"context_line":"                segment \u003d provnet_port_info[\u0027segment\u0027]"},{"line_number":1049,"context_line":"                LOG.warning(\"Provider network found in Neutron but \""},{"line_number":1050,"context_line":"                            \"provider network port not found in OVN DB, \""},{"line_number":1051,"context_line":"                            \"network_id\u003d%(net)s segment_id\u003d%(seg)s\","},{"line_number":1052,"context_line":"                            {\u0027net\u0027: network[\u0027id\u0027],"},{"line_number":1053,"context_line":"                             \u0027seg\u0027: segment[\u0027id\u0027]})"},{"line_number":1054,"context_line":"                if self.mode \u003d\u003d SYNC_MODE_REPAIR:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_69b491d2","line":1051,"range":{"start_line":1049,"start_character":29,"end_line":1051,"end_character":68},"updated":"2020-06-08 10:33:49.000000000","message":"My comment is unrelated to the patch itself but don\u0027t we miss the sync in the other direction? ie. when the provider network port is in OVN but the provider network is not in Neutron? As we do with other resources.\nIn this case we\u0027ll need to delete the provnet ports.\nWhat do you think?","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c9eb6f1d2486acdd8b5109fc58c66c9024cf1dc4","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"            for provnet_port_info in add_provnet_ports_list:"},{"line_number":1047,"context_line":"                network \u003d provnet_port_info[\u0027network\u0027]"},{"line_number":1048,"context_line":"                segment \u003d provnet_port_info[\u0027segment\u0027]"},{"line_number":1049,"context_line":"                LOG.warning(\"Provider network found in Neutron but \""},{"line_number":1050,"context_line":"                            \"provider network port not found in OVN DB, \""},{"line_number":1051,"context_line":"                            \"network_id\u003d%(net)s segment_id\u003d%(seg)s\","},{"line_number":1052,"context_line":"                            {\u0027net\u0027: network[\u0027id\u0027],"},{"line_number":1053,"context_line":"                             \u0027seg\u0027: segment[\u0027id\u0027]})"},{"line_number":1054,"context_line":"                if self.mode \u003d\u003d SYNC_MODE_REPAIR:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_83160ba7","line":1051,"range":{"start_line":1049,"start_character":29,"end_line":1051,"end_character":68},"in_reply_to":"ff570b3c_69b491d2","updated":"2020-06-09 12:18:46.000000000","message":"Ok, I manually checked if the provnet ports are deleted if those shouldn\u0027t be plugged because of inconsistency and deleting those didn\u0027t work. Lemme fix that .","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"f665093d8009837761e3661ff9893c6d0f4026e1","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"            for provnet_port_info in add_provnet_ports_list:"},{"line_number":1047,"context_line":"                network \u003d provnet_port_info[\u0027network\u0027]"},{"line_number":1048,"context_line":"                segment \u003d provnet_port_info[\u0027segment\u0027]"},{"line_number":1049,"context_line":"                LOG.warning(\"Provider network found in Neutron but \""},{"line_number":1050,"context_line":"                            \"provider network port not found in OVN DB, \""},{"line_number":1051,"context_line":"                            \"network_id\u003d%(net)s segment_id\u003d%(seg)s\","},{"line_number":1052,"context_line":"                            {\u0027net\u0027: network[\u0027id\u0027],"},{"line_number":1053,"context_line":"                             \u0027seg\u0027: segment[\u0027id\u0027]})"},{"line_number":1054,"context_line":"                if self.mode \u003d\u003d SYNC_MODE_REPAIR:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff570b3c_f6486488","line":1051,"range":{"start_line":1049,"start_character":29,"end_line":1051,"end_character":68},"in_reply_to":"ff570b3c_83160ba7","updated":"2020-06-09 12:21:51.000000000","message":"Added related code to delete orphaned provnet ports.","commit_id":"e4682d747345f38e093fe414739995f76ccc9e1b"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_sync.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"ffc2d5b9aabe673dd0bfdff41bbd54ce137fa8b9","unresolved":false,"context_lines":[{"line_number":852,"context_line":"    def _validate_networks(self, should_match\u003dTrue):"},{"line_number":853,"context_line":"        db_networks \u003d self._list(\u0027networks\u0027)"},{"line_number":854,"context_line":"        db_net_ids \u003d [net[\u0027id\u0027] for net in db_networks[\u0027networks\u0027]]"},{"line_number":855,"context_line":"        # TODO(mjozefcz): Fix this one."},{"line_number":856,"context_line":"        db_provnet_ports \u003d []"},{"line_number":857,"context_line":"        for net in db_networks[\u0027networks\u0027]:"},{"line_number":858,"context_line":"            for seg in seg_db.get_network_segments(self.context, net[\u0027id\u0027]):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_94eb1611","line":855,"range":{"start_line":855,"start_character":8,"end_line":855,"end_character":39},"updated":"2020-04-02 12:20:45.000000000","message":"done","commit_id":"c55a3049435c2e2cddcd848d3c6193ef88926395"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a4d4d155288363268dfa73bd4ef4fbd7c759d60c","unresolved":false,"context_lines":[{"line_number":714,"context_line":"        self.delete_segment(seg_db[0][\u0027id\u0027])"},{"line_number":715,"context_line":"        ovn_localnetport \u003d self._find_port_row_by_name("},{"line_number":716,"context_line":"            utils.ovn_provnet_port_name(seg_db[0][\u0027id\u0027]))"},{"line_number":717,"context_line":"        self.assertIsNone(ovn_port)"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        self.delete_segment(seg_2[\u0027id\u0027])"},{"line_number":720,"context_line":"        ovn_localnetport \u003d self._find_port_row_by_name("}],"source_content_type":"text/x-python","patch_set":12,"id":"ff570b3c_e2f35309","line":717,"updated":"2020-05-13 09:19:40.000000000","message":"Can you check here that you are not deleting seg_2[\u0027id\u0027] port?","commit_id":"9871784e3852739c9288d2b3b36cd579dc3c36d9"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"4e39c46560eb8578b75e723c4a68167500180e39","unresolved":false,"context_lines":[{"line_number":714,"context_line":"        self.delete_segment(seg_db[0][\u0027id\u0027])"},{"line_number":715,"context_line":"        ovn_localnetport \u003d self._find_port_row_by_name("},{"line_number":716,"context_line":"            utils.ovn_provnet_port_name(seg_db[0][\u0027id\u0027]))"},{"line_number":717,"context_line":"        self.assertIsNone(ovn_port)"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        self.delete_segment(seg_2[\u0027id\u0027])"},{"line_number":720,"context_line":"        ovn_localnetport \u003d self._find_port_row_by_name("}],"source_content_type":"text/x-python","patch_set":12,"id":"ff570b3c_f0e15a2c","line":717,"in_reply_to":"ff570b3c_e2f35309","updated":"2020-05-13 13:09:41.000000000","message":"sure, I\u0027ll add.","commit_id":"9871784e3852739c9288d2b3b36cd579dc3c36d9"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"2f64d389141afad73fb0607dddb6b1588d9521db","unresolved":false,"context_lines":[{"line_number":714,"context_line":"        self.delete_segment(seg_db[0][\u0027id\u0027])"},{"line_number":715,"context_line":"        ovn_localnetport \u003d self._find_port_row_by_name("},{"line_number":716,"context_line":"            utils.ovn_provnet_port_name(seg_db[0][\u0027id\u0027]))"},{"line_number":717,"context_line":"        self.assertIsNone(ovn_port)"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        self.delete_segment(seg_2[\u0027id\u0027])"},{"line_number":720,"context_line":"        ovn_localnetport \u003d self._find_port_row_by_name("}],"source_content_type":"text/x-python","patch_set":12,"id":"ff570b3c_d03ed627","line":717,"in_reply_to":"ff570b3c_f0e15a2c","updated":"2020-05-13 13:19:10.000000000","message":"Done","commit_id":"9871784e3852739c9288d2b3b36cd579dc3c36d9"}],"neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_sync.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"ec926950989c47a688e10ee2f77461a5760286b0","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        ovn_nb_synchronizer._ovn_client.create_port \u003d mock.Mock()"},{"line_number":447,"context_line":"        ovn_nb_synchronizer._ovn_client.create_port.return_value \u003d mock.ANY"},{"line_number":448,"context_line":"        ovn_nb_synchronizer._ovn_client._create_provnet_port \u003d mock.Mock()"},{"line_number":449,"context_line":"        ovn_nb_synchronizer._ovn_client.ensure_segment_provnet_ports \u003d ("},{"line_number":450,"context_line":"            mock.Mock())"},{"line_number":451,"context_line":"        ovn_api.ls_del \u003d mock.Mock()"},{"line_number":452,"context_line":"        ovn_api.delete_lswitch_port \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_bb80fd47","line":449,"range":{"start_line":449,"start_character":40,"end_line":449,"end_character":68},"updated":"2020-03-31 15:21:38.000000000","message":"missing underscore","commit_id":"48e94fd373da89f05617ce1bf5f5745424ad596b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"5abbff793604886d08d54d934736023896fda45a","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        core_plugin.get_subnets \u003d mock.Mock()"},{"line_number":398,"context_line":"        core_plugin.get_subnets.return_value \u003d self.subnets"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        def get_segment(self, filters):"},{"line_number":401,"context_line":"            segs \u003d []"},{"line_number":402,"context_line":"            for segment in self.segments:"},{"line_number":403,"context_line":"                if segment[\u0027network_id\u0027] \u003d\u003d filters[\u0027network_id\u0027][0]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_b76c1c9d","line":400,"range":{"start_line":400,"start_character":12,"end_line":400,"end_character":23},"updated":"2020-04-06 07:15:59.000000000","message":"get_segments","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"031e35e62473689347436f04ad219287c9d3ee12","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        core_plugin.get_subnets \u003d mock.Mock()"},{"line_number":398,"context_line":"        core_plugin.get_subnets.return_value \u003d self.subnets"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        def get_segment(self, filters):"},{"line_number":401,"context_line":"            segs \u003d []"},{"line_number":402,"context_line":"            for segment in self.segments:"},{"line_number":403,"context_line":"                if segment[\u0027network_id\u0027] \u003d\u003d filters[\u0027network_id\u0027][0]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_69dc8c18","line":400,"range":{"start_line":400,"start_character":12,"end_line":400,"end_character":23},"in_reply_to":"df33271e_b76c1c9d","updated":"2020-05-12 07:00:59.000000000","message":"Done","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"5abbff793604886d08d54d934736023896fda45a","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        segments_plugin.get_segments \u003d mock.Mock()"},{"line_number":408,"context_line":"        segments_plugin.get_segments.side_effect \u003d ("},{"line_number":409,"context_line":"            lambda x, filters: get_segment(self, filters))"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        # following block is used for acl syncing unit-test"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_9769188d","line":409,"range":{"start_line":409,"start_character":31,"end_line":409,"end_character":42},"updated":"2020-04-06 07:15:59.000000000","message":"get_segments","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"031e35e62473689347436f04ad219287c9d3ee12","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        segments_plugin.get_segments \u003d mock.Mock()"},{"line_number":408,"context_line":"        segments_plugin.get_segments.side_effect \u003d ("},{"line_number":409,"context_line":"            lambda x, filters: get_segment(self, filters))"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        # following block is used for acl syncing unit-test"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_49e1d0d0","line":409,"range":{"start_line":409,"start_character":31,"end_line":409,"end_character":42},"in_reply_to":"df33271e_9769188d","updated":"2020-05-12 07:00:59.000000000","message":"Done","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"11630340c7638187e4f930de8416e4e43cb9f95c","unresolved":false,"context_lines":[{"line_number":649,"context_line":"                self.segments_map[network[\u0027id\u0027]],"},{"line_number":650,"context_line":"                txn\u003dmock.ANY)"},{"line_number":651,"context_line":"            for network in create_provnet_port_list"},{"line_number":652,"context_line":"            if network.get(\u0027provider:physical_network\u0027)]"},{"line_number":653,"context_line":"        self.assertEqual("},{"line_number":654,"context_line":"            len(create_provnet_port_list),"},{"line_number":655,"context_line":"            ovn_nb_synchronizer._ovn_client._create_provnet_port.call_count)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f493fa4_09e34835","line":652,"range":{"start_line":652,"start_character":28,"end_line":652,"end_character":53},"updated":"2020-04-21 09:17:32.000000000","message":"use constant","commit_id":"366077b88ca946930a9a5dcbe08c11cec4fe5265"}]}
