)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bb1954a5a03a2d4a5751d7868d6138914748b26b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add IPv6 default route to OVN Logical Router"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Prior to this patch, only IPv4 subnets were accounted to install"},{"line_number":10,"context_line":"static routes on Logical Routers when setting a external gateway."},{"line_number":11,"context_line":"This is a problem if the public network has an IPv6 subnet as"},{"line_number":12,"context_line":"instances won\u0027t get a default route."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_79604ad2","line":9,"range":{"start_line":9,"start_character":57,"end_line":9,"end_character":64},"updated":"2018-12-18 06:31:30.000000000","message":"nit : installed","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bb1954a5a03a2d4a5751d7868d6138914748b26b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add IPv6 default route to OVN Logical Router"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Prior to this patch, only IPv4 subnets were accounted to install"},{"line_number":10,"context_line":"static routes on Logical Routers when setting a external gateway."},{"line_number":11,"context_line":"This is a problem if the public network has an IPv6 subnet as"},{"line_number":12,"context_line":"instances won\u0027t get a default route."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_d9695ebf","line":9,"range":{"start_line":9,"start_character":39,"end_line":9,"end_character":56},"updated":"2018-12-18 06:31:30.000000000","message":"nit:not required","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bb1954a5a03a2d4a5751d7868d6138914748b26b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add IPv6 default route to OVN Logical Router"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Prior to this patch, only IPv4 subnets were accounted to install"},{"line_number":10,"context_line":"static routes on Logical Routers when setting a external gateway."},{"line_number":11,"context_line":"This is a problem if the public network has an IPv6 subnet as"},{"line_number":12,"context_line":"instances won\u0027t get a default route."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_197036a6","line":10,"range":{"start_line":10,"start_character":47,"end_line":10,"end_character":48},"updated":"2018-12-18 06:31:30.000000000","message":"nit: an","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"9b937a853179e89fdf0f2deee8be047644c7cfe4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add IPv6 default route to OVN Logical Router"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Prior to this patch, only IPv4 subnets were accounted to install"},{"line_number":10,"context_line":"static routes on Logical Routers when setting a external gateway."},{"line_number":11,"context_line":"This is a problem if the public network has an IPv6 subnet as"},{"line_number":12,"context_line":"instances won\u0027t get a default route."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3f79a3b5_b4f79129","line":10,"range":{"start_line":10,"start_character":46,"end_line":10,"end_character":47},"updated":"2018-12-20 08:45:59.000000000","message":"nit: an","commit_id":"7b0a0cbeec736c6977414b51d1c92b0859ffdf7c"}],"networking_ovn/common/ovn_client.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"665dcd0b5bb2675ab7c1737df1a4467ab1c5c130","unresolved":false,"context_lines":[{"line_number":782,"context_line":"        for gw_info in gateways:"},{"line_number":783,"context_line":"            if gw_info.ip_version \u003d\u003d 4:"},{"line_number":784,"context_line":"                for network in networks:"},{"line_number":785,"context_line":"                    txn.add(self._nb_idl.delete_nat_rule_in_lrouter("},{"line_number":786,"context_line":"                        gw_lrouter_name, type\u003d\u0027snat\u0027, logical_ip\u003dnetwork,"},{"line_number":787,"context_line":"                        external_ip\u003dgw_info.router_ip))"},{"line_number":788,"context_line":"                prefix \u003d \u00270.0.0.0/0\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_69cc11bd","line":785,"range":{"start_line":785,"start_character":41,"end_line":785,"end_character":67},"updated":"2018-12-17 11:33:35.000000000","message":"(nothing to do) I just checked and if_exists is True by default :-)","commit_id":"2d4958eb670a938972da87327d94ae90f6a7450b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"665dcd0b5bb2675ab7c1737df1a4467ab1c5c130","unresolved":false,"context_lines":[{"line_number":829,"context_line":"        self._create_lrouter_port(router_id, port, txn\u003dtxn)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def _build_extids(gw_info):"},{"line_number":832,"context_line":"            # TODO(lucasagomes): Remove this check after OVS 2.8.2 is tagged"},{"line_number":833,"context_line":"            # (prior to that, the external_ids column didn\u0027t exist in this"},{"line_number":834,"context_line":"            # table)."},{"line_number":835,"context_line":"            columns \u003d {}"},{"line_number":836,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":837,"context_line":"                                        \u0027external_ids\u0027):"},{"line_number":838,"context_line":"                columns[\u0027external_ids\u0027] \u003d {"},{"line_number":839,"context_line":"                    ovn_const.OVN_ROUTER_IS_EXT_GW: \u0027true\u0027,"},{"line_number":840,"context_line":"                    ovn_const.OVN_SUBNET_EXT_ID_KEY: gw_info.subnet_id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e93ca190","line":837,"range":{"start_line":832,"start_character":0,"end_line":837,"end_character":56},"updated":"2018-12-17 11:33:35.000000000","message":"I wonder if it\u0027s safe already to get rid of this check. Even the stable versions now uses OVS 2.9","commit_id":"2d4958eb670a938972da87327d94ae90f6a7450b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"16cdcb2ab5608c724cdd7d5938743291bdc3cac4","unresolved":false,"context_lines":[{"line_number":829,"context_line":"        self._create_lrouter_port(router_id, port, txn\u003dtxn)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def _build_extids(gw_info):"},{"line_number":832,"context_line":"            # TODO(lucasagomes): Remove this check after OVS 2.8.2 is tagged"},{"line_number":833,"context_line":"            # (prior to that, the external_ids column didn\u0027t exist in this"},{"line_number":834,"context_line":"            # table)."},{"line_number":835,"context_line":"            columns \u003d {}"},{"line_number":836,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":837,"context_line":"                                        \u0027external_ids\u0027):"},{"line_number":838,"context_line":"                columns[\u0027external_ids\u0027] \u003d {"},{"line_number":839,"context_line":"                    ovn_const.OVN_ROUTER_IS_EXT_GW: \u0027true\u0027,"},{"line_number":840,"context_line":"                    ovn_const.OVN_SUBNET_EXT_ID_KEY: gw_info.subnet_id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e9c2612d","line":837,"range":{"start_line":832,"start_character":0,"end_line":837,"end_character":56},"in_reply_to":"3f79a3b5_896e4d63","updated":"2018-12-17 11:43:21.000000000","message":"sure :D","commit_id":"2d4958eb670a938972da87327d94ae90f6a7450b"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7bc9251e09d87cfadeb91df5de14d9a817bac4ce","unresolved":false,"context_lines":[{"line_number":829,"context_line":"        self._create_lrouter_port(router_id, port, txn\u003dtxn)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def _build_extids(gw_info):"},{"line_number":832,"context_line":"            # TODO(lucasagomes): Remove this check after OVS 2.8.2 is tagged"},{"line_number":833,"context_line":"            # (prior to that, the external_ids column didn\u0027t exist in this"},{"line_number":834,"context_line":"            # table)."},{"line_number":835,"context_line":"            columns \u003d {}"},{"line_number":836,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":837,"context_line":"                                        \u0027external_ids\u0027):"},{"line_number":838,"context_line":"                columns[\u0027external_ids\u0027] \u003d {"},{"line_number":839,"context_line":"                    ovn_const.OVN_ROUTER_IS_EXT_GW: \u0027true\u0027,"},{"line_number":840,"context_line":"                    ovn_const.OVN_SUBNET_EXT_ID_KEY: gw_info.subnet_id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_896e4d63","line":837,"range":{"start_line":832,"start_character":0,"end_line":837,"end_character":56},"in_reply_to":"3f79a3b5_e93ca190","updated":"2018-12-17 11:39:19.000000000","message":"I can do in a different patch, this is just moving existing code. sounds good?","commit_id":"2d4958eb670a938972da87327d94ae90f6a7450b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"665dcd0b5bb2675ab7c1737df1a4467ab1c5c130","unresolved":false,"context_lines":[{"line_number":858,"context_line":"                                    router):"},{"line_number":859,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":860,"context_line":"        for gw_info in gateways:"},{"line_number":861,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":862,"context_line":"                                        \u0027external_ids\u0027):"},{"line_number":863,"context_line":"                ext_ids \u003d getattr(ovn_static_route, \u0027external_ids\u0027, {})"},{"line_number":864,"context_line":"                if (ext_ids.get(ovn_const.OVN_SUBNET_EXT_ID_KEY) !\u003d"},{"line_number":865,"context_line":"                        gw_info.subnet_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a95f89dc","line":862,"range":{"start_line":861,"start_character":0,"end_line":862,"end_character":56},"updated":"2018-12-17 11:33:35.000000000","message":"we probably can get rid of this too (as in the comment at L837)","commit_id":"2d4958eb670a938972da87327d94ae90f6a7450b"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7bc9251e09d87cfadeb91df5de14d9a817bac4ce","unresolved":false,"context_lines":[{"line_number":858,"context_line":"                                    router):"},{"line_number":859,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":860,"context_line":"        for gw_info in gateways:"},{"line_number":861,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":862,"context_line":"                                        \u0027external_ids\u0027):"},{"line_number":863,"context_line":"                ext_ids \u003d getattr(ovn_static_route, \u0027external_ids\u0027, {})"},{"line_number":864,"context_line":"                if (ext_ids.get(ovn_const.OVN_SUBNET_EXT_ID_KEY) !\u003d"},{"line_number":865,"context_line":"                        gw_info.subnet_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_4986f510","line":862,"range":{"start_line":861,"start_character":0,"end_line":862,"end_character":56},"in_reply_to":"3f79a3b5_a95f89dc","updated":"2018-12-17 11:39:19.000000000","message":"ditto","commit_id":"2d4958eb670a938972da87327d94ae90f6a7450b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"665dcd0b5bb2675ab7c1737df1a4467ab1c5c130","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"                self._nb_idl.delete_nat_rule_in_lrouter)"},{"line_number":1289,"context_line":"        gw_lrouter_name \u003d utils.ovn_name(router[\u0027id\u0027])"},{"line_number":1290,"context_line":"        # Update NAT rules only for IPv4 subnets"},{"line_number":1291,"context_line":"        gateways \u003d [gw for gw in self._get_gw_info(context, router) if"},{"line_number":1292,"context_line":"                    gw.ip_version \u003d\u003d 4]"},{"line_number":1293,"context_line":"        for gw_info in gateways:"},{"line_number":1294,"context_line":"            for network in networks:"},{"line_number":1295,"context_line":"                commands.append("},{"line_number":1296,"context_line":"                    func(gw_lrouter_name, type\u003d\u0027snat\u0027, logical_ip\u003dnetwork,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_09ad5da3","line":1293,"range":{"start_line":1291,"start_character":0,"end_line":1293,"end_character":32},"updated":"2018-12-17 11:33:35.000000000","message":"we are looping twice over some elements here here, I think it\u0027s better to just do:\n\ngateways \u003d self._get_gw_info(context, router)\nfor gw_info in gateways\n    if gw_info.ip_version \u003d\u003d 6:\n        continue\n\nThat way we only loop once","commit_id":"2d4958eb670a938972da87327d94ae90f6a7450b"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7bc9251e09d87cfadeb91df5de14d9a817bac4ce","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"                self._nb_idl.delete_nat_rule_in_lrouter)"},{"line_number":1289,"context_line":"        gw_lrouter_name \u003d utils.ovn_name(router[\u0027id\u0027])"},{"line_number":1290,"context_line":"        # Update NAT rules only for IPv4 subnets"},{"line_number":1291,"context_line":"        gateways \u003d [gw for gw in self._get_gw_info(context, router) if"},{"line_number":1292,"context_line":"                    gw.ip_version \u003d\u003d 4]"},{"line_number":1293,"context_line":"        for gw_info in gateways:"},{"line_number":1294,"context_line":"            for network in networks:"},{"line_number":1295,"context_line":"                commands.append("},{"line_number":1296,"context_line":"                    func(gw_lrouter_name, type\u003d\u0027snat\u0027, logical_ip\u003dnetwork,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_c999a56c","line":1293,"range":{"start_line":1291,"start_character":0,"end_line":1293,"end_character":32},"in_reply_to":"3f79a3b5_09ad5da3","updated":"2018-12-17 11:39:19.000000000","message":"yeah, actually we just expect one element but yeah let\u0027s do that","commit_id":"2d4958eb670a938972da87327d94ae90f6a7450b"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"ec5cc22e64b6b47b28beb786b0333f2dda8fe170","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"                self._nb_idl.delete_nat_rule_in_lrouter)"},{"line_number":1289,"context_line":"        gw_lrouter_name \u003d utils.ovn_name(router[\u0027id\u0027])"},{"line_number":1290,"context_line":"        # Update NAT rules only for IPv4 subnets"},{"line_number":1291,"context_line":"        gateways \u003d [gw for gw in self._get_gw_info(context, router) if"},{"line_number":1292,"context_line":"                    gw.ip_version \u003d\u003d 4]"},{"line_number":1293,"context_line":"        commands \u003d []"},{"line_number":1294,"context_line":"        for gw_info in gateways:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_297db9e4","line":1291,"updated":"2018-12-17 11:49:21.000000000","message":"need proper indentation here ?","commit_id":"d9f4ae9f8d81bd361be7fb7a037e5c00f1c5b52e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3270132d7b9591641a0b575fc984efda367146fb","unresolved":false,"context_lines":[{"line_number":760,"context_line":"                LOG.error(\u0027Unable to disassociate floating ip in gateway \u0027"},{"line_number":761,"context_line":"                          \u0027router. Error: %s\u0027, e)"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"    def _get_gw_info(self, context, router):"},{"line_number":764,"context_line":"        gateways_info \u003d []"},{"line_number":765,"context_line":"        ext_gw_info \u003d router.get(l3.EXTERNAL_GW_INFO, {})"},{"line_number":766,"context_line":"        network_id \u003d ext_gw_info.get(\u0027network_id\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_ec634417","line":763,"updated":"2018-12-17 20:47:09.000000000","message":"nit: there\u0027s one caller below and another in the review that filters the results by ip_version afterwards, so this could take an optional argument to do it.  Follow-on material not required in this change.","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"925fb0cecac3453b130569d3a37b47b77b6faf5c","unresolved":false,"context_lines":[{"line_number":760,"context_line":"                LOG.error(\u0027Unable to disassociate floating ip in gateway \u0027"},{"line_number":761,"context_line":"                          \u0027router. Error: %s\u0027, e)"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"    def _get_gw_info(self, context, router):"},{"line_number":764,"context_line":"        gateways_info \u003d []"},{"line_number":765,"context_line":"        ext_gw_info \u003d router.get(l3.EXTERNAL_GW_INFO, {})"},{"line_number":766,"context_line":"        network_id \u003d ext_gw_info.get(\u0027network_id\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_92d89b4f","line":763,"in_reply_to":"3f79a3b5_ec634417","updated":"2018-12-18 09:12:20.000000000","message":"I started writing it like this:\n\n    def _get_gw_info(self, context, router, ip_version\u003dNone):\n        gateways_info \u003d []\n        ext_gw_info \u003d router.get(l3.EXTERNAL_GW_INFO, {})\n        network_id \u003d ext_gw_info.get(\u0027network_id\u0027, \u0027\u0027)\n        ext_fixed_ips \u003d [fixed_ip for fixed_ip in\n                         ext_gw_info.get(\u0027external_fixed_ips\u0027, []) if\n                         not ip_version or\n                         netaddr.IPNetwork(fixed_ip).version \u003d\u003d ip_version]\n        for ext_fixed_ip in ext_fixed_ips:\n\n\nThen I realized that this is not really useful as yeah, we\u0027re filtering the result by ip_version but we need both IPv4 (for static routes and SNAT) and IPv6 (for static routes only). I can\u0027t see any case where we just need one type only. Let me know if I\u0027m missing something and I\u0027ll include the code above.\n\nThanks!","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3270132d7b9591641a0b575fc984efda367146fb","unresolved":false,"context_lines":[{"line_number":769,"context_line":"            subnet \u003d self._plugin.get_subnet(context, subnet_id)"},{"line_number":770,"context_line":"            gateways_info.append(GW_INFO("},{"line_number":771,"context_line":"                network_id, subnet_id, ext_fixed_ip[\u0027ip_address\u0027],"},{"line_number":772,"context_line":"                subnet.get(\u0027gateway_ip\u0027), subnet[\u0027ip_version\u0027]))"},{"line_number":773,"context_line":"        return gateways_info"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"    def _delete_router_ext_gw(self, context, router, networks, txn):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_32f9921a","line":772,"updated":"2018-12-17 20:47:09.000000000","message":"nit: could add a \u0027prefix\u0027 here as well instead of having callers build it themselves.  Again, future work.","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"925fb0cecac3453b130569d3a37b47b77b6faf5c","unresolved":false,"context_lines":[{"line_number":769,"context_line":"            subnet \u003d self._plugin.get_subnet(context, subnet_id)"},{"line_number":770,"context_line":"            gateways_info.append(GW_INFO("},{"line_number":771,"context_line":"                network_id, subnet_id, ext_fixed_ip[\u0027ip_address\u0027],"},{"line_number":772,"context_line":"                subnet.get(\u0027gateway_ip\u0027), subnet[\u0027ip_version\u0027]))"},{"line_number":773,"context_line":"        return gateways_info"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"    def _delete_router_ext_gw(self, context, router, networks, txn):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6fbcfc07","line":772,"in_reply_to":"3f79a3b5_32f9921a","updated":"2018-12-18 09:12:20.000000000","message":"Good one! Will do in the next PS :)","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e7a8c5b08241200fc2d89038d5ae220bc23e2dc7","unresolved":false,"context_lines":[{"line_number":856,"context_line":""},{"line_number":857,"context_line":"    def _check_external_ips_changed(self, context, ovn_snats, ovn_static_route,"},{"line_number":858,"context_line":"                                    router):"},{"line_number":859,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":860,"context_line":"        for gw_info in gateways:"},{"line_number":861,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":862,"context_line":"                                           \u0027external_ids\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_f2ca3a16","line":859,"updated":"2018-12-17 22:24:41.000000000","message":"bonus pointless attempt at reducing this function to a single line:\n\n return any((getattr(ovn_static_route, \u0027external_ids\u0027, {}).get(ovn_const.OVN_SUBNET_EXT_ID_KEY) !\u003d gw_info.subnet_id) or any(snat.external_ip !\u003d gw_info.router_ip for snat in ovn_snats) for gw_info in self._get_gw_info(context, router) if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027, \u0027external_ids\u0027) for snat in ovn_snats if gw_info.ip_version !\u003d 6)","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"5ae7ca63762a08bf5cbd467583a089f4262d38e7","unresolved":false,"context_lines":[{"line_number":856,"context_line":""},{"line_number":857,"context_line":"    def _check_external_ips_changed(self, context, ovn_snats, ovn_static_route,"},{"line_number":858,"context_line":"                                    router):"},{"line_number":859,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":860,"context_line":"        for gw_info in gateways:"},{"line_number":861,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":862,"context_line":"                                           \u0027external_ids\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d892adac","line":859,"in_reply_to":"3f79a3b5_b2acb7a8","updated":"2018-12-18 14:50:17.000000000","message":"\u003e I actually like it! I think it\u0027s less readable though but if others\n \u003e want too I can change it :)))\n\nYeah, no attempt was made at readability. It actually turned out surprisingly readable by using temporary variables and linebreaks (and fixing a bug).\n\n subnet_id \u003d getattr(ovn_static_route, \u0027external_ids\u0027, {}).get(\n     ovn_const.OVN_SUBNET_EXT_ID_KEY)\n gateways \u003d self._get_gw_info(context, router)\n return any(\n     subnet_id !\u003d gw.subnet_id or snat.external_ip !\u003d gw.router_ip\n     for gw in gateways if self._nb_idl.is_col_present(\n         \u0027Logical_Router_Static_Route\u0027, \u0027external_ids\u0027)\n     for snat in ovn_snats if gw.ip_version !\u003d 6)\n\nBut like I said, it was just an exercise to see if it could be done. :)","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"5ae7ca63762a08bf5cbd467583a089f4262d38e7","unresolved":false,"context_lines":[{"line_number":856,"context_line":""},{"line_number":857,"context_line":"    def _check_external_ips_changed(self, context, ovn_snats, ovn_static_route,"},{"line_number":858,"context_line":"                                    router):"},{"line_number":859,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":860,"context_line":"        for gw_info in gateways:"},{"line_number":861,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":862,"context_line":"                                           \u0027external_ids\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_cd92f1ac","line":859,"in_reply_to":"3f79a3b5_d9771e8d","updated":"2018-12-18 14:50:17.000000000","message":"\u003e wont this be \u003e 80 characters?\n\nOnly by 290 characters or so. :p This wasn\u0027t so much a serious suggestion as me noticing it should theoretically be possible and having a little fun.","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"925fb0cecac3453b130569d3a37b47b77b6faf5c","unresolved":false,"context_lines":[{"line_number":856,"context_line":""},{"line_number":857,"context_line":"    def _check_external_ips_changed(self, context, ovn_snats, ovn_static_route,"},{"line_number":858,"context_line":"                                    router):"},{"line_number":859,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":860,"context_line":"        for gw_info in gateways:"},{"line_number":861,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":862,"context_line":"                                           \u0027external_ids\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b2acb7a8","line":859,"in_reply_to":"3f79a3b5_f2ca3a16","updated":"2018-12-18 09:12:20.000000000","message":"I actually like it! I think it\u0027s less readable though but if others want too I can change it :)))","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bb1954a5a03a2d4a5751d7868d6138914748b26b","unresolved":false,"context_lines":[{"line_number":856,"context_line":""},{"line_number":857,"context_line":"    def _check_external_ips_changed(self, context, ovn_snats, ovn_static_route,"},{"line_number":858,"context_line":"                                    router):"},{"line_number":859,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":860,"context_line":"        for gw_info in gateways:"},{"line_number":861,"context_line":"            if self._nb_idl.is_col_present(\u0027Logical_Router_Static_Route\u0027,"},{"line_number":862,"context_line":"                                           \u0027external_ids\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d9771e8d","line":859,"in_reply_to":"3f79a3b5_f2ca3a16","updated":"2018-12-18 06:31:30.000000000","message":"wont this be \u003e 80 characters?","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"e7a8c5b08241200fc2d89038d5ae220bc23e2dc7","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"                self._nb_idl.delete_nat_rule_in_lrouter)"},{"line_number":1289,"context_line":"        gw_lrouter_name \u003d utils.ovn_name(router[\u0027id\u0027])"},{"line_number":1290,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":1291,"context_line":"        commands \u003d []"},{"line_number":1292,"context_line":"        for gw_info in gateways:"},{"line_number":1293,"context_line":"            # Update NAT rules only for IPv4 subnets"},{"line_number":1294,"context_line":"            if gw_info.ip_version \u003d\u003d 6:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_31c993ad","line":1291,"updated":"2018-12-17 22:24:41.000000000","message":"nit: Not sure if this is easier to read or not, but most of the time when i see result \u003d []; for x in y:result.append(...) I try to do a list comprehension instead. Something like:\n\n commands \u003d [func(gw_lrouter_name, type\u003d\u0027snat\u0027, logical_ip\u003dnetwork,\n                  external_ip\u003dgw_info.router_ip)\n             for gw_info in gateways if gw_info.ip_version !\u003d 6\n             for network in networks]\n\nbut maybe it is less readable and certainly not important. I just bring it up in case. :D","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"96d39bc0b43d7a337811884579a9e4442d407435","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"                self._nb_idl.delete_nat_rule_in_lrouter)"},{"line_number":1289,"context_line":"        gw_lrouter_name \u003d utils.ovn_name(router[\u0027id\u0027])"},{"line_number":1290,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":1291,"context_line":"        commands \u003d []"},{"line_number":1292,"context_line":"        for gw_info in gateways:"},{"line_number":1293,"context_line":"            # Update NAT rules only for IPv4 subnets"},{"line_number":1294,"context_line":"            if gw_info.ip_version \u003d\u003d 6:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_190ef68d","line":1291,"in_reply_to":"3f79a3b5_31c993ad","updated":"2018-12-18 06:49:06.000000000","message":"\u003e nit: Not sure if this is easier to read or not, but most of the\n \u003e time when i see result \u003d []; for x in y:result.append(...) I try to\n \u003e do a list comprehension instead. Something like:\n \u003e \n \u003e commands \u003d [func(gw_lrouter_name, type\u003d\u0027snat\u0027, logical_ip\u003dnetwork,\n \u003e external_ip\u003dgw_info.router_ip)\n \u003e for gw_info in gateways if gw_info.ip_version !\u003d 6\n \u003e for network in networks]\n \u003e \n\n+1. This seems more pythonic to me :)\n\n\n \u003e but maybe it is less readable and certainly not important. I just\n \u003e bring it up in case. :D","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"925fb0cecac3453b130569d3a37b47b77b6faf5c","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"                self._nb_idl.delete_nat_rule_in_lrouter)"},{"line_number":1289,"context_line":"        gw_lrouter_name \u003d utils.ovn_name(router[\u0027id\u0027])"},{"line_number":1290,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":1291,"context_line":"        commands \u003d []"},{"line_number":1292,"context_line":"        for gw_info in gateways:"},{"line_number":1293,"context_line":"            # Update NAT rules only for IPv4 subnets"},{"line_number":1294,"context_line":"            if gw_info.ip_version \u003d\u003d 6:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_0fcc68bb","line":1291,"in_reply_to":"3f79a3b5_31c993ad","updated":"2018-12-18 09:12:20.000000000","message":"\u003e nit: Not sure if this is easier to read or not, but most of the\n \u003e time when i see result \u003d []; for x in y:result.append(...) I try to\n \u003e do a list comprehension instead. Something like:\n \u003e \n \u003e commands \u003d [func(gw_lrouter_name, type\u003d\u0027snat\u0027, logical_ip\u003dnetwork,\n \u003e external_ip\u003dgw_info.router_ip)\n \u003e for gw_info in gateways if gw_info.ip_version !\u003d 6\n \u003e for network in networks]\n \u003e \n \u003e but maybe it is less readable and certainly not important. I just\n \u003e bring it up in case. :D\n\nOh yeah!!!! #respect :)","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bb1954a5a03a2d4a5751d7868d6138914748b26b","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"                self._nb_idl.delete_nat_rule_in_lrouter)"},{"line_number":1289,"context_line":"        gw_lrouter_name \u003d utils.ovn_name(router[\u0027id\u0027])"},{"line_number":1290,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":1291,"context_line":"        commands \u003d []"},{"line_number":1292,"context_line":"        for gw_info in gateways:"},{"line_number":1293,"context_line":"            # Update NAT rules only for IPv4 subnets"},{"line_number":1294,"context_line":"            if gw_info.ip_version \u003d\u003d 6:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d9c5de90","line":1291,"in_reply_to":"3f79a3b5_31c993ad","updated":"2018-12-18 06:31:30.000000000","message":"Will work in Line#781-790 . I was also trying to write something like this. Its not very simple to understand, but definitely better","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3bd361bee5f1c30f99c04c8122521e6b5128ed80","unresolved":false,"context_lines":[{"line_number":1282,"context_line":"        # Update NAT rules only for IPv4 subnets"},{"line_number":1283,"context_line":"        commands \u003d [func(gw_lrouter_name, type\u003d\u0027snat\u0027, logical_ip\u003dnetwork,"},{"line_number":1284,"context_line":"                         external_ip\u003dgw_info.router_ip) for gw_info in gateways"},{"line_number":1285,"context_line":"                    if gw_info.ip_version !\u003d 6 for network in networks]"},{"line_number":1286,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1287,"context_line":""},{"line_number":1288,"context_line":"    def _create_provnet_port(self, txn, network, physnet, tag):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_b807b1c7","line":1285,"range":{"start_line":1285,"start_character":45,"end_line":1285,"end_character":46},"updated":"2018-12-18 15:21:27.000000000","message":"s/const.IP_VERSION_6","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5c939c98e3111ef5e58b791a76706f58eef0858e","unresolved":false,"context_lines":[{"line_number":1282,"context_line":"        # Update NAT rules only for IPv4 subnets"},{"line_number":1283,"context_line":"        commands \u003d [func(gw_lrouter_name, type\u003d\u0027snat\u0027, logical_ip\u003dnetwork,"},{"line_number":1284,"context_line":"                         external_ip\u003dgw_info.router_ip) for gw_info in gateways"},{"line_number":1285,"context_line":"                    if gw_info.ip_version !\u003d 6 for network in networks]"},{"line_number":1286,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1287,"context_line":""},{"line_number":1288,"context_line":"    def _create_provnet_port(self, txn, network, physnet, tag):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_d8438d6d","line":1285,"range":{"start_line":1285,"start_character":45,"end_line":1285,"end_character":46},"in_reply_to":"3f79a3b5_b807b1c7","updated":"2018-12-18 15:39:18.000000000","message":"Done","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"ee9c3766178a467ad0c67658e0eacc42cfb39467","unresolved":false,"context_lines":[{"line_number":855,"context_line":""},{"line_number":856,"context_line":"    def _check_external_ips_changed(self, context, ovn_snats, ovn_static_route,"},{"line_number":857,"context_line":"                                    router):"},{"line_number":858,"context_line":"        subnet_id \u003d getattr(ovn_static_route, \u0027external_ids\u0027, {}).get("},{"line_number":859,"context_line":"            ovn_const.OVN_SUBNET_EXT_ID_KEY)"},{"line_number":860,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":861,"context_line":"        return any("},{"line_number":862,"context_line":"            subnet_id !\u003d gw.subnet_id or snat.external_ip !\u003d gw.router_ip"},{"line_number":863,"context_line":"            for gw in gateways if self._nb_idl.is_col_present("},{"line_number":864,"context_line":"                \u0027Logical_Router_Static_Route\u0027, \u0027external_ids\u0027)"},{"line_number":865,"context_line":"            for snat in ovn_snats if gw.ip_version !\u003d const.IP_VERSION_6)"},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"    def update_router_routes(self, context, router_id, add, remove,"},{"line_number":868,"context_line":"                             txn\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_53fc290a","line":865,"range":{"start_line":858,"start_character":0,"end_line":865,"end_character":73},"updated":"2018-12-19 11:56:27.000000000","message":"Terry I think this is wrong as if for example ovn_snats is empty we would still want to return True if the first condition holds (ie. that subnet_id !\u003d gw.subnet_id) but this won\u0027t happen with current code. Look:\n\n\u003e\u003e\u003e import collections\n\u003e\u003e\u003e GW_INFO \u003d collections.namedtuple(\u0027GatewayInfo\u0027, [\u0027network_id\u0027, \u0027subnet_id\u0027,\n...                                                  \u0027router_ip\u0027, \u0027gateway_ip\u0027,\n...                                                  \u0027ip_version\u0027, \u0027ip_prefix\u0027])\n\u003e\u003e\u003e\n\u003e\u003e\u003e gws \u003d [GW_INFO(None, \u00271\u0027, None, None, 4, None)]\n\u003e\u003e\u003e subnet_id \u003d \u00272\u0027\n\u003e\u003e\u003e ovn_snats \u003d [1, 2]\n\u003e\u003e\u003e print(any(subnet_id !\u003d gw.subnet_id or snat !\u003d gw.router_ip for gw in gws for snat in ovn_snats))\nTrue\n\u003e\u003e\u003e ovn_snats \u003d []\n\u003e\u003e\u003e print(any(subnet_id !\u003d gw.subnet_id or snat !\u003d gw.router_ip for gw in gws for snat in ovn_snats))\nFalse\n\nI\u0027ll get back to my previous code to be on the safe side :)","commit_id":"478687f661ed4036d9d96c60362d507249129403"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"295de457c11317e4b0516db16fe5c10ac32b196d","unresolved":false,"context_lines":[{"line_number":855,"context_line":""},{"line_number":856,"context_line":"    def _check_external_ips_changed(self, context, ovn_snats, ovn_static_route,"},{"line_number":857,"context_line":"                                    router):"},{"line_number":858,"context_line":"        subnet_id \u003d getattr(ovn_static_route, \u0027external_ids\u0027, {}).get("},{"line_number":859,"context_line":"            ovn_const.OVN_SUBNET_EXT_ID_KEY)"},{"line_number":860,"context_line":"        gateways \u003d self._get_gw_info(context, router)"},{"line_number":861,"context_line":"        return any("},{"line_number":862,"context_line":"            subnet_id !\u003d gw.subnet_id or snat.external_ip !\u003d gw.router_ip"},{"line_number":863,"context_line":"            for gw in gateways if self._nb_idl.is_col_present("},{"line_number":864,"context_line":"                \u0027Logical_Router_Static_Route\u0027, \u0027external_ids\u0027)"},{"line_number":865,"context_line":"            for snat in ovn_snats if gw.ip_version !\u003d const.IP_VERSION_6)"},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"    def update_router_routes(self, context, router_id, add, remove,"},{"line_number":868,"context_line":"                             txn\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_6c6b8654","line":865,"range":{"start_line":858,"start_character":0,"end_line":865,"end_character":73},"in_reply_to":"3f79a3b5_53fc290a","updated":"2018-12-19 14:52:32.000000000","message":"Yeah, sounds like a plan. I think it would be:\n\n any(subnet_id !\u003d gw.subnet_id or any(snat !\u003d gw.router_ip for snat in ovn_snats) for gw in gws))\n\nBut the fact that I don\u0027t know that means that the original code is easier to reason about. :p","commit_id":"478687f661ed4036d9d96c60362d507249129403"}],"networking_ovn/ovn_db_sync.py":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bb1954a5a03a2d4a5751d7868d6138914748b26b","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                continue"},{"line_number":518,"context_line":"            gateways \u003d self._ovn_client._get_gw_info(ctx, router)"},{"line_number":519,"context_line":"            for gw_info in gateways:"},{"line_number":520,"context_line":"                prefix \u003d \u00270.0.0.0/0\u0027 if gw_info.ip_version \u003d\u003d 4 else \u0027::/0\u0027"},{"line_number":521,"context_line":"                if gw_info.gateway_ip:"},{"line_number":522,"context_line":"                    db_extends[router[\u0027id\u0027]][\u0027routes\u0027].append("},{"line_number":523,"context_line":"                        {\u0027destination\u0027: prefix,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d9539edc","line":520,"updated":"2018-12-18 06:31:30.000000000","message":"You are checking for IPv4 here and IPv6 in Line#525. Why not use an if-else and merge the 2 conditions in one ?","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5c939c98e3111ef5e58b791a76706f58eef0858e","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                continue"},{"line_number":518,"context_line":"            gateways \u003d self._ovn_client._get_gw_info(ctx, router)"},{"line_number":519,"context_line":"            for gw_info in gateways:"},{"line_number":520,"context_line":"                prefix \u003d \u00270.0.0.0/0\u0027 if gw_info.ip_version \u003d\u003d 4 else \u0027::/0\u0027"},{"line_number":521,"context_line":"                if gw_info.gateway_ip:"},{"line_number":522,"context_line":"                    db_extends[router[\u0027id\u0027]][\u0027routes\u0027].append("},{"line_number":523,"context_line":"                        {\u0027destination\u0027: prefix,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_f221cf0a","line":520,"in_reply_to":"3f79a3b5_d9539edc","updated":"2018-12-18 15:39:18.000000000","message":"I followed Brian\u0027s advice and fill the prefix in _get_gw_info instead","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3bd361bee5f1c30f99c04c8122521e6b5128ed80","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                continue"},{"line_number":518,"context_line":"            gateways \u003d self._ovn_client._get_gw_info(ctx, router)"},{"line_number":519,"context_line":"            for gw_info in gateways:"},{"line_number":520,"context_line":"                prefix \u003d \u00270.0.0.0/0\u0027 if gw_info.ip_version \u003d\u003d 4 else \u0027::/0\u0027"},{"line_number":521,"context_line":"                if gw_info.gateway_ip:"},{"line_number":522,"context_line":"                    db_extends[router[\u0027id\u0027]][\u0027routes\u0027].append("},{"line_number":523,"context_line":"                        {\u0027destination\u0027: prefix,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_58de9d3d","line":520,"updated":"2018-12-18 15:21:27.000000000","message":"constants.IPv4_ANY, IPv6_ANY, IP_VERSION_4, etc","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5c939c98e3111ef5e58b791a76706f58eef0858e","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                continue"},{"line_number":518,"context_line":"            gateways \u003d self._ovn_client._get_gw_info(ctx, router)"},{"line_number":519,"context_line":"            for gw_info in gateways:"},{"line_number":520,"context_line":"                prefix \u003d \u00270.0.0.0/0\u0027 if gw_info.ip_version \u003d\u003d 4 else \u0027::/0\u0027"},{"line_number":521,"context_line":"                if gw_info.gateway_ip:"},{"line_number":522,"context_line":"                    db_extends[router[\u0027id\u0027]][\u0027routes\u0027].append("},{"line_number":523,"context_line":"                        {\u0027destination\u0027: prefix,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_787d99c1","line":520,"in_reply_to":"3f79a3b5_58de9d3d","updated":"2018-12-18 15:39:18.000000000","message":"Done","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3bd361bee5f1c30f99c04c8122521e6b5128ed80","unresolved":false,"context_lines":[{"line_number":522,"context_line":"                    db_extends[router[\u0027id\u0027]][\u0027routes\u0027].append("},{"line_number":523,"context_line":"                        {\u0027destination\u0027: prefix,"},{"line_number":524,"context_line":"                         \u0027nexthop\u0027: gw_info.gateway_ip})"},{"line_number":525,"context_line":"                if gw_info.ip_version \u003d\u003d 6:"},{"line_number":526,"context_line":"                    continue"},{"line_number":527,"context_line":"                if gw_info.router_ip and utils.is_snat_enabled(router):"},{"line_number":528,"context_line":"                    networks \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_18e4a50b","line":525,"range":{"start_line":525,"start_character":41,"end_line":525,"end_character":42},"updated":"2018-12-18 15:21:27.000000000","message":"IP_VERSION_6","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5c939c98e3111ef5e58b791a76706f58eef0858e","unresolved":false,"context_lines":[{"line_number":522,"context_line":"                    db_extends[router[\u0027id\u0027]][\u0027routes\u0027].append("},{"line_number":523,"context_line":"                        {\u0027destination\u0027: prefix,"},{"line_number":524,"context_line":"                         \u0027nexthop\u0027: gw_info.gateway_ip})"},{"line_number":525,"context_line":"                if gw_info.ip_version \u003d\u003d 6:"},{"line_number":526,"context_line":"                    continue"},{"line_number":527,"context_line":"                if gw_info.router_ip and utils.is_snat_enabled(router):"},{"line_number":528,"context_line":"                    networks \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_5880dd9d","line":525,"range":{"start_line":525,"start_character":41,"end_line":525,"end_character":42},"in_reply_to":"3f79a3b5_18e4a50b","updated":"2018-12-18 15:39:18.000000000","message":"Done","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"}],"networking_ovn/tests/functional/test_ovn_db_sync.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3bd361bee5f1c30f99c04c8122521e6b5128ed80","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        res \u003d self._create_subnet(self.fmt, e1[\u0027network\u0027][\u0027id\u0027],"},{"line_number":355,"context_line":"                                  \u00272001:db8::/64\u0027,"},{"line_number":356,"context_line":"                                  gateway_ip\u003d\u0027fd05:59e4:ef16::1\u0027,"},{"line_number":357,"context_line":"                                  ip_version\u003d6,"},{"line_number":358,"context_line":"                                  enable_dhcp\u003dFalse)"},{"line_number":359,"context_line":"        e1_s2 \u003d self.deserialize(self.fmt, res)"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_b8aed19d","line":357,"range":{"start_line":357,"start_character":45,"end_line":357,"end_character":46},"updated":"2018-12-18 15:21:27.000000000","message":"I\u0027m just nitpicking now :)","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5c939c98e3111ef5e58b791a76706f58eef0858e","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        res \u003d self._create_subnet(self.fmt, e1[\u0027network\u0027][\u0027id\u0027],"},{"line_number":355,"context_line":"                                  \u00272001:db8::/64\u0027,"},{"line_number":356,"context_line":"                                  gateway_ip\u003d\u0027fd05:59e4:ef16::1\u0027,"},{"line_number":357,"context_line":"                                  ip_version\u003d6,"},{"line_number":358,"context_line":"                                  enable_dhcp\u003dFalse)"},{"line_number":359,"context_line":"        e1_s2 \u003d self.deserialize(self.fmt, res)"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_d8e70dae","line":357,"range":{"start_line":357,"start_character":45,"end_line":357,"end_character":46},"in_reply_to":"3f79a3b5_b8aed19d","updated":"2018-12-18 15:39:18.000000000","message":"Done","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3bd361bee5f1c30f99c04c8122521e6b5128ed80","unresolved":false,"context_lines":[{"line_number":1140,"context_line":"                    if gw_info.gateway_ip:"},{"line_number":1141,"context_line":"                        db_routes[db_router[\u0027id\u0027]].append(gw_info.ip_prefix +"},{"line_number":1142,"context_line":"                                                          gw_info.gateway_ip)"},{"line_number":1143,"context_line":"                    if (gw_info.ip_version \u003d\u003d 4 and"},{"line_number":1144,"context_line":"                            gw_info.router_ip and"},{"line_number":1145,"context_line":"                            utils.is_snat_enabled(db_router)):"},{"line_number":1146,"context_line":"                        networks \u003d self.l3_plugin._ovn_client.\\"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_78c4b961","line":1143,"range":{"start_line":1143,"start_character":46,"end_line":1143,"end_character":47},"updated":"2018-12-18 15:21:27.000000000","message":"pick","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5c939c98e3111ef5e58b791a76706f58eef0858e","unresolved":false,"context_lines":[{"line_number":1140,"context_line":"                    if gw_info.gateway_ip:"},{"line_number":1141,"context_line":"                        db_routes[db_router[\u0027id\u0027]].append(gw_info.ip_prefix +"},{"line_number":1142,"context_line":"                                                          gw_info.gateway_ip)"},{"line_number":1143,"context_line":"                    if (gw_info.ip_version \u003d\u003d 4 and"},{"line_number":1144,"context_line":"                            gw_info.router_ip and"},{"line_number":1145,"context_line":"                            utils.is_snat_enabled(db_router)):"},{"line_number":1146,"context_line":"                        networks \u003d self.l3_plugin._ovn_client.\\"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_98dd15dc","line":1143,"range":{"start_line":1143,"start_character":46,"end_line":1143,"end_character":47},"in_reply_to":"3f79a3b5_78c4b961","updated":"2018-12-18 15:39:18.000000000","message":"Done","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"}],"networking_ovn/tests/unit/test_ovn_db_sync.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3bd361bee5f1c30f99c04c8122521e6b5128ed80","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                                      gateway_ip\u003d\u0027100.0.0.1\u0027,"},{"line_number":352,"context_line":"                                      network_id\u003d\u0027\u0027, subnet_id\u003d\u0027\u0027,"},{"line_number":353,"context_line":"                                      ip_version\u003d4,"},{"line_number":354,"context_line":"                                      ip_prefix\u003d\u00270.0.0.0/0\u0027)]"},{"line_number":355,"context_line":"        }.get(router[\u0027id\u0027], [])"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def _fake_get_v4_network_of_all_router_ports(self, ctx, router_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_f827691c","line":354,"updated":"2018-12-18 15:21:27.000000000","message":"Same here","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5c939c98e3111ef5e58b791a76706f58eef0858e","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                                      gateway_ip\u003d\u0027100.0.0.1\u0027,"},{"line_number":352,"context_line":"                                      network_id\u003d\u0027\u0027, subnet_id\u003d\u0027\u0027,"},{"line_number":353,"context_line":"                                      ip_version\u003d4,"},{"line_number":354,"context_line":"                                      ip_prefix\u003d\u00270.0.0.0/0\u0027)]"},{"line_number":355,"context_line":"        }.get(router[\u0027id\u0027], [])"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def _fake_get_v4_network_of_all_router_ports(self, ctx, router_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_9860b50d","line":354,"in_reply_to":"3f79a3b5_f827691c","updated":"2018-12-18 15:39:18.000000000","message":"Done","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"}],"tox.ini":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"b65d2cb678ed2288f35d5143e629263eb67814b0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"passenv \u003d http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[testenv:pep8]"},{"line_number":22,"context_line":"basepython \u003d python3.5"},{"line_number":23,"context_line":"commands \u003d flake8"},{"line_number":24,"context_line":"           {toxinidir}/tools/coding-checks.sh --pylint \u0027{posargs}\u0027"},{"line_number":25,"context_line":"           doc8 doc/source devstack releasenotes/source vagrant rally-jobs"}],"source_content_type":"text/x-properties","patch_set":3,"id":"3f79a3b5_161c8d63","line":22,"updated":"2018-12-17 18:05:35.000000000","message":"are these changes intended/related to this patch?","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3270132d7b9591641a0b575fc984efda367146fb","unresolved":false,"context_lines":[{"line_number":19,"context_line":"passenv \u003d http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[testenv:pep8]"},{"line_number":22,"context_line":"basepython \u003d python3.5"},{"line_number":23,"context_line":"commands \u003d flake8"},{"line_number":24,"context_line":"           {toxinidir}/tools/coding-checks.sh --pylint \u0027{posargs}\u0027"},{"line_number":25,"context_line":"           doc8 doc/source devstack releasenotes/source vagrant rally-jobs"}],"source_content_type":"text/x-properties","patch_set":3,"id":"3f79a3b5_d2661ef1","line":22,"in_reply_to":"3f79a3b5_161c8d63","updated":"2018-12-17 20:47:09.000000000","message":"+1, and at least in the neutron repo we made them generic so that we could move to 3.6 without any changes here.","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5c939c98e3111ef5e58b791a76706f58eef0858e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"passenv \u003d http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[testenv:pep8]"},{"line_number":22,"context_line":"basepython \u003d python3.5"},{"line_number":23,"context_line":"commands \u003d flake8"},{"line_number":24,"context_line":"           {toxinidir}/tools/coding-checks.sh --pylint \u0027{posargs}\u0027"},{"line_number":25,"context_line":"           doc8 doc/source devstack releasenotes/source vagrant rally-jobs"}],"source_content_type":"text/x-properties","patch_set":3,"id":"3f79a3b5_5269a358","line":22,"in_reply_to":"3f79a3b5_996526b4","updated":"2018-12-18 15:39:18.000000000","message":"Certainly not :) I changed it to be able to run it locally :p","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"5c939c98e3111ef5e58b791a76706f58eef0858e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"passenv \u003d http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[testenv:pep8]"},{"line_number":22,"context_line":"basepython \u003d python3.5"},{"line_number":23,"context_line":"commands \u003d flake8"},{"line_number":24,"context_line":"           {toxinidir}/tools/coding-checks.sh --pylint \u0027{posargs}\u0027"},{"line_number":25,"context_line":"           doc8 doc/source devstack releasenotes/source vagrant rally-jobs"}],"source_content_type":"text/x-properties","patch_set":3,"id":"3f79a3b5_1289eb1b","line":22,"in_reply_to":"3f79a3b5_d2661ef1","updated":"2018-12-18 15:39:18.000000000","message":"++ We need to do this here too :)","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bb1954a5a03a2d4a5751d7868d6138914748b26b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"passenv \u003d http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[testenv:pep8]"},{"line_number":22,"context_line":"basepython \u003d python3.5"},{"line_number":23,"context_line":"commands \u003d flake8"},{"line_number":24,"context_line":"           {toxinidir}/tools/coding-checks.sh --pylint \u0027{posargs}\u0027"},{"line_number":25,"context_line":"           doc8 doc/source devstack releasenotes/source vagrant rally-jobs"}],"source_content_type":"text/x-properties","patch_set":3,"id":"3f79a3b5_996526b4","line":22,"in_reply_to":"3f79a3b5_d2661ef1","updated":"2018-12-18 06:31:30.000000000","message":"+2","commit_id":"0a32c136fa73c9ba2043f10bd701f2d566f54927"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3bd361bee5f1c30f99c04c8122521e6b5128ed80","unresolved":false,"context_lines":[{"line_number":19,"context_line":"passenv \u003d http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[testenv:pep8]"},{"line_number":22,"context_line":"basepython \u003d python3.5"},{"line_number":23,"context_line":"commands \u003d flake8"},{"line_number":24,"context_line":"           {toxinidir}/tools/coding-checks.sh --pylint \u0027{posargs}\u0027"},{"line_number":25,"context_line":"           doc8 doc/source devstack releasenotes/source vagrant rally-jobs"}],"source_content_type":"text/x-properties","patch_set":5,"id":"3f79a3b5_38e401d3","line":22,"updated":"2018-12-18 15:21:27.000000000","message":"Didn\u0027t see an answer to Terry\u0027s question.","commit_id":"c6f152d966acab38674535a14b6540a1f6950502"}]}
