)]}'
{"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"c99a993e5b4fabcb212619ebc116e877fa1c755a","unresolved":false,"context_lines":[{"line_number":1092,"context_line":"                    pool\u003dpool_range,"},{"line_number":1093,"context_line":"                    ip_address\u003dgateway_ip)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"    def _update_gw_ports(self, context, subnet_id, network_id):"},{"line_number":1096,"context_line":"        network \u003d self.get_network(context, network_id, \u0027router:external\u0027)"},{"line_number":1097,"context_line":"        if \u0027router:external\u0027 not in network or not network[\u0027router:external\u0027]:"},{"line_number":1098,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_6d2d29a8","line":1095,"updated":"2015-03-25 14:19:47.000000000","message":"_update_router_gw_ports seems to be a better name, to be consistent.","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":13409,"name":"Andrew Boik","email":"drew.boik@gmail.com","username":"dboik"},"change_message_id":"9fea7e8dc9c305da92d6c137c042cff588be7d05","unresolved":false,"context_lines":[{"line_number":1092,"context_line":"                    pool\u003dpool_range,"},{"line_number":1093,"context_line":"                    ip_address\u003dgateway_ip)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"    def _update_gw_ports(self, context, subnet_id, network_id):"},{"line_number":1096,"context_line":"        network \u003d self.get_network(context, network_id, \u0027router:external\u0027)"},{"line_number":1097,"context_line":"        if \u0027router:external\u0027 not in network or not network[\u0027router:external\u0027]:"},{"line_number":1098,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_fc10e85a","line":1095,"in_reply_to":"1a6ced46_6d2d29a8","updated":"2015-03-25 14:40:16.000000000","message":"Done","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"c99a993e5b4fabcb212619ebc116e877fa1c755a","unresolved":false,"context_lines":[{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"    def _update_gw_ports(self, context, subnet_id, network_id):"},{"line_number":1096,"context_line":"        network \u003d self.get_network(context, network_id, \u0027router:external\u0027)"},{"line_number":1097,"context_line":"        if \u0027router:external\u0027 not in network or not network[\u0027router:external\u0027]:"},{"line_number":1098,"context_line":"            return"},{"line_number":1099,"context_line":"        l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":1100,"context_line":"                service_constants.L3_ROUTER_NAT)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_c8f52b58","line":1097,"updated":"2015-03-25 14:19:47.000000000","message":"if network.get(\u0027router:external\u0027)","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":13409,"name":"Andrew Boik","email":"drew.boik@gmail.com","username":"dboik"},"change_message_id":"9fea7e8dc9c305da92d6c137c042cff588be7d05","unresolved":false,"context_lines":[{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"    def _update_gw_ports(self, context, subnet_id, network_id):"},{"line_number":1096,"context_line":"        network \u003d self.get_network(context, network_id, \u0027router:external\u0027)"},{"line_number":1097,"context_line":"        if \u0027router:external\u0027 not in network or not network[\u0027router:external\u0027]:"},{"line_number":1098,"context_line":"            return"},{"line_number":1099,"context_line":"        l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":1100,"context_line":"                service_constants.L3_ROUTER_NAT)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_1c16a455","line":1097,"in_reply_to":"1a6ced46_c8f52b58","updated":"2015-03-25 14:40:16.000000000","message":"Done","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"c99a993e5b4fabcb212619ebc116e877fa1c755a","unresolved":false,"context_lines":[{"line_number":1095,"context_line":"    def _update_gw_ports(self, context, subnet_id, network_id):"},{"line_number":1096,"context_line":"        network \u003d self.get_network(context, network_id, \u0027router:external\u0027)"},{"line_number":1097,"context_line":"        if \u0027router:external\u0027 not in network or not network[\u0027router:external\u0027]:"},{"line_number":1098,"context_line":"            return"},{"line_number":1099,"context_line":"        l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":1100,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":1101,"context_line":"        if l3plugin:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_e8e667af","line":1098,"updated":"2015-03-25 14:19:47.000000000","message":"Moving this to the caller would make the logic clearer.","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":13409,"name":"Andrew Boik","email":"drew.boik@gmail.com","username":"dboik"},"change_message_id":"9fea7e8dc9c305da92d6c137c042cff588be7d05","unresolved":false,"context_lines":[{"line_number":1095,"context_line":"    def _update_gw_ports(self, context, subnet_id, network_id):"},{"line_number":1096,"context_line":"        network \u003d self.get_network(context, network_id, \u0027router:external\u0027)"},{"line_number":1097,"context_line":"        if \u0027router:external\u0027 not in network or not network[\u0027router:external\u0027]:"},{"line_number":1098,"context_line":"            return"},{"line_number":1099,"context_line":"        l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":1100,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":1101,"context_line":"        if l3plugin:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_3c0e003c","line":1098,"in_reply_to":"1a6ced46_e8e667af","updated":"2015-03-25 14:40:16.000000000","message":"Done","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"c99a993e5b4fabcb212619ebc116e877fa1c755a","unresolved":false,"context_lines":[{"line_number":1136,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, s)"},{"line_number":1137,"context_line":"        subnet_id \u003d s.get(\u0027id\u0027) or uuidutils.generate_uuid()"},{"line_number":1138,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":1139,"context_line":"            network \u003d self._get_network(context, s[\"network_id\"])"},{"line_number":1140,"context_line":"            self._validate_subnet_cidr(context, network, s[\u0027cidr\u0027])"},{"line_number":1141,"context_line":"            # The \u0027shared\u0027 attribute for subnets is for internal plugin"},{"line_number":1142,"context_line":"            # use only. It is not exposed through the API"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_288b1fc4","line":1139,"updated":"2015-03-25 14:19:47.000000000","message":"Move this outside, and change to call self.get_network","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":13409,"name":"Andrew Boik","email":"drew.boik@gmail.com","username":"dboik"},"change_message_id":"9fea7e8dc9c305da92d6c137c042cff588be7d05","unresolved":false,"context_lines":[{"line_number":1136,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, s)"},{"line_number":1137,"context_line":"        subnet_id \u003d s.get(\u0027id\u0027) or uuidutils.generate_uuid()"},{"line_number":1138,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":1139,"context_line":"            network \u003d self._get_network(context, s[\"network_id\"])"},{"line_number":1140,"context_line":"            self._validate_subnet_cidr(context, network, s[\u0027cidr\u0027])"},{"line_number":1141,"context_line":"            # The \u0027shared\u0027 attribute for subnets is for internal plugin"},{"line_number":1142,"context_line":"            # use only. It is not exposed through the API"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_3fdfd26a","line":1139,"in_reply_to":"1a6ced46_288b1fc4","updated":"2015-03-25 14:40:16.000000000","message":"Why? Is this not just a collateral change?","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":13409,"name":"Andrew Boik","email":"drew.boik@gmail.com","username":"dboik"},"change_message_id":"bf27d9b36bc954832345f3f902c161027b6ca09c","unresolved":false,"context_lines":[{"line_number":1136,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, s)"},{"line_number":1137,"context_line":"        subnet_id \u003d s.get(\u0027id\u0027) or uuidutils.generate_uuid()"},{"line_number":1138,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":1139,"context_line":"            network \u003d self._get_network(context, s[\"network_id\"])"},{"line_number":1140,"context_line":"            self._validate_subnet_cidr(context, network, s[\u0027cidr\u0027])"},{"line_number":1141,"context_line":"            # The \u0027shared\u0027 attribute for subnets is for internal plugin"},{"line_number":1142,"context_line":"            # use only. It is not exposed through the API"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_5f948e42","line":1139,"in_reply_to":"1a6ced46_3fdfd26a","updated":"2015-03-25 14:43:33.000000000","message":"Nevermind :)","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"c99a993e5b4fabcb212619ebc116e877fa1c755a","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"                    last_ip\u003dpool[\u0027end\u0027])"},{"line_number":1183,"context_line":"                context.session.add(ip_range)"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"        self._update_gw_ports(context, subnet_id, s[\u0027network_id\u0027])"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":"        return self._make_subnet_dict(subnet)"},{"line_number":1188,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_68a8b720","line":1185,"updated":"2015-03-25 14:19:47.000000000","message":"if network.get(\u0027router:external\u0027):\n     self._update_router_gw_ports(....)","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":13409,"name":"Andrew Boik","email":"drew.boik@gmail.com","username":"dboik"},"change_message_id":"9fea7e8dc9c305da92d6c137c042cff588be7d05","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"                    last_ip\u003dpool[\u0027end\u0027])"},{"line_number":1183,"context_line":"                context.session.add(ip_range)"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"        self._update_gw_ports(context, subnet_id, s[\u0027network_id\u0027])"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":"        return self._make_subnet_dict(subnet)"},{"line_number":1188,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_5c0bbc29","line":1185,"in_reply_to":"1a6ced46_68a8b720","updated":"2015-03-25 14:40:16.000000000","message":"Done","commit_id":"cf83d841d1d1c2cbf010f009461ba56219af7902"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"24ff108277f370682e58ad727456d2a6fcaa78de","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"    def _update_router_gw_ports(self, context, subnet_id, network_id):"},{"line_number":1095,"context_line":"        l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":1096,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":1097,"context_line":"        if l3plugin:"},{"line_number":1098,"context_line":"            gw_ports \u003d self._get_router_gw_ports_by_network(context,"},{"line_number":1099,"context_line":"                    network_id)"},{"line_number":1100,"context_line":"            router_ids \u003d [p[\u0027device_id\u0027] for p in gw_ports]"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9b358b_a77080dd","line":1097,"updated":"2015-03-31 11:03:24.000000000","message":"nit: check for negative and early return to avoid having to indent everything","commit_id":"df7aa02aa5235b389ed8ad013acf9fccd7e877cd"}],"neutron/tests/unit/test_l3_plugin.py":[{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"547db68f1e6078af233f0344162bda809eabe87f","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                          n[\u0027network\u0027][\u0027id\u0027],"},{"line_number":887,"context_line":"                          ext_ips\u003d[{\u0027subnet_id\u0027: s1[\u0027subnet\u0027][\u0027id\u0027]}])"},{"line_number":888,"context_line":"                fip1_1 \u003d (res1[\u0027router\u0027][\u0027external_gateway_info\u0027]"},{"line_number":889,"context_line":"                          [\u0027external_fixed_ips\u0027][0])"},{"line_number":890,"context_line":"                sres \u003d self._create_subnet(self.fmt, net_id\u003dn[\u0027network\u0027][\u0027id\u0027],"},{"line_number":891,"context_line":"                                         ip_version\u003d6, cidr\u003d\u00272001:db8::/32\u0027,"},{"line_number":892,"context_line":"                                         expected_res_status\u003d("}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_4bc3fa37","line":889,"updated":"2015-03-18 20:55:04.000000000","message":"These variable names are very difficult to keep track of - it\u0027s hard on the eyes to differentiate between fip1_1 and fip1_2, as well as fip2. Also, where is fip1? I keep wanting to look for it since you established the pattern.....","commit_id":"4df8d5168dcc9736da5cbe320506705f83b61868"},{"author":{"_account_id":13409,"name":"Andrew Boik","email":"drew.boik@gmail.com","username":"dboik"},"change_message_id":"fd8e91b7a34c53537594d3cda1de239c57510ca6","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                          n[\u0027network\u0027][\u0027id\u0027],"},{"line_number":887,"context_line":"                          ext_ips\u003d[{\u0027subnet_id\u0027: s1[\u0027subnet\u0027][\u0027id\u0027]}])"},{"line_number":888,"context_line":"                fip1_1 \u003d (res1[\u0027router\u0027][\u0027external_gateway_info\u0027]"},{"line_number":889,"context_line":"                          [\u0027external_fixed_ips\u0027][0])"},{"line_number":890,"context_line":"                sres \u003d self._create_subnet(self.fmt, net_id\u003dn[\u0027network\u0027][\u0027id\u0027],"},{"line_number":891,"context_line":"                                         ip_version\u003d6, cidr\u003d\u00272001:db8::/32\u0027,"},{"line_number":892,"context_line":"                                         expected_res_status\u003d("}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_378628ba","line":889,"in_reply_to":"9a80dd14_4bc3fa37","updated":"2015-03-18 21:22:59.000000000","message":"I think this even confused me as I was writing it, but fip1_1 and fip1_2 represent the same fip at different times. fip1_1 is the first fip in the list  before the _create_subnet(), and fip1_2 is the first fip in the list after the _create_subnet().\n\nI\u0027ll just make it fip1 and fip2 and change the assertEqual() below.","commit_id":"4df8d5168dcc9736da5cbe320506705f83b61868"}]}
