)]}'
{"cinder/tests/test_eqlx.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7fb5828416604965a23dad8bf961db77f1dc7ad2","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        self.mock_object(self.driver, \u0027_ssh_execute\u0027,"},{"line_number":332,"context_line":"                         mock.Mock(side_effect\u003dexception."},{"line_number":333,"context_line":"                                   VolumeBackendAPIException(\"some error\")))"},{"line_number":334,"context_line":"        #mocks for calls in _run_ssh"},{"line_number":335,"context_line":"        self.mock_object(utils, \u0027check_ssh_injection\u0027)"},{"line_number":336,"context_line":"        self.mock_object(ssh_utils, \u0027SSHPool\u0027)"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_7b4e0271","line":334,"updated":"2015-01-22 16:31:07.000000000","message":"Need space between # and first letter. First letter should be capitalized.","commit_id":"1ab2065a661e5fa4c16c5f3fba215f9a92070d39"},{"author":{"_account_id":10379,"name":"Rajini Karthik","email":"rrajini@gmail.com","username":"rajinir"},"change_message_id":"56e2eeea0a5f6d8ed7082228f5331ed73ceb7b73","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        self.mock_object(self.driver, \u0027_ssh_execute\u0027,"},{"line_number":332,"context_line":"                         mock.Mock(side_effect\u003dexception."},{"line_number":333,"context_line":"                                   VolumeBackendAPIException(\"some error\")))"},{"line_number":334,"context_line":"        #mocks for calls in _run_ssh"},{"line_number":335,"context_line":"        self.mock_object(utils, \u0027check_ssh_injection\u0027)"},{"line_number":336,"context_line":"        self.mock_object(ssh_utils, \u0027SSHPool\u0027)"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_3163bbdd","line":334,"in_reply_to":"1a930d6b_7b4e0271","updated":"2015-01-22 17:14:53.000000000","message":"Will do.","commit_id":"1ab2065a661e5fa4c16c5f3fba215f9a92070d39"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7fb5828416604965a23dad8bf961db77f1dc7ad2","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                                    max_size\u003d1)"},{"line_number":343,"context_line":"        self.mock_object(sshpool.item(), \u0027close\u0027)"},{"line_number":344,"context_line":"        self.driver.sshpool \u003d mock.Mock(return_value\u003dsshpool)"},{"line_number":345,"context_line":"        #now call the execute"},{"line_number":346,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"},{"line_number":347,"context_line":"                          self.driver._eql_execute, \"fake command\")"},{"line_number":348,"context_line":"        self.assertEqual(num_attempts + 1,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_bb586a33","line":345,"updated":"2015-01-22 16:31:07.000000000","message":"Same as above.","commit_id":"1ab2065a661e5fa4c16c5f3fba215f9a92070d39"},{"author":{"_account_id":10379,"name":"Rajini Karthik","email":"rrajini@gmail.com","username":"rajinir"},"change_message_id":"56e2eeea0a5f6d8ed7082228f5331ed73ceb7b73","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                                    max_size\u003d1)"},{"line_number":343,"context_line":"        self.mock_object(sshpool.item(), \u0027close\u0027)"},{"line_number":344,"context_line":"        self.driver.sshpool \u003d mock.Mock(return_value\u003dsshpool)"},{"line_number":345,"context_line":"        #now call the execute"},{"line_number":346,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"},{"line_number":347,"context_line":"                          self.driver._eql_execute, \"fake command\")"},{"line_number":348,"context_line":"        self.assertEqual(num_attempts + 1,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_719c63c1","line":345,"in_reply_to":"1a930d6b_bb586a33","updated":"2015-01-22 17:14:53.000000000","message":"Yep","commit_id":"1ab2065a661e5fa4c16c5f3fba215f9a92070d39"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7fb5828416604965a23dad8bf961db77f1dc7ad2","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                          self.driver._eql_execute, \"fake command\")"},{"line_number":348,"context_line":"        self.assertEqual(num_attempts + 1,"},{"line_number":349,"context_line":"                         self.driver._ssh_execute.call_count)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def test_with_timeout(self):"},{"line_number":352,"context_line":"        @eqlx.with_timeout"},{"line_number":353,"context_line":"        def no_timeout(cmd, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_9bd48e48","line":350,"updated":"2015-01-22 16:31:07.000000000","message":"Can we get a unit test that mocks chan.recv to return a zero length string to cause the path to go through the changed code?","commit_id":"1ab2065a661e5fa4c16c5f3fba215f9a92070d39"},{"author":{"_account_id":10379,"name":"Rajini Karthik","email":"rrajini@gmail.com","username":"rajinir"},"change_message_id":"56e2eeea0a5f6d8ed7082228f5331ed73ceb7b73","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                          self.driver._eql_execute, \"fake command\")"},{"line_number":348,"context_line":"        self.assertEqual(num_attempts + 1,"},{"line_number":349,"context_line":"                         self.driver._ssh_execute.call_count)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def test_with_timeout(self):"},{"line_number":352,"context_line":"        @eqlx.with_timeout"},{"line_number":353,"context_line":"        def no_timeout(cmd, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_51e3e732","line":350,"in_reply_to":"1a930d6b_9bd48e48","updated":"2015-01-22 17:14:53.000000000","message":"Agree, another  could write another unit test for chan.recv in the _get_output will be a good addition.\n\nOverall , I see the unit tests could be improved and converted to use mock and patch decorators!","commit_id":"1ab2065a661e5fa4c16c5f3fba215f9a92070d39"}],"cinder/volume/drivers/eqlx.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"5afdbc564e301410f6088853cfdb89bbdfa48069","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                except Exception as e:"},{"line_number":225,"context_line":"                    LOG.exception(e)"},{"line_number":226,"context_line":"                    greenthread.sleep(random.randint(20, 500) / 100.0)"},{"line_number":227,"context_line":"            msg \u003d (_(\"SSH Command failed after \u0027%(total_attempts)r\u0027 \""},{"line_number":228,"context_line":"                     \"attempts : \u0027%(command)s\u0027\") %"},{"line_number":229,"context_line":"                   {\u0027total_attempts\u0027: total_attempts, \u0027command\u0027: command})"},{"line_number":230,"context_line":"            ssh.close()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_241616a8","line":227,"updated":"2015-01-22 19:52:01.000000000","message":"Isn\u0027t this just always going to report the value passes in as attempts?  I don\u0027 t see this being adjusted anywhere, or total_attempts - attempts \u003d attempt_number\n?","commit_id":"1ab2065a661e5fa4c16c5f3fba215f9a92070d39"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"48f68894996d68b82f717768cbbcf6fd668745f5","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                   {\u0027total_attempts\u0027: total_attempts - attempts,"},{"line_number":230,"context_line":"                    \u0027command\u0027: command})"},{"line_number":231,"context_line":"            ssh.close()"},{"line_number":232,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        except Exception:"},{"line_number":235,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_ff7d5ee8","line":232,"updated":"2015-01-23 11:40:01.000000000","message":"There is a very similar implementation of _run_ssh() in SanDriver:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/san.py#L104\n\nI think, this function should be taken out and made available probably in processutils. so that it can be used by other  drivers.","commit_id":"440beba26d0bc6c27ff837a6772c05a901ec23de"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"ec110c2ddb20f26d7d0c62e4dd975b314e472aca","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                   {\u0027total_attempts\u0027: total_attempts - attempts,"},{"line_number":230,"context_line":"                    \u0027command\u0027: command})"},{"line_number":231,"context_line":"            ssh.close()"},{"line_number":232,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        except Exception:"},{"line_number":235,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_f30c9bef","line":232,"in_reply_to":"1a930d6b_e50dc791","updated":"2015-01-24 04:56:31.000000000","message":"Fine, I agree, will take back my -1. But, we need to avoid duplicate code and make such generic utility code available at a common place. How do we track that work?","commit_id":"440beba26d0bc6c27ff837a6772c05a901ec23de"},{"author":{"_account_id":10379,"name":"Rajini Karthik","email":"rrajini@gmail.com","username":"rajinir"},"change_message_id":"12ad032e6fd30e0571c3af2b6c7d1ca9b8cb8a48","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                   {\u0027total_attempts\u0027: total_attempts - attempts,"},{"line_number":230,"context_line":"                    \u0027command\u0027: command})"},{"line_number":231,"context_line":"            ssh.close()"},{"line_number":232,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        except Exception:"},{"line_number":235,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa81d914_7ef8f9e5","line":232,"in_reply_to":"1a930d6b_f30c9bef","updated":"2015-01-27 20:08:05.000000000","message":"Posted a bug in Launchpad to track this\nhttps://bugs.launchpad.net/cinder/+bug/1415186","commit_id":"440beba26d0bc6c27ff837a6772c05a901ec23de"},{"author":{"_account_id":10379,"name":"Rajini Karthik","email":"rrajini@gmail.com","username":"rajinir"},"change_message_id":"31344079f28ac93774b175cc1379d3a7790b1580","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                   {\u0027total_attempts\u0027: total_attempts - attempts,"},{"line_number":230,"context_line":"                    \u0027command\u0027: command})"},{"line_number":231,"context_line":"            ssh.close()"},{"line_number":232,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        except Exception:"},{"line_number":235,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_e50dc791","line":232,"in_reply_to":"1a930d6b_ff7d5ee8","updated":"2015-01-23 16:06:58.000000000","message":"Agree. As sean mentioned, outside the scope of this CR.","commit_id":"440beba26d0bc6c27ff837a6772c05a901ec23de"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"47790d16aee5ed3751310e5baaa0cfd991a3d5c7","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                   {\u0027total_attempts\u0027: total_attempts - attempts,"},{"line_number":230,"context_line":"                    \u0027command\u0027: command})"},{"line_number":231,"context_line":"            ssh.close()"},{"line_number":232,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        except Exception:"},{"line_number":235,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_5c22fb01","line":232,"in_reply_to":"1a930d6b_ff7d5ee8","updated":"2015-01-23 13:37:37.000000000","message":"I think it would be good to have a common implementation, but that should be another patch and is outside the scope of what this patch is trying to address.","commit_id":"440beba26d0bc6c27ff837a6772c05a901ec23de"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"838afaad5bf04536ac7cb2b79751508e5f984791","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                   {\u0027total_attempts\u0027: total_attempts - attempts,"},{"line_number":230,"context_line":"                    \u0027command\u0027: command})"},{"line_number":231,"context_line":"            ssh.close()"},{"line_number":232,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        except Exception:"},{"line_number":235,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa81d914_651d8b0f","line":232,"in_reply_to":"fa81d914_7ef8f9e5","updated":"2015-01-28 20:28:47.000000000","message":"Filing a bug is the minimum for this, so thanks for doing that","commit_id":"440beba26d0bc6c27ff837a6772c05a901ec23de"}]}
