)]}'
{"networking_ovn/octavia/ovn_driver.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c02d19b22a3717f499b44f671e6e85df0ae8dc28","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            helper.register_table(table)"},{"line_number":127,"context_line":"        super(OvnNbIdlForLb, self).__init__("},{"line_number":128,"context_line":"            driver\u003dNone, remote\u003dself.conn_string, schema\u003dhelper)"},{"line_number":129,"context_line":"        self.event_lock_name \u003d \"neutron_ovn_octavia_event_lock\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @tenacity.retry("},{"line_number":132,"context_line":"        wait\u003dtenacity.wait_exponential(max\u003d180),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_e34a8853","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":63},"updated":"2019-07-09 08:08:57.000000000","message":"Maybe I\u0027m missing something, but I don\u0027t think set_lock() is being called for this class. I was looking into the ovsdb_monitor.py and ovs_idl.py (ovsdbapp) modules but I don\u0027t see it.\n\nIf set_lock() is not called I believe all instances of this class will process the same event over and over.\n\nAlso I remember that prior to the hash ring, the classes inheriting from the OvnIdl were the ones calling set_lock() (see: https://review.opendev.org/#/c/655408/7/networking_ovn/ovsdb/ovsdb_monitor.py@398)\n\n@Terry might know perhaps.","commit_id":"72cbe632f9751835989c0e1d35075189d5ceb24b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"3369cef72aa18602fb3d523dd7a88602683649b2","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            helper.register_table(table)"},{"line_number":127,"context_line":"        super(OvnNbIdlForLb, self).__init__("},{"line_number":128,"context_line":"            driver\u003dNone, remote\u003dself.conn_string, schema\u003dhelper)"},{"line_number":129,"context_line":"        self.event_lock_name \u003d \"neutron_ovn_octavia_event_lock\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @tenacity.retry("},{"line_number":132,"context_line":"        wait\u003dtenacity.wait_exponential(max\u003d180),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_b8ffdeff","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":63},"in_reply_to":"7faddb67_155fdb0e","updated":"2019-07-09 12:27:30.000000000","message":"Ok gotcha, I\u0027ll use set_lock() then! Thanks!","commit_id":"72cbe632f9751835989c0e1d35075189d5ceb24b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"a235932f7d3faa2b195c87b83e561727312a048d","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            helper.register_table(table)"},{"line_number":127,"context_line":"        super(OvnNbIdlForLb, self).__init__("},{"line_number":128,"context_line":"            driver\u003dNone, remote\u003dself.conn_string, schema\u003dhelper)"},{"line_number":129,"context_line":"        self.event_lock_name \u003d \"neutron_ovn_octavia_event_lock\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @tenacity.retry("},{"line_number":132,"context_line":"        wait\u003dtenacity.wait_exponential(max\u003d180),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_0d46dc22","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":63},"in_reply_to":"7faddb67_2e608401","updated":"2019-07-10 10:07:03.000000000","message":"Ok problem found.\n\nOctavia creates new OVNProviderDriver instance on each api call. That\u0027s why this event lock doesn\u0027t work, because each time its new Idl, story:\nhttps://storyboard.openstack.org/#!/story/2006196\n\nThe possible solution for now is to add group support to hash-ring and then apply it here.","commit_id":"72cbe632f9751835989c0e1d35075189d5ceb24b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6d48433bbb2c1a0f4d311c7ecefb1a9ad872f8e8","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            helper.register_table(table)"},{"line_number":127,"context_line":"        super(OvnNbIdlForLb, self).__init__("},{"line_number":128,"context_line":"            driver\u003dNone, remote\u003dself.conn_string, schema\u003dhelper)"},{"line_number":129,"context_line":"        self.event_lock_name \u003d \"neutron_ovn_octavia_event_lock\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @tenacity.retry("},{"line_number":132,"context_line":"        wait\u003dtenacity.wait_exponential(max\u003d180),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_155fdb0e","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":63},"in_reply_to":"7faddb67_a3bed062","updated":"2019-07-09 08:57:24.000000000","message":"Hmm I think that wouldn\u0027t work straight away because the hash ring as-is assumes that the instances are listening to the same events so they share the same table in neutron db. I was thinking awhile ago to segregate the members in group so we could re-use it in other parts of the project.\n\nI think we will need call set_lock() here for now (if it\u0027 not called somewhere I couldn\u0027t find)","commit_id":"72cbe632f9751835989c0e1d35075189d5ceb24b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"23556dbaf6447e3c3fe17e83a88202b43c32bb5c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            helper.register_table(table)"},{"line_number":127,"context_line":"        super(OvnNbIdlForLb, self).__init__("},{"line_number":128,"context_line":"            driver\u003dNone, remote\u003dself.conn_string, schema\u003dhelper)"},{"line_number":129,"context_line":"        self.event_lock_name \u003d \"neutron_ovn_octavia_event_lock\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @tenacity.retry("},{"line_number":132,"context_line":"        wait\u003dtenacity.wait_exponential(max\u003d180),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_2e608401","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":63},"in_reply_to":"7faddb67_b8ffdeff","updated":"2019-07-09 13:10:49.000000000","message":"I\u0027ve added:\n\nself.set_lock(self.event_lock_name) \n\nit to __init__ and on every transaction it raise:\n\n\nRuntimeError: OVSDB Error: The transaction failed because the IDL has been configured to require a database lock but didn\u0027t get it yet or has already lost it\n\n\nSo according to https://review.opendev.org/#/c/655408/7/networking_ovn/ovsdb/ovsdb_monitor.py@398 I\u0027ve tried to add it in method from_server() but its not even invoked.\n\nAny ideas?","commit_id":"72cbe632f9751835989c0e1d35075189d5ceb24b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"3f9c8f495f91c616dba7c48e56ede584cb7e3a52","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            helper.register_table(table)"},{"line_number":127,"context_line":"        super(OvnNbIdlForLb, self).__init__("},{"line_number":128,"context_line":"            driver\u003dNone, remote\u003dself.conn_string, schema\u003dhelper)"},{"line_number":129,"context_line":"        self.event_lock_name \u003d \"neutron_ovn_octavia_event_lock\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @tenacity.retry("},{"line_number":132,"context_line":"        wait\u003dtenacity.wait_exponential(max\u003d180),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_a3bed062","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":63},"in_reply_to":"7faddb67_e34a8853","updated":"2019-07-09 08:42:42.000000000","message":"So just inherit from OvnIdlDistributedLock and will be fine?","commit_id":"72cbe632f9751835989c0e1d35075189d5ceb24b"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"b6d06e6029a7c9e136077074a0966b8c9897bc46","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"                         \u0027fixed_ips\u0027: [{\u0027subnet_id\u0027: vip_d[\u0027vip_subnet_id\u0027]}],"},{"line_number":1443,"context_line":"                         \u0027admin_state_up\u0027: True,"},{"line_number":1444,"context_line":"                         \u0027project_id\u0027: project_id}}"},{"line_number":1445,"context_line":"        if vip_d.get(\u0027vip_address\u0027):"},{"line_number":1446,"context_line":"            port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027] \u003d vip_d[\u0027vip_address\u0027]"},{"line_number":1447,"context_line":"        network_driver \u003d get_network_driver()"},{"line_number":1448,"context_line":"        return network_driver.neutron_client.create_port(port)"},{"line_number":1449,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_9d3f34b3","line":1446,"range":{"start_line":1445,"start_character":0,"end_line":1446,"end_character":77},"updated":"2019-07-12 09:08:15.000000000","message":"This is already handled here: https://review.opendev.org/#/c/668850/\n\nMaybe we can drop this here and handle it there along with unit tests which are not being handled in this patch, wdyt?","commit_id":"72cbe632f9751835989c0e1d35075189d5ceb24b"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e72dc6869a8c721495818d8a80f01d292ae125d3","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        commands \u003d []"},{"line_number":446,"context_line":"        if lr_ref:"},{"line_number":447,"context_line":"            try:"},{"line_number":448,"context_line":"                lr_ref \u003d [r.strip()"},{"line_number":449,"context_line":"                          for r in lr_ref.split(\u0027,\u0027)"},{"line_number":450,"context_line":"                          if r.strip() !\u003d ovn_lr.name]"},{"line_number":451,"context_line":"            except ValueError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_07e0c6f9","line":448,"updated":"2019-07-12 18:54:14.000000000","message":"tiny nit: can avoid calling r.strip() twice by doing something like:\n\n    [r for r in [lr.strip() for lr in lr_ref.split(\u0027,\u0027)] if r !\u003d ovn_lr.name]","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"60abc83421b1d1fd9ac04cf597da03882b5abd09","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        commands \u003d []"},{"line_number":446,"context_line":"        if lr_ref:"},{"line_number":447,"context_line":"            try:"},{"line_number":448,"context_line":"                lr_ref \u003d [r.strip()"},{"line_number":449,"context_line":"                          for r in lr_ref.split(\u0027,\u0027)"},{"line_number":450,"context_line":"                          if r.strip() !\u003d ovn_lr.name]"},{"line_number":451,"context_line":"            except ValueError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_50350b8e","line":448,"in_reply_to":"7faddb67_07e0c6f9","updated":"2019-07-15 09:19:06.000000000","message":"That works fine! Thanks :)","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e72dc6869a8c721495818d8a80f01d292ae125d3","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                        \u0027router\u0027: ovn_lr.name})"},{"line_number":456,"context_line":"                LOG.warning(msg)"},{"line_number":457,"context_line":"            if lr_ref:"},{"line_number":458,"context_line":"                new_external_ids \u003d copy.deepcopy(ovn_lb.external_ids)"},{"line_number":459,"context_line":"                new_external_ids.update({"},{"line_number":460,"context_line":"                    LB_EXT_IDS_LR_REF_KEY: \", \".join(lr_ref)})"},{"line_number":461,"context_line":"                commands.append("}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_a7fbf276","line":458,"updated":"2019-07-12 18:54:14.000000000","message":"nit: db_set() will update a dict, not overwrite it. So we don\u0027t need to do a deepcopy of external_ids, we should be able to just do:\n\n    commands.append(self.ovn_nbdb_api.db_set(\u0027Load_Balancer\u0027, ovn_lb.uuid,\n        \u0027external_ids\u0027, {LB_EXT_IDS_LR_REF_KEY: \u0027,\u0027.join(lr_ref)})))","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"60abc83421b1d1fd9ac04cf597da03882b5abd09","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                        \u0027router\u0027: ovn_lr.name})"},{"line_number":456,"context_line":"                LOG.warning(msg)"},{"line_number":457,"context_line":"            if lr_ref:"},{"line_number":458,"context_line":"                new_external_ids \u003d copy.deepcopy(ovn_lb.external_ids)"},{"line_number":459,"context_line":"                new_external_ids.update({"},{"line_number":460,"context_line":"                    LB_EXT_IDS_LR_REF_KEY: \", \".join(lr_ref)})"},{"line_number":461,"context_line":"                commands.append("}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_fae73511","line":458,"in_reply_to":"7faddb67_a7fbf276","updated":"2019-07-15 09:19:06.000000000","message":"Ok I tested this. It will not work with with:\nself.ovn_nbdb_api.db_set(\n   \u0027Load_Balancer\u0027, ovn_lb.uuid,\n   \u0027external_ids\u0027,\n   {LB_EXT_IDS_LR_REF_KEY: \u0027,\u0027.join(lr_ref)}))\n\nBut specyfing updated values as a tuple works:\n\nself.ovn_nbdb_api.db_set(\n   \u0027Load_Balancer\u0027, ovn_lb.uuid,\n   (\u0027external_ids\u0027,\n   {LB_EXT_IDS_LR_REF_KEY: \u0027,\u0027.join(lr_ref)})))\n\nThanks! That is much better now!","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e72dc6869a8c721495818d8a80f01d292ae125d3","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            if lr_ref:"},{"line_number":458,"context_line":"                new_external_ids \u003d copy.deepcopy(ovn_lb.external_ids)"},{"line_number":459,"context_line":"                new_external_ids.update({"},{"line_number":460,"context_line":"                    LB_EXT_IDS_LR_REF_KEY: \", \".join(lr_ref)})"},{"line_number":461,"context_line":"                commands.append("},{"line_number":462,"context_line":"                    self.ovn_nbdb_api.db_set("},{"line_number":463,"context_line":"                        \u0027Load_Balancer\u0027, ovn_lb.uuid,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_67f17a95","line":460,"updated":"2019-07-12 18:54:14.000000000","message":"I wonder if there is a reason for the space? It is just something we blindly strip() above, right?","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"60abc83421b1d1fd9ac04cf597da03882b5abd09","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            if lr_ref:"},{"line_number":458,"context_line":"                new_external_ids \u003d copy.deepcopy(ovn_lb.external_ids)"},{"line_number":459,"context_line":"                new_external_ids.update({"},{"line_number":460,"context_line":"                    LB_EXT_IDS_LR_REF_KEY: \", \".join(lr_ref)})"},{"line_number":461,"context_line":"                commands.append("},{"line_number":462,"context_line":"                    self.ovn_nbdb_api.db_set("},{"line_number":463,"context_line":"                        \u0027Load_Balancer\u0027, ovn_lb.uuid,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_b0d23fff","line":460,"in_reply_to":"7faddb67_67f17a95","updated":"2019-07-15 09:19:06.000000000","message":"We strip() above to be sure we\u0027re able to check if it equals to ovn_lr.name. While testing this change I found that those variables are stored with spaces.\nSo its totally fine to add or not add those spaces. But to be sure strip() is needed anyway.","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e72dc6869a8c721495818d8a80f01d292ae125d3","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        # Multiple routers in lr_rf are separated with \u0027,\u0027"},{"line_number":492,"context_line":"        lr_rf \u003d {LB_EXT_IDS_LR_REF_KEY: ovn_lr.name} if not lr_rf else {"},{"line_number":493,"context_line":"            LB_EXT_IDS_LR_REF_KEY: \"%s, %s\" % (lr_rf, ovn_lr.name)}"},{"line_number":494,"context_line":"        commands.append("},{"line_number":495,"context_line":"            self.ovn_nbdb_api.db_set(\u0027Load_Balancer\u0027, ovn_lb.uuid,"},{"line_number":496,"context_line":"                                     (\u0027external_ids\u0027, lr_rf))"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_c73dce2b","line":493,"updated":"2019-07-12 18:54:14.000000000","message":"same question about the space here.","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"60abc83421b1d1fd9ac04cf597da03882b5abd09","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        # Multiple routers in lr_rf are separated with \u0027,\u0027"},{"line_number":492,"context_line":"        lr_rf \u003d {LB_EXT_IDS_LR_REF_KEY: ovn_lr.name} if not lr_rf else {"},{"line_number":493,"context_line":"            LB_EXT_IDS_LR_REF_KEY: \"%s, %s\" % (lr_rf, ovn_lr.name)}"},{"line_number":494,"context_line":"        commands.append("},{"line_number":495,"context_line":"            self.ovn_nbdb_api.db_set(\u0027Load_Balancer\u0027, ovn_lb.uuid,"},{"line_number":496,"context_line":"                                     (\u0027external_ids\u0027, lr_rf))"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_f032f75d","line":493,"in_reply_to":"7faddb67_c73dce2b","updated":"2019-07-15 09:19:06.000000000","message":"Like above :)","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e72dc6869a8c721495818d8a80f01d292ae125d3","unresolved":false,"context_lines":[{"line_number":512,"context_line":"            return [ovn_utils.ovn_name(netdriver.get_subnet(sid).network_id)"},{"line_number":513,"context_line":"                    for port in router.ports"},{"line_number":514,"context_line":"                    for sid in port.external_ids.get("},{"line_number":515,"context_line":"                        ovn_const.OVN_SUBNET_EXT_IDS_KEY, \u0027\u0027).split(\u0027 \u0027)"},{"line_number":516,"context_line":"                    if not port.gateway_chassis]"},{"line_number":517,"context_line":"        except Exception:"},{"line_number":518,"context_line":"            LOG.exception(\u0027Unknown exception occurred\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_c76b8e1b","line":515,"updated":"2019-07-12 18:54:14.000000000","message":"I see the split(\u0027 \u0027) here and wonder why we have different external_ids fields using different delimeters. There is a slightly perverse part of me that thinks that because external_ids is specifically string: string, that if we want to store structured values like arrays, we should just do it in json...but that is a discussion for another time (and that time may be in the distant past).","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"60abc83421b1d1fd9ac04cf597da03882b5abd09","unresolved":false,"context_lines":[{"line_number":512,"context_line":"            return [ovn_utils.ovn_name(netdriver.get_subnet(sid).network_id)"},{"line_number":513,"context_line":"                    for port in router.ports"},{"line_number":514,"context_line":"                    for sid in port.external_ids.get("},{"line_number":515,"context_line":"                        ovn_const.OVN_SUBNET_EXT_IDS_KEY, \u0027\u0027).split(\u0027 \u0027)"},{"line_number":516,"context_line":"                    if not port.gateway_chassis]"},{"line_number":517,"context_line":"        except Exception:"},{"line_number":518,"context_line":"            LOG.exception(\u0027Unknown exception occurred\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_30f2cf71","line":515,"in_reply_to":"7faddb67_c76b8e1b","updated":"2019-07-15 09:19:06.000000000","message":"That would be great to introduce json structure in external_ids. For now its wild without any special convention how we store those values. Big +1 about moving to json.","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e72dc6869a8c721495818d8a80f01d292ae125d3","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                        self.ovn_nbdb_api.ls_lb_del(ovn_ls.uuid, ovn_lb.uuid)"},{"line_number":764,"context_line":"                    )"},{"line_number":765,"context_line":"            # Delete LB from all Networks the LB is indirectly associated"},{"line_number":766,"context_line":"            for ls in self._find_lb_in_table("},{"line_number":767,"context_line":"                    ovn_lb, \u0027Logical_Switch\u0027):"},{"line_number":768,"context_line":"                commands.append("},{"line_number":769,"context_line":"                    self.ovn_nbdb_api.ls_lb_del(ls.uuid, ovn_lb.uuid,"},{"line_number":770,"context_line":"                                                if_exists\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_e759ea8d","line":767,"range":{"start_line":766,"start_character":12,"end_line":767,"end_character":46},"updated":"2019-07-12 18:54:14.000000000","message":"very tiny nit: no reason to break up this line.","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"60abc83421b1d1fd9ac04cf597da03882b5abd09","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                        self.ovn_nbdb_api.ls_lb_del(ovn_ls.uuid, ovn_lb.uuid)"},{"line_number":764,"context_line":"                    )"},{"line_number":765,"context_line":"            # Delete LB from all Networks the LB is indirectly associated"},{"line_number":766,"context_line":"            for ls in self._find_lb_in_table("},{"line_number":767,"context_line":"                    ovn_lb, \u0027Logical_Switch\u0027):"},{"line_number":768,"context_line":"                commands.append("},{"line_number":769,"context_line":"                    self.ovn_nbdb_api.ls_lb_del(ls.uuid, ovn_lb.uuid,"},{"line_number":770,"context_line":"                                                if_exists\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_70ee07ee","line":767,"range":{"start_line":766,"start_character":12,"end_line":767,"end_character":46},"in_reply_to":"7faddb67_e759ea8d","updated":"2019-07-15 09:19:06.000000000","message":"done","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e72dc6869a8c721495818d8a80f01d292ae125d3","unresolved":false,"context_lines":[{"line_number":777,"context_line":"                            lr.uuid, ovn_lb.uuid))"},{"line_number":778,"context_line":"                        break"},{"line_number":779,"context_line":"            # Delete LB from all Routers the LB is indirectly associated"},{"line_number":780,"context_line":"            for lr in self._find_lb_in_table("},{"line_number":781,"context_line":"                    ovn_lb, \u0027Logical_Router\u0027):"},{"line_number":782,"context_line":"                commands.append("},{"line_number":783,"context_line":"                    self.ovn_nbdb_api.lr_lb_del(lr.uuid, ovn_lb.uuid,"},{"line_number":784,"context_line":"                                                if_exists\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_a7577258","line":781,"range":{"start_line":780,"start_character":0,"end_line":781,"end_character":46},"updated":"2019-07-12 18:54:14.000000000","message":"same itty bitty nit","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"60abc83421b1d1fd9ac04cf597da03882b5abd09","unresolved":false,"context_lines":[{"line_number":777,"context_line":"                            lr.uuid, ovn_lb.uuid))"},{"line_number":778,"context_line":"                        break"},{"line_number":779,"context_line":"            # Delete LB from all Routers the LB is indirectly associated"},{"line_number":780,"context_line":"            for lr in self._find_lb_in_table("},{"line_number":781,"context_line":"                    ovn_lb, \u0027Logical_Router\u0027):"},{"line_number":782,"context_line":"                commands.append("},{"line_number":783,"context_line":"                    self.ovn_nbdb_api.lr_lb_del(lr.uuid, ovn_lb.uuid,"},{"line_number":784,"context_line":"                                                if_exists\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_30be4fd5","line":781,"range":{"start_line":780,"start_character":0,"end_line":781,"end_character":46},"in_reply_to":"7faddb67_a7577258","updated":"2019-07-15 09:19:06.000000000","message":"done","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e72dc6869a8c721495818d8a80f01d292ae125d3","unresolved":false,"context_lines":[{"line_number":1165,"context_line":"                commands.extend("},{"line_number":1166,"context_line":"                    self._refresh_lb_vips(ovn_lb.uuid, external_ids))"},{"line_number":1167,"context_line":"                self._execute_commands(commands)"},{"line_number":1168,"context_line":"            if pool[\u0027admin_state_up\u0027] and not external_ids[pool_key]:"},{"line_number":1169,"context_line":"                # Operating status can be ONLINE if members are present and"},{"line_number":1170,"context_line":"                # admin_state_up is True. If either is false, operating_status"},{"line_number":1171,"context_line":"                # is OFFLINE"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_e7e7aaab","line":1168,"updated":"2019-07-12 18:54:14.000000000","message":"Will this thrown an exception if pool_key not in external_ids? Looks like we check that in the case \u0027not pool[\u0027admin_state_up\u0027] above. Should it be an external_ids.get(...)?","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"60abc83421b1d1fd9ac04cf597da03882b5abd09","unresolved":false,"context_lines":[{"line_number":1165,"context_line":"                commands.extend("},{"line_number":1166,"context_line":"                    self._refresh_lb_vips(ovn_lb.uuid, external_ids))"},{"line_number":1167,"context_line":"                self._execute_commands(commands)"},{"line_number":1168,"context_line":"            if pool[\u0027admin_state_up\u0027] and not external_ids[pool_key]:"},{"line_number":1169,"context_line":"                # Operating status can be ONLINE if members are present and"},{"line_number":1170,"context_line":"                # admin_state_up is True. If either is false, operating_status"},{"line_number":1171,"context_line":"                # is OFFLINE"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_d0933b5a","line":1168,"in_reply_to":"7faddb67_e7e7aaab","updated":"2019-07-15 09:19:06.000000000","message":"Yes, that\u0027s potential KeyError generator. Thanks for finding this!","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e72dc6869a8c721495818d8a80f01d292ae125d3","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"            self._execute_commands(commands)"},{"line_number":1286,"context_line":"            return pool_status"},{"line_number":1287,"context_line":"        else:"},{"line_number":1288,"context_line":"            msg \u003d (\"Member %s not found in the pool\") % member[\u0027id\u0027]"},{"line_number":1289,"context_line":"            raise driver_exceptions.DriverError("},{"line_number":1290,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":1291,"context_line":"                operator_fault_string\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_67fbba46","line":1288,"updated":"2019-07-12 18:54:14.000000000","message":"nit: unneeded parentheses","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"60abc83421b1d1fd9ac04cf597da03882b5abd09","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"            self._execute_commands(commands)"},{"line_number":1286,"context_line":"            return pool_status"},{"line_number":1287,"context_line":"        else:"},{"line_number":1288,"context_line":"            msg \u003d (\"Member %s not found in the pool\") % member[\u0027id\u0027]"},{"line_number":1289,"context_line":"            raise driver_exceptions.DriverError("},{"line_number":1290,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":1291,"context_line":"                operator_fault_string\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_70c7e765","line":1288,"in_reply_to":"7faddb67_67fbba46","updated":"2019-07-15 09:19:06.000000000","message":"done","commit_id":"98407e9327242e68bf93c01f676c0e91974651aa"}],"networking_ovn/tests/unit/octavia/test_ovn_driver.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"0fac3158e205c8d6f28db403b46bb279ceaba4f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9fb8cfa7_44abc3d4","line":685,"updated":"2019-07-01 09:42:30.000000000","message":"This patch still needs additional unit testing. I\u0027m working on it.","commit_id":"9b603461493875201be787c45da11e4253ef17af"}]}
