)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"2fbe4c8b490e244b2a81402380389c604e3b81b4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Teruaki Ishizaki \u003cishizaki.teruaki@lab.ntt.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-30 18:55:21 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"sheepdog: Add class for dog command executor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add SheepdogClient Class for executing"},{"line_number":10,"context_line":"Sheepdog management command \u0027dog\u0027."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba3cc151_9a934f4f","line":7,"updated":"2015-07-01 06:20:55.000000000","message":"sheepdog \u003d \u003e Sheepdog","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"6ae6b7793f8a33c647516d7ea921404077ad77a2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Teruaki Ishizaki \u003cishizaki.teruaki@lab.ntt.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-30 18:55:21 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"sheepdog: Add class for dog command executor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add SheepdogClient Class for executing"},{"line_number":10,"context_line":"Sheepdog management command \u0027dog\u0027."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba3cc151_b7ff41a9","line":7,"in_reply_to":"ba3cc151_9a934f4f","updated":"2015-07-02 03:19:06.000000000","message":"I\u0027ll change it","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"2fbe4c8b490e244b2a81402380389c604e3b81b4","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"sheepdog: Add class for dog command executor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add SheepdogClient Class for executing"},{"line_number":10,"context_line":"Sheepdog management command \u0027dog\u0027."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In addition, we have implemented check_for_setup_error"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba3cc151_5a9dc757","line":9,"updated":"2015-07-01 06:20:55.000000000","message":"add \u003d\u003e adds","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"6ae6b7793f8a33c647516d7ea921404077ad77a2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"sheepdog: Add class for dog command executor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add SheepdogClient Class for executing"},{"line_number":10,"context_line":"Sheepdog management command \u0027dog\u0027."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In addition, we have implemented check_for_setup_error"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba3cc151_372a512d","line":9,"in_reply_to":"ba3cc151_5a9dc757","updated":"2015-07-02 03:19:06.000000000","message":"I\u0027ll change it","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"786ee4ee2e41d8b0ca26e42643fae4fdb97121c4","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In addition, we have implemented check_for_setup_error"},{"line_number":13,"context_line":"with the Class\u0027s method."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I738c23b9213ebd781ab399a3198551c8b8dfe382"},{"line_number":16,"context_line":"Depends-On: I8f6a82b046cfd1268092cc79111b9faedafe3c8b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba3cc151_fa037b40","line":14,"updated":"2015-07-01 06:21:32.000000000","message":"Related link to bug or BP?","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"6ae6b7793f8a33c647516d7ea921404077ad77a2","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In addition, we have implemented check_for_setup_error"},{"line_number":13,"context_line":"with the Class\u0027s method."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I738c23b9213ebd781ab399a3198551c8b8dfe382"},{"line_number":16,"context_line":"Depends-On: I8f6a82b046cfd1268092cc79111b9faedafe3c8b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba3cc151_272d15a8","line":14,"in_reply_to":"ba3cc151_fa037b40","updated":"2015-07-02 03:19:06.000000000","message":"This patch adds fine grained logs related to Sheepdog and enables administrators to recover error caused by Sheepdog more easily.\n\nSo, this patch is not just a bug and a new features.","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"e0dde2b2906be29063614ee880d04622baf3b248","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In addition, we have implemented check_for_setup_error"},{"line_number":13,"context_line":"with the Class\u0027s method."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I738c23b9213ebd781ab399a3198551c8b8dfe382"},{"line_number":16,"context_line":"Depends-On: I8f6a82b046cfd1268092cc79111b9faedafe3c8b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"1a4dcd0f_15af3f95","line":14,"updated":"2015-08-04 16:34:37.000000000","message":"Does this partially implement some blueprint? Also, does this have some sort of impact? Just wondering, thanks!","commit_id":"641d94757a36414a651e2c4da6ad898c42f2a113"}],"cinder/exception.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2afdbfa385cf286590ad6d33b7548ec7b9724a27","unresolved":false,"context_lines":[{"line_number":966,"context_line":""},{"line_number":967,"context_line":"# Sheepdog"},{"line_number":968,"context_line":"class SheepdogError(VolumeBackendAPIException):"},{"line_number":969,"context_line":"    message \u003d _(\"%(reason)s\")"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"class SheepdogCmdError(SheepdogError):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_cea00f45","line":969,"updated":"2015-06-24 01:35:46.000000000","message":"This exception doesn\u0027t add anything. Just use VolumeBackendAPIException.","commit_id":"c42427e8635eee919594221c78303d1b1955add4"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"b4991721fdea9fbc45b7faaad088ee3e9319ed1b","unresolved":false,"context_lines":[{"line_number":966,"context_line":""},{"line_number":967,"context_line":"# Sheepdog"},{"line_number":968,"context_line":"class SheepdogError(VolumeBackendAPIException):"},{"line_number":969,"context_line":"    message \u003d _(\"%(reason)s\")"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"class SheepdogCmdError(SheepdogError):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_35e511db","line":969,"in_reply_to":"fa32b979_cea00f45","updated":"2015-06-25 05:45:30.000000000","message":"I want to add information tag \u0027SheepdogError\u0027 to the exception message because users can verify the exception is caused by Sheepdog Volume Driver.\n\nI\u0027ll add some messages.","commit_id":"c42427e8635eee919594221c78303d1b1955add4"}],"cinder/tests/unit/test_sheepdog.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2afdbfa385cf286590ad6d33b7548ec7b9724a27","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \u0027display_name\u0027: \u0027vol1\u0027,"},{"line_number":61,"context_line":"        \u0027display_description\u0027: \u0027unit test volume\u0027,"},{"line_number":62,"context_line":"        \u0027volume_type_id\u0027: None,"},{"line_number":63,"context_line":"        \u0027consistencygroup_id\u0027: None"},{"line_number":64,"context_line":"    }"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    COLLIE_NODE_INFO \u003d \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_ae690bfa","line":63,"updated":"2015-06-24 01:35:46.000000000","message":"Dict\u0027s over 80 characters should end in a comma per the guidelines. Not a big deal, but if updating then it would be good to fix.","commit_id":"c42427e8635eee919594221c78303d1b1955add4"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"b4991721fdea9fbc45b7faaad088ee3e9319ed1b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \u0027display_name\u0027: \u0027vol1\u0027,"},{"line_number":61,"context_line":"        \u0027display_description\u0027: \u0027unit test volume\u0027,"},{"line_number":62,"context_line":"        \u0027volume_type_id\u0027: None,"},{"line_number":63,"context_line":"        \u0027consistencygroup_id\u0027: None"},{"line_number":64,"context_line":"    }"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    COLLIE_NODE_INFO \u003d \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_4e7da26b","line":63,"in_reply_to":"fa32b979_ae690bfa","updated":"2015-06-25 05:45:30.000000000","message":"OK, I\u0027ll add a comma to tail of the dict.","commit_id":"c42427e8635eee919594221c78303d1b1955add4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2afdbfa385cf286590ad6d33b7548ec7b9724a27","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                fake_execute.side_effect \u003d OSError(expected_errno,"},{"line_number":156,"context_line":"                                                   expected_msg)"},{"line_number":157,"context_line":"                self.assertRaises(OSError, self.client._run_dog, *args)"},{"line_number":158,"context_line":"                fake_logger.error.assert_called_with(expected_log)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test_run_dog_os_error_unknown(self):"},{"line_number":161,"context_line":"        args \u003d (\u0027cluster\u0027, \u0027info\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_ae37cbfc","line":158,"updated":"2015-06-24 01:35:46.000000000","message":"Please don\u0027t assert on exact log text. OK to verify that LOG.error was called, but don\u0027t limit it to exact text.","commit_id":"c42427e8635eee919594221c78303d1b1955add4"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"b4991721fdea9fbc45b7faaad088ee3e9319ed1b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                fake_execute.side_effect \u003d OSError(expected_errno,"},{"line_number":156,"context_line":"                                                   expected_msg)"},{"line_number":157,"context_line":"                self.assertRaises(OSError, self.client._run_dog, *args)"},{"line_number":158,"context_line":"                fake_logger.error.assert_called_with(expected_log)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test_run_dog_os_error_unknown(self):"},{"line_number":161,"context_line":"        args \u003d (\u0027cluster\u0027, \u0027info\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_ceb7721f","line":158,"in_reply_to":"fa32b979_ae37cbfc","updated":"2015-06-25 05:45:30.000000000","message":"If I don\u0027t need to check the error log text, either test_run_dog_os_error_command_not_found() and test_run_dog_os_error_unknown() is needed.\n\nIs it right?","commit_id":"c42427e8635eee919594221c78303d1b1955add4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c72e7de9e76773704ff16c97601050f649472d16","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                fake_execute.return_value \u003d (stdout, stderr)"},{"line_number":166,"context_line":"                self.client.check_cluster_status()"},{"line_number":167,"context_line":"            fake_execute.assert_called_once_with(*expected_cmd)"},{"line_number":168,"context_line":"            fake_logger.debug.assert_called_with(expected_log)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def test_check_cluster_status_0_5(self):"},{"line_number":171,"context_line":"        def fake_stats(*args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_67ae2b83","line":168,"updated":"2015-06-26 22:31:52.000000000","message":"Please don\u0027t assert on exact logger text. If it is relevant to functionality that a log message was done then just verify the mocked logger was called.","commit_id":"89bbe72c9063b530cf350105393499376cd24f60"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a1138e7f9a544b492b60690f9a8986e9b00ade50","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                fake_execute.return_value \u003d (stdout, stderr)"},{"line_number":166,"context_line":"                self.client.check_cluster_status()"},{"line_number":167,"context_line":"            fake_execute.assert_called_once_with(*expected_cmd)"},{"line_number":168,"context_line":"            fake_logger.debug.assert_called_with(expected_log)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def test_check_cluster_status_0_5(self):"},{"line_number":171,"context_line":"        def fake_stats(*args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_991dfa68","line":168,"in_reply_to":"ba3cc151_2906f520","updated":"2015-06-29 13:51:06.000000000","message":"Yes, that looks good to me. Thanks!\n\nFor test_check_cluster_status_error_waiting_formatted maybe it would be better to just validate it has the recommended command in the output. That way if the text changes it should still give the command that needs to be run. I would think that\u0027s the important part. Something like:\n\nself.assertTrue(\u0027dog cluster format\u0027 in ex.kwargs[\u0027reason\u0027])","commit_id":"89bbe72c9063b530cf350105393499376cd24f60"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"7f4ae68efe546d816a08ab6407b829332b291e8a","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                fake_execute.return_value \u003d (stdout, stderr)"},{"line_number":166,"context_line":"                self.client.check_cluster_status()"},{"line_number":167,"context_line":"            fake_execute.assert_called_once_with(*expected_cmd)"},{"line_number":168,"context_line":"            fake_logger.debug.assert_called_with(expected_log)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def test_check_cluster_status_0_5(self):"},{"line_number":171,"context_line":"        def fake_stats(*args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_b7d6acc3","line":168,"in_reply_to":"ba3cc151_991dfa68","updated":"2015-06-30 05:20:41.000000000","message":"Thanks for your comment.\n\nI can write a recomend command just in \u0027test_check_cluster_status_error_waiting_formatted\u0027 but in other test cases, I can not write so just.\n\nSo I willl not change about checking exception messages.","commit_id":"89bbe72c9063b530cf350105393499376cd24f60"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"782506a4115002b3026c22f5046dc3492eb272d1","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                fake_execute.return_value \u003d (stdout, stderr)"},{"line_number":166,"context_line":"                self.client.check_cluster_status()"},{"line_number":167,"context_line":"            fake_execute.assert_called_once_with(*expected_cmd)"},{"line_number":168,"context_line":"            fake_logger.debug.assert_called_with(expected_log)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def test_check_cluster_status_0_5(self):"},{"line_number":171,"context_line":"        def fake_stats(*args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_2906f520","line":168,"in_reply_to":"fa32b979_67ae2b83","updated":"2015-06-29 02:54:05.000000000","message":"Thanks for your comment. I\u0027ll change like followings: \n\nbefore: fake_logger.debug.assert_called_with(expected_log)\n\nafter   : self.assertTrue(fake_logger.debug.called)\n\nIs it okay to check the reason of the exception like \u0027test_check_cluster_status_error_waiting_formatted\u0027 ?\n\nI can change if it is unnecessary to check the reason of the exception in unit tests.","commit_id":"89bbe72c9063b530cf350105393499376cd24f60"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f110e66be230f67c030fd8481bcc09e0957816d8","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.test_data \u003d SheepdogDriverTestDataGenerator()"},{"line_number":224,"context_line":"        self.client \u003d self.driver.client"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    # test for _run_dog method"},{"line_number":227,"context_line":"    def test_run_dog(self):"},{"line_number":228,"context_line":"        expected_cmd \u003d self.test_data.CMD_DOG_CLUSTER_INFO"},{"line_number":229,"context_line":"        with mock.patch.object(self.client, \u0027_execute\u0027) as fake_execute:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_36006c34","line":226,"updated":"2015-06-29 19:01:19.000000000","message":"Comment not really needed...","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"91f5d75036e56f1c59219829c752cb17ae80f62a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.test_data \u003d SheepdogDriverTestDataGenerator()"},{"line_number":224,"context_line":"        self.client \u003d self.driver.client"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    # test for _run_dog method"},{"line_number":227,"context_line":"    def test_run_dog(self):"},{"line_number":228,"context_line":"        expected_cmd \u003d self.test_data.CMD_DOG_CLUSTER_INFO"},{"line_number":229,"context_line":"        with mock.patch.object(self.client, \u0027_execute\u0027) as fake_execute:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_37e37ca5","line":226,"in_reply_to":"ba3cc151_36006c34","updated":"2015-06-30 05:19:13.000000000","message":"I\u0027ll delete the comment","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f110e66be230f67c030fd8481bcc09e0957816d8","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                self.assertRaises(OSError, self.client._run_dog, *args)"},{"line_number":243,"context_line":"                self.assertTrue(fake_logger.error.called)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    # test for check_cluster_status method"},{"line_number":246,"context_line":"    def test_check_cluster_status(self):"},{"line_number":247,"context_line":"        stdout \u003d self.test_data.DOG_CLUSTER_RUNNING"},{"line_number":248,"context_line":"        stderr \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_56e8907c","line":245,"updated":"2015-06-29 19:01:19.000000000","message":"Comment not really needed...","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"91f5d75036e56f1c59219829c752cb17ae80f62a","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                self.assertRaises(OSError, self.client._run_dog, *args)"},{"line_number":243,"context_line":"                self.assertTrue(fake_logger.error.called)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    # test for check_cluster_status method"},{"line_number":246,"context_line":"    def test_check_cluster_status(self):"},{"line_number":247,"context_line":"        stdout \u003d self.test_data.DOG_CLUSTER_RUNNING"},{"line_number":248,"context_line":"        stderr \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_d7eed08a","line":245,"in_reply_to":"ba3cc151_56e8907c","updated":"2015-06-30 05:19:13.000000000","message":"I\u0027ll delete the comment","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"2fbe4c8b490e244b2a81402380389c604e3b81b4","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder import exception"},{"line_number":28,"context_line":"from cinder import utils"},{"line_number":29,"context_line":"from cinder.i18n import _, _LE"},{"line_number":30,"context_line":"from cinder.image import image_utils"},{"line_number":31,"context_line":"from cinder import test"},{"line_number":32,"context_line":"from cinder.volume import configuration as conf"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_dad797eb","line":29,"updated":"2015-07-01 06:20:55.000000000","message":"Put Line 28 under Line 31","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"6ae6b7793f8a33c647516d7ea921404077ad77a2","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder import exception"},{"line_number":28,"context_line":"from cinder import utils"},{"line_number":29,"context_line":"from cinder.i18n import _, _LE"},{"line_number":30,"context_line":"from cinder.image import image_utils"},{"line_number":31,"context_line":"from cinder import test"},{"line_number":32,"context_line":"from cinder.volume import configuration as conf"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_071fb16c","line":29,"in_reply_to":"ba3cc151_dad797eb","updated":"2015-07-02 03:19:06.000000000","message":"I\u0027ll change it","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"2fbe4c8b490e244b2a81402380389c604e3b81b4","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        expected_msg \u003d \u0027No such file or directory\u0027"},{"line_number":237,"context_line":"        expected_errno \u003d errno.ENOENT"},{"line_number":238,"context_line":"        with mock.patch.object(utils, \u0027execute\u0027) as fake_execute:"},{"line_number":239,"context_line":"            with mock.patch.object(sheepdog, \u0027LOG\u0027) as fake_logger:"},{"line_number":240,"context_line":"                fake_execute.side_effect \u003d OSError(expected_errno,"},{"line_number":241,"context_line":"                                                   expected_msg)"},{"line_number":242,"context_line":"                self.assertRaises(OSError, self.client._run_dog, *args)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_faf93b81","line":239,"updated":"2015-07-01 06:20:55.000000000","message":"The same comment as I mentioned in another patch.\nThis line can be put in the decorator.","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"6ae6b7793f8a33c647516d7ea921404077ad77a2","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        expected_msg \u003d \u0027No such file or directory\u0027"},{"line_number":237,"context_line":"        expected_errno \u003d errno.ENOENT"},{"line_number":238,"context_line":"        with mock.patch.object(utils, \u0027execute\u0027) as fake_execute:"},{"line_number":239,"context_line":"            with mock.patch.object(sheepdog, \u0027LOG\u0027) as fake_logger:"},{"line_number":240,"context_line":"                fake_execute.side_effect \u003d OSError(expected_errno,"},{"line_number":241,"context_line":"                                                   expected_msg)"},{"line_number":242,"context_line":"                self.assertRaises(OSError, self.client._run_dog, *args)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_c259b736","line":239,"in_reply_to":"ba3cc151_faf93b81","updated":"2015-07-02 03:19:06.000000000","message":"I\u0027ll replace here and the other lines you pointed out to the decorator","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"2fbe4c8b490e244b2a81402380389c604e3b81b4","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        stderr \u003d \u0027\u0027"},{"line_number":248,"context_line":"        expected_cmd \u003d (\u0027cluster\u0027, \u0027info\u0027)"},{"line_number":249,"context_line":"        with mock.patch.object(self.client, \u0027_run_dog\u0027) as fake_execute:"},{"line_number":250,"context_line":"            with mock.patch.object(sheepdog, \u0027LOG\u0027) as fake_logger:"},{"line_number":251,"context_line":"                fake_execute.return_value \u003d (stdout, stderr)"},{"line_number":252,"context_line":"                self.client.check_cluster_status()"},{"line_number":253,"context_line":"                fake_execute.assert_called_once_with(*expected_cmd)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_baf3b39d","line":250,"updated":"2015-07-01 06:20:55.000000000","message":"The same comment as I mentioned in another patch.\nThis line can be put in the decorator.","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"2fbe4c8b490e244b2a81402380389c604e3b81b4","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                                                         stdout\u003dstdout,"},{"line_number":303,"context_line":"                                                         stderr\u003dstderr)"},{"line_number":304,"context_line":"        with mock.patch.object(self.client, \u0027_run_dog\u0027) as fake_execute:"},{"line_number":305,"context_line":"            with mock.patch.object(sheepdog, \u0027LOG\u0027) as fake_logger:"},{"line_number":306,"context_line":"                fake_execute.side_effect \u003d exception.SheepdogCmdError("},{"line_number":307,"context_line":"                    cmd\u003dcmd, exit_code\u003dexit_code,"},{"line_number":308,"context_line":"                    stdout\u003dstdout.replace(\u0027\\n\u0027, \u0027\\\\n\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_9a2fcff5","line":305,"updated":"2015-07-01 06:20:55.000000000","message":"The same comment as I mentioned in another patch.\nThis line can be put in the decorator.","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ace88997122d56fafd000169251a517a629f025","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        fake_logger.reset_mock()"},{"line_number":275,"context_line":"        fake_execute.reset_mock()"},{"line_number":276,"context_line":"        stdout \u003d self.test_data.DOG_CLUSTER_INFO_TO_BE_FORMATTED"},{"line_number":277,"context_line":"        expected_reason \u003d _LE(\u0027Cluster is not formatted. \u0027"},{"line_number":278,"context_line":"                              \u0027You should probably perform \u0027"},{"line_number":279,"context_line":"                              \u0027\"dog cluster format\".\u0027)"},{"line_number":280,"context_line":"        fake_execute.return_value \u003d (stdout, stderr)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_fde7073e","line":277,"updated":"2015-07-07 13:30:12.000000000","message":"This exception string should be marked for translation with _(), not )LE().\n\nI really would prefer the unit tests didn\u0027t check exact text, just that an expected exception was thrown.","commit_id":"0feb4180db1d03a19741be621d669e939ddc4f3f"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"6b738f0537961dee5e589cbb32b3a121643f66f9","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        fake_logger.reset_mock()"},{"line_number":275,"context_line":"        fake_execute.reset_mock()"},{"line_number":276,"context_line":"        stdout \u003d self.test_data.DOG_CLUSTER_INFO_TO_BE_FORMATTED"},{"line_number":277,"context_line":"        expected_reason \u003d _LE(\u0027Cluster is not formatted. \u0027"},{"line_number":278,"context_line":"                              \u0027You should probably perform \u0027"},{"line_number":279,"context_line":"                              \u0027\"dog cluster format\".\u0027)"},{"line_number":280,"context_line":"        fake_execute.return_value \u003d (stdout, stderr)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_c4c24e53","line":277,"in_reply_to":"ba3cc151_fde7073e","updated":"2015-07-08 02:08:59.000000000","message":"Thanks for your comment.\nI\u0027ll change _LE() to _().\n\nAnd I would like to check exact text because I should verify code coverage for error cases.","commit_id":"0feb4180db1d03a19741be621d669e939ddc4f3f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ace88997122d56fafd000169251a517a629f025","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        fake_logger.reset_mock()"},{"line_number":287,"context_line":"        fake_execute.reset_mock()"},{"line_number":288,"context_line":"        stdout \u003d self.test_data.DOG_CLUSTER_INFO_WAITING_OTHER_NODES"},{"line_number":289,"context_line":"        expected_reason \u003d _LE(\u0027Waiting for all nodes to join cluster. \u0027"},{"line_number":290,"context_line":"                              \u0027Ensure all sheep daemons are running.\u0027)"},{"line_number":291,"context_line":"        fake_execute.return_value \u003d (stdout, stderr)"},{"line_number":292,"context_line":"        ex \u003d self.assertRaises(exception.SheepdogError,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_ddd3235e","line":289,"updated":"2015-07-07 13:30:12.000000000","message":"Same.","commit_id":"0feb4180db1d03a19741be621d669e939ddc4f3f"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"6b738f0537961dee5e589cbb32b3a121643f66f9","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        fake_logger.reset_mock()"},{"line_number":287,"context_line":"        fake_execute.reset_mock()"},{"line_number":288,"context_line":"        stdout \u003d self.test_data.DOG_CLUSTER_INFO_WAITING_OTHER_NODES"},{"line_number":289,"context_line":"        expected_reason \u003d _LE(\u0027Waiting for all nodes to join cluster. \u0027"},{"line_number":290,"context_line":"                              \u0027Ensure all sheep daemons are running.\u0027)"},{"line_number":291,"context_line":"        fake_execute.return_value \u003d (stdout, stderr)"},{"line_number":292,"context_line":"        ex \u003d self.assertRaises(exception.SheepdogError,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_44adde99","line":289,"in_reply_to":"ba3cc151_ddd3235e","updated":"2015-07-08 02:08:59.000000000","message":"Same.","commit_id":"0feb4180db1d03a19741be621d669e939ddc4f3f"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"aa8d39b3ba375d733994b5b1a1d183f8b236a11d","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        self.assertRaises(IOError, self.vdi_wrapper.fileno)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# test for SheeepdogClient Class"},{"line_number":220,"context_line":"class SheepdogClientTestCase(test.TestCase):"},{"line_number":221,"context_line":"    def setUp(self):"},{"line_number":222,"context_line":"        super(SheepdogClientTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_ae002e02","line":219,"updated":"2015-07-08 13:44:41.000000000","message":"s/test/Test/","commit_id":"6b14b959c93aa604f6965b0c691f78bc39e6b094"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"469bd0ae612f791efdcc9383dde64e639b4e04ba","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        self.assertRaises(IOError, self.vdi_wrapper.fileno)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# test for SheeepdogClient Class"},{"line_number":220,"context_line":"class SheepdogClientTestCase(test.TestCase):"},{"line_number":221,"context_line":"    def setUp(self):"},{"line_number":222,"context_line":"        super(SheepdogClientTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_f75b4220","line":219,"in_reply_to":"ba3cc151_805f3240","updated":"2015-07-09 02:35:30.000000000","message":"OK, I\u0027ll remove this comment","commit_id":"6b14b959c93aa604f6965b0c691f78bc39e6b094"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"c51aab0e3c75b40fb70312951b60773d19dad3fe","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        self.assertRaises(IOError, self.vdi_wrapper.fileno)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# test for SheeepdogClient Class"},{"line_number":220,"context_line":"class SheepdogClientTestCase(test.TestCase):"},{"line_number":221,"context_line":"    def setUp(self):"},{"line_number":222,"context_line":"        super(SheepdogClientTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_805f3240","line":219,"in_reply_to":"ba3cc151_ae002e02","updated":"2015-07-08 15:14:49.000000000","message":"Or remove the comment, since it is just repeating what the class name already says","commit_id":"6b14b959c93aa604f6965b0c691f78bc39e6b094"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"aa8d39b3ba375d733994b5b1a1d183f8b236a11d","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        self.assertEqual(expected_msg, ex.msg)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"# test for SheeepdogDriver Class"},{"line_number":341,"context_line":"class SheepdogDriverTestCase(test.TestCase):"},{"line_number":342,"context_line":"    def setUp(self):"},{"line_number":343,"context_line":"        super(SheepdogDriverTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_8e0bea23","line":340,"updated":"2015-07-08 13:44:41.000000000","message":"s/test/Test/","commit_id":"6b14b959c93aa604f6965b0c691f78bc39e6b094"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"469bd0ae612f791efdcc9383dde64e639b4e04ba","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        self.assertEqual(expected_msg, ex.msg)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"# test for SheeepdogDriver Class"},{"line_number":341,"context_line":"class SheepdogDriverTestCase(test.TestCase):"},{"line_number":342,"context_line":"    def setUp(self):"},{"line_number":343,"context_line":"        super(SheepdogDriverTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_979d16be","line":340,"in_reply_to":"ba3cc151_407e0ab0","updated":"2015-07-09 02:35:30.000000000","message":"OK, I\u0027ll remove this comment","commit_id":"6b14b959c93aa604f6965b0c691f78bc39e6b094"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"c51aab0e3c75b40fb70312951b60773d19dad3fe","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        self.assertEqual(expected_msg, ex.msg)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"# test for SheeepdogDriver Class"},{"line_number":341,"context_line":"class SheepdogDriverTestCase(test.TestCase):"},{"line_number":342,"context_line":"    def setUp(self):"},{"line_number":343,"context_line":"        super(SheepdogDriverTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_407e0ab0","line":340,"in_reply_to":"ba3cc151_8e0bea23","updated":"2015-07-08 15:14:49.000000000","message":"Or just remove the comment, the class name is clear","commit_id":"6b14b959c93aa604f6965b0c691f78bc39e6b094"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"b9527856841afee13df2b143e9172f0be02a37fd","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027)"},{"line_number":281,"context_line":"    @mock.patch.object(sheepdog, \u0027LOG\u0027)"},{"line_number":282,"context_line":"    def test_run_dog(self, fake_logger, fake_execute):"},{"line_number":283,"context_line":"        args \u003d (\u0027cluster\u0027, \u0027info\u0027)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        # Test1: success"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a41bdd9_d8736814","line":282,"updated":"2015-07-17 09:11:47.000000000","message":"it it bad practice to combine a lot of test cases in one, could you split them.","commit_id":"ffd61ace393da55127f83b0cceef0776bdc5694c"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"5e6c16b58877349413ca806309529fabaa71c00f","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027)"},{"line_number":281,"context_line":"    @mock.patch.object(sheepdog, \u0027LOG\u0027)"},{"line_number":282,"context_line":"    def test_run_dog(self, fake_logger, fake_execute):"},{"line_number":283,"context_line":"        args \u003d (\u0027cluster\u0027, \u0027info\u0027)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        # Test1: success"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a50d1a3_fb9f2801","line":282,"in_reply_to":"9a41bdd9_337b977d","updated":"2015-07-21 03:46:46.000000000","message":"Because of the comment about reducing code, so I gathered all the tests of one method previously.\n\nOK, I\u0027ll split test cases.","commit_id":"ffd61ace393da55127f83b0cceef0776bdc5694c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"e7ad8e7f520b26a4067209a8feb569a25056e49b","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027)"},{"line_number":281,"context_line":"    @mock.patch.object(sheepdog, \u0027LOG\u0027)"},{"line_number":282,"context_line":"    def test_run_dog(self, fake_logger, fake_execute):"},{"line_number":283,"context_line":"        args \u003d (\u0027cluster\u0027, \u0027info\u0027)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        # Test1: success"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a41bdd9_337b977d","line":282,"in_reply_to":"9a41bdd9_d8736814","updated":"2015-07-17 09:22:39.000000000","message":"Agree.","commit_id":"ffd61ace393da55127f83b0cceef0776bdc5694c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"425946057d9534e24b302783c9593b7932968fc7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        return _(\u0027(Command: %(cmd)s) \u0027"},{"line_number":49,"context_line":"                 \u0027(Return Code: %(exit_code)s) \u0027"},{"line_number":50,"context_line":"                 \u0027(Stdout: %(stdout)s) \u0027"},{"line_number":51,"context_line":"                 \u0027(Stderr: %(stderr)s)\u0027) % \\"},{"line_number":52,"context_line":"            {\u0027cmd\u0027: cmd, \u0027exit_code\u0027: exit_code,"},{"line_number":53,"context_line":"             \u0027stdout\u0027: stdout.replace(\u0027\\n\u0027, \u0027\\\\n\u0027),"},{"line_number":54,"context_line":"             \u0027stderr\u0027: stderr.replace(\u0027\\n\u0027, \u0027\\\\n\u0027)}"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a50d1a3_c506bb85","line":51,"updated":"2015-07-22 09:55:11.000000000","message":"From: http://docs.openstack.org/developer/hacking\n\n\"It is preferred to wrap long lines in parentheses and not a backslash for line continuation.\"","commit_id":"6ab60e06dfc2e1deb08f01faf3668715eae0b698"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"425946057d9534e24b302783c9593b7932968fc7","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                 \u0027(Stderr: %(stderr)s)\u0027) % \\"},{"line_number":52,"context_line":"            {\u0027cmd\u0027: cmd, \u0027exit_code\u0027: exit_code,"},{"line_number":53,"context_line":"             \u0027stdout\u0027: stdout.replace(\u0027\\n\u0027, \u0027\\\\n\u0027),"},{"line_number":54,"context_line":"             \u0027stderr\u0027: stderr.replace(\u0027\\n\u0027, \u0027\\\\n\u0027)}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _make_fake_volume(self, volume_data):"},{"line_number":57,"context_line":"        return fake_volume.fake_volume_obj(context.get_admin_context(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a50d1a3_25d75fee","line":54,"updated":"2015-07-22 09:55:11.000000000","message":"See http://docs.openstack.org/developer/hacking/#dictionaries-lists.","commit_id":"6ab60e06dfc2e1deb08f01faf3668715eae0b698"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"4aa929705b7441176282c2c523d15c7fd0b2c443","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.TEST_VOLUME \u003d self._make_fake_volume(self.TEST_VOL_DATA)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def sheepdog_cmd_error(self, cmd, exit_code, stdout, stderr):"},{"line_number":48,"context_line":"        return (_(\u0027(Command: %(cmd)s) \u0027"},{"line_number":49,"context_line":"                  \u0027(Return Code: %(exit_code)s) \u0027"},{"line_number":50,"context_line":"                  \u0027(Stdout: %(stdout)s) \u0027"},{"line_number":51,"context_line":"                  \u0027(Stderr: %(stderr)s)\u0027) %"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a50d1a3_62990b6e","line":48,"updated":"2015-07-27 11:52:43.000000000","message":"Why do you need translate marker here?","commit_id":"641d94757a36414a651e2c4da6ad898c42f2a113"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"0767cd8af31088df933c8b324849e06c5f1c59ed","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.TEST_VOLUME \u003d self._make_fake_volume(self.TEST_VOL_DATA)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def sheepdog_cmd_error(self, cmd, exit_code, stdout, stderr):"},{"line_number":48,"context_line":"        return (_(\u0027(Command: %(cmd)s) \u0027"},{"line_number":49,"context_line":"                  \u0027(Return Code: %(exit_code)s) \u0027"},{"line_number":50,"context_line":"                  \u0027(Stdout: %(stdout)s) \u0027"},{"line_number":51,"context_line":"                  \u0027(Stderr: %(stderr)s)\u0027) %"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a50d1a3_0e8f10cd","line":48,"in_reply_to":"3a50d1a3_62990b6e","updated":"2015-07-27 13:05:10.000000000","message":"Good question.","commit_id":"641d94757a36414a651e2c4da6ad898c42f2a113"}],"cinder/volume/drivers/sheepdog.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b0eea6656bd5d24496d1d9a5ac9605d714b8ab7e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                else:"},{"line_number":83,"context_line":"                    msg \u003d _LE(\u0027OSError: command is %(cmd)s.\u0027)"},{"line_number":84,"context_line":"                msg \u003d msg % {\u0027cmd\u0027: cmd}"},{"line_number":85,"context_line":"                LOG.error(msg)"},{"line_number":86,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":87,"context_line":"            raise exception.SheepdogCmdError("},{"line_number":88,"context_line":"                cmd\u003de.cmd,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_c996623e","line":85,"updated":"2015-06-25 22:08:38.000000000","message":"According to the logging guideline should be:\n\nLOG.error(msg, {\u0027cmd\u0027: cmd})\n\nThe same comment for the code below","commit_id":"47d1e0d1746a59fc8f63089328e5886c5f5f1337"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"812be070d23263573240b1707508dfaf7088bde2","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                else:"},{"line_number":83,"context_line":"                    msg \u003d _LE(\u0027OSError: command is %(cmd)s.\u0027)"},{"line_number":84,"context_line":"                msg \u003d msg % {\u0027cmd\u0027: cmd}"},{"line_number":85,"context_line":"                LOG.error(msg)"},{"line_number":86,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":87,"context_line":"            raise exception.SheepdogCmdError("},{"line_number":88,"context_line":"                cmd\u003de.cmd,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_78a59e45","line":85,"in_reply_to":"fa32b979_c996623e","updated":"2015-06-26 01:14:12.000000000","message":"Thanks for your comment.\nI\u0027ll change them.","commit_id":"47d1e0d1746a59fc8f63089328e5886c5f5f1337"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f110e66be230f67c030fd8481bcc09e0957816d8","unresolved":false,"context_lines":[{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"sheepdog_opts \u003d ["},{"line_number":44,"context_line":"    cfg.Opt(\u0027sheepdog_store_address\u0027,"},{"line_number":45,"context_line":"            type\u003dtypes.IPAddress(),"},{"line_number":46,"context_line":"            default\u003d\u0027127.0.0.1\u0027,"},{"line_number":47,"context_line":"            help\u003d_(\u0027IP address of sheep daemon.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_76ecb4c7","line":44,"updated":"2015-06-29 19:01:19.000000000","message":"Can this not take a hostname as well?","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"91f5d75036e56f1c59219829c752cb17ae80f62a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"sheepdog_opts \u003d ["},{"line_number":44,"context_line":"    cfg.Opt(\u0027sheepdog_store_address\u0027,"},{"line_number":45,"context_line":"            type\u003dtypes.IPAddress(),"},{"line_number":46,"context_line":"            default\u003d\u0027127.0.0.1\u0027,"},{"line_number":47,"context_line":"            help\u003d_(\u0027IP address of sheep daemon.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_b749cc8d","line":44,"in_reply_to":"ba3cc151_76ecb4c7","updated":"2015-06-30 05:19:13.000000000","message":"We can not use hostname for dog command.","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f110e66be230f67c030fd8481bcc09e0957816d8","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def __init__(self, addr, port):"},{"line_number":69,"context_line":"        self.addr \u003d addr"},{"line_number":70,"context_line":"        self.port \u003d port"},{"line_number":71,"context_line":"        self._execute \u003d utils.execute"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _run_dog(self, command, subcommand, *params):"},{"line_number":74,"context_line":"        cmd \u003d (\u0027dog\u0027, command, subcommand,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_96c7f811","line":71,"updated":"2015-06-29 19:01:19.000000000","message":"_execute doesn\u0027t need to be a member variable if it\u0027s only ever set to utils.execute.  Just call utils.execute directly.","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"91f5d75036e56f1c59219829c752cb17ae80f62a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def __init__(self, addr, port):"},{"line_number":69,"context_line":"        self.addr \u003d addr"},{"line_number":70,"context_line":"        self.port \u003d port"},{"line_number":71,"context_line":"        self._execute \u003d utils.execute"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _run_dog(self, command, subcommand, *params):"},{"line_number":74,"context_line":"        cmd \u003d (\u0027dog\u0027, command, subcommand,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_b579c1fe","line":71,"in_reply_to":"ba3cc151_96c7f811","updated":"2015-06-30 05:19:13.000000000","message":"OK, I\u0027ll change it.","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f110e66be230f67c030fd8481bcc09e0957816d8","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _run_dog(self, command, subcommand, *params):"},{"line_number":74,"context_line":"        cmd \u003d (\u0027dog\u0027, command, subcommand,"},{"line_number":75,"context_line":"               \u0027-a\u0027, self.addr, \u0027-p\u0027, str(self.port)) + params"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            return self._execute(*cmd)"},{"line_number":78,"context_line":"        except OSError as e:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_763a7438","line":75,"updated":"2015-06-29 19:01:19.000000000","message":"This needs to be run with LANG\u003dC to ensure that you can parse the text error messages in check_cluster_status().","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"91f5d75036e56f1c59219829c752cb17ae80f62a","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _run_dog(self, command, subcommand, *params):"},{"line_number":74,"context_line":"        cmd \u003d (\u0027dog\u0027, command, subcommand,"},{"line_number":75,"context_line":"               \u0027-a\u0027, self.addr, \u0027-p\u0027, str(self.port)) + params"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            return self._execute(*cmd)"},{"line_number":78,"context_line":"        except OSError as e:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_f5aae918","line":75,"in_reply_to":"ba3cc151_763a7438","updated":"2015-06-30 05:19:13.000000000","message":"Thanks for your comment.\n\nIt should be changed exactly. I\u0027ll change it.","commit_id":"a49e9c1935575debefbd3be9a5c1396bbc9d3161"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"2fbe4c8b490e244b2a81402380389c604e3b81b4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from oslo_utils import units"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from cinder import exception"},{"line_number":34,"context_line":"from cinder import utils"},{"line_number":35,"context_line":"from cinder.i18n import _, _LE"},{"line_number":36,"context_line":"from cinder.image import image_utils"},{"line_number":37,"context_line":"from cinder.openstack.common import fileutils"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_9a7d8fe9","line":34,"updated":"2015-07-01 06:20:55.000000000","message":"Line 34 under Line 37","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"6ae6b7793f8a33c647516d7ea921404077ad77a2","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from oslo_utils import units"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from cinder import exception"},{"line_number":34,"context_line":"from cinder import utils"},{"line_number":35,"context_line":"from cinder.i18n import _, _LE"},{"line_number":36,"context_line":"from cinder.image import image_utils"},{"line_number":37,"context_line":"from cinder.openstack.common import fileutils"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_62430b43","line":34,"in_reply_to":"ba3cc151_9a7d8fe9","updated":"2015-07-02 03:19:06.000000000","message":"I\u0027ll change it","commit_id":"4b9a6796031b6a208790b42338d2a4d84182b42b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"b9527856841afee13df2b143e9172f0be02a37fd","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.Opt(\u0027sheepdog_store_address\u0027,"},{"line_number":45,"context_line":"            type\u003dtypes.IPAddress(),"},{"line_number":46,"context_line":"            default\u003d\u0027127.0.0.1\u0027,"},{"line_number":47,"context_line":"            help\u003d_(\u0027IP address of sheep daemon.\u0027)),"},{"line_number":48,"context_line":"    cfg.Opt(\u0027sheepdog_store_port\u0027,"},{"line_number":49,"context_line":"            type\u003dtypes.Integer(1, 65535),"},{"line_number":50,"context_line":"            default\u003d7000,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a41bdd9_f8e66c15","line":47,"updated":"2015-07-17 09:11:47.000000000","message":"We don\u0027t translate option help msgs for now, please remove it","commit_id":"ffd61ace393da55127f83b0cceef0776bdc5694c"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"5e6c16b58877349413ca806309529fabaa71c00f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.Opt(\u0027sheepdog_store_address\u0027,"},{"line_number":45,"context_line":"            type\u003dtypes.IPAddress(),"},{"line_number":46,"context_line":"            default\u003d\u0027127.0.0.1\u0027,"},{"line_number":47,"context_line":"            help\u003d_(\u0027IP address of sheep daemon.\u0027)),"},{"line_number":48,"context_line":"    cfg.Opt(\u0027sheepdog_store_port\u0027,"},{"line_number":49,"context_line":"            type\u003dtypes.Integer(1, 65535),"},{"line_number":50,"context_line":"            default\u003d7000,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a50d1a3_7b21d8fa","line":47,"in_reply_to":"9a41bdd9_f8e66c15","updated":"2015-07-21 03:46:46.000000000","message":"I\u0027ll remove it","commit_id":"ffd61ace393da55127f83b0cceef0776bdc5694c"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"b9527856841afee13df2b143e9172f0be02a37fd","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def check_cluster_status(self):"},{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            (stdout, stderr) \u003d self._run_dog(\u0027cluster\u0027, \u0027info\u0027)"},{"line_number":95,"context_line":"        except exception.SheepdogCmdError as e:"},{"line_number":96,"context_line":"            cmd \u003d e.kwargs[\u0027cmd\u0027]"},{"line_number":97,"context_line":"            stderr \u003d e.kwargs[\u0027stderr\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a41bdd9_988c0037","line":94,"updated":"2015-07-17 09:11:47.000000000","message":"_stderr please","commit_id":"ffd61ace393da55127f83b0cceef0776bdc5694c"},{"author":{"_account_id":13923,"name":"Teruaki Ishizaki","email":"ishizaki.teruaki@lab.ntt.co.jp","username":"tishizaki"},"change_message_id":"5e6c16b58877349413ca806309529fabaa71c00f","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def check_cluster_status(self):"},{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            (stdout, stderr) \u003d self._run_dog(\u0027cluster\u0027, \u0027info\u0027)"},{"line_number":95,"context_line":"        except exception.SheepdogCmdError as e:"},{"line_number":96,"context_line":"            cmd \u003d e.kwargs[\u0027cmd\u0027]"},{"line_number":97,"context_line":"            stderr \u003d e.kwargs[\u0027stderr\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a50d1a3_5b641c48","line":94,"in_reply_to":"9a41bdd9_988c0037","updated":"2015-07-21 03:46:46.000000000","message":"I\u0027ll change stderr to _stderr and stdout to _stdout","commit_id":"ffd61ace393da55127f83b0cceef0776bdc5694c"}]}
