)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"563ff7e54e38443f3195806749ba85bd8019041e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Elena Ezhova \u003ceezhova@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-04-18 17:38:13 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP Switch back to nc in test_load_balancer_basic"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ida919c63e27c6a003be4c249ba2e6f3e2ea7a7b3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAXX%2F%2Fu3w%3D","line":7,"updated":"2014-04-28 11:56:37.000000000","message":"A line here about why the revert is needed would be good.","commit_id":"b1f128a064fe30a9eedfc5085777485bc276114d"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"563ff7e54e38443f3195806749ba85bd8019041e","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-04-18 17:38:13 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP Switch back to nc in test_load_balancer_basic"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ida919c63e27c6a003be4c249ba2e6f3e2ea7a7b3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAXX%2F%2Fu4M%3D","line":8,"updated":"2014-04-28 11:56:37.000000000","message":"Please add the related bug(s).","commit_id":"b1f128a064fe30a9eedfc5085777485bc276114d"}],"tempest/common/commands.py":[{"author":{"_account_id":1531,"name":"Ilya Kharin","email":"akscram@gmail.com","username":"akscram"},"change_message_id":"a181012f10332b112e234fe459ab1f10d8422196","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    try:"},{"line_number":93,"context_line":"        proc \u003d subprocess.Popen(args, **subprocess_args)"},{"line_number":94,"context_line":"        return proc.communicate()[0]"},{"line_number":95,"context_line":"        if proc.returncode !\u003d 0:"},{"line_number":96,"context_line":"            LOG.error(cmd + \"returned with: \" +"},{"line_number":97,"context_line":"                      proc.returncode + \"exit status\")"},{"line_number":98,"context_line":"    except subprocess.CalledProcessError as e:"},{"line_number":99,"context_line":"        LOG.error(\"command output:\\n%s\" % e.output)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_c3499361","line":97,"range":{"start_line":95,"start_character":0,"end_line":97,"end_character":54},"updated":"2014-05-16 11:59:25.000000000","message":"I suggest that these 95-97 lines never executed because there is a return statement before them.","commit_id":"fc5539bae2a9acca0093901f6547d2d37817b1ce"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"975fa2dd9e47229897d6abb121a8d8098d853d51","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        return proc.communicate()[0]"},{"line_number":95,"context_line":"        if proc.returncode !\u003d 0:"},{"line_number":96,"context_line":"            LOG.error(cmd + \"returned with: \" +"},{"line_number":97,"context_line":"                      proc.returncode + \"exit status\")"},{"line_number":98,"context_line":"    except subprocess.CalledProcessError as e:"},{"line_number":99,"context_line":"        LOG.error(\"command output:\\n%s\" % e.output)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_3c8178fb","line":97,"in_reply_to":"7adec928_c3499361","updated":"2014-05-16 15:02:43.000000000","message":"Thank you for mentioning this! Will fix in the next patchset.","commit_id":"fc5539bae2a9acca0093901f6547d2d37817b1ce"},{"author":{"_account_id":1531,"name":"Ilya Kharin","email":"akscram@gmail.com","username":"akscram"},"change_message_id":"a181012f10332b112e234fe459ab1f10d8422196","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        if proc.returncode !\u003d 0:"},{"line_number":96,"context_line":"            LOG.error(cmd + \"returned with: \" +"},{"line_number":97,"context_line":"                      proc.returncode + \"exit status\")"},{"line_number":98,"context_line":"    except subprocess.CalledProcessError as e:"},{"line_number":99,"context_line":"        LOG.error(\"command output:\\n%s\" % e.output)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_03ec5b29","line":98,"updated":"2014-05-16 11:59:25.000000000","message":"According to the documentation [1] the subprocess.CalledProcessError raised only for both check_call() or check_output() functions but not for communicate().\n\n[1] https://docs.python.org/2/library/subprocess.html#subprocess.CalledProcessError","commit_id":"fc5539bae2a9acca0093901f6547d2d37817b1ce"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"975fa2dd9e47229897d6abb121a8d8098d853d51","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        if proc.returncode !\u003d 0:"},{"line_number":96,"context_line":"            LOG.error(cmd + \"returned with: \" +"},{"line_number":97,"context_line":"                      proc.returncode + \"exit status\")"},{"line_number":98,"context_line":"    except subprocess.CalledProcessError as e:"},{"line_number":99,"context_line":"        LOG.error(\"command output:\\n%s\" % e.output)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_dc717445","line":98,"in_reply_to":"7adec928_03ec5b29","updated":"2014-05-16 15:02:43.000000000","message":"Nice catch, thanks!","commit_id":"fc5539bae2a9acca0093901f6547d2d37817b1ce"}],"tempest/scenario/test_load_balancer_basic.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"e3d4992c6c7a4359264b014ffc5235215f18015f","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        \"\"\""},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        self._check_connection(self.vip_ip)"},{"line_number":271,"context_line":"        self._send_requests(self.vip_ip, set([\"server1\\n\", \"server2\\n\"]))"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _send_requests(self, vip_ip, expected, num_req\u003d10):"},{"line_number":274,"context_line":"        count \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad9bd40_ea282d88","line":271,"updated":"2014-05-06 05:30:47.000000000","message":"missed the check for shared between the two servers or don\u0027t need it?","commit_id":"e0777522191963842ada52d0e574f6372eccdd3c"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"7a85a9104ebe84b2d19dac5a86d63ecf38a056c2","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        \"\"\""},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        self._check_connection(self.vip_ip)"},{"line_number":271,"context_line":"        self._send_requests(self.vip_ip, set([\"server1\\n\", \"server2\\n\"]))"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _send_requests(self, vip_ip, expected, num_req\u003d10):"},{"line_number":274,"context_line":"        count \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad9bd40_d5bceade","line":271,"in_reply_to":"9ad9bd40_ea282d88","updated":"2014-05-06 07:14:54.000000000","message":"The check is now performed \"on the go\" in the _send_requests method. In each iteration I perform as many calls to the VIP as many members I have and check that each time I recieve different answers. This way I also make sure that all the requests are distributed equally.","commit_id":"e0777522191963842ada52d0e574f6372eccdd3c"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"e3d4992c6c7a4359264b014ffc5235215f18015f","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                    resp.append("},{"line_number":280,"context_line":"                        urllib2.urlopen("},{"line_number":281,"context_line":"                            \"http://{0}/\".format(vip_ip)).read())"},{"line_number":282,"context_line":"                    print(resp)"},{"line_number":283,"context_line":"                count +\u003d 1"},{"line_number":284,"context_line":"                self.assertEqual(expected,"},{"line_number":285,"context_line":"                                 set(resp))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad9bd40_e71a287c","line":282,"updated":"2014-05-06 05:30:47.000000000","message":"print should be deleted","commit_id":"e0777522191963842ada52d0e574f6372eccdd3c"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"7a85a9104ebe84b2d19dac5a86d63ecf38a056c2","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                    resp.append("},{"line_number":280,"context_line":"                        urllib2.urlopen("},{"line_number":281,"context_line":"                            \"http://{0}/\".format(vip_ip)).read())"},{"line_number":282,"context_line":"                    print(resp)"},{"line_number":283,"context_line":"                count +\u003d 1"},{"line_number":284,"context_line":"                self.assertEqual(expected,"},{"line_number":285,"context_line":"                                 set(resp))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad9bd40_b56766b6","line":282,"in_reply_to":"9ad9bd40_e71a287c","updated":"2014-05-06 07:14:54.000000000","message":"Thank you, I will remove it","commit_id":"e0777522191963842ada52d0e574f6372eccdd3c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a26808a8523345a6cf4faa4b1106de145da056e5","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                            \"\"\"\u0027HTTP/1.0 200 OK\"\"\" \\"},{"line_number":153,"context_line":"                            \"\"\"\\\\\\\\r\\\\\\\\nContent-Length: 8\"\"\" \\"},{"line_number":154,"context_line":"                            \"\"\"\\\\\\\\r\\\\\\\\n\\\\\\\\r\\\\\\\\n\"\"\" \\"},{"line_number":155,"context_line":"                            \"\"\"%(server)s\u0027\" \u003e\u003e/home/cirros/%(script)s\"\"\""},{"line_number":156,"context_line":"            cmd \u003d create_script % {\u0027server\u0027: server_name,"},{"line_number":157,"context_line":"                                   \u0027script\u0027: \u0027script1\u0027}"},{"line_number":158,"context_line":"            ssh_client.exec_command(cmd)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_103ddf8f","line":155,"updated":"2014-05-09 12:25:12.000000000","message":"Can we actually put this into a file instead? It\u0027s really hard to review with all the escaping, and would be much better as just a file that we pull in and push to the server.\n\nI\u0027d much rather do that via an scp once the guest comes up than through the multi level escaping via a user script.","commit_id":"391f8971d381418794042f1a70b5ccc1eb714ba3"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"d51c34d31a3f47cbeb1b932bd02ecbb87c3b8a94","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                            \"\"\"\u0027HTTP/1.0 200 OK\"\"\" \\"},{"line_number":153,"context_line":"                            \"\"\"\\\\\\\\r\\\\\\\\nContent-Length: 8\"\"\" \\"},{"line_number":154,"context_line":"                            \"\"\"\\\\\\\\r\\\\\\\\n\\\\\\\\r\\\\\\\\n\"\"\" \\"},{"line_number":155,"context_line":"                            \"\"\"%(server)s\u0027\" \u003e\u003e/home/cirros/%(script)s\"\"\""},{"line_number":156,"context_line":"            cmd \u003d create_script % {\u0027server\u0027: server_name,"},{"line_number":157,"context_line":"                                   \u0027script\u0027: \u0027script1\u0027}"},{"line_number":158,"context_line":"            ssh_client.exec_command(cmd)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_8e69a7c0","line":155,"in_reply_to":"7adec928_103ddf8f","updated":"2014-05-13 09:03:57.000000000","message":"Okay, I will do this in the next patch set.","commit_id":"391f8971d381418794042f1a70b5ccc1eb714ba3"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"c124cef53931908d15424ffcce0d9cf761720503","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                            \"\"\"\u0027HTTP/1.0 200 OK\"\"\" \\"},{"line_number":153,"context_line":"                            \"\"\"\\\\\\\\r\\\\\\\\nContent-Length: 8\"\"\" \\"},{"line_number":154,"context_line":"                            \"\"\"\\\\\\\\r\\\\\\\\n\\\\\\\\r\\\\\\\\n\"\"\" \\"},{"line_number":155,"context_line":"                            \"\"\"%(server)s\u0027\" \u003e\u003e/home/cirros/%(script)s\"\"\""},{"line_number":156,"context_line":"            cmd \u003d create_script % {\u0027server\u0027: server_name,"},{"line_number":157,"context_line":"                                   \u0027script\u0027: \u0027script1\u0027}"},{"line_number":158,"context_line":"            ssh_client.exec_command(cmd)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_5ab03643","line":155,"in_reply_to":"7adec928_8e69a7c0","updated":"2014-05-13 15:48:09.000000000","message":"Done","commit_id":"391f8971d381418794042f1a70b5ccc1eb714ba3"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"79145483aba81b9c59b29f20875a9baa7f17469c","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    key.write(private_key)"},{"line_number":160,"context_line":"                    key.flush()"},{"line_number":161,"context_line":"                    commands.copy_file_to_host(script.name,"},{"line_number":162,"context_line":"                                               \"/home/cirros/script1\","},{"line_number":163,"context_line":"                                               ip,"},{"line_number":164,"context_line":"                                               username, key.name)"},{"line_number":165,"context_line":"            # Start netcat"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_5739bd3f","line":162,"updated":"2014-05-16 15:53:31.000000000","message":"Is \u0027/home/cirros\u0027 directory always exist?","commit_id":"fc5539bae2a9acca0093901f6547d2d37817b1ce"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"6eab9c6fa143120894358abd6668ac04022c52cf","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    key.write(private_key)"},{"line_number":160,"context_line":"                    key.flush()"},{"line_number":161,"context_line":"                    commands.copy_file_to_host(script.name,"},{"line_number":162,"context_line":"                                               \"/home/cirros/script1\","},{"line_number":163,"context_line":"                                               ip,"},{"line_number":164,"context_line":"                                               username, key.name)"},{"line_number":165,"context_line":"            # Start netcat"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_921fd307","line":162,"in_reply_to":"7adec928_5739bd3f","updated":"2014-05-16 16:12:15.000000000","message":"Well, there is only one default image that is always used and it has \u0027cirros\u0027 as a default user. So I think that this directory is always present.","commit_id":"fc5539bae2a9acca0093901f6547d2d37817b1ce"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"61d78c89b53612c9fc62419f5e553e0a484e5f40","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    key.write(private_key)"},{"line_number":160,"context_line":"                    key.flush()"},{"line_number":161,"context_line":"                    commands.copy_file_to_host(script.name,"},{"line_number":162,"context_line":"                                               \"/home/cirros/script1\","},{"line_number":163,"context_line":"                                               ip,"},{"line_number":164,"context_line":"                                               username, key.name)"},{"line_number":165,"context_line":"            # Start netcat"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_da34df4b","line":162,"in_reply_to":"7adec928_75a30e00","updated":"2014-05-19 08:08:31.000000000","message":"agree with Masayuki.  It\u0027s better to check if the dir exists. (or use /tmp?)","commit_id":"fc5539bae2a9acca0093901f6547d2d37817b1ce"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"cbb6fff72bfb57779e4403b6012e3b39ea804adc","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    key.write(private_key)"},{"line_number":160,"context_line":"                    key.flush()"},{"line_number":161,"context_line":"                    commands.copy_file_to_host(script.name,"},{"line_number":162,"context_line":"                                               \"/home/cirros/script1\","},{"line_number":163,"context_line":"                                               ip,"},{"line_number":164,"context_line":"                                               username, key.name)"},{"line_number":165,"context_line":"            # Start netcat"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_75a30e00","line":162,"in_reply_to":"7adec928_921fd307","updated":"2014-05-16 20:45:06.000000000","message":"hmm, I think tempest users can change the default image, right? If so, this should be configurable. It increases options of tempest.conf, though.","commit_id":"fc5539bae2a9acca0093901f6547d2d37817b1ce"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"fb9d38d22fbbafb5383e0b0b59db74058c0fac38","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    key.write(private_key)"},{"line_number":160,"context_line":"                    key.flush()"},{"line_number":161,"context_line":"                    commands.copy_file_to_host(script.name,"},{"line_number":162,"context_line":"                                               \"/home/cirros/script1\","},{"line_number":163,"context_line":"                                               ip,"},{"line_number":164,"context_line":"                                               username, key.name)"},{"line_number":165,"context_line":"            # Start netcat"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_31ea41db","line":162,"in_reply_to":"7adec928_da34df4b","updated":"2014-05-19 11:21:12.000000000","message":"I\u0027m thinking of making it \"~/\". It should do the trick.","commit_id":"fc5539bae2a9acca0093901f6547d2d37817b1ce"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"c21d8c1622c25c47ac2bc8493c1904cba95f4c4a","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    key.write(private_key)"},{"line_number":160,"context_line":"                    key.flush()"},{"line_number":161,"context_line":"                    commands.copy_file_to_host(script.name,"},{"line_number":162,"context_line":"                                               \"~/script1\","},{"line_number":163,"context_line":"                                               ip,"},{"line_number":164,"context_line":"                                               username, key.name)"},{"line_number":165,"context_line":"            # Start netcat"}],"source_content_type":"text/x-python","patch_set":10,"id":"7adec928_e0db687b","line":162,"updated":"2014-05-21 07:00:38.000000000","message":"I think we can use \"/tmp\" here as Zhi said. But not strong opinion.","commit_id":"6e73f468cf924587b32f94f41a33ab9a7a90fa96"}]}
