)]}'
{"networking_ovn/ovsdb/impl_idl_ovn.py":[{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"9bdefca50cc965832aea8817d46abcd0b2c4b39f","unresolved":false,"context_lines":[{"line_number":744,"context_line":"    def get_ports_on_chassis(self, chassis):"},{"line_number":745,"context_line":"        # TODO(twilson) Some day it would be nice to stop passing names around"},{"line_number":746,"context_line":"        # and just start using chassis objects so db_find_rows could be used"},{"line_number":747,"context_line":"        rows \u003d self.db_list_rows(\u0027Port_Binding\u0027).execute(check_error\u003dTrue)"},{"line_number":748,"context_line":"        return [r for r in rows if r.chassis and r.chassis[0].name \u003d\u003d chassis]"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def get_logical_port_chassis_and_datapath(self, name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_c89bf6c6","line":747,"range":{"start_line":747,"start_character":0,"end_line":747,"end_character":8},"updated":"2018-04-18 06:53:57.000000000","message":"We might want to do the same here, right?","commit_id":"974d0176dac4ac68edf9af848aadf04d86b2da65"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0e0a265864042e09d065105ef617f179ad329914","unresolved":false,"context_lines":[{"line_number":744,"context_line":"    def get_ports_on_chassis(self, chassis):"},{"line_number":745,"context_line":"        # TODO(twilson) Some day it would be nice to stop passing names around"},{"line_number":746,"context_line":"        # and just start using chassis objects so db_find_rows could be used"},{"line_number":747,"context_line":"        rows \u003d self.db_list_rows(\u0027Port_Binding\u0027).execute(check_error\u003dTrue)"},{"line_number":748,"context_line":"        return [r for r in rows if r.chassis and r.chassis[0].name \u003d\u003d chassis]"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def get_logical_port_chassis_and_datapath(self, name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_ab11dcae","line":747,"range":{"start_line":747,"start_character":0,"end_line":747,"end_character":8},"in_reply_to":"9f6a8fd7_2b314ced","updated":"2018-04-18 08:10:43.000000000","message":"I have to talk to Terry, but, what I would like to see as a fix here is to avoid get_*/db_list* methods in ovsdbapp to use an transaction. The transaction is not needed since all these operations should be read-only.","commit_id":"974d0176dac4ac68edf9af848aadf04d86b2da65"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"0bdb8ad31e514d2ef0201e2f7ed2e52a2f6b6cc5","unresolved":false,"context_lines":[{"line_number":744,"context_line":"    def get_ports_on_chassis(self, chassis):"},{"line_number":745,"context_line":"        # TODO(twilson) Some day it would be nice to stop passing names around"},{"line_number":746,"context_line":"        # and just start using chassis objects so db_find_rows could be used"},{"line_number":747,"context_line":"        rows \u003d self.db_list_rows(\u0027Port_Binding\u0027).execute(check_error\u003dTrue)"},{"line_number":748,"context_line":"        return [r for r in rows if r.chassis and r.chassis[0].name \u003d\u003d chassis]"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def get_logical_port_chassis_and_datapath(self, name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_2b314ced","line":747,"range":{"start_line":747,"start_character":0,"end_line":747,"end_character":8},"in_reply_to":"9f6a8fd7_a8124208","updated":"2018-04-18 07:40:56.000000000","message":"Yes, I know. I think that it could make sense to address that one here and not make a separate patch just for it but I\u0027m fine :)","commit_id":"974d0176dac4ac68edf9af848aadf04d86b2da65"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"f8216cceff92982f8a55e5a0e73ecee908b4c2c2","unresolved":false,"context_lines":[{"line_number":744,"context_line":"    def get_ports_on_chassis(self, chassis):"},{"line_number":745,"context_line":"        # TODO(twilson) Some day it would be nice to stop passing names around"},{"line_number":746,"context_line":"        # and just start using chassis objects so db_find_rows could be used"},{"line_number":747,"context_line":"        rows \u003d self.db_list_rows(\u0027Port_Binding\u0027).execute(check_error\u003dTrue)"},{"line_number":748,"context_line":"        return [r for r in rows if r.chassis and r.chassis[0].name \u003d\u003d chassis]"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def get_logical_port_chassis_and_datapath(self, name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_a8124208","line":747,"range":{"start_line":747,"start_character":0,"end_line":747,"end_character":8},"in_reply_to":"9f6a8fd7_c89bf6c6","updated":"2018-04-18 07:05:14.000000000","message":"get_ports_on_chassis() is used by metadata agent. So we will not hit the lock issue there.\n\nHere the issue is that \u0027get_logical_port_chassis_and_datapath()\u0027 is called in the ovn worker context and if the worker doesn\u0027t have the south db lock we will see this issue.\n\nThis patch fixes this specific issue.\n\nWe probably don\u0027t want to create a transaction for the ovn db read operations. And we can either handle it in networking-ovn by using self._tables or in ovsdbapp in a separate patch.","commit_id":"974d0176dac4ac68edf9af848aadf04d86b2da65"}]}
