)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"09cc9064e5c2ce94a6bba683cc6973390ab5d1db","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Brian Haley \u003cbhaley@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-04-07 16:02:03 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Don\u0027t spawn long-living processes in the driver agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The OVN Octavia provider driver in the OvnProviderHelper"},{"line_number":10,"context_line":"class caches these attributes:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df33271e_b60cf042","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":5},"updated":"2020-04-07 20:06:17.000000000","message":"Don\u0027t? I think you mean \"To spawn long-running processes in the driver agent\".\nlol","commit_id":"9197d22d5131004721b435efc7746c7e9a3670a6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a9ef893863c02ad19d511f038b651e5ad8121ef3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Brian Haley \u003cbhaley@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-04-07 16:02:03 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Don\u0027t spawn long-living processes in the driver agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The OVN Octavia provider driver in the OvnProviderHelper"},{"line_number":10,"context_line":"class caches these attributes:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df33271e_21d41847","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":5},"in_reply_to":"df33271e_b60cf042","updated":"2020-04-07 20:13:09.000000000","message":"I\u0027m laughing... I think.\n\nI thought the problem was that we did have a long-running process and we didn\u0027t want that any more, it should be short-lived.","commit_id":"9197d22d5131004721b435efc7746c7e9a3670a6"}],"devstack/plugin.sh":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"eca29c3b112ad006c31fd82da5b9a37dd9aefc7c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"OVN_NB_REMOTE\u003d${OVN_NB_REMOTE:-$OVN_PROTO:$SERVICE_HOST:6641}"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"function _configure_provider_driver {"},{"line_number":15,"context_line":"    iniset ${OCTAVIA_CONF} api_settings enabled_provider_drivers ${OCTAVIA_PROVIDER_DRIVERS}"},{"line_number":16,"context_line":"    iniset ${OCTAVIA_CONF} ovn ovn_nb_connection \"$OVN_NB_REMOTE\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    if is_service_enabled tls-proxy; then"}],"source_content_type":"text/x-sh","patch_set":5,"id":"df33271e_c21ebc0a","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":92},"updated":"2020-04-10 14:09:04.000000000","message":"We need also add similar configuration for driver agent here.","commit_id":"29309bcca1b25debe76b6ce2c4474a0b644baadf"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c09621a19c9a19377252e3b1a1ab8a4c97e44864","unresolved":false,"context_lines":[{"line_number":12,"context_line":"OVN_NB_REMOTE\u003d${OVN_NB_REMOTE:-$OVN_PROTO:$SERVICE_HOST:6641}"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"function _configure_provider_driver {"},{"line_number":15,"context_line":"    iniset ${OCTAVIA_CONF} api_settings enabled_provider_drivers ${OCTAVIA_PROVIDER_DRIVERS}"},{"line_number":16,"context_line":"    iniset ${OCTAVIA_CONF} ovn ovn_nb_connection \"$OVN_NB_REMOTE\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    if is_service_enabled tls-proxy; then"}],"source_content_type":"text/x-sh","patch_set":5,"id":"3f4c43b2_fda17197","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":92},"in_reply_to":"df33271e_c21ebc0a","updated":"2020-04-13 20:11:24.000000000","message":"Fixed, I also had to update devstack/settings since it wasn\u0027t populating octavia.conf correctly, didn\u0027t like the spaces in things like:\n\n    ovn:\u0027Octavia OVN driver.\u0027","commit_id":"29309bcca1b25debe76b6ce2c4474a0b644baadf"}],"ovn_octavia_provider/agent.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"ed71ffe3c3c5efc925d06b198d29078c0582291d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"OVN_EVENT_LOCK_NAME \u003d \"neutron_ovn_octavia_event_lock\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def OVNProviderAgent(exit_event):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self):"},{"line_number":30,"context_line":"        atexit.register(self.shutdown)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_c2fa5241","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":20},"updated":"2020-04-09 13:04:56.000000000","message":"OvnProviderAgent","commit_id":"375b31731a9d18614607080a55f5574d92f81b58"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"515197475b5c3a7f5361c2ca1ad0c167cdd3a9b3","unresolved":false,"context_lines":[{"line_number":24,"context_line":"OVN_EVENT_LOCK_NAME \u003d \"neutron_ovn_octavia_event_lock\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def OVNProviderAgent(exit_event):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self):"},{"line_number":30,"context_line":"        atexit.register(self.shutdown)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_45548cfe","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":20},"in_reply_to":"df33271e_c2fa5241","updated":"2020-04-09 22:51:28.000000000","message":"Done","commit_id":"375b31731a9d18614607080a55f5574d92f81b58"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"14a6947fc31b75875c0e56fdf6687793dffd0aba","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        # NOTE(mjozefcz): This API is only for handling OVSDB events!"},{"line_number":32,"context_line":"        self.ovn_nb_idl_for_events \u003d driver.OvnNbIdlForLb("},{"line_number":33,"context_line":"            event_lock_name\u003dOVN_EVENT_LOCK_NAME)"},{"line_number":34,"context_line":"        self.ovn_nb_idl_for_events.notify_handler.watch_events(self.events)"},{"line_number":35,"context_line":"        self.ovn_nbdb_api_for_events \u003d self.ovn_nb_idl_for_events.start()"},{"line_number":36,"context_line":"        self.start()"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_6839a5d5","line":34,"range":{"start_line":34,"start_character":63,"end_line":34,"end_character":75},"updated":"2020-04-09 14:01:37.000000000","message":"I think we should move this from driver along with the defined Events there. Maybe lets split those events and place them in dedicated file?","commit_id":"3c83d54954684167096a0240e8ce393e8cde1248"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"515197475b5c3a7f5361c2ca1ad0c167cdd3a9b3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        # NOTE(mjozefcz): This API is only for handling OVSDB events!"},{"line_number":32,"context_line":"        self.ovn_nb_idl_for_events \u003d driver.OvnNbIdlForLb("},{"line_number":33,"context_line":"            event_lock_name\u003dOVN_EVENT_LOCK_NAME)"},{"line_number":34,"context_line":"        self.ovn_nb_idl_for_events.notify_handler.watch_events(self.events)"},{"line_number":35,"context_line":"        self.ovn_nbdb_api_for_events \u003d self.ovn_nb_idl_for_events.start()"},{"line_number":36,"context_line":"        self.start()"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_be8c82d7","line":34,"range":{"start_line":34,"start_character":63,"end_line":34,"end_character":75},"in_reply_to":"df33271e_6839a5d5","updated":"2020-04-09 22:51:28.000000000","message":"Done","commit_id":"3c83d54954684167096a0240e8ce393e8cde1248"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"14a6947fc31b75875c0e56fdf6687793dffd0aba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"df33271e_e8049517","line":46,"updated":"2020-04-09 14:01:37.000000000","message":"https://github.com/openstack/octavia/blob/master/octavia/cmd/driver_agent.py#L65\n\nIt should execute function, right?","commit_id":"3c83d54954684167096a0240e8ce393e8cde1248"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"515197475b5c3a7f5361c2ca1ad0c167cdd3a9b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"df33271e_17bf5161","line":46,"in_reply_to":"df33271e_e8049517","updated":"2020-04-09 22:51:28.000000000","message":"Yes, I still have to get that figured out.","commit_id":"3c83d54954684167096a0240e8ce393e8cde1248"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ed2addb60c0d57cc1307e5aa9997ae45b063ea5d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    ovn_nb_idl_for_events.start()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    LOG.info(\u0027OVN provider agent has started.\u0027)"},{"line_number":39,"context_line":"    while not exit_event.is_set():"},{"line_number":40,"context_line":"        # do something"},{"line_number":41,"context_line":"        time.sleep(1)"},{"line_number":42,"context_line":"    LOG.info(\u0027OVN provider agent is exiting.\u0027)"},{"line_number":43,"context_line":"    ovn_nb_idl_for_events.notify_handler.unwatch_events(events)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f493fa4_b4b8922a","line":41,"range":{"start_line":39,"start_character":0,"end_line":41,"end_character":21},"updated":"2020-04-22 09:10:47.000000000","message":"exit_event.wait()\n\nOr is there a reason not to use the default waiting method ?","commit_id":"e83afa26662c5a0f3f191293080ccd8603b6f964"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f7c987652ec3b950c08b7f29959d20b1a4cdf182","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    ovn_nb_idl_for_events.start()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    LOG.info(\u0027OVN provider agent has started.\u0027)"},{"line_number":39,"context_line":"    while not exit_event.is_set():"},{"line_number":40,"context_line":"        # do something"},{"line_number":41,"context_line":"        time.sleep(1)"},{"line_number":42,"context_line":"    LOG.info(\u0027OVN provider agent is exiting.\u0027)"},{"line_number":43,"context_line":"    ovn_nb_idl_for_events.notify_handler.unwatch_events(events)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f493fa4_11a6aec2","line":41,"range":{"start_line":39,"start_character":0,"end_line":41,"end_character":21},"in_reply_to":"1f493fa4_b4b8922a","updated":"2020-04-22 14:43:42.000000000","message":"I think I used this from an example I found in the docs, or the Octavia code perhaps, but let me look at event_exit.wait().  I think typically we\u0027d be doing something here but that\u0027s future work.","commit_id":"e83afa26662c5a0f3f191293080ccd8603b6f964"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6081c7ad35f8dfe25cc895d8abd82b9be3ccfd46","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # do something"},{"line_number":41,"context_line":"        time.sleep(1)"},{"line_number":42,"context_line":"    LOG.info(\u0027OVN provider agent is exiting.\u0027)"},{"line_number":43,"context_line":"    ovn_nb_idl_for_events.notify_handler.unwatch_events(events)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f493fa4_455fd0e1","line":43,"updated":"2020-04-22 16:45:33.000000000","message":"I guess there should also be an ovn_nb_idl_for_events.stop() here even though it\u0027s implied.","commit_id":"e83afa26662c5a0f3f191293080ccd8603b6f964"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"80cd34023e40e36918096c4fd86f44149e29fb01","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    LOG.info(\u0027OVN provider agent has started.\u0027)"},{"line_number":37,"context_line":"    while not exit_event.is_set():"},{"line_number":38,"context_line":"        exit_event.wait()"},{"line_number":39,"context_line":"    LOG.info(\u0027OVN provider agent is exiting.\u0027)"},{"line_number":40,"context_line":"    ovn_nb_idl_for_events.notify_handler.unwatch_events(events)"},{"line_number":41,"context_line":"    ovn_nb_idl_for_events.stop()"}],"source_content_type":"text/x-python","patch_set":18,"id":"1f493fa4_bcf698f8","line":38,"updated":"2020-04-23 12:31:00.000000000","message":"Thanks for changing, I was OK with the sleep as well, it\u0027s just that wait() seems more \"pythonic\".\n\nBut, with the exit_event.wait() we no longer need the while loop. The wait() will block until the event is set.","commit_id":"1fe751367010691512f6e17e62c9b9e87bcbb24a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"694eccf813d7acdc7dd84d87f71834e81bfd60b6","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    LOG.info(\u0027OVN provider agent has started.\u0027)"},{"line_number":37,"context_line":"    while not exit_event.is_set():"},{"line_number":38,"context_line":"        exit_event.wait()"},{"line_number":39,"context_line":"    LOG.info(\u0027OVN provider agent is exiting.\u0027)"},{"line_number":40,"context_line":"    ovn_nb_idl_for_events.notify_handler.unwatch_events(events)"},{"line_number":41,"context_line":"    ovn_nb_idl_for_events.stop()"}],"source_content_type":"text/x-python","patch_set":18,"id":"1f493fa4_1084cdb0","line":38,"in_reply_to":"1f493fa4_5c81548f","updated":"2020-04-23 15:03:24.000000000","message":"Done","commit_id":"1fe751367010691512f6e17e62c9b9e87bcbb24a"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"534f23aa7e236ae7b6af927d6465a0c549933bbd","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    LOG.info(\u0027OVN provider agent has started.\u0027)"},{"line_number":37,"context_line":"    while not exit_event.is_set():"},{"line_number":38,"context_line":"        exit_event.wait()"},{"line_number":39,"context_line":"    LOG.info(\u0027OVN provider agent is exiting.\u0027)"},{"line_number":40,"context_line":"    ovn_nb_idl_for_events.notify_handler.unwatch_events(events)"},{"line_number":41,"context_line":"    ovn_nb_idl_for_events.stop()"}],"source_content_type":"text/x-python","patch_set":18,"id":"1f493fa4_5c81548f","line":38,"in_reply_to":"1f493fa4_bcf698f8","updated":"2020-04-23 12:55:26.000000000","message":"+1","commit_id":"1fe751367010691512f6e17e62c9b9e87bcbb24a"}],"ovn_octavia_provider/driver.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"38841cf2939bda67e19b1dd60f02dda17ed3cd58","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"class OvnProviderHelper(object):"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    ovn_nbdb_api_for_events \u003d None"},{"line_number":203,"context_line":"    ovn_nb_idl_for_events \u003d None"},{"line_number":204,"context_line":"    ovn_nbdb_api \u003d None"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def __init__(self):"},{"line_number":207,"context_line":"        self.requests \u003d queue.Queue()"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_6d9d5c56","side":"PARENT","line":204,"range":{"start_line":202,"start_character":0,"end_line":204,"end_character":23},"updated":"2020-04-08 13:39:14.000000000","message":"++","commit_id":"bbb1755176f50f636af413e88df3f1744a72b149"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"728e432722802a8651ce6261d6f7032b042fb065","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        if ca_cert_file:"},{"line_number":268,"context_line":"            Stream.ssl_set_ca_cert_file(ca_cert_file)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def start(self):"},{"line_number":271,"context_line":"        # NOTE(mjozefcz): This API is only for handling octavia API requests."},{"line_number":272,"context_line":"        if not OvnProviderHelper.ovn_nbdb_api:"},{"line_number":273,"context_line":"            OvnProviderHelper.ovn_nbdb_api \u003d OvnNbIdlForLb().start()"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_56164457","side":"PARENT","line":270,"updated":"2020-04-07 20:06:06.000000000","message":"Wondering if I should have removed start()...","commit_id":"bbb1755176f50f636af413e88df3f1744a72b149"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"38841cf2939bda67e19b1dd60f02dda17ed3cd58","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        if ca_cert_file:"},{"line_number":268,"context_line":"            Stream.ssl_set_ca_cert_file(ca_cert_file)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def start(self):"},{"line_number":271,"context_line":"        # NOTE(mjozefcz): This API is only for handling octavia API requests."},{"line_number":272,"context_line":"        if not OvnProviderHelper.ovn_nbdb_api:"},{"line_number":273,"context_line":"            OvnProviderHelper.ovn_nbdb_api \u003d OvnNbIdlForLb().start()"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_8dcb8051","side":"PARENT","line":270,"in_reply_to":"df33271e_56164457","updated":"2020-04-08 13:39:14.000000000","message":"Its a helper for handling this caching in attributes. I think we can get rid of that now.","commit_id":"bbb1755176f50f636af413e88df3f1744a72b149"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"38841cf2939bda67e19b1dd60f02dda17ed3cd58","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    def shutdown(self):"},{"line_number":286,"context_line":"        self.requests.put({\u0027type\u0027: REQ_TYPE_EXIT})"},{"line_number":287,"context_line":"        self.helper_thread.join()"},{"line_number":288,"context_line":"        self.ovn_nb_idl_for_events.notify_handler.unwatch_events(self.events)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    @staticmethod"},{"line_number":291,"context_line":"    def _map_val(row, col, key):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_adc0042c","side":"PARENT","line":288,"range":{"start_line":288,"start_character":8,"end_line":288,"end_character":77},"updated":"2020-04-08 13:39:14.000000000","message":"This should be moved to driver agent.","commit_id":"bbb1755176f50f636af413e88df3f1744a72b149"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2b1cae351d7ded375a8f411b6f7bf65bd1fbb3dc","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    def shutdown(self):"},{"line_number":286,"context_line":"        self.requests.put({\u0027type\u0027: REQ_TYPE_EXIT})"},{"line_number":287,"context_line":"        self.helper_thread.join()"},{"line_number":288,"context_line":"        self.ovn_nb_idl_for_events.notify_handler.unwatch_events(self.events)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    @staticmethod"},{"line_number":291,"context_line":"    def _map_val(row, col, key):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_fa80edf9","side":"PARENT","line":288,"range":{"start_line":288,"start_character":8,"end_line":288,"end_character":77},"in_reply_to":"df33271e_adc0042c","updated":"2020-04-08 21:35:04.000000000","message":"Done","commit_id":"bbb1755176f50f636af413e88df3f1744a72b149"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"38841cf2939bda67e19b1dd60f02dda17ed3cd58","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        # NOTE(mjozefcz): This API is only for handling octavia API requests."},{"line_number":214,"context_line":"        self.ovn_nbdb_api \u003d OvnNbIdlForLb().start()"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        # NOTE(mjozefcz): This API is only for handling OVSDB events!"},{"line_number":217,"context_line":"        self.ovn_nb_idl_for_events \u003d OvnNbIdlForLb("},{"line_number":218,"context_line":"            event_lock_name\u003dOVN_EVENT_LOCK_NAME)"},{"line_number":219,"context_line":"        self.ovn_nb_idl_for_events.notify_handler.watch_events(self.events)"},{"line_number":220,"context_line":"        self.ovn_nbdb_api_for_events \u003d self.ovn_nb_idl_for_events.start()"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        self.helper_thread.start()"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_8da26099","line":220,"range":{"start_line":216,"start_character":8,"end_line":220,"end_character":73},"updated":"2020-04-08 13:39:14.000000000","message":"We should move it to the driver agent.","commit_id":"9197d22d5131004721b435efc7746c7e9a3670a6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2b1cae351d7ded375a8f411b6f7bf65bd1fbb3dc","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        # NOTE(mjozefcz): This API is only for handling octavia API requests."},{"line_number":214,"context_line":"        self.ovn_nbdb_api \u003d OvnNbIdlForLb().start()"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        # NOTE(mjozefcz): This API is only for handling OVSDB events!"},{"line_number":217,"context_line":"        self.ovn_nb_idl_for_events \u003d OvnNbIdlForLb("},{"line_number":218,"context_line":"            event_lock_name\u003dOVN_EVENT_LOCK_NAME)"},{"line_number":219,"context_line":"        self.ovn_nb_idl_for_events.notify_handler.watch_events(self.events)"},{"line_number":220,"context_line":"        self.ovn_nbdb_api_for_events \u003d self.ovn_nb_idl_for_events.start()"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        self.helper_thread.start()"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_9a8f2129","line":220,"range":{"start_line":216,"start_character":8,"end_line":220,"end_character":73},"in_reply_to":"df33271e_8da26099","updated":"2020-04-08 21:35:04.000000000","message":"Done","commit_id":"9197d22d5131004721b435efc7746c7e9a3670a6"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"38841cf2939bda67e19b1dd60f02dda17ed3cd58","unresolved":false,"context_lines":[{"line_number":1919,"context_line":""},{"line_number":1920,"context_line":"    def __init__(self):"},{"line_number":1921,"context_line":"        super(OvnProviderDriver, self).__init__()"},{"line_number":1922,"context_line":"        self._ovn_helper \u003d OvnProviderHelper()"},{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"    def _check_for_supported_protocols(self, protocol):"},{"line_number":1925,"context_line":"        if protocol not in OVN_NATIVE_LB_PROTOCOLS:"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_6d50bc5f","line":1922,"range":{"start_line":1922,"start_character":8,"end_line":1922,"end_character":46},"updated":"2020-04-08 13:39:14.000000000","message":"OvnProviderHelper uses:    \n\nself.helper_thread \u003d threading.Thread(target\u003dself.request_handler)\nself.helper_thread.daemon \u003d True\n\nI think that with initializing the OvnProviderHelper by OvnProviderDriver per each API call we should take care of properly closing the helper_thread.","commit_id":"9197d22d5131004721b435efc7746c7e9a3670a6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2b1cae351d7ded375a8f411b6f7bf65bd1fbb3dc","unresolved":false,"context_lines":[{"line_number":1919,"context_line":""},{"line_number":1920,"context_line":"    def __init__(self):"},{"line_number":1921,"context_line":"        super(OvnProviderDriver, self).__init__()"},{"line_number":1922,"context_line":"        self._ovn_helper \u003d OvnProviderHelper()"},{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"    def _check_for_supported_protocols(self, protocol):"},{"line_number":1925,"context_line":"        if protocol not in OVN_NATIVE_LB_PROTOCOLS:"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_ba8ae517","line":1922,"range":{"start_line":1922,"start_character":8,"end_line":1922,"end_character":46},"in_reply_to":"df33271e_6d50bc5f","updated":"2020-04-08 21:35:04.000000000","message":"Isn\u0027t that done in the shutdown() method on L276?","commit_id":"9197d22d5131004721b435efc7746c7e9a3670a6"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"16996a3ca6c2ed8f1bec29dd72edb3ec32a6b3a4","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self):"},{"line_number":50,"context_line":"        super(OvnProviderDriver, self).__init__()"},{"line_number":51,"context_line":"        self._ovn_helper \u003d helper.OvnProviderHelper()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _check_for_supported_protocols(self, protocol):"},{"line_number":54,"context_line":"        if protocol not in OVN_NATIVE_LB_PROTOCOLS:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_c2ccfc8a","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":53},"updated":"2020-04-10 14:13:02.000000000","message":"I think we have a thread leak here.\n\nExample:\nAfter creating LB, like:\nopenstack loadbalancer create --provider ovn --vip-subnet-id a973d603-4b76-4124-844f-d41fb584e5fe --name test\n\nAfter each request the octavia-wsgi thread numbers is increasing:\nps -eLf | grep octavia-uwsgi | wc -l","commit_id":"29309bcca1b25debe76b6ce2c4474a0b644baadf"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"6deb93cd779ab94a23c5af3ddd3092bb433a911d","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self):"},{"line_number":50,"context_line":"        super(OvnProviderDriver, self).__init__()"},{"line_number":51,"context_line":"        self._ovn_helper \u003d helper.OvnProviderHelper()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _check_for_supported_protocols(self, protocol):"},{"line_number":54,"context_line":"        if protocol not in OVN_NATIVE_LB_PROTOCOLS:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4c43b2_ff84beb3","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":53},"in_reply_to":"3f4c43b2_157a3123","updated":"2020-04-14 07:14:20.000000000","message":"Hey!\n\nthe octavia-api wsgi process creates OVNProviderDriver, that has OvnProviderHelper. OvnProviderHelper creates a queue thread and IDLs.\n\nWhile API  call ends the object of OVNProviderDriver is destroyed, but related OvnProviderHelper and queue are still untouched.\n\nI tried to tweak a bit the __delete__ method OvnProviderHelper and destroy related OVNProviderHelper, clients and queue in it, but without any affect for now...","commit_id":"29309bcca1b25debe76b6ce2c4474a0b644baadf"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c09621a19c9a19377252e3b1a1ab8a4c97e44864","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self):"},{"line_number":50,"context_line":"        super(OvnProviderDriver, self).__init__()"},{"line_number":51,"context_line":"        self._ovn_helper \u003d helper.OvnProviderHelper()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _check_for_supported_protocols(self, protocol):"},{"line_number":54,"context_line":"        if protocol not in OVN_NATIVE_LB_PROTOCOLS:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4c43b2_157a3123","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":53},"in_reply_to":"df33271e_c2ccfc8a","updated":"2020-04-13 20:11:24.000000000","message":"Thanks, I\u0027m still looking into it.\n\nI also saw this on a restart of o-api:\n\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]: Mon Apr 13 14:06:59 2020 - graceful shutdown triggered...\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]: Gracefully killing worker 1 (pid: 30759)...\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]: Error in atexit._run_exitfuncs:\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]: Traceback (most recent call last):\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]:   File \"/opt/stack/ovn-octavia-provider/ovn_octavia_provider/helper.py\", line 182, in shutdown\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]:     self.helper_thread.join()\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]:   File \"/usr/lib/python3.6/threading.py\", line 1051, in join\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]:     raise RuntimeError(\"cannot join thread before it is started\")\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]: RuntimeError: cannot join thread before it is started\nApr 13 14:06:59 devstack-18 systemd[1]: Stopping Devstack devstack@o-api.service...\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]: Gracefully killing worker 2 (pid: 30760)...\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]: Error in atexit._run_exitfuncs:\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]: Traceback (most recent call last):\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]:   File \"/opt/stack/ovn-octavia-provider/ovn_octavia_provider/helper.py\", line 182, in shutdown\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]:     self.helper_thread.join()\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]:   File \"/usr/lib/python3.6/threading.py\", line 1051, in join\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]:     raise RuntimeError(\"cannot join thread before it is started\")\nApr 13 14:06:59 devstack-18 devstack@o-api.service[30758]: RuntimeError: cannot join thread before it is started\nApr 13 14:07:01 devstack-18 devstack@o-api.service[30758]: worker 1 buried after 2 seconds\nApr 13 14:07:01 devstack-18 devstack@o-api.service[30758]: worker 2 buried after 2 seconds\nApr 13 14:07:01 devstack-18 devstack@o-api.service[30758]: goodbye to uWSGI.","commit_id":"29309bcca1b25debe76b6ce2c4474a0b644baadf"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"08b6ec5071d6ee9032e8d3b701d636261f8adbbf","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def shutdown(self):"},{"line_number":266,"context_line":"        self.requests.put({\u0027type\u0027: REQ_TYPE_EXIT})"},{"line_number":267,"context_line":"        self.helper_thread.join()"},{"line_number":268,"context_line":"        self.ovn_nbdb.stop()"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @staticmethod"},{"line_number":271,"context_line":"    def _map_val(row, col, key):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f4c43b2_9ec0ab2c","line":268,"range":{"start_line":268,"start_character":8,"end_line":268,"end_character":28},"updated":"2020-04-20 12:39:18.000000000","message":"This was missing. The connection in:\nfrom ovsdbapp.backend.ovs_idl import connection\n\nIs also cached. Without stopping it here after each API call we had 2 additional threads not closed. Now it is working properly:\n\n\nstack@devstack:~/$\necho $(ps -eLf | grep octavia-uwsgi | wc -l); echo $(netstat -natp | grep 6641 | grep ESTA| grep uwsgi | wc -l)\n6\n0","commit_id":"30ebee9b767d2bb4ae122adcdcd94714666e1a5b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"19b9a1eaa3692f322889c4b3e732111ae80ab3f2","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        self.requests \u003d queue.Queue()"},{"line_number":203,"context_line":"        self.helper_thread \u003d threading.Thread(target\u003dself.request_handler)"},{"line_number":204,"context_line":"        self.helper_thread.daemon \u003d True"},{"line_number":205,"context_line":"        atexit.register(self.shutdown)"},{"line_number":206,"context_line":"        self._octavia_driver_lib \u003d o_driver_lib.DriverLibrary()"},{"line_number":207,"context_line":"        self._check_and_set_ssl_files()"},{"line_number":208,"context_line":"        self._init_lb_actions()"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4c43b2_61cee282","line":205,"range":{"start_line":205,"start_character":8,"end_line":205,"end_character":38},"updated":"2020-04-20 13:14:21.000000000","message":"I notices strange py3/functional test hangs without having this here. I allowed myself to add it here. Anyways the connections are closed with this and all seems to be fine:\n\necho $(ps -eLf | grep octavia-uwsgi | wc -l); echo $(netstat -natp | grep 6641 | grep ESTA| grep uwsgi | wc -l)\n6\n\n0","commit_id":"34554368536b36161ff9292e5a9084c9d07a2081"}],"ovn_octavia_provider/event.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"61e2750ce61972c1296427e8016cdfcf3074128f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        if port_name.startswith(ovn_const.LB_VIP_PORT_PREFIX):"},{"line_number":64,"context_line":"            # Handle port update only for vip ports created by"},{"line_number":65,"context_line":"            # this driver."},{"line_number":66,"context_line":"            self.driver.vip_port_update_handler(row)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_62289085","line":66,"range":{"start_line":66,"start_character":12,"end_line":66,"end_character":52},"updated":"2020-04-10 13:42:20.000000000","message":"I checked that now after moving this event to driver agent, sometimes the Load_Balancer row is not yet created in the DB by the driver, but in meantime we received, that LB_VIP_PORT has been created (by driver). Its typical race condition.\n\nNow, while driver still works on creating the LB row, we try to perform:\n\nself.driver.vip_port_update_handler(row)\n\nbut it needs LB row to be created first - the self._find_ovn_lbs() in vip_port_update_handler cannot find the load_balancer and it fails.\n\nThis is only one place where we need LB row first while performing actions on event. We could just retry here.","commit_id":"f12710fb5be7b8393e0a4bc3578ddf559fb2f038"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"ccc081b352f97a340d654d1e1203eb472ced1061","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        if port_name.startswith(ovn_const.LB_VIP_PORT_PREFIX):"},{"line_number":64,"context_line":"            # Handle port update only for vip ports created by"},{"line_number":65,"context_line":"            # this driver."},{"line_number":66,"context_line":"            self.driver.vip_port_update_handler(row)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_427bcc8a","line":66,"range":{"start_line":66,"start_character":12,"end_line":66,"end_character":52},"in_reply_to":"df33271e_62289085","updated":"2020-04-10 13:47:20.000000000","message":"Example log in driver agent:\n\nDEBUG ovsdbapp.backend.ovs_idl.event [-] Matched UPDATE: LogicalSwitchPortUpdateEvent(events\u003d(\u0027update\u0027,), table\u003d\u0027Logical_Switch_Port\u0027, conditions\u003dNone, old_conditions\u003dNone) to row\u003dLogical_Switch_Port(up\u003d[False], name\u003d2b2488b9-974c-4fd3-92e9-8f804302a6b4, external_ids\u003d{\u0027neutron:cidrs\u0027: \u002710.1.0.20/26 fdf4:1754:cc53:0:f816:3eff:fe97:e096/64\u0027, \u0027neutron:device_id\u0027: \u0027\u0027, \u0027neutron:device_owner\u0027: \u0027\u0027, \u0027neutron:network_name\u0027: \u0027neutron-08cc0ef1-6085-46c1-b5b9-65cb1f933760\u0027, \u0027neutron:port_name\u0027: \u0027ovn-lb-vip-93a4c40d-81bd-4d1c-a85e-98934deeee39\u0027, \u0027neutron:project_id\u0027: \u00275ac2e81fe2244643b8489afe86a7b6ff\u0027, \u0027neutron:revision_number\u0027: \u00271\u0027, \u0027neutron:security_group_ids\u0027: \u002773722b75-fe79-48b3-bbf2-21a4047ed9f9\u0027}, ha_chassis_group\u003d[], options\u003d{\u0027requested-chassis\u0027: \u0027\u0027}, parent_name\u003d[], enabled\u003d[True], type\u003d, dhcpv6_options\u003d[], tag_request\u003d[], port_security\u003d[\u0027fa:16:3e:97:e0:96 10.1.0.20 fdf4:1754:cc53:0:f816:3eff:fe97:e096\u0027], addresses\u003d[], dynamic_addresses\u003d[], tag\u003d[]) old\u003dLogical_Switch_Port(up\u003d[]) {{(pid\u003d27111) matches /usr/local/lib/python3.6/dist-packages/ovsdbapp/backend/ovs_idl/event.py:44}}\nDEBUG ovn_octavia_provider.event [-] LogicalSwitchPortUpdateEvent logged, update, \u003covs.db.idl.Row object at 0x7efc308a7240\u003e {{(pid\u003d27111) run /opt/stack/ovn-octavia-provider/ovn_octavia_provider/event.py:56}}\nDEBUG ovn_octavia_provider.helper [-] Loadbalancer 93a4c40d-81bd-4d1c-a85e-98934deeee39 not found! {{(pid\u003d27111) vip_port_update_handler /opt/stack/ovn-octavia-provider/ovn_octavia_provider/helper.py:315}}","commit_id":"f12710fb5be7b8393e0a4bc3578ddf559fb2f038"}],"ovn_octavia_provider/helper.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d515a1afecbcae133aab3e283891a48034f4cc","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        if commands:"},{"line_number":296,"context_line":"            self._execute_commands(commands)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    @tenacity.retry(retry\u003dtenacity.retry_if_exception_type(idlutils.RowNotFound),"},{"line_number":299,"context_line":"                    wait\u003dtenacity.wait_exponential(),"},{"line_number":300,"context_line":"                    stop\u003dtenacity.stop_after_delay(10),"},{"line_number":301,"context_line":"                    reraise\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_763df58c","line":298,"updated":"2020-04-10 14:56:51.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"29309bcca1b25debe76b6ce2c4474a0b644baadf"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c09621a19c9a19377252e3b1a1ab8a4c97e44864","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        if commands:"},{"line_number":296,"context_line":"            self._execute_commands(commands)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    @tenacity.retry(retry\u003dtenacity.retry_if_exception_type(idlutils.RowNotFound),"},{"line_number":299,"context_line":"                    wait\u003dtenacity.wait_exponential(),"},{"line_number":300,"context_line":"                    stop\u003dtenacity.stop_after_delay(10),"},{"line_number":301,"context_line":"                    reraise\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4c43b2_3dac798b","line":298,"in_reply_to":"df33271e_763df58c","updated":"2020-04-13 20:11:24.000000000","message":"Done","commit_id":"29309bcca1b25debe76b6ce2c4474a0b644baadf"}],"ovn_octavia_provider/tests/functional/test_driver.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c6059d18ce3a6c15f53cb535d840292b4f970cbd","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(TestOctaviaOvnProviderDriver, self).setUp()"},{"line_number":44,"context_line":"        # ovn_driver.OvnProviderHelper.ovn_nbdb_api is a class variable."},{"line_number":45,"context_line":"        # Set it to None, so that when a worker starts the 2nd test we don\u0027t"},{"line_number":46,"context_line":"        # use the old object."},{"line_number":47,"context_line":"        idl_ovn.OvnNbApiIdlImpl.ovsdb_connection \u003d None"},{"line_number":48,"context_line":"        # TODO(mjozefcz): Use octavia listeners to provide needed"},{"line_number":49,"context_line":"        # sockets and modify tests in order to verify if fake"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_64e29303","line":46,"updated":"2020-04-17 15:12:00.000000000","message":"comment can go","commit_id":"40dbc4f08b7b70ac5334da56567cea52bed4f338"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"08b6ec5071d6ee9032e8d3b701d636261f8adbbf","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(TestOctaviaOvnProviderDriver, self).setUp()"},{"line_number":44,"context_line":"        # ovn_driver.OvnProviderHelper.ovn_nbdb_api is a class variable."},{"line_number":45,"context_line":"        # Set it to None, so that when a worker starts the 2nd test we don\u0027t"},{"line_number":46,"context_line":"        # use the old object."},{"line_number":47,"context_line":"        idl_ovn.OvnNbApiIdlImpl.ovsdb_connection \u003d None"},{"line_number":48,"context_line":"        # TODO(mjozefcz): Use octavia listeners to provide needed"},{"line_number":49,"context_line":"        # sockets and modify tests in order to verify if fake"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_a71ac16b","line":46,"in_reply_to":"3f4c43b2_64e29303","updated":"2020-04-20 12:39:18.000000000","message":"Done","commit_id":"40dbc4f08b7b70ac5334da56567cea52bed4f338"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c6059d18ce3a6c15f53cb535d840292b4f970cbd","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self.fake_neutron_client.delete_port.return_value \u003d True"},{"line_number":68,"context_line":"        self._local_net_cache \u003d {}"},{"line_number":69,"context_line":"        self._local_port_cache \u003d {\u0027ports\u0027: []}"},{"line_number":70,"context_line":"        self.addCleanup(self.ovn_driver._ovn_helper.shutdown)"},{"line_number":71,"context_line":"        self.core_plugin \u003d directory.get_plugin()"},{"line_number":72,"context_line":"        self._initialize_foo_ovn_da()"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_64d8d37e","line":70,"updated":"2020-04-17 15:12:00.000000000","message":"Think this can go too","commit_id":"40dbc4f08b7b70ac5334da56567cea52bed4f338"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"08b6ec5071d6ee9032e8d3b701d636261f8adbbf","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self.fake_neutron_client.delete_port.return_value \u003d True"},{"line_number":68,"context_line":"        self._local_net_cache \u003d {}"},{"line_number":69,"context_line":"        self._local_port_cache \u003d {\u0027ports\u0027: []}"},{"line_number":70,"context_line":"        self.addCleanup(self.ovn_driver._ovn_helper.shutdown)"},{"line_number":71,"context_line":"        self.core_plugin \u003d directory.get_plugin()"},{"line_number":72,"context_line":"        self._initialize_foo_ovn_da()"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_e729698a","line":70,"in_reply_to":"3f4c43b2_64d8d37e","updated":"2020-04-20 12:39:18.000000000","message":"Done","commit_id":"40dbc4f08b7b70ac5334da56567cea52bed4f338"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c6059d18ce3a6c15f53cb535d840292b4f970cbd","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        ovn_nb_idl_for_events \u003d ovn_driver.OvnNbIdlForLb("},{"line_number":83,"context_line":"            event_lock_name\u003d\u0027func_test\u0027)"},{"line_number":84,"context_line":"        ovn_nb_idl_for_events.notify_handler.watch_events(events)"},{"line_number":85,"context_line":"        ovn_nb_idl_for_events.start()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _mock_show_subnet(self, subnet_id):"},{"line_number":88,"context_line":"        subnet \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_84951f43","line":85,"updated":"2020-04-17 15:12:00.000000000","message":"Yes, I like this, and think we can create a sub-class with just the event tests perhaps?","commit_id":"40dbc4f08b7b70ac5334da56567cea52bed4f338"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"08b6ec5071d6ee9032e8d3b701d636261f8adbbf","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        ovn_nb_idl_for_events \u003d ovn_driver.OvnNbIdlForLb("},{"line_number":83,"context_line":"            event_lock_name\u003d\u0027func_test\u0027)"},{"line_number":84,"context_line":"        ovn_nb_idl_for_events.notify_handler.watch_events(events)"},{"line_number":85,"context_line":"        ovn_nb_idl_for_events.start()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _mock_show_subnet(self, subnet_id):"},{"line_number":88,"context_line":"        subnet \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4c43b2_c72eed90","line":85,"in_reply_to":"3f4c43b2_84951f43","updated":"2020-04-20 12:39:18.000000000","message":"Done","commit_id":"40dbc4f08b7b70ac5334da56567cea52bed4f338"}],"ovn_octavia_provider/tests/unit/test_driver.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6081c7ad35f8dfe25cc895d8abd82b9be3ccfd46","unresolved":false,"context_lines":[{"line_number":2954,"context_line":"        self.assertTrue(agent.is_alive())"},{"line_number":2955,"context_line":"        exit_event.set()"},{"line_number":2956,"context_line":"        agent.join()"},{"line_number":2957,"context_line":"        self.assertFalse(agent.is_alive())"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f493fa4_053ca891","line":2957,"updated":"2020-04-22 16:45:33.000000000","message":"Looking at this again, seems like a functional test, will move it and create something more unittest-like.","commit_id":"e83afa26662c5a0f3f191293080ccd8603b6f964"}],"setup.cfg":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"be4c4ce79ae455a6ed06794bba31e783fea5fb42","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    ovn \u003d ovn_octavia_provider.driver:OvnProviderDriver"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"octavia.driver_agent.provider_agents \u003d"},{"line_number":34,"context_line":"    ovn_agent \u003d ovn_octavia_provider.driver:OvnProviderAgent"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"oslo.config.opts \u003d"},{"line_number":37,"context_line":"    octavia.api.drivers.ovn \u003d ovn_octavia_provider.common.config:list_opts"}],"source_content_type":"text/x-ttcn-cfg","patch_set":2,"id":"df33271e_e2ccb636","line":34,"range":{"start_line":34,"start_character":37,"end_line":34,"end_character":43},"updated":"2020-04-09 13:03:18.000000000","message":"agent","commit_id":"375b31731a9d18614607080a55f5574d92f81b58"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"515197475b5c3a7f5361c2ca1ad0c167cdd3a9b3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    ovn \u003d ovn_octavia_provider.driver:OvnProviderDriver"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"octavia.driver_agent.provider_agents \u003d"},{"line_number":34,"context_line":"    ovn_agent \u003d ovn_octavia_provider.driver:OvnProviderAgent"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"oslo.config.opts \u003d"},{"line_number":37,"context_line":"    octavia.api.drivers.ovn \u003d ovn_octavia_provider.common.config:list_opts"}],"source_content_type":"text/x-ttcn-cfg","patch_set":2,"id":"df33271e_25598834","line":34,"range":{"start_line":34,"start_character":37,"end_line":34,"end_character":43},"in_reply_to":"df33271e_e2ccb636","updated":"2020-04-09 22:51:28.000000000","message":"Done","commit_id":"375b31731a9d18614607080a55f5574d92f81b58"}]}
