)]}'
{"octavia/api/v2/controllers/load_balancer.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f02f8e939b2f2621af675dee706e00f61d1c7a26","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                        break"},{"line_number":156,"context_line":"                if not load_balancer.vip_subnet_id:"},{"line_number":157,"context_line":"                    raise exceptions.ValidationException(detail\u003d_("},{"line_number":158,"context_line":"                        \"Supplied network does not contain a subnet.\""},{"line_number":159,"context_line":"                    ))"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_47eed7b4","line":158,"updated":"2019-07-29 20:10:23.000000000","message":"Please update this message to include the possibility of IP exhaustion.","commit_id":"cb27e572c74f7ae8fb095ab807a0a97ed9f2ec9a"},{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"cb2e0d2627521a9f51e67d7deee0de30a3a74bcd","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                        \"VIP address specified.\""},{"line_number":137,"context_line":"                    ))"},{"line_number":138,"context_line":"            else:"},{"line_number":139,"context_line":"                ip_avail \u003d network_driver.get_network_ip_availability(network.id)"},{"line_number":140,"context_line":"                if CONF.controller_worker.loadbalancer_topology \u003d\u003d \u0027SINGLE\u0027:"},{"line_number":141,"context_line":"                    num_req_ips \u003d 2"},{"line_number":142,"context_line":"                if CONF.controller_worker.loadbalancer_topology \u003d\u003d \u0027ACTIVE_STANDBY\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_e3c1b330","line":139,"updated":"2019-08-02 06:47:39.000000000","message":"ip_avail \u003d network_driver.get_network_ip_availability(\n    network.id)","commit_id":"b500af8232b52ad5acf3f6bc5b1c67aea114d13f"},{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"cb2e0d2627521a9f51e67d7deee0de30a3a74bcd","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                ip_avail \u003d network_driver.get_network_ip_availability(network.id)"},{"line_number":140,"context_line":"                if CONF.controller_worker.loadbalancer_topology \u003d\u003d \u0027SINGLE\u0027:"},{"line_number":141,"context_line":"                    num_req_ips \u003d 2"},{"line_number":142,"context_line":"                if CONF.controller_worker.loadbalancer_topology \u003d\u003d \u0027ACTIVE_STANDBY\u0027:"},{"line_number":143,"context_line":"                    num_req_ips \u003d 3"},{"line_number":144,"context_line":"                # If subnet and IP are not provided, pick the first subnet,"},{"line_number":145,"context_line":"                # preferring ipv4"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_c3e277d5","line":142,"updated":"2019-08-02 06:47:39.000000000","message":"if (CONF.controller_worker.loadbalancer_topology \u003d\u003d\n    \u0027ACTIVE_STANDBY\u0027):","commit_id":"b500af8232b52ad5acf3f6bc5b1c67aea114d13f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"298bc6647ef965559a9169e26f9fc1676d93b8f8","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                        \"VIP address specified.\""},{"line_number":137,"context_line":"                    ))"},{"line_number":138,"context_line":"            else:"},{"line_number":139,"context_line":"                ip_avail \u003d network_driver.get_network_ip_availability("},{"line_number":140,"context_line":"                    network)"},{"line_number":141,"context_line":"                if CONF.controller_worker.loadbalancer_topology \u003d\u003d \u0027SINGLE\u0027:"},{"line_number":142,"context_line":"                    num_req_ips \u003d 2"}],"source_content_type":"text/x-python","patch_set":4,"id":"5faad753_47a59703","line":139,"updated":"2019-09-10 22:19:24.000000000","message":"This method needs to be declared in the network driver base class: https://opendev.org/openstack/octavia/src/branch/master/octavia/network/base.py","commit_id":"b6d25a73a45fffbc75d79184b096b97386e03bf3"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"298bc6647ef965559a9169e26f9fc1676d93b8f8","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                if not load_balancer.vip_subnet_id:"},{"line_number":160,"context_line":"                    raise exceptions.ValidationException(detail\u003d_("},{"line_number":161,"context_line":"                        \"Supplied network does not contain a subnet or \""},{"line_number":162,"context_line":"                        \"subnet(s) do not contain enough available IPs.\""},{"line_number":163,"context_line":"                    ))"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"5faad753_07c6bf9b","line":162,"updated":"2019-09-10 22:19:24.000000000","message":"nit: It would be nice to split this out in it\u0027s own error message. IP availability can be transient, so making the error message clear has an advantage.","commit_id":"b6d25a73a45fffbc75d79184b096b97386e03bf3"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f3de0dc6c15855f35f92dea847f6114ea34e7e7e","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                subnets \u003d [subnet_id for subnet_id in network.subnets if"},{"line_number":154,"context_line":"                           utils.subnet_ip_availability(ip_avail, subnet_id,"},{"line_number":155,"context_line":"                                                        num_req_ips)]"},{"line_number":156,"context_line":"                if not subnets:"},{"line_number":157,"context_line":"                    raise exceptions.ValidationException(detail\u003d_("},{"line_number":158,"context_line":"                        \"Subnet(s) in the supplied network do not contain \""},{"line_number":159,"context_line":"                        \"enough available IPs.\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_a68a6218","line":156,"updated":"2019-09-19 16:59:22.000000000","message":"nit: this exception path is not tested.","commit_id":"c7fba21532711cc2c2786b5ffade1c60688e2e5c"}],"octavia/common/utils.py":[{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"cb2e0d2627521a9f51e67d7deee0de30a3a74bcd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    if six.PY3 and isinstance(key, six.string_types):"},{"line_number":103,"context_line":"        key \u003d key.encode(\u0027utf-8\u0027)"},{"line_number":104,"context_line":"    return base64.urlsafe_b64encode(key)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"def subnet_ip_availability(nw_ip_avail, subnet_id, req_num_ips):"},{"line_number":107,"context_line":"    for subnet in nw_ip_avail.subnet_ip_availability:"},{"line_number":108,"context_line":"        if subnet[\u0027subnet_id\u0027] \u003d\u003d subnet_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_c3bd97b7","line":105,"updated":"2019-08-02 06:47:39.000000000","message":"Add a blank line after it.","commit_id":"b500af8232b52ad5acf3f6bc5b1c67aea114d13f"},{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"cb2e0d2627521a9f51e67d7deee0de30a3a74bcd","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            if subnet[\u0027total_ips\u0027] - subnet[\u0027used_ips\u0027] \u003e\u003d req_num_ips:"},{"line_number":110,"context_line":"                return True"},{"line_number":111,"context_line":"            else:"},{"line_number":112,"context_line":"                return False"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class exception_logger(object):"},{"line_number":115,"context_line":"    \"\"\"Wrap a function and log raised exception"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_4871c675","line":112,"updated":"2019-08-02 06:47:39.000000000","message":"ditto","commit_id":"b500af8232b52ad5acf3f6bc5b1c67aea114d13f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f3de0dc6c15855f35f92dea847f6114ea34e7e7e","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"def subnet_ip_availability(nw_ip_avail, subnet_id, req_num_ips):"},{"line_number":114,"context_line":"    for subnet in nw_ip_avail.subnet_ip_availability:"},{"line_number":115,"context_line":"        if subnet[\u0027subnet_id\u0027] \u003d\u003d subnet_id:"},{"line_number":116,"context_line":"            return subnet[\u0027total_ips\u0027] - subnet[\u0027used_ips\u0027] \u003e\u003d req_num_ips"},{"line_number":117,"context_line":"    return None"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_0673364f","line":114,"updated":"2019-09-19 16:59:22.000000000","message":"nit: None path is not tested","commit_id":"c7fba21532711cc2c2786b5ffade1c60688e2e5c"}],"octavia/network/data_models.py":[{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"cb2e0d2627521a9f51e67d7deee0de30a3a74bcd","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"class QosPolicy(data_models.BaseDataModel):"},{"line_number":150,"context_line":"    def __init__(self, id):"},{"line_number":151,"context_line":"        self.id \u003d id"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"class Network_IP_Availability(data_models.BaseDataModel):"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_c83cd694","line":151,"range":{"start_line":151,"start_character":0,"end_line":151,"end_character":20},"updated":"2019-08-02 06:47:39.000000000","message":"Maybe you should add a blank line after it.","commit_id":"b500af8232b52ad5acf3f6bc5b1c67aea114d13f"}],"octavia/network/drivers/neutron/base.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f3de0dc6c15855f35f92dea847f6114ea34e7e7e","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    def qos_enabled(self):"},{"line_number":258,"context_line":"        return self._qos_enabled"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def get_network_ip_availability(self, network):"},{"line_number":261,"context_line":"        return self._get_resource(\u0027network_ip_availability\u0027, network.id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_c692fe4b","line":260,"updated":"2019-09-19 16:59:22.000000000","message":"Missing unit test","commit_id":"c7fba21532711cc2c2786b5ffade1c60688e2e5c"}],"octavia/network/drivers/neutron/utils.py":[{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"cb2e0d2627521a9f51e67d7deee0de30a3a74bcd","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        fixed_port_id\u003dfloating_ip.get(\u0027fixed_port_id\u0027)"},{"line_number":96,"context_line":"    )"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def convert_network_ip_availability_dict_to_model(network_ip_availability_dict):"},{"line_number":99,"context_line":"    nw_ip_avail \u003d network_ip_availability_dict.get(\u0027network_ip_availability\u0027, network_ip_availability_dict)"},{"line_number":100,"context_line":"    return network_models.Network_IP_Availability("},{"line_number":101,"context_line":"        network_id\u003dnw_ip_avail.get(\u0027network_id\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_43ce875a","line":98,"updated":"2019-08-02 06:47:39.000000000","message":"def convert_network_ip_availability_dict_to_model(\n        network_ip_availability_dict):","commit_id":"b500af8232b52ad5acf3f6bc5b1c67aea114d13f"},{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"cb2e0d2627521a9f51e67d7deee0de30a3a74bcd","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    )"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def convert_network_ip_availability_dict_to_model(network_ip_availability_dict):"},{"line_number":99,"context_line":"    nw_ip_avail \u003d network_ip_availability_dict.get(\u0027network_ip_availability\u0027, network_ip_availability_dict)"},{"line_number":100,"context_line":"    return network_models.Network_IP_Availability("},{"line_number":101,"context_line":"        network_id\u003dnw_ip_avail.get(\u0027network_id\u0027),"},{"line_number":102,"context_line":"        tenant_id\u003dnw_ip_avail.get(\u0027tenant_id\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_e3d693f2","line":99,"updated":"2019-08-02 06:47:39.000000000","message":"nw_ip_avail \u003d network_ip_availability_dict.get(\n    \u0027network_ip_availability\u0027, network_ip_availability_dict)","commit_id":"b500af8232b52ad5acf3f6bc5b1c67aea114d13f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f3de0dc6c15855f35f92dea847f6114ea34e7e7e","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    )"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"def convert_network_ip_availability_dict_to_model("},{"line_number":100,"context_line":"        network_ip_availability_dict):"},{"line_number":101,"context_line":"    nw_ip_avail \u003d network_ip_availability_dict.get("},{"line_number":102,"context_line":"        \u0027network_ip_availability\u0027, network_ip_availability_dict)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_6699ca6c","line":99,"updated":"2019-09-19 16:59:22.000000000","message":"Missing test coverage","commit_id":"c7fba21532711cc2c2786b5ffade1c60688e2e5c"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f3de0dc6c15855f35f92dea847f6114ea34e7e7e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        network_ip_availability_dict):"},{"line_number":101,"context_line":"    nw_ip_avail \u003d network_ip_availability_dict.get("},{"line_number":102,"context_line":"        \u0027network_ip_availability\u0027, network_ip_availability_dict)"},{"line_number":103,"context_line":"    return network_models.Network_IP_Availability("},{"line_number":104,"context_line":"        network_id\u003dnw_ip_avail.get(\u0027network_id\u0027),"},{"line_number":105,"context_line":"        tenant_id\u003dnw_ip_avail.get(\u0027tenant_id\u0027),"},{"line_number":106,"context_line":"        network_name\u003dnw_ip_avail.get(\u0027network_name\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_e6f05acc","line":103,"updated":"2019-09-19 16:59:22.000000000","message":"nit: I think you could save some lines here with the .from_dict in the base data model class.","commit_id":"c7fba21532711cc2c2786b5ffade1c60688e2e5c"}],"octavia/network/drivers/noop_driver/driver.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"298bc6647ef965559a9169e26f9fc1676d93b8f8","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def qos_enabled(self):"},{"line_number":265,"context_line":"        return self._qos_extension_enabled"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def get_network_ip_availability(self, network):"},{"line_number":268,"context_line":"        LOG.debug(\"Network %s no-op, network_ip_availability network_id %s\","},{"line_number":269,"context_line":"                  self.__class__.__name__, network.id)"},{"line_number":270,"context_line":"        self.networkconfigconfig[(network.id, \u0027ip_availability\u0027)] \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"5faad753_87e94f1b","line":267,"updated":"2019-09-10 22:19:24.000000000","message":"This appears to not be working correctly. The jobs that use the noop driver are failing.\nDetails: {\u0027faultcode\u0027: \u0027Client\u0027, \u0027faultstring\u0027: \u0027Validation failure: Supplied network does not contain a subnet or subnet(s) do not contain enough available IPs.\u0027, \u0027debuginfo\u0027: None}","commit_id":"b6d25a73a45fffbc75d79184b096b97386e03bf3"}],"octavia/tests/unit/network/drivers/neutron/test_base.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8ef02562d7995c82d3659e733257d6a7f0b0db04","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        # show_network \u003d self.driver.neutron_client.show_network"},{"line_number":487,"context_line":"        # show_network.return_value \u003d {\u0027network\u0027: {"},{"line_number":488,"context_line":"        #     \u0027id\u0027: t_constants.MOCK_NETWORK_ID,"},{"line_number":489,"context_line":"        #     \u0027subnets\u0027: [t_constants.MOCK_SUBNET_ID]}}"},{"line_number":490,"context_line":"        show_network_ip_availability \u003d ("},{"line_number":491,"context_line":"            self.driver.neutron_client.show_network_ip_availability)"},{"line_number":492,"context_line":"        show_network_ip_availability.return_value \u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_a77339b1","line":489,"updated":"2019-09-19 23:13:40.000000000","message":"Extra comments can be removed.","commit_id":"42c57aa563b749dbb4b12729786f7de146e65474"}]}
