)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"2317b6bff1e6187d9262beb4852996757bb8c28c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Fixed the code to retry on ssh error as per"},{"line_number":10,"context_line":"eqli_cli_max_retries parameter"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Added a unit test to ensure retries"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes Bug: #1441719"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7aaa499b_abfeceab","line":12,"updated":"2015-04-15 16:05:10.000000000","message":"It is not necessary to say this.  It is kind of a given that patches should have unit tests with it.","commit_id":"99bae57d9298c9fbaad471253ed4a898d7d592ce"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"00711b02fc43ab8cbf08f155b4c579cc3ec832e7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fixes the retries on Network Connection Error"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixed the code to retry on ssh error as per"},{"line_number":10,"context_line":"eqli_cli_max_retries parameter"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5aa745d1_f5fd536f","line":10,"updated":"2015-04-16 04:43:13.000000000","message":"In the bug report, it described clearly why this change is needed. Can you add a little more details to this commit message?","commit_id":"470f73cee109ca8019d09f38dacf793ad33986b4"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"32f5b4f1b7e237a8e5724c8f5ba8655c23c5c4af","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes Bug: #1441719"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I54b76afc6c9c5d51dd9c38831ee0a1c731c7b161"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5aa745d1_ca1d0411","line":14,"updated":"2015-04-16 11:33:15.000000000","message":"Closes-Bug","commit_id":"470f73cee109ca8019d09f38dacf793ad33986b4"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"7b1dba672116b8192eefe9c606bb85e4eec2cd65","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     rajinir \u003crajini_ram@dell.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-28 14:18:21 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fixes the retries on Network Connection Error"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Volume creations were failing due to ssh connection"},{"line_number":10,"context_line":"errors throwing ProcessExecutionError"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1aca2d91_ed92df4a","line":7,"updated":"2015-05-07 15:52:27.000000000","message":"If further chang is required, please update the commit message title to add \u0027Eqlx: \u0027 prefix.  Thanks.","commit_id":"29b3ecfbe850528afc9aeb53a0ba1b0a37e8cc5d"}],"cinder/tests/test_eqlx.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8327f3c0bdb414bcb4793f3fac3ef76197572334","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        num_attempts \u003d 3"},{"line_number":351,"context_line":"        self.driver.configuration.eqlx_cli_max_retries \u003d num_attempts"},{"line_number":352,"context_line":"        self.mock_object(self.driver, \u0027_ssh_execute\u0027,"},{"line_number":353,"context_line":"                         mock.Mock(side_effect\u003dprocessutils.ProcessExecutionError("},{"line_number":354,"context_line":"                stdout\u003d\u0027% Error ... some error.\\n\u0027)))"},{"line_number":355,"context_line":"        # mocks for calls in _run_ssh"},{"line_number":356,"context_line":"        self.mock_object(utils, \u0027check_ssh_injection\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa53dc9_8525220a","line":353,"updated":"2015-04-09 20:09:22.000000000","message":"This line is too long. Maybe line break on the opening Mock(","commit_id":"0bf6903c2fb7480520269cd6e3f50cfc2f15f6b5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8327f3c0bdb414bcb4793f3fac3ef76197572334","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        self.driver.configuration.eqlx_cli_max_retries \u003d num_attempts"},{"line_number":352,"context_line":"        self.mock_object(self.driver, \u0027_ssh_execute\u0027,"},{"line_number":353,"context_line":"                         mock.Mock(side_effect\u003dprocessutils.ProcessExecutionError("},{"line_number":354,"context_line":"                stdout\u003d\u0027% Error ... some error.\\n\u0027)))"},{"line_number":355,"context_line":"        # mocks for calls in _run_ssh"},{"line_number":356,"context_line":"        self.mock_object(utils, \u0027check_ssh_injection\u0027)"},{"line_number":357,"context_line":"        self.mock_object(ssh_utils, \u0027SSHPool\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa53dc9_45727a12","line":354,"updated":"2015-04-09 20:09:22.000000000","message":"And this line will have to be aligned.","commit_id":"0bf6903c2fb7480520269cd6e3f50cfc2f15f6b5"}],"cinder/tests/unit/test_eqlx.py":[{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"db7ca86d7693e4f5d2d954ed24a6e740a61d1f1d","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        self.driver.configuration.eqlx_cli_max_retries \u003d num_attempts"},{"line_number":352,"context_line":"        self.mock_object(self.driver, \u0027_ssh_execute\u0027,"},{"line_number":353,"context_line":"                         mock.Mock(side_effect\u003d"},{"line_number":354,"context_line":"                                   processutils.ProcessExecutionError"},{"line_number":355,"context_line":"                                   (stdout\u003d\u0027% Error ... some error.\\n\u0027)))"},{"line_number":356,"context_line":"        # mocks for calls in _run_ssh"},{"line_number":357,"context_line":"        self.mock_object(utils, \u0027check_ssh_injection\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_ad23c7a6","line":354,"updated":"2015-05-07 15:42:28.000000000","message":"It should be: side_effect\u003dexception.VolumeBackendAPIException(\"some error\") because you check below self.assertRaises(exception.VolumeBackendAPIException,self.driver._eql_execute, \"fake command\") and you delete lines: \nexcept processutils.ProcessExecutionError:\n    raise \nin https://review.openstack.org/#/c/171736/6/cinder/volume/drivers/eqlx.py","commit_id":"29b3ecfbe850528afc9aeb53a0ba1b0a37e8cc5d"}],"cinder/volume/drivers/eqlx.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"3de5461e59065314806caa3afd2298fc5b05e1c5","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                        return self._ssh_execute("},{"line_number":246,"context_line":"                            ssh, command,"},{"line_number":247,"context_line":"                            timeout\u003dself.configuration.eqlx_cli_timeout)"},{"line_number":248,"context_line":"                    except Exception as e:"},{"line_number":249,"context_line":"                        LOG.exception(e)"},{"line_number":250,"context_line":"                        greenthread.sleep(random.randint(20, 500) / 100.0)"},{"line_number":251,"context_line":"                msg \u003d (_(\"SSH Command failed after \u0027%(total_attempts)r\u0027 \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aa745d1_5edd2841","line":248,"updated":"2015-04-16 17:42:38.000000000","message":"would it be safer/better to go ahead and have a special except exclusively for the timeout and only retry in that case?  Or do you want to just have a blanket retry here?\n\nYou might want to consider looking at the utils.retry decorator while you\u0027re at it.","commit_id":"abe2d7e501049a051730bbf169c3110bb7240ccf"},{"author":{"_account_id":10379,"name":"Rajini Karthik","email":"rrajini@gmail.com","username":"rajinir"},"change_message_id":"712c2b2b434983ea90462aaa6968427220c072f8","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                        return self._ssh_execute("},{"line_number":246,"context_line":"                            ssh, command,"},{"line_number":247,"context_line":"                            timeout\u003dself.configuration.eqlx_cli_timeout)"},{"line_number":248,"context_line":"                    except Exception as e:"},{"line_number":249,"context_line":"                        LOG.exception(e)"},{"line_number":250,"context_line":"                        greenthread.sleep(random.randint(20, 500) / 100.0)"},{"line_number":251,"context_line":"                msg \u003d (_(\"SSH Command failed after \u0027%(total_attempts)r\u0027 \""}],"source_content_type":"text/x-python","patch_set":5,"id":"3ab451fb_94e278d4","line":248,"in_reply_to":"5aa745d1_5edd2841","updated":"2015-04-17 16:03:45.000000000","message":"John, this would cover more than a timeout error. The errors we saw in the CI logs were not timeout, they were other network issues.\n\nIn the future we will consider your util.retry decorator.","commit_id":"abe2d7e501049a051730bbf169c3110bb7240ccf"}]}
