)]}'
{"tempest/api/network/common.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":136,"context_line":"                \"id\": health_monitor_id,"},{"line_number":137,"context_line":"            }"},{"line_number":138,"context_line":"        }"},{"line_number":139,"context_line":"        self.client.associate_health_monitor(self.id, body\u003dbody)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def disassociate_health_monitor(self, health_monitor_id):"},{"line_number":142,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVX%2F%2Fo%2B0%3D","line":139,"updated":"2014-03-02 07:40:33.000000000","message":"since this is actually a dict, you need to get() the object in order to update it once the action is done. I think it is already the return value of the method (but I\u0027m not sure) so you just to assign to self.","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a257646b924335aac70172623e8aaa527d3cb05","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                \"id\": health_monitor_id,"},{"line_number":137,"context_line":"            }"},{"line_number":138,"context_line":"        }"},{"line_number":139,"context_line":"        self.client.associate_health_monitor(self.id, body\u003dbody)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def disassociate_health_monitor(self, health_monitor_id):"},{"line_number":142,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2F6K4%3D","line":139,"in_reply_to":"AAAAVX%2F%2Fo%2B0%3D","updated":"2014-03-03 13:59:02.000000000","message":"The return value here is an empty dict \"health_monitor\": {} (see http://docs.openstack.org/api/openstack-network/2.0/content/lbaas_ext_ops_health_monitor_associate.html)\n\nI don\u0027t see a reason to update self here for it\u0027s done in the test itself in any case","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":144,"context_line":"                \"id\": health_monitor_id,"},{"line_number":145,"context_line":"            }"},{"line_number":146,"context_line":"        }"},{"line_number":147,"context_line":"        self.client.disassociate_health_monitor(self.id, body\u003dbody)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def delete(self):"},{"line_number":150,"context_line":"        self.client.delete_pool(self.id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVX%2F%2Fo%2Bw%3D","line":147,"updated":"2014-03-02 07:40:33.000000000","message":"same here","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"}],"tempest/scenario/manager.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":669,"context_line":"                          health_monitor)"},{"line_number":670,"context_line":"        return health_monitor"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    def _associate_health_monitor_with_pool(self, health_monitor_id, pool_id):"},{"line_number":673,"context_line":"        body \u003d {"},{"line_number":674,"context_line":"            \"health_monitor\": {"},{"line_number":675,"context_line":"                \"id\": health_monitor_id,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F82A%3D","line":672,"updated":"2014-02-27 07:10:20.000000000","message":"I suggest defining this as a method of net_common.DeletablePool","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a257646b924335aac70172623e8aaa527d3cb05","unresolved":false,"context_lines":[{"line_number":669,"context_line":"                          health_monitor)"},{"line_number":670,"context_line":"        return health_monitor"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    def _associate_health_monitor_with_pool(self, health_monitor_id, pool_id):"},{"line_number":673,"context_line":"        body \u003d {"},{"line_number":674,"context_line":"            \"health_monitor\": {"},{"line_number":675,"context_line":"                \"id\": health_monitor_id,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2Fv3M%3D","line":672,"in_reply_to":"AAAAVX%2F%2F82A%3D","updated":"2014-02-28 15:37:15.000000000","message":"Done","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"}],"tempest/scenario/neutron_lbaas/lbaas_manager.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                break"},{"line_number":83,"context_line":"        self.assertTrue(self.pools)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _create_members(self, network_name, server_id):"},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":"        Create two members (using the IPs of the server but with different"},{"line_number":88,"context_line":"        protocol-ports to listen on)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97gA%3D","line":85,"updated":"2013-12-04 11:20:28.000000000","message":"consider server_ids parameter which is a list always.","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        servers \u003d self.compute_client.servers.list()"},{"line_number":91,"context_line":"        for server in servers:"},{"line_number":92,"context_line":"            if isinstance(server_id, list):"},{"line_number":93,"context_line":"                for s_id in server_id:"},{"line_number":94,"context_line":"                    if server.id \u003d\u003d s_id:"},{"line_number":95,"context_line":"                        self.servers.append(server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97f4%3D","line":92,"updated":"2013-12-04 11:20:28.000000000","message":"you can remove this check and code duplication if have server_ids list parameter:\n  for server in servers:\n    if server.id in server_ids:\n      ...","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"d1f63042ef92259fdd9a2ee6e1d4e2cbbfb9a050","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                for s_id in server_id:"},{"line_number":94,"context_line":"                    if server.id \u003d\u003d s_id:"},{"line_number":95,"context_line":"                        self.servers.append(server)"},{"line_number":96,"context_line":"                        ip \u003d server.networks[network_name][0]"},{"line_number":97,"context_line":"                        pool_id \u003d self.pools[0][\u0027id\u0027]"},{"line_number":98,"context_line":"                        member \u003d self._create_member(ip, self.port1, pool_id)"},{"line_number":99,"context_line":"                        self.members.append(member)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97VQ%3D","line":96,"updated":"2013-12-04 11:40:22.000000000","message":"in the first failed Jenkins run, this line threw because \u0027private\u0027 was not found in server.networks","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"unresolved":false,"context_lines":[{"line_number":93,"context_line":"                for s_id in server_id:"},{"line_number":94,"context_line":"                    if server.id \u003d\u003d s_id:"},{"line_number":95,"context_line":"                        self.servers.append(server)"},{"line_number":96,"context_line":"                        ip \u003d server.networks[network_name][0]"},{"line_number":97,"context_line":"                        pool_id \u003d self.pools[0][\u0027id\u0027]"},{"line_number":98,"context_line":"                        member \u003d self._create_member(ip, self.port1, pool_id)"},{"line_number":99,"context_line":"                        self.members.append(member)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97QA%3D","line":96,"in_reply_to":"AAAATn%2F97VQ%3D","updated":"2013-12-04 12:04:33.000000000","message":"Why did that happen?","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":8625,"name":"Anju Tiwari","username":"Anju5","inactive":true},"change_message_id":"344d07c57e229d645eeaaba6789638a4a24b10b8","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _associate_health_monitor(self):"},{"line_number":114,"context_line":"        #We need to wait some time for a health monitor to become"},{"line_number":115,"context_line":"        #before associating it with a pool"},{"line_number":116,"context_line":"        time.sleep(4)"},{"line_number":117,"context_line":"        self._associate_health_monitor_with_pool("},{"line_number":118,"context_line":"            self.health_monitors[0][\u0027id\u0027], self.pools[0][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9eD4%3D","line":115,"updated":"2013-12-11 06:57:33.000000000","message":"Please give Space after #","commit_id":"354ceae0c9c1ae8af63ca977e105001d817c4fb3"}],"tempest/scenario/neutron_lbaas/test_lb_health_monitor.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def check_preconditions(cls):"},{"line_number":40,"context_line":"        super(TestHealthMonitor, cls).check_preconditions()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97fE%3D","line":40,"updated":"2013-12-04 11:20:28.000000000","message":"no need to override if only call parent\u0027s method","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def setUpClass(cls):"},{"line_number":44,"context_line":"        super(TestHealthMonitor, cls).setUpClass()"},{"line_number":45,"context_line":"        cls.check_preconditions()"},{"line_number":46,"context_line":"        cls.health_monitors \u003d []"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _create_servers(self):"},{"line_number":49,"context_line":"        for count in range(2):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97ec%3D","line":46,"updated":"2013-12-04 11:20:28.000000000","message":"I think this should be moved to LbaasManager","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _create_lb(self):"},{"line_number":53,"context_line":"        self._create_load_balancer(self.networks[0][\u0027name\u0027],"},{"line_number":54,"context_line":"                                   [self.servers[0].id, self.servers[1].id])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _create_health_monitor(self):"},{"line_number":57,"context_line":"        health_monitor \u003d super("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97eo%3D","line":54,"updated":"2013-12-04 11:20:28.000000000","message":"nit: [s.id for s in self.servers]","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self._create_load_balancer(self.networks[0][\u0027name\u0027],"},{"line_number":54,"context_line":"                                   [self.servers[0].id, self.servers[1].id])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _create_health_monitor(self):"},{"line_number":57,"context_line":"        health_monitor \u003d super("},{"line_number":58,"context_line":"            TestHealthMonitor, self)._create_health_monitor(1, 1, \u0027HTTP\u0027, 1)"},{"line_number":59,"context_line":"        self.health_monitors.append(health_monitor)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97eM%3D","line":56,"updated":"2013-12-04 11:20:28.000000000","message":"no need for this if move health_monitors to LbaasManager","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.health_monitors.append(health_monitor)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _associate_health_monitor(self):"},{"line_number":62,"context_line":"        time.sleep(10)"},{"line_number":63,"context_line":"        self._associate_health_monitor_with_pool("},{"line_number":64,"context_line":"            self.health_monitors[0][\u0027id\u0027], self.pools[0][\u0027id\u0027])"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97d8%3D","line":62,"updated":"2013-12-04 11:20:28.000000000","message":"10 seconds seems to much time, didn\u0027t it work with 1 sec? Also please consider adding a coment about why need to wait.","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        ssh_login \u003d self.config.compute.image_ssh_user"},{"line_number":73,"context_line":"        private_key \u003d self.keypairs[self.tenant_id].private_key"},{"line_number":74,"context_line":"        network_name \u003d self.networks[0][\u0027name\u0027]"},{"line_number":75,"context_line":"        #ssh to the first instance"},{"line_number":76,"context_line":"        server \u003d self.servers[0]"},{"line_number":77,"context_line":"        ip_address \u003d server.networks[network_name][0]"},{"line_number":78,"context_line":"        ssh_client \u003d ssh.Client(ip_address, ssh_login,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97c4%3D","line":75,"updated":"2013-12-04 11:20:28.000000000","message":"Please avoid code duplication:\n  for server in self.servers:\n    ip_address \u003d ...\n\nhense no need for #86 - #96","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        cmd \u003d start_server % {\u0027server\u0027: \u0027server2\u0027,"},{"line_number":95,"context_line":"                              \u0027port\u0027: self.port1}"},{"line_number":96,"context_line":"        ssh_client.exec_command(cmd)"},{"line_number":97,"context_line":"        time.sleep(15)"},{"line_number":98,"context_line":"        m0 \u003d self.network_client.show_member("},{"line_number":99,"context_line":"            self.members[0][\u0027id\u0027])[\u0027member\u0027]"},{"line_number":100,"context_line":"        m1 \u003d self.network_client.show_member("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97cc%3D","line":97,"updated":"2013-12-04 11:20:28.000000000","message":"why need to sleep here?","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.assertTrue(m0[\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027)"},{"line_number":103,"context_line":"        self.assertTrue(m1[\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _suspend_server(self, server_id):"},{"line_number":106,"context_line":"        self.compute_client.servers.suspend(server_id)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _resume_server(self, server_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97cA%3D","line":105,"updated":"2013-12-04 11:20:28.000000000","message":"the func seems not necessary, please use self.compute_client.servers.suspend(server_id) where needed","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def _suspend_server(self, server_id):"},{"line_number":106,"context_line":"        self.compute_client.servers.suspend(server_id)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _resume_server(self, server_id):"},{"line_number":109,"context_line":"        self.compute_client.servers.resume(server_id)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _check_suspended_server_inactive(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97b8%3D","line":108,"updated":"2013-12-04 11:20:28.000000000","message":"ditto","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.compute_client.servers.resume(server_id)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _check_suspended_server_inactive(self):"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        Suspend the instance, check the member is INACTIVE"},{"line_number":114,"context_line":"        \"\"\""},{"line_number":115,"context_line":"        server \u003d self.servers[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97bY%3D","line":112,"updated":"2013-12-04 11:20:28.000000000","message":"pep257 nit: one liner docstrings:\n  \"\"\"\u003cdocstring\u003e.\"\"\"","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        Suspend the instance, check the member is INACTIVE"},{"line_number":114,"context_line":"        \"\"\""},{"line_number":115,"context_line":"        server \u003d self.servers[0]"},{"line_number":116,"context_line":"        server_id \u003d server.id"},{"line_number":117,"context_line":"        network_name \u003d self.networks[0][\u0027name\u0027]"},{"line_number":118,"context_line":"        self._suspend_server(server_id)"},{"line_number":119,"context_line":"        time.sleep(20)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97bE%3D","line":116,"updated":"2013-12-04 11:20:28.000000000","message":"var seems redundant, please use server.id","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        server_id \u003d server.id"},{"line_number":117,"context_line":"        network_name \u003d self.networks[0][\u0027name\u0027]"},{"line_number":118,"context_line":"        self._suspend_server(server_id)"},{"line_number":119,"context_line":"        time.sleep(20)"},{"line_number":120,"context_line":"        members \u003d self.network_client.list_members()"},{"line_number":121,"context_line":"        for member in members[\u0027members\u0027]:"},{"line_number":122,"context_line":"            if member[\u0027address\u0027] \u003d\u003d server.networks[network_name][0]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97a0%3D","line":119,"updated":"2013-12-04 11:20:28.000000000","message":"again seems too much time to sleep here. LBaaS fetches stats every 6 seconds, please try at least 10 seconds","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        network_name \u003d self.networks[0][\u0027name\u0027]"},{"line_number":118,"context_line":"        self._suspend_server(server_id)"},{"line_number":119,"context_line":"        time.sleep(20)"},{"line_number":120,"context_line":"        members \u003d self.network_client.list_members()"},{"line_number":121,"context_line":"        for member in members[\u0027members\u0027]:"},{"line_number":122,"context_line":"            if member[\u0027address\u0027] \u003d\u003d server.networks[network_name][0]:"},{"line_number":123,"context_line":"                self.assertEqual(member[\u0027status\u0027], \u0027INACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97Z8%3D","line":120,"updated":"2013-12-04 11:20:28.000000000","message":"can you use show_member() here and pass server.id?","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8ae2da8975745662850758e515ab95e2d9422935","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                self.assertEqual(member[\u0027status\u0027], \u0027INACTIVE\u0027)"},{"line_number":124,"context_line":"                break"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _check_resumed_server_active(self):"},{"line_number":127,"context_line":"        \"\"\""},{"line_number":128,"context_line":"        Resume the instance, check the member is ACTIVE again"},{"line_number":129,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97Zs%3D","line":126,"updated":"2013-12-04 11:20:28.000000000","message":"same comments on this func as on _check_suspended_server_inactive()","commit_id":"0522f90fd43e7c7facabbde5d2a93f784284f4a7"},{"author":{"_account_id":9461,"name":"Vijay Kumar Venkatachalam","email":"vijay.venkatachalam@citrix.com","username":"vijayvenkatachalam"},"change_message_id":"8aecfbf6fce506e4d3833c5c7c0ee7e1a5703105","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        for member in self.members:"},{"line_number":88,"context_line":"            if member[\u0027address\u0027] \u003d\u003d server.networks[network_name][0]:"},{"line_number":89,"context_line":"                self._status_timeout(self.network_client,"},{"line_number":90,"context_line":"                                     self.network_client.member_path % ("},{"line_number":91,"context_line":"                                         member[\u0027id\u0027]),"},{"line_number":92,"context_line":"                                     expected_status\u003d\u0027INACTIVE\u0027)"},{"line_number":93,"context_line":"                for i, m in enumerate(self.members):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9M5U%3D","line":90,"updated":"2013-12-14 09:38:05.000000000","message":"The status field in the member does not reflect the operational status it is meant for configuration/deployment status. Suspending the server will not have any affect on the member status.  Especially so for agent less model like NetScaler or Radware.","commit_id":"6c0caf205d87cc8c17225ccf40792a519cd6c86b"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":87,"context_line":"        for member in self.members:"},{"line_number":88,"context_line":"            if member[\u0027address\u0027] \u003d\u003d server.networks[network_name][0]:"},{"line_number":89,"context_line":"                self._status_timeout(self.network_client,"},{"line_number":90,"context_line":"                                     self.network_client.member_path % ("},{"line_number":91,"context_line":"                                         member[\u0027id\u0027]),"},{"line_number":92,"context_line":"                                     expected_status\u003d\u0027INACTIVE\u0027)"},{"line_number":93,"context_line":"                for i, m in enumerate(self.members):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWn%2F%2F7OM%3D","line":90,"in_reply_to":"AAAATn%2F9EbM%3D","updated":"2014-04-08 13:17:42.000000000","message":"Since the current status field is a mixture of provisional / operational I think we need to wait with this test untill we finalize the status in lbaas","commit_id":"6c0caf205d87cc8c17225ccf40792a519cd6c86b"},{"author":{"_account_id":9461,"name":"Vijay Kumar Venkatachalam","email":"vijay.venkatachalam@citrix.com","username":"vijayvenkatachalam"},"change_message_id":"8aecfbf6fce506e4d3833c5c7c0ee7e1a5703105","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        for member in self.members:"},{"line_number":88,"context_line":"            if member[\u0027address\u0027] \u003d\u003d server.networks[network_name][0]:"},{"line_number":89,"context_line":"                self._status_timeout(self.network_client,"},{"line_number":90,"context_line":"                                     self.network_client.member_path % ("},{"line_number":91,"context_line":"                                         member[\u0027id\u0027]),"},{"line_number":92,"context_line":"                                     expected_status\u003d\u0027INACTIVE\u0027)"},{"line_number":93,"context_line":"                for i, m in enumerate(self.members):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9EbM%3D","line":90,"in_reply_to":"AAAATn%2F9J4o%3D","updated":"2013-12-17 04:13:09.000000000","message":"In that is the case, shouldn\u0027t a Driver API method - (update_status/get_status) be present  similar to stats to update operational status. This would be called by the LBaaS plugin at regular intervals similar to the stats. Basically, it is better to keep the stats collection and the operational status update separate and keep the expectation clear in the Driver API level.","commit_id":"6c0caf205d87cc8c17225ccf40792a519cd6c86b"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":87,"context_line":"        for member in self.members:"},{"line_number":88,"context_line":"            if member[\u0027address\u0027] \u003d\u003d server.networks[network_name][0]:"},{"line_number":89,"context_line":"                self._status_timeout(self.network_client,"},{"line_number":90,"context_line":"                                     self.network_client.member_path % ("},{"line_number":91,"context_line":"                                         member[\u0027id\u0027]),"},{"line_number":92,"context_line":"                                     expected_status\u003d\u0027INACTIVE\u0027)"},{"line_number":93,"context_line":"                for i, m in enumerate(self.members):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9J4o%3D","line":90,"in_reply_to":"AAAATn%2F9KKY%3D","updated":"2013-12-16 08:41:51.000000000","message":"There is such expectation. \nOr otherwise how a user will be notified of the health monitoring results? How could that be consumed by some watchdog scripts?\nCurrently with exiting agent-based driver this is done in the scope of regular stats collecting which happens every several seconds.","commit_id":"6c0caf205d87cc8c17225ccf40792a519cd6c86b"},{"author":{"_account_id":9461,"name":"Vijay Kumar Venkatachalam","email":"vijay.venkatachalam@citrix.com","username":"vijayvenkatachalam"},"change_message_id":"8aecfbf6fce506e4d3833c5c7c0ee7e1a5703105","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        for member in self.members:"},{"line_number":88,"context_line":"            if member[\u0027address\u0027] \u003d\u003d server.networks[network_name][0]:"},{"line_number":89,"context_line":"                self._status_timeout(self.network_client,"},{"line_number":90,"context_line":"                                     self.network_client.member_path % ("},{"line_number":91,"context_line":"                                         member[\u0027id\u0027]),"},{"line_number":92,"context_line":"                                     expected_status\u003d\u0027INACTIVE\u0027)"},{"line_number":93,"context_line":"                for i, m in enumerate(self.members):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9KKY%3D","line":90,"in_reply_to":"AAAATn%2F9M00%3D","updated":"2013-12-16 07:10:36.000000000","message":"This means, for agent less model, the driver would need to poll the device at a fixed poll interval and update the openstack DB . \n\nOr else in an agent driver model, the agent will  update the DB directly on knowing about the change in status.\n\nI believe there is no expectation like this? Or is there one?","commit_id":"6c0caf205d87cc8c17225ccf40792a519cd6c86b"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":87,"context_line":"        for member in self.members:"},{"line_number":88,"context_line":"            if member[\u0027address\u0027] \u003d\u003d server.networks[network_name][0]:"},{"line_number":89,"context_line":"                self._status_timeout(self.network_client,"},{"line_number":90,"context_line":"                                     self.network_client.member_path % ("},{"line_number":91,"context_line":"                                         member[\u0027id\u0027]),"},{"line_number":92,"context_line":"                                     expected_status\u003d\u0027INACTIVE\u0027)"},{"line_number":93,"context_line":"                for i, m in enumerate(self.members):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9M00%3D","line":90,"in_reply_to":"AAAATn%2F9M5U%3D","updated":"2013-12-14 11:06:41.000000000","message":"Vijay, that is not correct.\nIf it is so for Netscaler or Radware, they will need to comply.\nThe API should be the same and produce the same output regardless of the provider.\nSuspending server will lead health monitor to report member failure and it will change the status to INACTIVE.","commit_id":"6c0caf205d87cc8c17225ccf40792a519cd6c86b"}],"tempest/scenario/test_lb_health_monitor.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":57,"context_line":"        super(TestHealthMonitor, cls).setUpClass()"},{"line_number":58,"context_line":"        cls.check_preconditions()"},{"line_number":59,"context_line":"        cls.security_groups \u003d {}"},{"line_number":60,"context_line":"        cls.networks \u003d []"},{"line_number":61,"context_line":"        cls.subnets \u003d []"},{"line_number":62,"context_line":"        cls.servers_keypairs \u003d {}"},{"line_number":63,"context_line":"        cls.pools \u003d []"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2FrQM%3D","line":60,"updated":"2014-02-25 10:22:05.000000000","message":"please avoid lists of single item.\nuse self.network and self.subnet instead (and vip, health-monitor...)","commit_id":"e8fe47a9116f8e1e95499c94fc23c14476f52ea9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":76,"context_line":"        name \u003d name"},{"line_number":77,"context_line":"        keypair \u003d self.create_keypair(name\u003d\u0027keypair-%s\u0027 % name)"},{"line_number":78,"context_line":"        security_groups \u003d [self.security_groups[tenant_id].name]"},{"line_number":79,"context_line":"        nets \u003d self.network_client.list_networks()"},{"line_number":80,"context_line":"        for net in nets[\u0027networks\u0027]:"},{"line_number":81,"context_line":"            if net[\u0027tenant_id\u0027] \u003d\u003d self.tenant_id:"},{"line_number":82,"context_line":"                self.networks.append(net)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2FrRk%3D","line":79,"updated":"2014-02-25 10:22:05.000000000","message":"use self._list_networks(tenant_id\u003dself.tenant_id) to filter the query on the server side and avoid the for/if sequence\n\nalso - save net as DeletableNetwork and you can access it as a class net.attr instead of net[\u0027attr\u0027]\n\nsame goes for subnets, vips, and all other objects you are using","commit_id":"e8fe47a9116f8e1e95499c94fc23c14476f52ea9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"                self.networks.append(net)"},{"line_number":83,"context_line":"                create_kwargs \u003d {"},{"line_number":84,"context_line":"                    \u0027nics\u0027: ["},{"line_number":85,"context_line":"                        {\u0027net-id\u0027: net[\u0027id\u0027]},"},{"line_number":86,"context_line":"                    ],"},{"line_number":87,"context_line":"                    \u0027key_name\u0027: keypair.name,"},{"line_number":88,"context_line":"                    \u0027security_groups\u0027: security_groups,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2FrQE%3D","line":85,"updated":"2014-02-25 10:22:05.000000000","message":"see above","commit_id":"e8fe47a9116f8e1e95499c94fc23c14476f52ea9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _create_pool(self):"},{"line_number":130,"context_line":"        \"\"\"Create a pool with ROUND_ROBIN algorithm.\"\"\""},{"line_number":131,"context_line":"        subnets \u003d self.network_client.list_subnets()"},{"line_number":132,"context_line":"        for subnet in subnets[\u0027subnets\u0027]:"},{"line_number":133,"context_line":"            if subnet[\u0027tenant_id\u0027] \u003d\u003d self.tenant_id:"},{"line_number":134,"context_line":"                self.subnets.append(subnet)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2FrP4%3D","line":131,"updated":"2014-02-25 10:22:05.000000000","message":"same here","commit_id":"e8fe47a9116f8e1e95499c94fc23c14476f52ea9"}],"tempest/scenario/test_load_balancer_basic.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def _create_security_groups(self):"},{"line_number":79,"context_line":"        security_group \u003d self._create_security_group_neutron("},{"line_number":80,"context_line":"            tenant_id\u003dself.tenant_id)"},{"line_number":81,"context_line":"        self.security_groups[self.tenant_id] \u003d security_group"},{"line_number":82,"context_line":"        self.addCleanup(self.cleanup_wrapper, security_group)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _create_server(self, name):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F9B8%3D","line":81,"updated":"2014-02-27 07:10:20.000000000","message":"is there more than 1 SecGroup? if not than please use self.security_group\u003dsecurity_group","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a257646b924335aac70172623e8aaa527d3cb05","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def _create_security_groups(self):"},{"line_number":79,"context_line":"        security_group \u003d self._create_security_group_neutron("},{"line_number":80,"context_line":"            tenant_id\u003dself.tenant_id)"},{"line_number":81,"context_line":"        self.security_groups[self.tenant_id] \u003d security_group"},{"line_number":82,"context_line":"        self.addCleanup(self.cleanup_wrapper, security_group)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _create_server(self, name):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2Fv48%3D","line":81,"in_reply_to":"AAAAVX%2F%2F9B8%3D","updated":"2014-02-28 15:37:15.000000000","message":"Done","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":"        for server, ip in self.server_ips.iteritems():"},{"line_number":129,"context_line":"            ssh_login \u003d config.compute.image_ssh_user"},{"line_number":130,"context_line":"            private_key \u003d self.servers_keypairs[server].private_key"},{"line_number":131,"context_line":"            ssh_client \u003d ssh.Client("},{"line_number":132,"context_line":"                ip, ssh_login,"},{"line_number":133,"context_line":"                pkey\u003dprivate_key,"},{"line_number":134,"context_line":"                timeout\u003dconfig.compute.ssh_timeout,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F9A0%3D","line":131,"updated":"2014-02-27 07:10:20.000000000","message":"please handle this as discussed in https://review.openstack.org/#/c/71898/10","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a257646b924335aac70172623e8aaa527d3cb05","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        for server, ip in self.server_ips.iteritems():"},{"line_number":129,"context_line":"            ssh_login \u003d config.compute.image_ssh_user"},{"line_number":130,"context_line":"            private_key \u003d self.servers_keypairs[server].private_key"},{"line_number":131,"context_line":"            ssh_client \u003d ssh.Client("},{"line_number":132,"context_line":"                ip, ssh_login,"},{"line_number":133,"context_line":"                pkey\u003dprivate_key,"},{"line_number":134,"context_line":"                timeout\u003dconfig.compute.ssh_timeout,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2Fv44%3D","line":131,"in_reply_to":"AAAAVX%2F%2F9A0%3D","updated":"2014-02-28 15:37:15.000000000","message":"Done","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":133,"context_line":"                pkey\u003dprivate_key,"},{"line_number":134,"context_line":"                timeout\u003dconfig.compute.ssh_timeout,"},{"line_number":135,"context_line":"                channel_timeout\u003dconfig.compute.ssh_channel_timeout)"},{"line_number":136,"context_line":"            start_server \u003d \"while true; do echo -e \u0027HTTP/1.0 200 OK\\r\\n\\r\\n\" \\"},{"line_number":137,"context_line":"                           \"%(server)s\u0027 | sudo nc -l -p %(port)s ; done \u0026\""},{"line_number":138,"context_line":"            cmd \u003d start_server % {"},{"line_number":139,"context_line":"                \u0027server\u0027: server.name,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F9Aw%3D","line":136,"updated":"2014-02-27 07:10:20.000000000","message":"same here","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":207,"context_line":"            health_monitor_id\u003dself.health_monitor.id,"},{"line_number":208,"context_line":"            pool_id\u003dself.pool.id)"},{"line_number":209,"context_line":"        # We need to wait some time for a health monitor to become"},{"line_number":210,"context_line":"        # ACTIVE after associating it with a pool"},{"line_number":211,"context_line":"        time.sleep(10)"},{"line_number":212,"context_line":"        self.pool \u003d self.network_client.show_pool("},{"line_number":213,"context_line":"            self.pool.id)[\u0027pool\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F87o%3D","line":210,"updated":"2014-02-27 07:10:20.000000000","message":"please use self.status_timeout\ndefined in manager:\nhttps://github.com/openstack/tempest/blob/master/tempest/scenario/manager.py#L169\n\nit might need some tweaking to work for health-monitor, but it\u0027s better than just \"sleep\"","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a257646b924335aac70172623e8aaa527d3cb05","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            health_monitor_id\u003dself.health_monitor.id,"},{"line_number":208,"context_line":"            pool_id\u003dself.pool.id)"},{"line_number":209,"context_line":"        # We need to wait some time for a health monitor to become"},{"line_number":210,"context_line":"        # ACTIVE after associating it with a pool"},{"line_number":211,"context_line":"        time.sleep(10)"},{"line_number":212,"context_line":"        self.pool \u003d self.network_client.show_pool("},{"line_number":213,"context_line":"            self.pool.id)[\u0027pool\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2Fv3w%3D","line":210,"in_reply_to":"AAAAVX%2F%2F87o%3D","updated":"2014-02-28 15:37:15.000000000","message":"I\u0027ve changed NeutronRetriever so it can handle such requests. Does it look acceptable?","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":208,"context_line":"            pool_id\u003dself.pool.id)"},{"line_number":209,"context_line":"        # We need to wait some time for a health monitor to become"},{"line_number":210,"context_line":"        # ACTIVE after associating it with a pool"},{"line_number":211,"context_line":"        time.sleep(10)"},{"line_number":212,"context_line":"        self.pool \u003d self.network_client.show_pool("},{"line_number":213,"context_line":"            self.pool.id)[\u0027pool\u0027]"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F87Q%3D","line":211,"updated":"2014-02-27 07:10:20.000000000","message":"maybe define a timeout in tempest.conf instead of using constant?","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _check_servers_active(self):"},{"line_number":274,"context_line":"        \"\"\"Check that the health monitor marked the members as ACTIVE.\"\"\""},{"line_number":275,"context_line":"        self._status_timeout("},{"line_number":276,"context_line":"            NeutronRetriever("},{"line_number":277,"context_line":"                self.network_client,"},{"line_number":278,"context_line":"                self.network_client.member_path,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F84o%3D","line":275,"updated":"2014-02-27 07:10:20.000000000","message":"this might be nit-picking, but please use self.status_timeout instead (non-private)","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a257646b924335aac70172623e8aaa527d3cb05","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _check_servers_active(self):"},{"line_number":274,"context_line":"        \"\"\"Check that the health monitor marked the members as ACTIVE.\"\"\""},{"line_number":275,"context_line":"        self._status_timeout("},{"line_number":276,"context_line":"            NeutronRetriever("},{"line_number":277,"context_line":"                self.network_client,"},{"line_number":278,"context_line":"                self.network_client.member_path,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2Fv4U%3D","line":275,"in_reply_to":"AAAAVX%2F%2F84o%3D","updated":"2014-02-28 15:37:15.000000000","message":"Done","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":279,"context_line":"                net_common.DeletableMember),"},{"line_number":280,"context_line":"            self.members[0].id,"},{"line_number":281,"context_line":"            expected_status\u003d\u0027ACTIVE\u0027)"},{"line_number":282,"context_line":"        self._status_timeout("},{"line_number":283,"context_line":"            NeutronRetriever("},{"line_number":284,"context_line":"                self.network_client,"},{"line_number":285,"context_line":"                self.network_client.member_path,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F84c%3D","line":282,"updated":"2014-02-27 07:10:20.000000000","message":"same here","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":295,"context_line":"                             server.id, expected_status\u003d\u0027SUSPENDED\u0027)"},{"line_number":296,"context_line":"        for member in self.members:"},{"line_number":297,"context_line":"            if member[\u0027address\u0027] \u003d\u003d server.networks[self.network.name][0]:"},{"line_number":298,"context_line":"                self._status_timeout("},{"line_number":299,"context_line":"                    NeutronRetriever("},{"line_number":300,"context_line":"                        self.network_client,"},{"line_number":301,"context_line":"                        self.network_client.member_path,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F84Y%3D","line":298,"updated":"2014-02-27 07:10:20.000000000","message":"and here...","commit_id":"804d5f74b5c217fd5fbfad5af48dba2da3cdcc1e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":125,"context_line":"            server_name \u003d self.compute_client.servers.get(server_id).name"},{"line_number":126,"context_line":"            ssh_client \u003d self.get_remote_client("},{"line_number":127,"context_line":"                server_or_ip\u003dip,"},{"line_number":128,"context_line":"                username\u003dssh_login,"},{"line_number":129,"context_line":"                private_key\u003dprivate_key).ssh_client"},{"line_number":130,"context_line":"            start_server \u003d \"while true; do echo -e \u0027HTTP/1.0 200 OK\\r\\n\\r\\n\" \\"},{"line_number":131,"context_line":"                           \"%(server)s\u0027 | sudo nc -l -p %(port)s ; done \u0026\""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVX%2F%2Fo94%3D","line":128,"updated":"2014-03-02 07:40:33.000000000","message":"nit - already a default value of the method. no need to pass it","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a257646b924335aac70172623e8aaa527d3cb05","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            server_name \u003d self.compute_client.servers.get(server_id).name"},{"line_number":126,"context_line":"            ssh_client \u003d self.get_remote_client("},{"line_number":127,"context_line":"                server_or_ip\u003dip,"},{"line_number":128,"context_line":"                username\u003dssh_login,"},{"line_number":129,"context_line":"                private_key\u003dprivate_key).ssh_client"},{"line_number":130,"context_line":"            start_server \u003d \"while true; do echo -e \u0027HTTP/1.0 200 OK\\r\\n\\r\\n\" \\"},{"line_number":131,"context_line":"                           \"%(server)s\u0027 | sudo nc -l -p %(port)s ; done \u0026\""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2F6Oc%3D","line":128,"in_reply_to":"AAAAVX%2F%2Fo94%3D","updated":"2014-03-03 13:59:02.000000000","message":"Done","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":299,"context_line":"        for member in self.members:"},{"line_number":300,"context_line":"            if member.address \u003d\u003d self.server_ips[server_id]:"},{"line_number":301,"context_line":"                self._wait_for_member_status(member.id, \u0027INACTIVE\u0027)"},{"line_number":302,"context_line":"                for i, m in enumerate(self.members):"},{"line_number":303,"context_line":"                    member \u003d net_common.DeletableMember("},{"line_number":304,"context_line":"                        client\u003dself.network_client,"},{"line_number":305,"context_line":"                        **self.network_client.show_member("}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVX%2F%2Fo7w%3D","line":302,"updated":"2014-03-02 07:40:33.000000000","message":"please use list-comprehension:\n\ntemp_members \u003d [\nnet_common.DeletableMember(\nclient\u003dself.network_client,\n**self.network_client.show_member(m.id)[\u0027member\u0027])\nfor m in self.members]","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a257646b924335aac70172623e8aaa527d3cb05","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        for member in self.members:"},{"line_number":300,"context_line":"            if member.address \u003d\u003d self.server_ips[server_id]:"},{"line_number":301,"context_line":"                self._wait_for_member_status(member.id, \u0027INACTIVE\u0027)"},{"line_number":302,"context_line":"                for i, m in enumerate(self.members):"},{"line_number":303,"context_line":"                    member \u003d net_common.DeletableMember("},{"line_number":304,"context_line":"                        client\u003dself.network_client,"},{"line_number":305,"context_line":"                        **self.network_client.show_member("}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2F6OY%3D","line":302,"in_reply_to":"AAAAVX%2F%2Fo7w%3D","updated":"2014-03-03 13:59:02.000000000","message":"Done","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"                        **self.network_client.show_member("},{"line_number":306,"context_line":"                            m.id)[\u0027member\u0027])"},{"line_number":307,"context_line":"                    self.members[i] \u003d member"},{"line_number":308,"context_line":"                break"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _check_resumed_server_active(self):"},{"line_number":311,"context_line":"        \"\"\"Resume the instance, check the member is ACTIVE again.\"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVX%2F%2Fo7k%3D","line":308,"updated":"2014-03-02 07:40:33.000000000","message":"since I\u0027m not sure that you can modify a list while iterating over it, then after leaving the for loop:\n\nself.members \u003d temp_members","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":315,"context_line":"        self.status_timeout(self.compute_client.servers,"},{"line_number":316,"context_line":"                            server.id, expected_status\u003d\u0027ACTIVE\u0027)"},{"line_number":317,"context_line":"        for member in self.members:"},{"line_number":318,"context_line":"            if member.address \u003d\u003d self.server_ips[server.id]:"},{"line_number":319,"context_line":"                self._wait_for_member_status(member.id, \u0027ACTIVE\u0027)"},{"line_number":320,"context_line":"                for i, m in enumerate(self.members):"},{"line_number":321,"context_line":"                    member \u003d net_common.DeletableMember("}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVX%2F%2Fo7g%3D","line":318,"updated":"2014-03-02 07:40:33.000000000","message":"same here","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":345,"context_line":"        self._check_resumed_server_active()"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"class NeutronRetriever(object):"},{"line_number":349,"context_line":"    def __init__(self, network_client, path, resource, check_hm\u003dFalse):"},{"line_number":350,"context_line":"        self.network_client \u003d network_client"},{"line_number":351,"context_line":"        self.path \u003d path"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVX%2F%2Fo1A%3D","line":348,"updated":"2014-03-02 07:40:33.000000000","message":"This might just be me, but I can\u0027t fully understand this this object, and the significance of the change. Could you please add some documentation to it, and its usage?","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a257646b924335aac70172623e8aaa527d3cb05","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        self._check_resumed_server_active()"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"class NeutronRetriever(object):"},{"line_number":349,"context_line":"    def __init__(self, network_client, path, resource, check_hm\u003dFalse):"},{"line_number":350,"context_line":"        self.network_client \u003d network_client"},{"line_number":351,"context_line":"        self.path \u003d path"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2F6OQ%3D","line":348,"in_reply_to":"AAAAVX%2F%2Fo1A%3D","updated":"2014-03-03 13:59:02.000000000","message":"I\u0027ve added some documentation","commit_id":"c24c536d8071dc9bea8891139619a213f920e63b"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"affe28db649749d1948d9af2d3d1ef0788d46d80","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            for m in self.members]"},{"line_number":315,"context_line":"        self.members \u003d temp_members"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def _check_resumed_server_active(self):"},{"line_number":318,"context_line":"        \"\"\"Resume the instance, check the member is ACTIVE again.\"\"\""},{"line_number":319,"context_line":"        server \u003d self.compute_client.servers.get("},{"line_number":320,"context_line":"            self.servers_keypairs.keys()[0])"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAWH%2F%2B1TA%3D","line":317,"updated":"2014-03-23 21:40:37.000000000","message":"This function is almost same as _check_suspended_server_inactive(). So I think it\u0027s good to remove the duplication.","commit_id":"4790019027a79b02249a00ddb24356c5c5175365"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_servers(self):"},{"line_number":120,"context_line":"        for count in range(2):"},{"line_number":121,"context_line":"            self._create_server(name\u003d(\"server%s\" % (count + 1)))"},{"line_number":122,"context_line":"        self.assertEqual(len(self.servers_keypairs), 2)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _start_servers(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAWH%2F%2Bhb0%3D","line":121,"updated":"2014-03-26 08:22:50.000000000","message":"shouldn\u0027t server be created with rand_name?","commit_id":"5ffd49015692e9868d3ede2bc2dc4049bcc018ac"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"fe99ec6dafe3f5eb9bfdcfb2efd0512d55299ce1","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_servers(self):"},{"line_number":120,"context_line":"        for count in range(2):"},{"line_number":121,"context_line":"            self._create_server(name\u003d(\"server%s\" % (count + 1)))"},{"line_number":122,"context_line":"        self.assertEqual(len(self.servers_keypairs), 2)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _start_servers(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAWH%2F%2BhFI%3D","line":121,"in_reply_to":"AAAAWH%2F%2Bhb0%3D","updated":"2014-03-26 08:51:01.000000000","message":"It\u0027s done to simplify checking responses from members and make more clear. I don\u0027t think that giving server a random name is a must.","commit_id":"5ffd49015692e9868d3ede2bc2dc4049bcc018ac"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":"        In case there are two instaces each backend is created on a separate"},{"line_number":129,"context_line":"        instance"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        for server_id, ip in self.server_ips.iteritems():"},{"line_number":133,"context_line":"            private_key \u003d self.servers_keypairs[server_id].private_key"},{"line_number":134,"context_line":"            server_name \u003d self.compute_client.servers.get(server_id).name"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAWH%2F%2Bhc8%3D","line":131,"updated":"2014-03-26 08:22:50.000000000","message":"nit:\nhow about:\n\nport_list \u003d [self.port1, self.port2]\nif len(self.server_ips) \u003d\u003d len(port_list):\n  mem_list \u003d zip(self.server_ips, port_list)\nelif len(self.server_ips) \u003c len(port_list):\n  mem_list \u003d [(self.server_ips[0], port) for port in port_list]\nelse:\n  mem_list \u003d [(ip,port_list[0]) for ip in self.server_ips]\n\nfor (server, port) in mem_list:\n\n****that way can be applied for more ips/ports in the future","commit_id":"5ffd49015692e9868d3ede2bc2dc4049bcc018ac"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"fe99ec6dafe3f5eb9bfdcfb2efd0512d55299ce1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        In case there are two instaces each backend is created on a separate"},{"line_number":129,"context_line":"        instance"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        for server_id, ip in self.server_ips.iteritems():"},{"line_number":133,"context_line":"            private_key \u003d self.servers_keypairs[server_id].private_key"},{"line_number":134,"context_line":"            server_name \u003d self.compute_client.servers.get(server_id).name"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAWH%2F%2BhEA%3D","line":131,"in_reply_to":"AAAAWH%2F%2Bhc8%3D","updated":"2014-03-26 08:51:01.000000000","message":"I fear that this approach will make the code much more complex and difficult to read while there are ?o obvious benefits in the foreseeable future.","commit_id":"5ffd49015692e9868d3ede2bc2dc4049bcc018ac"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":246,"context_line":"    def _create_load_balancer(self, vip_connectivity\u003dTrue):"},{"line_number":247,"context_line":"        self._create_pool()"},{"line_number":248,"context_line":"        self._create_members()"},{"line_number":249,"context_line":"        self.vip \u003d super(TestLoadBalancerBasic, self)._create_vip("},{"line_number":250,"context_line":"            protocol\u003d\u0027HTTP\u0027,"},{"line_number":251,"context_line":"            protocol_port\u003d80,"},{"line_number":252,"context_line":"            subnet_id\u003dself.subnet.id,"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAWH%2F%2Bhcs%3D","line":249,"updated":"2014-03-26 08:22:50.000000000","message":"why do you need to call the super? you can use self._create_vip()","commit_id":"5ffd49015692e9868d3ede2bc2dc4049bcc018ac"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"fe99ec6dafe3f5eb9bfdcfb2efd0512d55299ce1","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    def _create_load_balancer(self, vip_connectivity\u003dTrue):"},{"line_number":247,"context_line":"        self._create_pool()"},{"line_number":248,"context_line":"        self._create_members()"},{"line_number":249,"context_line":"        self.vip \u003d super(TestLoadBalancerBasic, self)._create_vip("},{"line_number":250,"context_line":"            protocol\u003d\u0027HTTP\u0027,"},{"line_number":251,"context_line":"            protocol_port\u003d80,"},{"line_number":252,"context_line":"            subnet_id\u003dself.subnet.id,"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAWH%2F%2BhIc%3D","line":249,"in_reply_to":"AAAAWH%2F%2Bhcs%3D","updated":"2014-03-26 08:51:01.000000000","message":"Agreed here.","commit_id":"5ffd49015692e9868d3ede2bc2dc4049bcc018ac"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":343,"context_line":"        self._create_load_balancer(vip_connectivity\u003dFalse)"},{"line_number":344,"context_line":"        self._configure_health_monitor()"},{"line_number":345,"context_line":"        self._check_servers_active()"},{"line_number":346,"context_line":"        self._check_suspended_server_inactive()"},{"line_number":347,"context_line":"        self._check_resumed_server_active()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAWH%2F%2BhQ0%3D","line":346,"updated":"2014-03-26 08:22:50.000000000","message":"there should also be a test to verify no traffic is directed at the inactive member","commit_id":"5ffd49015692e9868d3ede2bc2dc4049bcc018ac"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"unresolved":false,"context_lines":[{"line_number":344,"context_line":"        self._configure_health_monitor()"},{"line_number":345,"context_line":"        self._check_servers_active()"},{"line_number":346,"context_line":"        self._check_suspended_server_inactive()"},{"line_number":347,"context_line":"        self._check_resumed_server_active()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"class NeutronRetriever(object):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAWH%2F%2BhPU%3D","line":347,"updated":"2014-03-26 08:22:50.000000000","message":"and then that traffic is once again shared","commit_id":"5ffd49015692e9868d3ede2bc2dc4049bcc018ac"}]}
