)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5f0184e8fd546fda627451d87562c6eef5cd0cc4","unresolved":false,"context_lines":[{"line_number":18,"context_line":"and \u0027vips\u0027 column of this table whenever a pool, member or listener"},{"line_number":19,"context_line":"is created/updated or deleted."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"TODO: Add documentation and add CI job."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"[1] - https://docs.openstack.org/octavia/latest/contributor/guides/providers.html"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3f79a3b5_dbaac0d0","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":39},"updated":"2018-08-09 14:09:45.000000000","message":"Would be nice to have a bug ticket for this so we can track the work (partial-bug...closes-bug)","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"}],"devstack/local.conf.sample":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7ac6b592e248caa9d2da4b120ad472fb8af798f9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"# load balancer and it only supports L4 TCP load balancer and doesn\u0027t support"},{"line_number":91,"context_line":"# health check monitor and other advanced features supported by Octavia"},{"line_number":92,"context_line":"# amphore driver. If you want to enable Octavia amphore driver, please see"},{"line_number":93,"context_line":"#the local.conf sample in the octavia repo."},{"line_number":94,"context_line":"enable_plugin octavia https://git.openstack.org/openstack/octavia"},{"line_number":95,"context_line":"LIBS_FROM_GIT+\u003dpython-octaviaclient"},{"line_number":96,"context_line":"enable_service ovn-octavia"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"3f79a3b5_56654ce0","line":93,"range":{"start_line":93,"start_character":1,"end_line":93,"end_character":4},"updated":"2018-08-09 13:37:16.000000000","message":"nit: You can add a space here maybe to sync with the above lines","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":90,"context_line":"# load balancer and it only supports L4 TCP load balancer and doesn\u0027t support"},{"line_number":91,"context_line":"# health check monitor and other advanced features supported by Octavia"},{"line_number":92,"context_line":"# amphore driver. If you want to enable Octavia amphore driver, please see"},{"line_number":93,"context_line":"#the local.conf sample in the octavia repo."},{"line_number":94,"context_line":"enable_plugin octavia https://git.openstack.org/openstack/octavia"},{"line_number":95,"context_line":"LIBS_FROM_GIT+\u003dpython-octaviaclient"},{"line_number":96,"context_line":"enable_service ovn-octavia"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"3f79a3b5_a646c420","line":93,"range":{"start_line":93,"start_character":1,"end_line":93,"end_character":4},"in_reply_to":"3f79a3b5_56654ce0","updated":"2018-08-09 18:12:22.000000000","message":"Ack.","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5f0184e8fd546fda627451d87562c6eef5cd0cc4","unresolved":false,"context_lines":[{"line_number":92,"context_line":"# amphore driver. If you want to enable Octavia amphore driver, please see"},{"line_number":93,"context_line":"#the local.conf sample in the octavia repo."},{"line_number":94,"context_line":"enable_plugin octavia https://git.openstack.org/openstack/octavia"},{"line_number":95,"context_line":"LIBS_FROM_GIT+\u003dpython-octaviaclient"},{"line_number":96,"context_line":"enable_service ovn-octavia"},{"line_number":97,"context_line":"enable_service o-api"},{"line_number":98,"context_line":"enable_service o-hk"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"3f79a3b5_3b8bb41f","line":95,"range":{"start_line":95,"start_character":0,"end_line":95,"end_character":35},"updated":"2018-08-09 14:09:45.000000000","message":"Is there a reason why we should always install it from source ?","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":92,"context_line":"# amphore driver. If you want to enable Octavia amphore driver, please see"},{"line_number":93,"context_line":"#the local.conf sample in the octavia repo."},{"line_number":94,"context_line":"enable_plugin octavia https://git.openstack.org/openstack/octavia"},{"line_number":95,"context_line":"LIBS_FROM_GIT+\u003dpython-octaviaclient"},{"line_number":96,"context_line":"enable_service ovn-octavia"},{"line_number":97,"context_line":"enable_service o-api"},{"line_number":98,"context_line":"enable_service o-hk"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"3f79a3b5_e6e03cfd","line":95,"range":{"start_line":95,"start_character":0,"end_line":95,"end_character":35},"in_reply_to":"3f79a3b5_3b8bb41f","updated":"2018-08-09 18:12:22.000000000","message":"The local.conf sample provided by octavia does the same way.\nI just copied it from there - https://github.com/openstack/octavia/blob/master/devstack/samples/singlenode/local.conf#L28\n\nI think its better to take from sources, since provider driver support was added recently and --provider option when creating a load balancer may not be present.","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"}],"networking_ovn/octavia/ovn_driver.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"98a9fdea2ab96009ed19c3fddea8736ac5be8a55","unresolved":false,"context_lines":[{"line_number":68,"context_line":"ovn-northd service which monitors for changes to the OVN Northbound db,"},{"line_number":69,"context_line":"generates OVN logical flows to enable load balancing and ovn-controller running"},{"line_number":70,"context_line":"on each compute node, translates the logical flows into actual OF Flows."},{"line_number":71,"context_line":"[1] - https://github.com/openvswitch/ovs/blob/master/ovn/ovn-nb.ovsschema#L117"},{"line_number":72,"context_line":"\"\"\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_2de005cc","line":71,"range":{"start_line":71,"start_character":6,"end_line":71,"end_character":78},"updated":"2018-07-24 09:20:01.000000000","message":"Just a nit, the link content\u0027s likely to change at any time. What you can do in the github interface is to press \"y\" while on the page to get a permanent link.","commit_id":"535bcd886da182d280e55750dd61cb10ef8ac006"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"98a9fdea2ab96009ed19c3fddea8736ac5be8a55","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def __init__(self):"},{"line_number":94,"context_line":"        self.dbg_f \u003d open(\"/tmp/ovn_octavia.txt\", \"a\")"},{"line_number":95,"context_line":"        self._log_crap(\"OvnProviderHelper __init__ called\")"},{"line_number":96,"context_line":"        self.requests \u003d Queue.Queue()"},{"line_number":97,"context_line":"        self.helper_thread \u003d threading.Thread(target\u003dself.request_handler)"},{"line_number":98,"context_line":"        self.helper_thread.daemon \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1dd6b7c4","line":95,"range":{"start_line":95,"start_character":13,"end_line":95,"end_character":22},"updated":"2018-07-24 09:20:01.000000000","message":"lol","commit_id":"535bcd886da182d280e55750dd61cb10ef8ac006"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"98a9fdea2ab96009ed19c3fddea8736ac5be8a55","unresolved":false,"context_lines":[{"line_number":67,"context_line":"ovn-northd service which monitors for changes to the OVN Northbound db,"},{"line_number":68,"context_line":"generates OVN logical flows to enable load balancing and ovn-controller running"},{"line_number":69,"context_line":"on each compute node, translates the logical flows into actual OF Flows."},{"line_number":70,"context_line":"[1] - https://github.com/openvswitch/ovs/blob/master/ovn/ovn-nb.ovsschema#L117."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Below  are few examples on what happens when loadbalancer commands are"},{"line_number":73,"context_line":"executed and what changes in the Load_Balancer Northbound db table."}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_9609c12a","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":78},"updated":"2018-07-24 09:20:01.000000000","message":"tip: The links with line numbers may change in the future, you can get a permanent link on github if you press \"y\" while looking at the file.\n\nHere\u0027s the permanent link: https://github.com/openvswitch/ovs/blob/d1b235d7a6246e00d4afc359071d3b6b3ed244c3/ovn/ovn-nb.ovsschema#L117","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"8fe785faeecaea98c7155553fc978be17abfe14d","unresolved":false,"context_lines":[{"line_number":67,"context_line":"ovn-northd service which monitors for changes to the OVN Northbound db,"},{"line_number":68,"context_line":"generates OVN logical flows to enable load balancing and ovn-controller running"},{"line_number":69,"context_line":"on each compute node, translates the logical flows into actual OF Flows."},{"line_number":70,"context_line":"[1] - https://github.com/openvswitch/ovs/blob/master/ovn/ovn-nb.ovsschema#L117."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Below  are few examples on what happens when loadbalancer commands are"},{"line_number":73,"context_line":"executed and what changes in the Load_Balancer Northbound db table."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_a5da73e6","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":78},"in_reply_to":"5f7c97a3_9609c12a","updated":"2018-08-07 19:49:35.000000000","message":"Done","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"4b22e4a836411c58f7333ed070843543b82fc052","unresolved":false,"context_lines":[{"line_number":157,"context_line":"\"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"REQ_TYPE_LB_CREATE \u003d \u0027lb_create\u0027"},{"line_number":161,"context_line":"REQ_TYPE_LB_DELETE \u003d \u0027lb_delete\u0027"},{"line_number":162,"context_line":"REQ_TYPE_LB_FAILOVER \u003d \u0027lb_failover\u0027"},{"line_number":163,"context_line":"REQ_TYPE_LB_UPDATE \u003d \u0027lb_update\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_c370f544","line":160,"updated":"2018-07-23 11:08:51.000000000","message":"doesn\u0027t octavia provide constants for that?","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"e524cc913f4b3c46779eb226ced26397e7e72fc3","unresolved":false,"context_lines":[{"line_number":157,"context_line":"\"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"REQ_TYPE_LB_CREATE \u003d \u0027lb_create\u0027"},{"line_number":161,"context_line":"REQ_TYPE_LB_DELETE \u003d \u0027lb_delete\u0027"},{"line_number":162,"context_line":"REQ_TYPE_LB_FAILOVER \u003d \u0027lb_failover\u0027"},{"line_number":163,"context_line":"REQ_TYPE_LB_UPDATE \u003d \u0027lb_update\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_18c3a05a","line":160,"in_reply_to":"5f7c97a3_c370f544","updated":"2018-07-24 07:49:22.000000000","message":"These constants are used internally.","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"98a9fdea2ab96009ed19c3fddea8736ac5be8a55","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        try:"},{"line_number":264,"context_line":"            self._octavia_driver_lib.update_loadbalancer_status(status)"},{"line_number":265,"context_line":"        except driver_exceptions.UpdateStatusError:"},{"line_number":266,"context_line":"            # TODO(numans): Handle the exception properly"},{"line_number":267,"context_line":"            pass"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def _find_ovn_lb(self, loadbalancer_id):"},{"line_number":270,"context_line":"        find_condition \u003d (\u0027name\u0027, \u0027\u003d\u0027, loadbalancer_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_9660e1d2","line":267,"range":{"start_line":266,"start_character":0,"end_line":267,"end_character":16},"updated":"2018-07-24 09:20:01.000000000","message":"For now we can at put a log here, that will help with troubleshooting in case things go bad. E.g:\n\nexcept driver_exceptions.UpdateStatusError as e:\n    LOG.error(\u0027Error while updating the load balancer status: %s\u0027, e)","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"8fe785faeecaea98c7155553fc978be17abfe14d","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        try:"},{"line_number":264,"context_line":"            self._octavia_driver_lib.update_loadbalancer_status(status)"},{"line_number":265,"context_line":"        except driver_exceptions.UpdateStatusError:"},{"line_number":266,"context_line":"            # TODO(numans): Handle the exception properly"},{"line_number":267,"context_line":"            pass"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def _find_ovn_lb(self, loadbalancer_id):"},{"line_number":270,"context_line":"        find_condition \u003d (\u0027name\u0027, \u0027\u003d\u0027, loadbalancer_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_c5d76fbf","line":267,"range":{"start_line":266,"start_character":0,"end_line":267,"end_character":16},"in_reply_to":"5f7c97a3_9660e1d2","updated":"2018-08-07 19:49:35.000000000","message":"Done","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"98a9fdea2ab96009ed19c3fddea8736ac5be8a55","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            return commands"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        if network_id:"},{"line_number":294,"context_line":"            ls_name \u003d \"neutron-\" + network_id"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            network_driver \u003d utils.get_network_driver()"},{"line_number":297,"context_line":"            subnet \u003d network_driver.get_subnet(subnet_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_d6a3b9fe","line":294,"range":{"start_line":294,"start_character":12,"end_line":294,"end_character":45},"updated":"2018-07-24 09:20:01.000000000","message":"utils.ovn_name()","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"8fe785faeecaea98c7155553fc978be17abfe14d","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            return commands"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        if network_id:"},{"line_number":294,"context_line":"            ls_name \u003d \"neutron-\" + network_id"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            network_driver \u003d utils.get_network_driver()"},{"line_number":297,"context_line":"            subnet \u003d network_driver.get_subnet(subnet_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_65e45bad","line":294,"range":{"start_line":294,"start_character":12,"end_line":294,"end_character":45},"in_reply_to":"5f7c97a3_d6a3b9fe","updated":"2018-08-07 19:49:35.000000000","message":"Done","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"4b22e4a836411c58f7333ed070843543b82fc052","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            network_driver \u003d utils.get_network_driver()"},{"line_number":297,"context_line":"            subnet \u003d network_driver.get_subnet(subnet_id)"},{"line_number":298,"context_line":"            ls_name \u003d \"neutron-\" + subnet.network_id"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        ovn_ls \u003d self.ovn_nbdb_api.ls_get(ls_name).execute("},{"line_number":301,"context_line":"            check_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_23f0c992","line":298,"range":{"start_line":298,"start_character":11,"end_line":298,"end_character":52},"updated":"2018-07-23 11:08:51.000000000","message":"Do we have any helper function for that in ovn code?","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"e524cc913f4b3c46779eb226ced26397e7e72fc3","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            network_driver \u003d utils.get_network_driver()"},{"line_number":297,"context_line":"            subnet \u003d network_driver.get_subnet(subnet_id)"},{"line_number":298,"context_line":"            ls_name \u003d \"neutron-\" + subnet.network_id"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        ovn_ls \u003d self.ovn_nbdb_api.ls_get(ls_name).execute("},{"line_number":301,"context_line":"            check_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_d89a0874","line":298,"range":{"start_line":298,"start_character":11,"end_line":298,"end_character":52},"in_reply_to":"5f7c97a3_23f0c992","updated":"2018-07-24 07:49:22.000000000","message":"Ack. I think we have","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"8fe785faeecaea98c7155553fc978be17abfe14d","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            network_driver \u003d utils.get_network_driver()"},{"line_number":297,"context_line":"            subnet \u003d network_driver.get_subnet(subnet_id)"},{"line_number":298,"context_line":"            ls_name \u003d \"neutron-\" + subnet.network_id"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        ovn_ls \u003d self.ovn_nbdb_api.ls_get(ls_name).execute("},{"line_number":301,"context_line":"            check_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_85e1779d","line":298,"range":{"start_line":298,"start_character":11,"end_line":298,"end_character":52},"in_reply_to":"5f7c97a3_b69e3db5","updated":"2018-08-07 19:49:35.000000000","message":"Done","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"98a9fdea2ab96009ed19c3fddea8736ac5be8a55","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            network_driver \u003d utils.get_network_driver()"},{"line_number":297,"context_line":"            subnet \u003d network_driver.get_subnet(subnet_id)"},{"line_number":298,"context_line":"            ls_name \u003d \"neutron-\" + subnet.network_id"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        ovn_ls \u003d self.ovn_nbdb_api.ls_get(ls_name).execute("},{"line_number":301,"context_line":"            check_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_b69e3db5","line":298,"range":{"start_line":298,"start_character":11,"end_line":298,"end_character":52},"in_reply_to":"5f7c97a3_d89a0874","updated":"2018-07-24 09:20:01.000000000","message":"utils.ovn_name()","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"4b22e4a836411c58f7333ed070843543b82fc052","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        for lr in self.ovn_nbdb_api.tables[\u0027Logical_Router\u0027].rows.values():"},{"line_number":371,"context_line":"            for lrp in lr.ports:"},{"line_number":372,"context_line":"                if lrp.name \u003d\u003d lrp_name:"},{"line_number":373,"context_line":"                    ovn_lr \u003d lr"},{"line_number":374,"context_line":"                    break"},{"line_number":375,"context_line":"        return ovn_lr"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def lb_create(self, loadbalancer):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_83243d1c","line":374,"range":{"start_line":373,"start_character":20,"end_line":374,"end_character":25},"updated":"2018-07-23 11:08:51.000000000","message":"return lr (instead of assignment + break ? )","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"e524cc913f4b3c46779eb226ced26397e7e72fc3","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        for lr in self.ovn_nbdb_api.tables[\u0027Logical_Router\u0027].rows.values():"},{"line_number":371,"context_line":"            for lrp in lr.ports:"},{"line_number":372,"context_line":"                if lrp.name \u003d\u003d lrp_name:"},{"line_number":373,"context_line":"                    ovn_lr \u003d lr"},{"line_number":374,"context_line":"                    break"},{"line_number":375,"context_line":"        return ovn_lr"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def lb_create(self, loadbalancer):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_f89fc461","line":374,"range":{"start_line":373,"start_character":20,"end_line":374,"end_character":25},"in_reply_to":"5f7c97a3_83243d1c","updated":"2018-07-24 07:49:22.000000000","message":"Ack.","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"98a9fdea2ab96009ed19c3fddea8736ac5be8a55","unresolved":false,"context_lines":[{"line_number":421,"context_line":"            if not ovn_lb:"},{"line_number":422,"context_line":"                return status"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"            ls_refs \u003d ovn_lb.external_ids.get(\u0027ls_refs\u0027)"},{"line_number":425,"context_line":"            if ls_refs:"},{"line_number":426,"context_line":"                try:"},{"line_number":427,"context_line":"                    ls_refs \u003d jsonutils.loads(ls_refs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_96bc6108","line":424,"range":{"start_line":424,"start_character":12,"end_line":424,"end_character":56},"updated":"2018-07-24 09:20:01.000000000","message":"nit:\n\nls_refs \u003d ovn_lb.external_ids.get(\u0027ls_refs\u0027, {})\n\nSo that you don\u0027t need the else on L430","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"8fe785faeecaea98c7155553fc978be17abfe14d","unresolved":false,"context_lines":[{"line_number":421,"context_line":"            if not ovn_lb:"},{"line_number":422,"context_line":"                return status"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"            ls_refs \u003d ovn_lb.external_ids.get(\u0027ls_refs\u0027)"},{"line_number":425,"context_line":"            if ls_refs:"},{"line_number":426,"context_line":"                try:"},{"line_number":427,"context_line":"                    ls_refs \u003d jsonutils.loads(ls_refs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_45f59f56","line":424,"range":{"start_line":424,"start_character":12,"end_line":424,"end_character":56},"in_reply_to":"5f7c97a3_96bc6108","updated":"2018-08-07 19:49:35.000000000","message":"Done","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"98a9fdea2ab96009ed19c3fddea8736ac5be8a55","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        return status"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def lb_failover(self, loadbalancer):"},{"line_number":463,"context_line":"        # Need to support this."},{"line_number":464,"context_line":"        pass"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    def lb_update(self, loadbalancer):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_96d30164","line":463,"updated":"2018-07-24 09:20:01.000000000","message":"TODO","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"8fe785faeecaea98c7155553fc978be17abfe14d","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        return status"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def lb_failover(self, loadbalancer):"},{"line_number":463,"context_line":"        # Need to support this."},{"line_number":464,"context_line":"        pass"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    def lb_update(self, loadbalancer):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_e5e94b80","line":463,"in_reply_to":"5f7c97a3_96d30164","updated":"2018-08-07 19:49:35.000000000","message":"Done","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"98a9fdea2ab96009ed19c3fddea8736ac5be8a55","unresolved":false,"context_lines":[{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    def _check_for_supported_protocols(self, protocol):"},{"line_number":747,"context_line":"        if protocol not in self.ovn_native_protocols:"},{"line_number":748,"context_line":"            msg \u003d \u0027OVN provider does not support \u0027 + str(protocol) + \\"},{"line_number":749,"context_line":"                  \u0027 protocol\u0027"},{"line_number":750,"context_line":"            raise driver_exceptions.UnsupportedOptionError("},{"line_number":751,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":752,"context_line":"                operator_fault_string\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_76f2e5e6","line":749,"range":{"start_line":748,"start_character":12,"end_line":749,"end_character":29},"updated":"2018-07-24 09:20:01.000000000","message":"Should we i18n this message ?","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"8fe785faeecaea98c7155553fc978be17abfe14d","unresolved":false,"context_lines":[{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    def _check_for_supported_protocols(self, protocol):"},{"line_number":747,"context_line":"        if protocol not in self.ovn_native_protocols:"},{"line_number":748,"context_line":"            msg \u003d \u0027OVN provider does not support \u0027 + str(protocol) + \\"},{"line_number":749,"context_line":"                  \u0027 protocol\u0027"},{"line_number":750,"context_line":"            raise driver_exceptions.UnsupportedOptionError("},{"line_number":751,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":752,"context_line":"                operator_fault_string\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_65da1b18","line":749,"range":{"start_line":748,"start_character":12,"end_line":749,"end_character":29},"in_reply_to":"5f7c97a3_76f2e5e6","updated":"2018-08-07 19:49:35.000000000","message":"probably not required. This is how octavia uses it - https://github.com/openstack/octavia/blob/master/octavia/api/drivers/utils.py#L63\n\nLet me know if it\u0027s still required.","commit_id":"11a7703d2f17df3b323d94eee55a1b87295159b4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5f0184e8fd546fda627451d87562c6eef5cd0cc4","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"\"\"\""},{"line_number":43,"context_line":"OVN Northbound schema [1] has a table to store load balancers."},{"line_number":44,"context_line":"The table looks like"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_9be0c898","line":42,"updated":"2018-08-09 14:09:45.000000000","message":"nit: This whole comment could turn into a doc at some point :-)","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"\"\"\""},{"line_number":43,"context_line":"OVN Northbound schema [1] has a table to store load balancers."},{"line_number":44,"context_line":"The table looks like"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_c6b660fb","line":42,"in_reply_to":"3f79a3b5_9be0c898","updated":"2018-08-09 18:12:22.000000000","message":"Ack. May be in the design document.","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7ac6b592e248caa9d2da4b120ad472fb8af798f9","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        }"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _init_ovnnb_db_api(self):"},{"line_number":210,"context_line":"        if OvnProviderHelper.ovn_nbdb_api:"},{"line_number":211,"context_line":"            return"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        connection_string \u003d ovn_cfg.get_ovn_nb_connection()"},{"line_number":214,"context_line":"        helper \u003d idlutils.get_schema_helper(connection_string,"},{"line_number":215,"context_line":"                                            \u0027OVN_Northbound\u0027)"},{"line_number":216,"context_line":"        tables \u003d (\u0027Logical_Switch\u0027, \u0027Load_Balancer\u0027, \u0027Logical_Router\u0027,"},{"line_number":217,"context_line":"                  \u0027Logical_Switch_Port\u0027, \u0027Logical_Router_Port\u0027)"},{"line_number":218,"context_line":"        for table in tables:"},{"line_number":219,"context_line":"            helper.register_table(table)"},{"line_number":220,"context_line":"        ovnnb_idl \u003d idl.Idl(connection_string, helper)"},{"line_number":221,"context_line":"        conn \u003d connection.Connection(ovnnb_idl,"},{"line_number":222,"context_line":"                                     ovn_cfg.get_ovn_ovsdb_timeout())"},{"line_number":223,"context_line":"        OvnProviderHelper.ovn_nbdb_api \u003d idl_ovn.OvnNbApiIdlImpl(conn)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        priv_key_file \u003d ovn_cfg.get_ovn_nb_private_key()"},{"line_number":226,"context_line":"        cert_file \u003d ovn_cfg.get_ovn_nb_certificate()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_3df40c5b","line":223,"range":{"start_line":210,"start_character":7,"end_line":223,"end_character":70},"updated":"2018-08-09 13:37:16.000000000","message":"I am just wondering, if the above function is a common among several files, cant we keep it in some constant file and just call it ? I mean, this is a standard connection code, right?","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5f0184e8fd546fda627451d87562c6eef5cd0cc4","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        }"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _init_ovnnb_db_api(self):"},{"line_number":210,"context_line":"        if OvnProviderHelper.ovn_nbdb_api:"},{"line_number":211,"context_line":"            return"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        connection_string \u003d ovn_cfg.get_ovn_nb_connection()"},{"line_number":214,"context_line":"        helper \u003d idlutils.get_schema_helper(connection_string,"},{"line_number":215,"context_line":"                                            \u0027OVN_Northbound\u0027)"},{"line_number":216,"context_line":"        tables \u003d (\u0027Logical_Switch\u0027, \u0027Load_Balancer\u0027, \u0027Logical_Router\u0027,"},{"line_number":217,"context_line":"                  \u0027Logical_Switch_Port\u0027, \u0027Logical_Router_Port\u0027)"},{"line_number":218,"context_line":"        for table in tables:"},{"line_number":219,"context_line":"            helper.register_table(table)"},{"line_number":220,"context_line":"        ovnnb_idl \u003d idl.Idl(connection_string, helper)"},{"line_number":221,"context_line":"        conn \u003d connection.Connection(ovnnb_idl,"},{"line_number":222,"context_line":"                                     ovn_cfg.get_ovn_ovsdb_timeout())"},{"line_number":223,"context_line":"        OvnProviderHelper.ovn_nbdb_api \u003d idl_ovn.OvnNbApiIdlImpl(conn)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        priv_key_file \u003d ovn_cfg.get_ovn_nb_private_key()"},{"line_number":226,"context_line":"        cert_file \u003d ovn_cfg.get_ovn_nb_certificate()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_5b679026","line":223,"range":{"start_line":210,"start_character":7,"end_line":223,"end_character":70},"in_reply_to":"3f79a3b5_3df40c5b","updated":"2018-08-09 14:09:45.000000000","message":"That would be handy indeed, pehaps in netowrking_ovn/common/utils.py\n\nOr even in ovsdbapp","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        }"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _init_ovnnb_db_api(self):"},{"line_number":210,"context_line":"        if OvnProviderHelper.ovn_nbdb_api:"},{"line_number":211,"context_line":"            return"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        connection_string \u003d ovn_cfg.get_ovn_nb_connection()"},{"line_number":214,"context_line":"        helper \u003d idlutils.get_schema_helper(connection_string,"},{"line_number":215,"context_line":"                                            \u0027OVN_Northbound\u0027)"},{"line_number":216,"context_line":"        tables \u003d (\u0027Logical_Switch\u0027, \u0027Load_Balancer\u0027, \u0027Logical_Router\u0027,"},{"line_number":217,"context_line":"                  \u0027Logical_Switch_Port\u0027, \u0027Logical_Router_Port\u0027)"},{"line_number":218,"context_line":"        for table in tables:"},{"line_number":219,"context_line":"            helper.register_table(table)"},{"line_number":220,"context_line":"        ovnnb_idl \u003d idl.Idl(connection_string, helper)"},{"line_number":221,"context_line":"        conn \u003d connection.Connection(ovnnb_idl,"},{"line_number":222,"context_line":"                                     ovn_cfg.get_ovn_ovsdb_timeout())"},{"line_number":223,"context_line":"        OvnProviderHelper.ovn_nbdb_api \u003d idl_ovn.OvnNbApiIdlImpl(conn)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        priv_key_file \u003d ovn_cfg.get_ovn_nb_private_key()"},{"line_number":226,"context_line":"        cert_file \u003d ovn_cfg.get_ovn_nb_certificate()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_4649f0cd","line":223,"range":{"start_line":210,"start_character":7,"end_line":223,"end_character":70},"in_reply_to":"3f79a3b5_5b679026","updated":"2018-08-09 18:12:22.000000000","message":"I thought about it. Presently networking-ovn code here [1] uses it slightly differently with its own Backend class there.\n\n[1] - https://github.com/openstack/networking-ovn/blob/master/networking_ovn/ovsdb/impl_idl_ovn.py#L128\n\nRight now we have connection stuff used by 3 different places in 4 different ways\n\n1 - networking-ovn connecting to nb db and sb db in the neutron-server context\n\n2. neutron ovn metadata agent\n  a. to connect to sb db - https://github.com/openstack/networking-ovn/blob/master/networking_ovn/agent/metadata/ovsdb.py#L26\n\n  b. to connect to ovs conf db -  https://github.com/openstack/networking-ovn/blob/master/networking_ovn/agent/metadata/ovsdb.py#L56\n\n3. And now ovn octavia driver in octavia api context and I chose 2.b. \nFor this driver 1 an 2.a are not really required.","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7ac6b592e248caa9d2da4b120ad472fb8af798f9","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                if request_type \u003d\u003d REQ_TYPE_EXIT:"},{"line_number":246,"context_line":"                    break"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"                request_info \u003d request[\u0027info\u0027]"},{"line_number":249,"context_line":"                request_handler \u003d self._lb_request_func_maps.get(request_type)"},{"line_number":250,"context_line":"                if request_handler:"},{"line_number":251,"context_line":"                    status \u003d request_handler(request_info)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_002687b8","line":248,"range":{"start_line":248,"start_character":16,"end_line":248,"end_character":28},"updated":"2018-08-09 13:37:16.000000000","message":"We are defining this variable a bit ahead of its time . Also it is used just once.\nAre we unsure about a race condition here?\nIf not, maybe we can skip defining this variable here and call request[info] in Line#251?","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                if request_type \u003d\u003d REQ_TYPE_EXIT:"},{"line_number":246,"context_line":"                    break"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"                request_info \u003d request[\u0027info\u0027]"},{"line_number":249,"context_line":"                request_handler \u003d self._lb_request_func_maps.get(request_type)"},{"line_number":250,"context_line":"                if request_handler:"},{"line_number":251,"context_line":"                    status \u003d request_handler(request_info)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_c60e608c","line":248,"range":{"start_line":248,"start_character":16,"end_line":248,"end_character":28},"in_reply_to":"3f79a3b5_002687b8","updated":"2018-08-09 18:12:22.000000000","message":"Ack","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7ac6b592e248caa9d2da4b120ad472fb8af798f9","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                    status \u003d request_handler(request_info)"},{"line_number":252,"context_line":"                    self._update_status_to_octavia(status)"},{"line_number":253,"context_line":"                self.requests.task_done()"},{"line_number":254,"context_line":"            except Exception:"},{"line_number":255,"context_line":"                # If any unexpected exception happens we don\u0027t want the"},{"line_number":256,"context_line":"                # notify_loop to exit."},{"line_number":257,"context_line":"                LOG.exception(\u0027Unexpected exception in request_handler\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_9b46884f","line":254,"range":{"start_line":254,"start_character":19,"end_line":254,"end_character":28},"updated":"2018-08-09 13:37:16.000000000","message":"Just thinking if exceptions can be granular?","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                    status \u003d request_handler(request_info)"},{"line_number":252,"context_line":"                    self._update_status_to_octavia(status)"},{"line_number":253,"context_line":"                self.requests.task_done()"},{"line_number":254,"context_line":"            except Exception:"},{"line_number":255,"context_line":"                # If any unexpected exception happens we don\u0027t want the"},{"line_number":256,"context_line":"                # notify_loop to exit."},{"line_number":257,"context_line":"                LOG.exception(\u0027Unexpected exception in request_handler\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_c683c0cb","line":254,"range":{"start_line":254,"start_character":19,"end_line":254,"end_character":28},"in_reply_to":"3f79a3b5_9b46884f","updated":"2018-08-09 18:12:22.000000000","message":"This is the main loop. If some exception occurs and we don\u0027t capture it, the thread created at L185 would exit. I would prefer to have Exception here.","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5f0184e8fd546fda627451d87562c6eef5cd0cc4","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        ovn_lb \u003d self.ovn_nbdb_api.db_find("},{"line_number":275,"context_line":"            \u0027Load_Balancer\u0027, find_condition, row\u003dTrue).execute("},{"line_number":276,"context_line":"                check_error\u003dTrue)"},{"line_number":277,"context_line":"        return ovn_lb[0] if len(ovn_lb) \u003d\u003d 1 else None"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _find_ovn_lb_with_pool_key(self, pool_key):"},{"line_number":280,"context_line":"        lbs \u003d self.ovn_nbdb_api.db_list_rows(\u0027Load_Balancer\u0027).execute()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_d69375a2","line":277,"range":{"start_line":277,"start_character":28,"end_line":277,"end_character":44},"updated":"2018-08-09 14:09:45.000000000","message":"The \"name\" column in the Load_Balancer table is not indexed [0] in OVSDB so potentially we could have duplicated names there.\n\nIf we have 2 or more entries with the same name this code will return None and hide the fact that we have a conflict. I wonder if it would be better for the administrator if we logged a warning or something about it instead of just returning None. For example:\n\nif len(ovn_lb) \u003e 1:\n    LOG.warning(\"Two or more load balancer named \u0027%s\u0027 \n                \"have been found in the database\")\n\nI wonder if that would help with troubleshooting things in that case.\n\n[0] https://github.com/openvswitch/ovs/blob/8aa88fadc41fa9cbc578d51d39f5d82528406710/ovn/ovn-nb.ovsschema#L135-L148","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        ovn_lb \u003d self.ovn_nbdb_api.db_find("},{"line_number":275,"context_line":"            \u0027Load_Balancer\u0027, find_condition, row\u003dTrue).execute("},{"line_number":276,"context_line":"                check_error\u003dTrue)"},{"line_number":277,"context_line":"        return ovn_lb[0] if len(ovn_lb) \u003d\u003d 1 else None"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _find_ovn_lb_with_pool_key(self, pool_key):"},{"line_number":280,"context_line":"        lbs \u003d self.ovn_nbdb_api.db_list_rows(\u0027Load_Balancer\u0027).execute()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_41b9da2b","line":277,"range":{"start_line":277,"start_character":28,"end_line":277,"end_character":44},"in_reply_to":"3f79a3b5_d69375a2","updated":"2018-08-09 18:12:22.000000000","message":"Ack. I will put the warning.\nBut if you see we use loadbalancer_id as name. So it has to be unique unless the admin/user creates another load balancer with the same name using ovn-nbctl.","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7ac6b592e248caa9d2da4b120ad472fb8af798f9","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            for command in commands:"},{"line_number":288,"context_line":"                txn.add(command)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def _update_lb_to_ls_association(self, ovn_lb, network_id\u003dNone,"},{"line_number":291,"context_line":"                                     subnet_id\u003dNone, associate\u003dTrue):"},{"line_number":292,"context_line":"        commands \u003d []"},{"line_number":293,"context_line":"        if not network_id and not subnet_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_bbafc4e1","line":290,"range":{"start_line":290,"start_character":43,"end_line":290,"end_character":49},"updated":"2018-08-09 13:37:16.000000000","message":"the thing is, _find_ovn_lb will return None ( Line#277 ), if length is !\u003d 1.\nWe should check for ovn_lb status here in the code ( see the call from Line#384, and possible failure in Line#308)","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"e1a43bab35c1ba7f316a73b9f8774a28e6d57879","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            for command in commands:"},{"line_number":288,"context_line":"                txn.add(command)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def _update_lb_to_ls_association(self, ovn_lb, network_id\u003dNone,"},{"line_number":291,"context_line":"                                     subnet_id\u003dNone, associate\u003dTrue):"},{"line_number":292,"context_line":"        commands \u003d []"},{"line_number":293,"context_line":"        if not network_id and not subnet_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_21e13ed1","line":290,"range":{"start_line":290,"start_character":43,"end_line":290,"end_character":49},"in_reply_to":"3f79a3b5_86606803","updated":"2018-08-09 18:14:35.000000000","message":"(contd from the previous comment)\nwould have played with the db. In such cases we want the exception to be raised","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            for command in commands:"},{"line_number":288,"context_line":"                txn.add(command)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def _update_lb_to_ls_association(self, ovn_lb, network_id\u003dNone,"},{"line_number":291,"context_line":"                                     subnet_id\u003dNone, associate\u003dTrue):"},{"line_number":292,"context_line":"        commands \u003d []"},{"line_number":293,"context_line":"        if not network_id and not subnet_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_86606803","line":290,"range":{"start_line":290,"start_character":43,"end_line":290,"end_character":49},"in_reply_to":"3f79a3b5_bbafc4e1","updated":"2018-08-09 18:12:22.000000000","message":"This would not happen as the ovn_lb would have just been created before this function is called and so ovn_lb can\u0027t be None. See L379.\n\nAlso in listener create/delete, pool create/delete functions if _find_ovn_lb returns None, it\u0027s a serious issue which means someone","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5f0184e8fd546fda627451d87562c6eef5cd0cc4","unresolved":false,"context_lines":[{"line_number":742,"context_line":""},{"line_number":743,"context_line":"    def _check_for_supported_protocols(self, protocol):"},{"line_number":744,"context_line":"        if protocol not in self.ovn_native_protocols:"},{"line_number":745,"context_line":"            msg \u003d \u0027OVN provider does not support \u0027 + str(protocol) + \\"},{"line_number":746,"context_line":"                  \u0027 protocol\u0027"},{"line_number":747,"context_line":"            raise driver_exceptions.UnsupportedOptionError("},{"line_number":748,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":749,"context_line":"                operator_fault_string\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_16132d0f","line":746,"range":{"start_line":745,"start_character":18,"end_line":746,"end_character":29},"updated":"2018-08-09 14:09:45.000000000","message":"i18n ? Just like on L808","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":742,"context_line":""},{"line_number":743,"context_line":"    def _check_for_supported_protocols(self, protocol):"},{"line_number":744,"context_line":"        if protocol not in self.ovn_native_protocols:"},{"line_number":745,"context_line":"            msg \u003d \u0027OVN provider does not support \u0027 + str(protocol) + \\"},{"line_number":746,"context_line":"                  \u0027 protocol\u0027"},{"line_number":747,"context_line":"            raise driver_exceptions.UnsupportedOptionError("},{"line_number":748,"context_line":"                user_fault_string\u003dmsg,"},{"line_number":749,"context_line":"                operator_fault_string\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_2635d4f7","line":746,"range":{"start_line":745,"start_character":18,"end_line":746,"end_character":29},"in_reply_to":"3f79a3b5_16132d0f","updated":"2018-08-09 18:12:22.000000000","message":"Ack.","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5f0184e8fd546fda627451d87562c6eef5cd0cc4","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        self._check_for_supported_protocols(listener.protocol)"},{"line_number":806,"context_line":"        if not listener.default_pool_id:"},{"line_number":807,"context_line":"            raise driver_exceptions.UnsupportedOptionError("},{"line_number":808,"context_line":"                user_fault_string\u003d_(\u0027This provider does not support creating \u0027"},{"line_number":809,"context_line":"                                    \u0027a listener without a default pool\u0027),"},{"line_number":810,"context_line":"                operator_fault_string\u003d_(\u0027This provider does not support \u0027"},{"line_number":811,"context_line":"                                        \u0027creating a listener without a \u0027"},{"line_number":812,"context_line":"                                        \u0027default pool\u0027))"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        request_info \u003d {\u0027id\u0027: listener.listener_id,"},{"line_number":815,"context_line":"                        \u0027loadbalancer_id\u0027: listener.loadbalancer_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_5609a5da","line":812,"range":{"start_line":808,"start_character":36,"end_line":812,"end_character":55},"updated":"2018-08-09 14:09:45.000000000","message":"Duplicated message with i18n will show up twice to the translators. We can initialize it once in a variable and give it to the exception.\n\nerror \u003d _(\u0027This provider ...\u0027)\nraise driver_exceptions.UnsupportedOptionError(\n   user_fault_string\u003derror, operator_fault_string\u003derror)","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        self._check_for_supported_protocols(listener.protocol)"},{"line_number":806,"context_line":"        if not listener.default_pool_id:"},{"line_number":807,"context_line":"            raise driver_exceptions.UnsupportedOptionError("},{"line_number":808,"context_line":"                user_fault_string\u003d_(\u0027This provider does not support creating \u0027"},{"line_number":809,"context_line":"                                    \u0027a listener without a default pool\u0027),"},{"line_number":810,"context_line":"                operator_fault_string\u003d_(\u0027This provider does not support \u0027"},{"line_number":811,"context_line":"                                        \u0027creating a listener without a \u0027"},{"line_number":812,"context_line":"                                        \u0027default pool\u0027))"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        request_info \u003d {\u0027id\u0027: listener.listener_id,"},{"line_number":815,"context_line":"                        \u0027loadbalancer_id\u0027: listener.loadbalancer_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_c63bc0e8","line":812,"range":{"start_line":808,"start_character":36,"end_line":812,"end_character":55},"in_reply_to":"3f79a3b5_5609a5da","updated":"2018-08-09 18:12:22.000000000","message":"Ack.","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c0933c417ab5b8646e574043c7070574abb6a5d2","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        if not ovn_ls:"},{"line_number":310,"context_line":"            return commands"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        ls_refs \u003d ovn_lb.external_ids.get(\u0027ls_refs\u0027)"},{"line_number":313,"context_line":"        if ls_refs:"},{"line_number":314,"context_line":"            try:"},{"line_number":315,"context_line":"                ls_refs \u003d jsonutils.loads(ls_refs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_94958789","line":312,"range":{"start_line":312,"start_character":43,"end_line":312,"end_character":50},"updated":"2018-08-15 09:37:48.000000000","message":"All these ls_refs, lr_ref, pool_* etc... in the external_ids are scattered around the code. I think it would be a good practice if we added them as constants in a file.\n\nAlso, networking-ovn tries to use a standard for keys coming from neutron in the OVN\u0027s external_ids field which is \"neutron:\u003ckey name\u003e\" perhaps we can do the same ? See: https://github.com/openstack/networking-ovn/blob/397f1bffbccc7c1bcd32286666371d4990e2dc2f/networking_ovn/common/constants.py#L18-L39","commit_id":"4059f1e0dc8aff9f2ec2d7848fab34ac06f59275"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"3152a554d7ac8db5bc93c55ec0261cab6371e5f8","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        if not ovn_ls:"},{"line_number":310,"context_line":"            return commands"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        ls_refs \u003d ovn_lb.external_ids.get(\u0027ls_refs\u0027)"},{"line_number":313,"context_line":"        if ls_refs:"},{"line_number":314,"context_line":"            try:"},{"line_number":315,"context_line":"                ls_refs \u003d jsonutils.loads(ls_refs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_4a8c2ad6","line":312,"range":{"start_line":312,"start_character":43,"end_line":312,"end_character":50},"in_reply_to":"3f79a3b5_0f9ba417","updated":"2018-08-15 12:33:59.000000000","message":"++\n\nI think it makes sense to add the prefix only to the fields that are related to Neutron indeed.\n\nThanks for pointing it out about the ls_ref and lr_ref! I agree with you.","commit_id":"4059f1e0dc8aff9f2ec2d7848fab34ac06f59275"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"3f3045cedd581e3f807966303e9e75bce4c303ad","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        if not ovn_ls:"},{"line_number":310,"context_line":"            return commands"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        ls_refs \u003d ovn_lb.external_ids.get(\u0027ls_refs\u0027)"},{"line_number":313,"context_line":"        if ls_refs:"},{"line_number":314,"context_line":"            try:"},{"line_number":315,"context_line":"                ls_refs \u003d jsonutils.loads(ls_refs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_0f9ba417","line":312,"range":{"start_line":312,"start_character":43,"end_line":312,"end_character":50},"in_reply_to":"3f79a3b5_94958789","updated":"2018-08-15 11:18:52.000000000","message":"Agree on the ls_refs stuff.\n\n\nIf you see a sample example of key:values in external_ids column it would look like\n\n****\nexternal_ids  : {\n    lr_ref\u003d\"neutron-52b6299c-6e38-4226-a275-77370296f257\",\n    ls_refs\u003d\"{\\\"neutron-2526c68a-5a9e-484c-8e00-0716388f6563\\\": 1}\",\n    \"pool_f2ddf7a6-4047-4cc9-97be-1d1a6c47ece9\"\u003d\"\", vip\u003d\"10.0.0.10\",\n    vip_network_id\u003d\"2526c68a-5a9e-484c-8e00-0716388f6563\"}\n****\n\nfor key\u0027s like lr_ref, ls_refs, the values represents the Logical_Switch.name and Logical_Router.name. The idea is to access the logical switch\u0027s and router\u0027s from the ovn nb db easily.\n\nOther fields like vip_network_id, vip_port_id are used to access the neutron resources from the neutron db.\n\nWe could add prefix \"neutron:\" to these fields.\n\nThoughts ?","commit_id":"4059f1e0dc8aff9f2ec2d7848fab34ac06f59275"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c0933c417ab5b8646e574043c7070574abb6a5d2","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        for port in ovn_ls.ports or []:"},{"line_number":365,"context_line":"            if port.type \u003d\u003d \u0027router\u0027:"},{"line_number":366,"context_line":"                lsp_router_port \u003d port"},{"line_number":367,"context_line":"                break"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        if not lsp_router_port:"},{"line_number":370,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_99c9425a","line":367,"updated":"2018-08-15 09:37:48.000000000","message":"for port in ovn_ls.ports or []:\n   ....\nelse:\n   return\n\nThen we can get rid of the conditional at L369","commit_id":"4059f1e0dc8aff9f2ec2d7848fab34ac06f59275"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"3f3045cedd581e3f807966303e9e75bce4c303ad","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        for port in ovn_ls.ports or []:"},{"line_number":365,"context_line":"            if port.type \u003d\u003d \u0027router\u0027:"},{"line_number":366,"context_line":"                lsp_router_port \u003d port"},{"line_number":367,"context_line":"                break"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        if not lsp_router_port:"},{"line_number":370,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_efc98825","line":367,"in_reply_to":"3f79a3b5_99c9425a","updated":"2018-08-15 11:18:52.000000000","message":"Done","commit_id":"4059f1e0dc8aff9f2ec2d7848fab34ac06f59275"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c0933c417ab5b8646e574043c7070574abb6a5d2","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def _refresh_lb_data(self, ovn_lb, updated_external_ids):"},{"line_number":382,"context_line":"        ext_ids \u003d {}"},{"line_number":383,"context_line":"        if \u0027enabled\u0027 in updated_external_ids:"},{"line_number":384,"context_line":"            ext_ids[\u0027enabled\u0027] \u003d updated_external_ids[\u0027enabled\u0027]"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        commands \u003d []"},{"line_number":387,"context_line":"        if ext_ids:"},{"line_number":388,"context_line":"            commands.append("},{"line_number":389,"context_line":"                self.ovn_nbdb_api.db_set(\u0027Load_Balancer\u0027, ovn_lb.uuid,"},{"line_number":390,"context_line":"                                         (\u0027external_ids\u0027, ext_ids))"},{"line_number":391,"context_line":"            )"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        if commands:"},{"line_number":394,"context_line":"            self._execute_commands(commands)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def _get_listener_key(self, listener_id, is_enabled\u003dTrue):"},{"line_number":397,"context_line":"        listener_key \u003d \u0027listener_\u0027 + str(listener_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_997b8226","line":394,"range":{"start_line":383,"start_character":0,"end_line":394,"end_character":44},"updated":"2018-08-15 09:37:48.000000000","message":"We can greatly simplify this method and avoid most of these conditionals from being executed. The only way this method will invoke the self._execute_commands() is if \"enabled\" is set in the updated_external_ids right (L383) ?\n\nSo we can return earlier if that\u0027s false and avoid having to execute everything until the end of the method\u0027s body. E.g:\n\n def _refresh_lb_data(self, ovn_lb, updated_external_ids):\n     if \u0027enabled\u0027 not in updated_external_ids:\n         return\n\n     commands \u003d []\n     commands.append(\n         self.ovn_nbdb.db_set(\u0027Load_Balancer\u0027, ovn_lb.uuid, \n                              \u0027external_ids\u0027: {\u0027enabled\u0027: updated_external_ids[\u0027enabled\u0027]})\n     self._execute_commands(commands)","commit_id":"4059f1e0dc8aff9f2ec2d7848fab34ac06f59275"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"3f3045cedd581e3f807966303e9e75bce4c303ad","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def _refresh_lb_data(self, ovn_lb, updated_external_ids):"},{"line_number":382,"context_line":"        ext_ids \u003d {}"},{"line_number":383,"context_line":"        if \u0027enabled\u0027 in updated_external_ids:"},{"line_number":384,"context_line":"            ext_ids[\u0027enabled\u0027] \u003d updated_external_ids[\u0027enabled\u0027]"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        commands \u003d []"},{"line_number":387,"context_line":"        if ext_ids:"},{"line_number":388,"context_line":"            commands.append("},{"line_number":389,"context_line":"                self.ovn_nbdb_api.db_set(\u0027Load_Balancer\u0027, ovn_lb.uuid,"},{"line_number":390,"context_line":"                                         (\u0027external_ids\u0027, ext_ids))"},{"line_number":391,"context_line":"            )"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        if commands:"},{"line_number":394,"context_line":"            self._execute_commands(commands)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def _get_listener_key(self, listener_id, is_enabled\u003dTrue):"},{"line_number":397,"context_line":"        listener_key \u003d \u0027listener_\u0027 + str(listener_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_cf360c52","line":394,"range":{"start_line":383,"start_character":0,"end_line":394,"end_character":44},"in_reply_to":"3f79a3b5_997b8226","updated":"2018-08-15 11:18:52.000000000","message":"My bad. This function is not used anywhere at all. I think I started with this function and then later wrote : _refresh_lb_vips() function.\nSo this peace of code here will be thrown into thrash :).","commit_id":"4059f1e0dc8aff9f2ec2d7848fab34ac06f59275"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c0933c417ab5b8646e574043c7070574abb6a5d2","unresolved":false,"context_lines":[{"line_number":533,"context_line":"            ls_refs \u003d ovn_lb.external_ids.get(\u0027ls_refs\u0027, {})"},{"line_number":534,"context_line":"            if ls_refs:"},{"line_number":535,"context_line":"                try:"},{"line_number":536,"context_line":"                    ls_refs \u003d jsonutils.loads(ls_refs)"},{"line_number":537,"context_line":"                except ValueError:"},{"line_number":538,"context_line":"                    ls_refs \u003d {}"},{"line_number":539,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_140bb7d5","line":536,"range":{"start_line":536,"start_character":20,"end_line":536,"end_character":54},"updated":"2018-08-15 09:37:48.000000000","message":"Question: I\u0027ve seen similar try...excepts when parsing the JSON in this code. How often/common will that code raise an exception while parsing these JSONs ?\n\nOVSDB is JSON formatted so, I believe that, if we can\u0027t parse it we have a more serious problem and hiding the error with an \"except ValueError\" doesn\u0027t seen ideal for troubleshooting.\n\nIMHO I would simple allow it to raise an exception, but I wanna know what u think first.","commit_id":"4059f1e0dc8aff9f2ec2d7848fab34ac06f59275"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"3f3045cedd581e3f807966303e9e75bce4c303ad","unresolved":false,"context_lines":[{"line_number":533,"context_line":"            ls_refs \u003d ovn_lb.external_ids.get(\u0027ls_refs\u0027, {})"},{"line_number":534,"context_line":"            if ls_refs:"},{"line_number":535,"context_line":"                try:"},{"line_number":536,"context_line":"                    ls_refs \u003d jsonutils.loads(ls_refs)"},{"line_number":537,"context_line":"                except ValueError:"},{"line_number":538,"context_line":"                    ls_refs \u003d {}"},{"line_number":539,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_cf84ccd5","line":536,"range":{"start_line":536,"start_character":20,"end_line":536,"end_character":54},"in_reply_to":"3f79a3b5_140bb7d5","updated":"2018-08-15 11:18:52.000000000","message":"ovsdb allows only strings as a value in the external_ids key.\n\ni.e external_ids is a dict column. So ovsdb allows only strings for both key and value.\n\nWhat I am trying to do is store a dict as a string in the value. That\u0027s why while writing to the db, I use jsonutils.dumps and while reading i use jsonutils.loads.\n\nLets say a vip is 10.0.0.10 and it is part of a network with id \"NET_1\".\n\nSo the ls_refs dict will be\nls_refs \u003d {NET_1: 1}\n\nthe key is the network id and the value is the reference count.\n\nand it will be stored as external_ids:ls_refs\u003d\"\\\"{NET_1: 1}\\\"\".\n\nLater lets say a member is added to the pool belonging to the same network NET_1\n\nSo the ls_refs will be\nls_refs \u003d {NET_1:  2}\n\nand it will be stored as external_ids:ls_refs\u003d\"\\\"{NET_1: 2}\\\"\"\n\nIf another member is added to the pool belonging to NET_2. ls_refs will be \n\nls_refs \u003d {NET_1: 2, NET_2: 1}\n\nand it will be stored as external_ids:ls_refs\u003d\"\\\"{NET_1: 2, NET_2: 1}\\\"\"","commit_id":"4059f1e0dc8aff9f2ec2d7848fab34ac06f59275"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"30f4c848b69b0c9aaec0f861a119e54a0bc4e7e8","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            ovn_cfg.get_ovn_nb_connection(), \u0027OVN_Northbound\u0027,"},{"line_number":230,"context_line":"            ovn_cfg.get_ovn_ovsdb_timeout(), tables\u003dtables)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        # idl_ovn.OvnNbApiIdlImpl.ovsdb_connection is a class variable."},{"line_number":233,"context_line":"        # So set it to None so that we don\u0027t use any old connection object."},{"line_number":234,"context_line":"        # See ovsdbapp.backend.ovs_idl.Backend class for more details."},{"line_number":235,"context_line":"        idl_ovn.OvnNbApiIdlImpl.ovsdb_connection \u003d None"},{"line_number":236,"context_line":"        OvnProviderHelper.ovn_nbdb_api \u003d idl_ovn.OvnNbApiIdlImpl(conn)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        priv_key_file \u003d ovn_cfg.get_ovn_nb_private_key()"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_521683f3","line":235,"range":{"start_line":232,"start_character":0,"end_line":235,"end_character":55},"updated":"2018-08-22 09:20:02.000000000","message":"(nothing to do in this patch)\n\nThis seems to me like a design flaw from ovsdbapp","commit_id":"77b3f9208bc4c8204e04df85186df4bf1fbbe016"}],"networking_ovn/tests/functional/octavia/test_ovn_driver.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"30f4c848b69b0c9aaec0f861a119e54a0bc4e7e8","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        self._o_driver_lib.update_loadbalancer_status.reset_mock()"},{"line_number":207,"context_line":"        lb_data \u003d {}"},{"line_number":208,"context_line":"        router_id \u003d self._create_router(\"r1\")"},{"line_number":209,"context_line":"        lb_data[\u0027lr_ref\u0027] \u003d router_id"},{"line_number":210,"context_line":"        net_info \u003d self._create_net(lb_info[\u0027vip_network\u0027], lb_info[\u0027cidr\u0027],"},{"line_number":211,"context_line":"                                    router_id\u003drouter_id)"},{"line_number":212,"context_line":"        lb_data[\u0027vip_net_info\u0027] \u003d net_info"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_52a763a8","line":209,"range":{"start_line":209,"start_character":17,"end_line":209,"end_character":23},"updated":"2018-08-22 09:20:02.000000000","message":"We should use the new constants here","commit_id":"77b3f9208bc4c8204e04df85186df4bf1fbbe016"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"30f4c848b69b0c9aaec0f861a119e54a0bc4e7e8","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        lb_data[\u0027model\u0027] \u003d self._create_lb_model(vip\u003dnet_info[2],"},{"line_number":214,"context_line":"                                                 vip_network_id\u003dnet_info[0],"},{"line_number":215,"context_line":"                                                 admin_state_up\u003dadmin_state_up)"},{"line_number":216,"context_line":"        lb_data[\u0027ls_refs\u0027] \u003d {}"},{"line_number":217,"context_line":"        lb_data[\u0027listeners\u0027] \u003d []"},{"line_number":218,"context_line":"        lb_data[\u0027pools\u0027] \u003d []"},{"line_number":219,"context_line":"        self._update_ls_refs(lb_data, net_info[0])"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_32c5073d","line":216,"range":{"start_line":216,"start_character":17,"end_line":216,"end_character":24},"updated":"2018-08-22 09:20:02.000000000","message":"ditto re constants","commit_id":"77b3f9208bc4c8204e04df85186df4bf1fbbe016"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6fa76bdc933583a30a25e89e305b8771bd3b4bbf","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        lb_data[\u0027model\u0027] \u003d self._create_lb_model(vip\u003dnet_info[2],"},{"line_number":214,"context_line":"                                                 vip_network_id\u003dnet_info[0],"},{"line_number":215,"context_line":"                                                 admin_state_up\u003dadmin_state_up)"},{"line_number":216,"context_line":"        lb_data[ovn_driver.LB_EXT_IDS_LS_REFS_KEY] \u003d {}"},{"line_number":217,"context_line":"        lb_data[\u0027listeners\u0027] \u003d []"},{"line_number":218,"context_line":"        lb_data[\u0027pools\u0027] \u003d []"},{"line_number":219,"context_line":"        self._update_ls_refs(lb_data, net_info[0])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_686cf235","line":216,"updated":"2018-08-22 10:43:26.000000000","message":"Sorry I should have commented in the previous patch set that all these lr_ref and ls_refs are all over this file, I just used these two as an example.\n\nSo I guess we should update it all in case we r going to update these two ?","commit_id":"838f3a30c6f47fc3c664860b826a9c979d9a22b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6fa76bdc933583a30a25e89e305b8771bd3b4bbf","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            return []"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        vip_net_info \u003d lb_data[\u0027vip_net_info\u0027]"},{"line_number":284,"context_line":"        external_ids \u003d {\u0027ls_refs\u0027: {},"},{"line_number":285,"context_line":"                        \u0027neutron:vip\u0027: lb_data[\u0027model\u0027].vip_address,"},{"line_number":286,"context_line":"                        \u0027neutron:vip_port_id\u0027: vip_net_info[3],"},{"line_number":287,"context_line":"                        \u0027enabled\u0027: str(lb_data[\u0027model\u0027].admin_state_up)}"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_08177ea5","line":284,"range":{"start_line":284,"start_character":25,"end_line":284,"end_character":32},"updated":"2018-08-22 10:43:26.000000000","message":"here too","commit_id":"838f3a30c6f47fc3c664860b826a9c979d9a22b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6fa76bdc933583a30a25e89e305b8771bd3b4bbf","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            external_ids[pool_key] \u003d p_members"},{"line_number":304,"context_line":"            pool_info[p.pool_id] \u003d p_members"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        for net_id, ref_ct in lb_data[\u0027ls_refs\u0027].items():"},{"line_number":307,"context_line":"            external_ids[\u0027ls_refs\u0027][net_id] \u003d ref_ct"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if lb_data.get(\u0027lr_ref\u0027):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_c810a6ab","line":306,"range":{"start_line":306,"start_character":39,"end_line":306,"end_character":46},"updated":"2018-08-22 10:43:26.000000000","message":"here","commit_id":"838f3a30c6f47fc3c664860b826a9c979d9a22b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6fa76bdc933583a30a25e89e305b8771bd3b4bbf","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            pool_info[p.pool_id] \u003d p_members"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        for net_id, ref_ct in lb_data[\u0027ls_refs\u0027].items():"},{"line_number":307,"context_line":"            external_ids[\u0027ls_refs\u0027][net_id] \u003d ref_ct"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if lb_data.get(\u0027lr_ref\u0027):"},{"line_number":310,"context_line":"            external_ids[\u0027lr_ref\u0027] \u003d \u0027neutron-\u0027 + lb_data[\u0027lr_ref\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_68271214","line":307,"range":{"start_line":307,"start_character":26,"end_line":307,"end_character":33},"updated":"2018-08-22 10:43:26.000000000","message":"here","commit_id":"838f3a30c6f47fc3c664860b826a9c979d9a22b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6fa76bdc933583a30a25e89e305b8771bd3b4bbf","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        for net_id, ref_ct in lb_data[\u0027ls_refs\u0027].items():"},{"line_number":307,"context_line":"            external_ids[\u0027ls_refs\u0027][net_id] \u003d ref_ct"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if lb_data.get(\u0027lr_ref\u0027):"},{"line_number":310,"context_line":"            external_ids[\u0027lr_ref\u0027] \u003d \u0027neutron-\u0027 + lb_data[\u0027lr_ref\u0027]"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        expected_vips \u003d {}"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_481c96c0","line":309,"range":{"start_line":309,"start_character":24,"end_line":309,"end_character":30},"updated":"2018-08-22 10:43:26.000000000","message":"here","commit_id":"838f3a30c6f47fc3c664860b826a9c979d9a22b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6fa76bdc933583a30a25e89e305b8771bd3b4bbf","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            external_ids[\u0027ls_refs\u0027][net_id] \u003d ref_ct"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if lb_data.get(\u0027lr_ref\u0027):"},{"line_number":310,"context_line":"            external_ids[\u0027lr_ref\u0027] \u003d \u0027neutron-\u0027 + lb_data[\u0027lr_ref\u0027]"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        expected_vips \u003d {}"},{"line_number":313,"context_line":"        expected_protocol \u003d [\u0027tcp\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_a8820ac7","line":310,"range":{"start_line":310,"start_character":26,"end_line":310,"end_character":32},"updated":"2018-08-22 10:43:26.000000000","message":"here","commit_id":"838f3a30c6f47fc3c664860b826a9c979d9a22b0"}],"playbooks/legacy/tempest-dsvm-networking-ovn-ovs-master/run.yaml":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5f0184e8fd546fda627451d87562c6eef5cd0cc4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"          enable_plugin octavia git://git.openstack.org/openstack/octavia"},{"line_number":36,"context_line":"          enable_service ovn-octavia"},{"line_number":37,"context_line":"          enable_service o-api"},{"line_number":38,"context_line":"          enable_service o-hk"},{"line_number":39,"context_line":"          OVN_DBS_LOG_LEVEL\u003d\"dbg\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"          EOF"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3f79a3b5_76caa16d","line":38,"updated":"2018-08-09 14:09:45.000000000","message":"I don\u0027t see any new tests being run for the load balancer [0] ?\n\nMaybe we need to enable a extension or something ?\n\n[0] http://logs.openstack.org/95/577395/7/check/networking-ovn-tempest-dsvm-ovs-release/cff273b/logs/testr_results.html.gz","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"700cbd7c22bde8e97d9147814a4dc222a3e4c945","unresolved":false,"context_lines":[{"line_number":35,"context_line":"          enable_plugin octavia git://git.openstack.org/openstack/octavia"},{"line_number":36,"context_line":"          enable_service ovn-octavia"},{"line_number":37,"context_line":"          enable_service o-api"},{"line_number":38,"context_line":"          enable_service o-hk"},{"line_number":39,"context_line":"          OVN_DBS_LOG_LEVEL\u003d\"dbg\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"          EOF"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3f79a3b5_e187c60e","line":38,"in_reply_to":"3f79a3b5_76caa16d","updated":"2018-08-09 18:12:22.000000000","message":"For testing please see this patch which enables octavia tempest plugin. https://review.openstack.org/#/c/589712/\n\nI am planning to add a new job for this. But right now there are failures :)","commit_id":"c38fab6cec3e7fcbbd7c1435ab6ac66226468900"}]}
