)]}'
{"senlin/drivers/os/lbaas.py":[{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"bd577f79227522af435260e5c957facce3c40ba8","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                raise exception.Error(msg)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"            # Get list ip address of members in pool"},{"line_number":318,"context_line":"            members \u003d self.oc().conn.load_balancer.get_pool(pool_id).members"},{"line_number":319,"context_line":"            members_ids \u003d [m[\u0027id\u0027] for m in members]"},{"line_number":320,"context_line":"            addresses \u003d [self.oc().conn.load_balancer.get_member("},{"line_number":321,"context_line":"                mid, pool_id).address for mid in members_ids]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_4b4e996e","line":318,"updated":"2020-01-07 19:41:38.000000000","message":"Sorry, I didn\u0027t explain correctly.  I meant can you call this API (https://github.com/openstack/openstacksdk/blob/master/openstack/load_balancer/v2/_proxy.py#L393) to get members with address and protocol_port:\n\nmembers \u003d self.oc().conn.load_balancer.members(pool_id)\n\nThen members is an array with member objects.  Each member object should have address and protocol_port.\n\nThat way you should not have to make extra get_member calls for each member id.","commit_id":"1803cc4c27a5a77e39b4567a55b294910729d148"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"3d7b461205e9c7fddc1d8461eeaafe770029be75","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                raise exception.Error(msg)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"            # Get list ip address of members in pool"},{"line_number":318,"context_line":"            members \u003d self.oc().conn.load_balancer.get_pool(pool_id).members"},{"line_number":319,"context_line":"            members_ids \u003d [m[\u0027id\u0027] for m in members]"},{"line_number":320,"context_line":"            addresses \u003d [self.oc().conn.load_balancer.get_member("},{"line_number":321,"context_line":"                mid, pool_id).address for mid in members_ids]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_cb904999","line":318,"in_reply_to":"3fa7e38b_4b4e996e","updated":"2020-01-07 19:50:40.000000000","message":"Correct.","commit_id":"1803cc4c27a5a77e39b4567a55b294910729d148"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"1391b63fce3df3013aefb633d1040f3e19c135f1","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                mid, pool_id).address for mid in members_ids]"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"            map_ports \u003d {}"},{"line_number":324,"context_line":"            for mid in members_ids:"},{"line_number":325,"context_line":"                ip \u003d self.oc().conn.load_balancer.get_member("},{"line_number":326,"context_line":"                    mid, pool_id).address"},{"line_number":327,"context_line":"                try:"},{"line_number":328,"context_line":"                    map_ports[ip][str(self.oc().conn.load_balancer.get_member("},{"line_number":329,"context_line":"                        mid, pool_id).protocol_port)] \u003d mid"},{"line_number":330,"context_line":"                except Exception:"},{"line_number":331,"context_line":"                    map_ports[ip] \u003d {}"},{"line_number":332,"context_line":"                    map_ports[ip][str(self.oc().conn.load_balancer.get_member("},{"line_number":333,"context_line":"                        mid, pool_id).protocol_port)] \u003d mid"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"            # If member is existed in this pool, we should ignore"},{"line_number":336,"context_line":"            if address not in addresses:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_51d65555","line":333,"range":{"start_line":324,"start_character":0,"end_line":333,"end_character":59},"updated":"2020-01-07 00:59:25.000000000","message":"Why do we have to loop to get the protocol ports again?\nThe members on line 318 should have address and protocol_port filled in already.","commit_id":"1803cc4c27a5a77e39b4567a55b294910729d148"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"4d45e372eb46498e7bb6e6bc0f80396899e772c3","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                mid, pool_id).address for mid in members_ids]"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"            map_ports \u003d {}"},{"line_number":324,"context_line":"            for mid in members_ids:"},{"line_number":325,"context_line":"                ip \u003d self.oc().conn.load_balancer.get_member("},{"line_number":326,"context_line":"                    mid, pool_id).address"},{"line_number":327,"context_line":"                try:"},{"line_number":328,"context_line":"                    map_ports[ip][str(self.oc().conn.load_balancer.get_member("},{"line_number":329,"context_line":"                        mid, pool_id).protocol_port)] \u003d mid"},{"line_number":330,"context_line":"                except Exception:"},{"line_number":331,"context_line":"                    map_ports[ip] \u003d {}"},{"line_number":332,"context_line":"                    map_ports[ip][str(self.oc().conn.load_balancer.get_member("},{"line_number":333,"context_line":"                        mid, pool_id).protocol_port)] \u003d mid"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"            # If member is existed in this pool, we should ignore"},{"line_number":336,"context_line":"            if address not in addresses:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_94fd9b6e","line":333,"range":{"start_line":324,"start_character":0,"end_line":333,"end_character":59},"in_reply_to":"3fa7e38b_51d65555","updated":"2020-01-07 03:52:08.000000000","message":"Because in line 318, result is an array ID of members.","commit_id":"1803cc4c27a5a77e39b4567a55b294910729d148"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"3d7b461205e9c7fddc1d8461eeaafe770029be75","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                mid, pool_id).address for mid in members_ids]"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"            map_ports \u003d {}"},{"line_number":324,"context_line":"            for mid in members_ids:"},{"line_number":325,"context_line":"                ip \u003d self.oc().conn.load_balancer.get_member("},{"line_number":326,"context_line":"                    mid, pool_id).address"},{"line_number":327,"context_line":"                try:"},{"line_number":328,"context_line":"                    map_ports[ip][str(self.oc().conn.load_balancer.get_member("},{"line_number":329,"context_line":"                        mid, pool_id).protocol_port)] \u003d mid"},{"line_number":330,"context_line":"                except Exception:"},{"line_number":331,"context_line":"                    map_ports[ip] \u003d {}"},{"line_number":332,"context_line":"                    map_ports[ip][str(self.oc().conn.load_balancer.get_member("},{"line_number":333,"context_line":"                        mid, pool_id).protocol_port)] \u003d mid"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"            # If member is existed in this pool, we should ignore"},{"line_number":336,"context_line":"            if address not in addresses:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_ebec2529","line":333,"range":{"start_line":324,"start_character":0,"end_line":333,"end_character":59},"in_reply_to":"3fa7e38b_94fd9b6e","updated":"2020-01-07 19:50:40.000000000","message":"If you do what Duc mentioned on 318, you won\u0027t need any of this.","commit_id":"1803cc4c27a5a77e39b4567a55b294910729d148"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"3d7b461205e9c7fddc1d8461eeaafe770029be75","unresolved":false,"context_lines":[{"line_number":337,"context_line":"                member \u003d self.oc().pool_member_create("},{"line_number":338,"context_line":"                    pool_id, address, port, subnet_obj.id)"},{"line_number":339,"context_line":"            else:"},{"line_number":340,"context_line":"                if str(port) not in map_ports[address].keys():"},{"line_number":341,"context_line":"                    member \u003d self.oc().pool_member_create("},{"line_number":342,"context_line":"                        pool_id, address, port, subnet_obj.id)"},{"line_number":343,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_cb436910","line":340,"updated":"2020-01-07 19:50:40.000000000","message":"nitpick: I believe using `.keys()` is redundant for dicts? `a in mydict` is the same as `a in mydict.keys()`","commit_id":"1803cc4c27a5a77e39b4567a55b294910729d148"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"fe4db0c153113c7cd03b73b6e1f546b8ba655b93","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"            # Get list ip address of members in pool"},{"line_number":318,"context_line":"            members \u003d list(self.oc().conn.load_balancer.members(pool_id))"},{"line_number":319,"context_line":"            addresses \u003d []"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"            map_ports \u003d {}"},{"line_number":322,"context_line":"            for member in members:"},{"line_number":323,"context_line":"                ip \u003d member.address"},{"line_number":324,"context_line":"                addresses.append(ip)"},{"line_number":325,"context_line":"                try:"},{"line_number":326,"context_line":"                    map_ports[ip][str(member.protocol_port)] \u003d member.id"},{"line_number":327,"context_line":"                except Exception:"},{"line_number":328,"context_line":"                    map_ports[ip] \u003d {}"},{"line_number":329,"context_line":"                    map_ports[ip][str(member.protocol_port)] \u003d member.id"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"            # If member is existed in this pool, we should ignore"},{"line_number":332,"context_line":"            if address not in addresses:"},{"line_number":333,"context_line":"                member \u003d self.oc().pool_member_create("},{"line_number":334,"context_line":"                    pool_id, address, port, subnet_obj.id)"},{"line_number":335,"context_line":"            else:"},{"line_number":336,"context_line":"                if str(port) not in map_ports[address]:"},{"line_number":337,"context_line":"                    member \u003d self.oc().pool_member_create("},{"line_number":338,"context_line":"                        pool_id, address, port, subnet_obj.id)"},{"line_number":339,"context_line":"                else:"},{"line_number":340,"context_line":"                    return map_ports[address][str(port)]"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        except (exception.InternalError, exception.Error) as ex:"},{"line_number":343,"context_line":"            LOG.exception(\u0027Failed in creating lb pool member: %s.\u0027, ex)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_81d0662c","line":340,"range":{"start_line":319,"start_character":0,"end_line":340,"end_character":56},"updated":"2020-01-16 19:52:52.000000000","message":"If I understand the code correctly, all this can be simplified like this:\n\nids \u003d [m.id for m in members if m.address \u003d\u003d address and m.protocol_port \u003d\u003d port]\n\nif len(ids) \u003d\u003d 0:\n  member \u003d self.oc().pool_member_create(pool_id, address, port, subnet_obj.id)\nelif len(ids) \u003d\u003d 1:\n  return ids[0]\nelse:\n  LOG.error(\u0027More than 1 member already exists for address %s and port %s\u0027, address, port)\n  return None","commit_id":"19bd0299b280ec073090da3dbfe9ee9138f23825"}]}
