)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"60ce5de4aed3db85b6593e41be70c17176c68aed","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     WenPing Zhang \u003czhangwenping@daowoo.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-16 10:37:02 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"blueprint cinder-driver-for-yeesan"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this blueprint is to add a Cinder volume driver for Daowoo"},{"line_number":10,"context_line":"YeeSan storage. It will include the minimum set of features. This driver will"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a41bdd9_92e64fae","line":7,"updated":"2015-07-16 13:17:47.000000000","message":"This isn\u0027t a blueprint, it\u0027s a patch that implements a blueprint.\n\nPlease see here for how to correctly format a commit message:\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"41610ae6d6759c183160d1b775612e3c1390dc36"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"1d4ff5d574b6a3a1a9585f08e8a36def1bc5c5b1","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add a cinder volume driver for Daowoo YeeSan storage. It includes the"},{"line_number":10,"context_line":"minimum set of features. This driver introduces a new storage protocol"},{"line_number":11,"context_line":"`yfs`, which is used in qemu and libvirt."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements: blueprint cinder-driver-for-yeesan"},{"line_number":14,"context_line":"Change-Id: I6a3d2290ac326f24257af663c014596c4cf842a9"},{"line_number":15,"context_line":"Depends-On: I3cc12f745c8db08673d45f4642d4f097b1f7ad82"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"fa80f949_65bcb0dc","line":12,"updated":"2015-11-05 23:10:53.000000000","message":"We need a DocImpact tag here since we are adding config options.","commit_id":"294a4135b96efc0dcf7ec4340b780426a026c143"}],"cinder/tests/unit/test_yeesan.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3cee4de6463958290a660ab6afcfac8a6a6f2c28","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015, Daowoo Co.,Ltd. All Rights Reserved"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_0449d7cf","line":1,"updated":"2015-10-09 10:09:35.000000000","message":"Please, move it to tests/unit/volume/drivers/daowoo/","commit_id":"316f1e161c5dd2b5741b1129e6736463c4f435ea"}],"cinder/tests/unit/volume/drivers/daowoo/test_yeesan.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"b96afd5b367447464db92b672c83572827b6e2d1","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                mock_create_snapshot, \\"},{"line_number":77,"context_line":"                mock.patch.object(drv, \u0027_create_volume_from_snapshot\u0027) as \\"},{"line_number":78,"context_line":"                mock_create_volume_from_snapshot, \\"},{"line_number":79,"context_line":"                mock.patch.object(drv, \u0027_delete_snapshot\u0027) as \\"},{"line_number":80,"context_line":"                mock_delete_snapshot:"},{"line_number":81,"context_line":"            drv.create_cloned_volume(self.volume_2, self.volume_1)"},{"line_number":82,"context_line":"            mock_create_snapshot.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_e3e1dc9b","line":79,"updated":"2015-10-12 18:50:57.000000000","message":"Is there anyway to do this without the \u0027\\\u0027? Using the \u0027()\u0027 ? Cinder is trying to get away from this wherever possible, and it would be ideal to avoid introducing more places that use \u0027\\\u0027 for line continuation.","commit_id":"1d26df79457d8800ae05b59e288c31502a8e77c6"},{"author":{"_account_id":16492,"name":"WenPing Zhang","email":"zhangwenping@daowoo.com","username":"zhangwenping"},"change_message_id":"5d302007cd6b39aa97beb3290a34f26eb3543530","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                mock_create_snapshot, \\"},{"line_number":77,"context_line":"                mock.patch.object(drv, \u0027_create_volume_from_snapshot\u0027) as \\"},{"line_number":78,"context_line":"                mock_create_volume_from_snapshot, \\"},{"line_number":79,"context_line":"                mock.patch.object(drv, \u0027_delete_snapshot\u0027) as \\"},{"line_number":80,"context_line":"                mock_delete_snapshot:"},{"line_number":81,"context_line":"            drv.create_cloned_volume(self.volume_2, self.volume_1)"},{"line_number":82,"context_line":"            mock_create_snapshot.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_1c1a2b6f","line":79,"in_reply_to":"7a2fa921_e3e1dc9b","updated":"2015-10-13 03:45:11.000000000","message":"It seems that multiple context expressions can not work with \u0027()\u0027. I will split it to multiple `with` statements.","commit_id":"1d26df79457d8800ae05b59e288c31502a8e77c6"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7f3ec5902a45dd1832d5984c5ba2d8c7064c4647","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    def test_check_valid_device_raise(self):"},{"line_number":314,"context_line":"        drv \u003d self._driver"},{"line_number":315,"context_line":"        with mock.patch.object(drv, \u0027_execute\u0027) as mock_execute:"},{"line_number":316,"context_line":"            # mock_execute.return_value \u003d (\u0027out\u0027, \u0027info\u0027)"},{"line_number":317,"context_line":"            mock_execute.side_effect \u003d putils.ProcessExecutionError"},{"line_number":318,"context_line":"            rtn \u003d drv._check_valid_device(self.path)"},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_d4579f24","line":316,"updated":"2015-10-13 09:42:32.000000000","message":"Please remove these commented code.","commit_id":"96d36ddabb8736b1eae1f94427d6c916b3380964"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f48bf8e7b726c6950b9e8151ee09f29ad39fdcc2","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder import exception"},{"line_number":20,"context_line":"from cinder.image import image_utils"},{"line_number":21,"context_line":"from cinder import test"},{"line_number":22,"context_line":"from cinder.volume.drivers.daowoo.yeesan import YeeSanDriver"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class YeeSanDriverTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_0e045f13","line":22,"updated":"2015-10-17 23:06:08.000000000","message":"Please import only modules, not classes.\n\nfrom cinder.volume.drivers.daowoo import yeesan","commit_id":"feb521d5ba0232422cb8e7ec2e2e81c83fe98589"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"de0c9c02df776f3c3a2fa1e9cc6049bec34600e4","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            with mock.patch.object("},{"line_number":78,"context_line":"                    drv, \u0027_create_volume_from_snapshot\u0027) as mock_cvfs:"},{"line_number":79,"context_line":"                with mock.patch.object("},{"line_number":80,"context_line":"                        drv, \u0027_delete_snapshot\u0027) as mock_delete_snapshot:"},{"line_number":81,"context_line":"                    drv.create_cloned_volume(self.volume_2, self.volume_1)"},{"line_number":82,"context_line":"                    mock_create_snapshot.assert_called_once_with("},{"line_number":83,"context_line":"                        \u0027volume-01\u0027, \u0027tempsnap_volume-01\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_55607f35","line":80,"updated":"2015-10-19 13:29:01.000000000","message":"You can reformat it as to eliminate the nested with blocks:\n\nwith mock.patch.object(drv, \u0027_create_snapshot\u0027) as mock_create_snapshot,\\\n        mock.patch.object(drv, \u0027_create_volume_from_snapshot\u0027) as mock_cvfs,\\\n        mock.patch.object(drv, \u0027_delete_snapshot\u0027) as mock_delete_snapshot:\n    drv.create_cloned_volume(self.volume_2, self.volume_1)","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"80657d04a4b729d50e44556c74d2c6ee05fc37e7","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            with mock.patch.object("},{"line_number":78,"context_line":"                    drv, \u0027_create_volume_from_snapshot\u0027) as mock_cvfs:"},{"line_number":79,"context_line":"                with mock.patch.object("},{"line_number":80,"context_line":"                        drv, \u0027_delete_snapshot\u0027) as mock_delete_snapshot:"},{"line_number":81,"context_line":"                    drv.create_cloned_volume(self.volume_2, self.volume_1)"},{"line_number":82,"context_line":"                    mock_create_snapshot.assert_called_once_with("},{"line_number":83,"context_line":"                        \u0027volume-01\u0027, \u0027tempsnap_volume-01\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_a2abb088","line":80,"in_reply_to":"3a29b11f_0d7dfe6d","updated":"2015-10-20 06:21:17.000000000","message":"It\u0027s true that we should use \u0027()\u0027 for line continuation instead of \u0027\\\u0027, but in case of long with statements backslashes are acceptable.\n\nPlease refer: https://www.python.org/dev/peps/pep-0008/#maximum-line-length","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":16492,"name":"WenPing Zhang","email":"zhangwenping@daowoo.com","username":"zhangwenping"},"change_message_id":"4b9d7d30a6c48605f8ae7e8f6498ab09c52716b6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            with mock.patch.object("},{"line_number":78,"context_line":"                    drv, \u0027_create_volume_from_snapshot\u0027) as mock_cvfs:"},{"line_number":79,"context_line":"                with mock.patch.object("},{"line_number":80,"context_line":"                        drv, \u0027_delete_snapshot\u0027) as mock_delete_snapshot:"},{"line_number":81,"context_line":"                    drv.create_cloned_volume(self.volume_2, self.volume_1)"},{"line_number":82,"context_line":"                    mock_create_snapshot.assert_called_once_with("},{"line_number":83,"context_line":"                        \u0027volume-01\u0027, \u0027tempsnap_volume-01\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_0d7dfe6d","line":80,"in_reply_to":"3a29b11f_55607f35","updated":"2015-10-20 01:43:22.000000000","message":"Ankit, that is just my first version. But Kendall said that cinder is trying to get away from using \u0027\\\u0027 for line continuation. The nested with statement does not support \u0027()\u0027, so I think multi with is the only way to avoid \u0027\\\u0027.","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"de0c9c02df776f3c3a2fa1e9cc6049bec34600e4","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                    drv, \u0027_check_valid_device\u0027) as mock_check_valid_device:"},{"line_number":95,"context_line":"                with mock.patch.object("},{"line_number":96,"context_line":"                        drv, \u0027_extend_volume\u0027) as mock_extend_volume:"},{"line_number":97,"context_line":"                    with mock.patch.object(image_utils, \u0027fetch_to_raw\u0027):"},{"line_number":98,"context_line":"                        mock_local_path.return_value \u003d \u0027/mnt/yfs/1001\u0027"},{"line_number":99,"context_line":"                        mock_check_valid_device.return_value \u003d True"},{"line_number":100,"context_line":"                        mock_image_service \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_d589efcb","line":97,"updated":"2015-10-19 13:29:01.000000000","message":"Same as above.","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"de0c9c02df776f3c3a2fa1e9cc6049bec34600e4","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            with mock.patch.object("},{"line_number":112,"context_line":"                    drv, \u0027_check_valid_device\u0027) as mock_check_valid_device:"},{"line_number":113,"context_line":"                with mock.patch.object(drv, \u0027_extend_volume\u0027):"},{"line_number":114,"context_line":"                    with mock.patch.object(image_utils, \u0027fetch_to_raw\u0027):"},{"line_number":115,"context_line":"                        mock_local_path.return_value \u003d \u0027/mnt/yfs/1001\u0027"},{"line_number":116,"context_line":"                        mock_check_valid_device.return_value \u003d False"},{"line_number":117,"context_line":"                        mock_image_service \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_b5a7934e","line":114,"updated":"2015-10-19 13:29:01.000000000","message":"Same as above.","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"de0c9c02df776f3c3a2fa1e9cc6049bec34600e4","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        with mock.patch.object(drv, \u0027_local_path\u0027) as mock_local_path:"},{"line_number":128,"context_line":"            with mock.patch.object("},{"line_number":129,"context_line":"                    drv, \u0027_check_valid_device\u0027) as mock_check_valid_device:"},{"line_number":130,"context_line":"                with mock.patch.object(image_utils, \u0027upload_volume\u0027):"},{"line_number":131,"context_line":"                    mock_local_path.return_value \u003d \u0027/mnt/yfs/1001\u0027"},{"line_number":132,"context_line":"                    mock_check_valid_device.return_value \u003d True"},{"line_number":133,"context_line":"                    mock_image_service \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_3549438c","line":130,"updated":"2015-10-19 13:29:01.000000000","message":"Same as above.","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"de0c9c02df776f3c3a2fa1e9cc6049bec34600e4","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        with mock.patch.object(drv, \u0027_local_path\u0027) as mock_local_path:"},{"line_number":142,"context_line":"            with mock.patch.object("},{"line_number":143,"context_line":"                    drv, \u0027_check_valid_device\u0027) as mock_check_valid_device:"},{"line_number":144,"context_line":"                with mock.patch.object(image_utils, \u0027upload_volume\u0027):"},{"line_number":145,"context_line":"                    mock_local_path.return_value \u003d \u0027/mnt/yfs/1001\u0027"},{"line_number":146,"context_line":"                    mock_check_valid_device.return_value \u003d False"},{"line_number":147,"context_line":"                    mock_image_service \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_f55bcb52","line":144,"updated":"2015-10-19 13:29:01.000000000","message":"Same as above.","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"fc462cf91cd9c4c00b56de9facf9f0902bf0e68e","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class YeeSanDriverTestCase(test.TestCase):"},{"line_number":26,"context_line":"    \"\"\"Test case for YFS driver.\"\"\""},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        super(YeeSanDriverTestCase, self).setUp()"},{"line_number":29,"context_line":"        self._cfg \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_15a6a7c1","line":26,"updated":"2015-10-27 14:05:37.000000000","message":"s/case/cases","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"11c7116cc90fbc2a2b6eae2ed2a0bcd6a0649112","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            drv.copy_volume_to_image(None,"},{"line_number":128,"context_line":"                                     self.volume_1,"},{"line_number":129,"context_line":"                                     mock_image_service,"},{"line_number":130,"context_line":"                                     {\u0027id\u0027: \u00271234567890\u0027})"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_copy_volume_to_image_raise(self):"},{"line_number":133,"context_line":"        drv \u003d self._driver"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_d5710fe2","line":130,"updated":"2015-10-27 14:07:52.000000000","message":"Should we assert something here?","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"8e8ee4cfe1796654baaa6db6e8ff6f02966151f9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.path \u003d \u0027/mnt/yfs/1001/volume.vol\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_valid_configuration(self):"},{"line_number":54,"context_line":"        drv \u003d self._driver"},{"line_number":55,"context_line":"        with mock.patch.object(drv, \u0027_execute\u0027) as mock_execute:"},{"line_number":56,"context_line":"            drv.check_for_setup_error()"},{"line_number":57,"context_line":"            mock_execute.assert_called_once_with(\u0027qemu-img\u0027, \u0027amend\u0027, \u0027-o\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa80f949_9e0f7e38","line":54,"updated":"2015-11-06 19:39:41.000000000","message":"Why do we need \u0027drv\u0027 variable in al tests?","commit_id":"294a4135b96efc0dcf7ec4340b780426a026c143"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"8e8ee4cfe1796654baaa6db6e8ff6f02966151f9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                                                 \u0027-f\u0027, \u0027yfs\u0027, \u0027yfs:/root/root\u0027,"},{"line_number":60,"context_line":"                                                 run_as_root\u003dTrue)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_valid_configuration_raise(self):"},{"line_number":63,"context_line":"        drv \u003d self._driver"},{"line_number":64,"context_line":"        with mock.patch.object(drv, \u0027_execute\u0027) as mock_execute:"},{"line_number":65,"context_line":"            mock_execute.side_effect \u003d putils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa80f949_3e01b206","line":62,"updated":"2015-11-06 19:39:41.000000000","message":"IMO, test_invalid_configuration_raise name will be better","commit_id":"294a4135b96efc0dcf7ec4340b780426a026c143"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"8e8ee4cfe1796654baaa6db6e8ff6f02966151f9","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def test_create_cloned_volume(self):"},{"line_number":90,"context_line":"        drv \u003d self._driver"},{"line_number":91,"context_line":"        with mock.patch.object(drv, \u0027_create_snapshot\u0027) as mock_create_ss, \\"},{"line_number":92,"context_line":"                mock.patch.object(drv, \u0027_delete_snapshot\u0027) as mock_delete_ss, \\"},{"line_number":93,"context_line":"                mock.patch.object("},{"line_number":94,"context_line":"                    drv, \u0027_create_volume_from_snapshot\u0027) as mock_cvfs:"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa80f949_9939d8d9","line":91,"updated":"2015-11-06 19:39:41.000000000","message":"@mock decorators will decrease a number of mock calls in a with statements and will make code more readable","commit_id":"294a4135b96efc0dcf7ec4340b780426a026c143"}],"cinder/volume/drivers/daowoo/yeesan.py":[{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7f3ec5902a45dd1832d5984c5ba2d8c7064c4647","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":100,"context_line":"        \"\"\"Fetch the image from image_service and write it to the volume.\"\"\""},{"line_number":101,"context_line":"        LOG.debug((\u0027copy_image_to_volume %s.\u0027) % volume[\u0027name\u0027])"},{"line_number":102,"context_line":"        local_path \u003d self._local_path(volume)"},{"line_number":103,"context_line":"        if not self._check_valid_device(local_path):"},{"line_number":104,"context_line":"            raise exception.DeviceUnavailable(path\u003dlocal_path,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_be3521dc","line":101,"updated":"2015-10-13 09:42:32.000000000","message":"Use \",\" instead of \"%\".","commit_id":"96d36ddabb8736b1eae1f94427d6c916b3380964"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7f3ec5902a45dd1832d5984c5ba2d8c7064c4647","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":116,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":117,"context_line":"        LOG.debug((\u0027copy_volume_to_image %s.\u0027) % volume[\u0027name\u0027])"},{"line_number":118,"context_line":"        local_path \u003d self._local_path(volume)"},{"line_number":119,"context_line":"        if not self._check_valid_device(local_path):"},{"line_number":120,"context_line":"            raise exception.DeviceUnavailable(path\u003dlocal_path,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_7e2f8988","line":117,"updated":"2015-10-13 09:42:32.000000000","message":"Use \",\" instead of \"%\".","commit_id":"96d36ddabb8736b1eae1f94427d6c916b3380964"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f48bf8e7b726c6950b9e8151ee09f29ad39fdcc2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"volume_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027yfs_pool\u0027,"},{"line_number":35,"context_line":"               default\u003d\u00271001\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027yeesan pool name, used for path\u0027),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027yfs_mount_path\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027/mnt/yfs\u0027,"},{"line_number":39,"context_line":"               help\u003d\u0027yeesan local mount path, used when open volume data\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_ae1f6b5a","line":36,"updated":"2015-10-17 23:06:08.000000000","message":"For consistency, I would recommend starting with an uppercase Y and ending with a period.","commit_id":"feb521d5ba0232422cb8e7ec2e2e81c83fe98589"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f48bf8e7b726c6950b9e8151ee09f29ad39fdcc2","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        src \u003d \u0027%s:/%s/%s\u0027 % (self.PROTOCOL, self.configuration.yfs_pool,"},{"line_number":142,"context_line":"                             volume_name)"},{"line_number":143,"context_line":"        cmd \u003d [\u0027qemu-img\u0027, \u0027snapshot\u0027, \u0027-c\u0027, snapshot_name, src]"},{"line_number":144,"context_line":"        LOG.debug(\"command: %s\" % \u0027 \u0027.join(cmd))"},{"line_number":145,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def delete_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_ae568b04","line":144,"updated":"2015-10-17 23:06:08.000000000","message":"Please use , instead of % to pass formatting values as args into the logger. Several instances throughout this file.","commit_id":"feb521d5ba0232422cb8e7ec2e2e81c83fe98589"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"7164159d69af758e2f6a0e0ce7202887308d759c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        LOG.debug(\u0027YeeSan copy image to volume: %s.\u0027, volume[\u0027name\u0027])"},{"line_number":105,"context_line":"        local_path \u003d self._local_path(volume)"},{"line_number":106,"context_line":"        if not self._check_valid_device(local_path):"},{"line_number":107,"context_line":"            raise exception.DeviceUnavailable(path\u003dlocal_path,"},{"line_number":108,"context_line":"                                              reason\u003d(_(\"Unable to access \""},{"line_number":109,"context_line":"                                                        \"the backend storage \""},{"line_number":110,"context_line":"                                                        \"via the path \""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_c7793795","line":107,"updated":"2015-10-19 17:19:54.000000000","message":"raise VolumeDriverException","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"7164159d69af758e2f6a0e0ce7202887308d759c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        LOG.debug(\u0027YeeSan copy volume to image: %s.\u0027, volume[\u0027name\u0027])"},{"line_number":121,"context_line":"        local_path \u003d self._local_path(volume)"},{"line_number":122,"context_line":"        if not self._check_valid_device(local_path):"},{"line_number":123,"context_line":"            raise exception.DeviceUnavailable(path\u003dlocal_path,"},{"line_number":124,"context_line":"                                              reason\u003d(_(\"Unable to access \""},{"line_number":125,"context_line":"                                                        \"the backend storage \""},{"line_number":126,"context_line":"                                                        \"via the path \""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_e76233d8","line":123,"updated":"2015-10-19 17:19:54.000000000","message":"raise VolumeDriverException","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"820c4249bffaf7accff054dcbc5708ca5f9c1a72","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        src \u003d \u0027%s:/%s/%s\u0027 % (self.PROTOCOL, self.configuration.yfs_pool,"},{"line_number":145,"context_line":"                             volume_name)"},{"line_number":146,"context_line":"        cmd \u003d [\u0027qemu-img\u0027, \u0027snapshot\u0027, \u0027-c\u0027, snapshot_name, src]"},{"line_number":147,"context_line":"        LOG.debug(\"command: %s\" % \u0027 \u0027.join(cmd))"},{"line_number":148,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def delete_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_30872311","line":147,"updated":"2015-10-19 07:11:24.000000000","message":"Please change \u0027%\u0027 to comma, thanks.","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"820c4249bffaf7accff054dcbc5708ca5f9c1a72","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        tgt \u003d \u0027img\u003d/%s/%s\u0027 % (self.configuration.yfs_pool, volume[\u0027name\u0027])"},{"line_number":154,"context_line":"        cmd \u003d [\u0027qemu-img\u0027, \u0027amend\u0027, \u0027-o\u0027, \u0027,\u0027.join([\u0027cmd\u003ddel\u0027, tgt]),"},{"line_number":155,"context_line":"               \u0027%s:/root/root\u0027 % self.PROTOCOL, \u0027-f\u0027, self.PROTOCOL]"},{"line_number":156,"context_line":"        LOG.debug(\"command: %s\" % \u0027 \u0027.join(cmd))"},{"line_number":157,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def delete_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_d07caf22","line":156,"updated":"2015-10-19 07:11:24.000000000","message":"Please change \u0027%\u0027 to comma, thanks.","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"820c4249bffaf7accff054dcbc5708ca5f9c1a72","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        tgt \u003d \u0027%s:/%s/%s\u0027 % (self.PROTOCOL, self.configuration.yfs_pool,"},{"line_number":166,"context_line":"                             snapshot_volume_name)"},{"line_number":167,"context_line":"        cmd \u003d [\u0027qemu-img\u0027, \u0027snapshot\u0027, \u0027-d\u0027, snapshot_name, tgt]"},{"line_number":168,"context_line":"        LOG.debug(\"command: %s\" % \u0027 \u0027.join(cmd))"},{"line_number":169,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def extend_volume(self, volume, new_size):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_b09c936a","line":168,"updated":"2015-10-19 07:11:24.000000000","message":"Please change \u0027%\u0027 to comma, thanks.","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"820c4249bffaf7accff054dcbc5708ca5f9c1a72","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        tgt \u003d \u0027%s:/%s/%s\u0027 % (self.PROTOCOL, self.configuration.yfs_pool,"},{"line_number":178,"context_line":"                             volume_name)"},{"line_number":179,"context_line":"        cmd \u003d [\u0027qemu-img\u0027, \u0027resize\u0027, tgt, \u0027%sG\u0027 % new_size]"},{"line_number":180,"context_line":"        LOG.debug(\"command: %s\" % \u0027 \u0027.join(cmd))"},{"line_number":181,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_50889f22","line":180,"updated":"2015-10-19 07:11:24.000000000","message":"ditto","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"7164159d69af758e2f6a0e0ce7202887308d759c","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        data[\"volume_backend_name\"] \u003d backend_name or self.__class__.__name__"},{"line_number":222,"context_line":"        data[\"vendor_name\"] \u003d \u0027Daowoo\u0027"},{"line_number":223,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":224,"context_line":"        data[\"storage_protocol\"] \u003d \u0027yfs\u0027"},{"line_number":225,"context_line":"        data[\u0027reserved_percentage\u0027] \u003d self.configuration.reserved_percentage"},{"line_number":226,"context_line":"        data[\u0027QoS_support\u0027] \u003d False"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_f4065f1f","line":224,"updated":"2015-10-19 17:19:54.000000000","message":"self.PROTOCOL","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"de0c9c02df776f3c3a2fa1e9cc6049bec34600e4","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        data[\u0027total_capacity_gb\u0027] \u003d capacity_info[0]"},{"line_number":230,"context_line":"        data[\u0027free_capacity_gb\u0027] \u003d capacity_info[1]"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        # treat the whole backend as one pool"},{"line_number":233,"context_line":"        single_pool \u003d dict("},{"line_number":234,"context_line":"            pool_name\u003ddata[\"volume_backend_name\"],"},{"line_number":235,"context_line":"            driver_version\u003ddata[\"driver_version\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_b5b6b33b","line":232,"updated":"2015-10-19 13:29:01.000000000","message":"For consistency purpose, please start your comment with Capital letter and end with a period.","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"820c4249bffaf7accff054dcbc5708ca5f9c1a72","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        cmd \u003d [\u0027qemu-img\u0027, \u0027amend\u0027, \u0027-o\u0027,"},{"line_number":246,"context_line":"               \u0027cmd\u003dstatfs,pool\u003d%s\u0027 % self.configuration.yfs_pool,"},{"line_number":247,"context_line":"               \u0027-f\u0027, self.PROTOCOL, \u0027%s:/root/root\u0027 % self.PROTOCOL]"},{"line_number":248,"context_line":"        LOG.debug(\"command: %s\" % \u0027 \u0027.join(cmd))"},{"line_number":249,"context_line":"        (out, _err) \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":250,"context_line":"        out_list \u003d out.split()"},{"line_number":251,"context_line":"        LOG.debug(\"pool info : %s\", out_list)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_b073334d","line":248,"updated":"2015-10-19 07:11:24.000000000","message":"ditto","commit_id":"e6de0695ec71bd9d02fa37626e1a21fb971eff87"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"95cfafdd709484f8df5f840aaec7b1f74423fcfa","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        local_path \u003d self._local_path(volume)"},{"line_number":106,"context_line":"        if not self._check_valid_device(local_path):"},{"line_number":107,"context_line":"            msg \u003d _(\"Unable to access the backend storage via the path %s.\""},{"line_number":108,"context_line":"                    % local_path)"},{"line_number":109,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":110,"context_line":"        image_utils.fetch_to_raw(context, image_service, image_id, local_path,"},{"line_number":111,"context_line":"                                 self.configuration.volume_dd_blocksize,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a29b11f_74e4640c","line":108,"updated":"2015-10-20 12:49:54.000000000","message":"Variable name should be outside _().\n\nmsg \u003d _(\"Unable to access the backend storage via the path %s.\") % local_path","commit_id":"9a48f5d66bfc2899dc78df6c340a2260d7f4e860"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"95cfafdd709484f8df5f840aaec7b1f74423fcfa","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        local_path \u003d self._local_path(volume)"},{"line_number":119,"context_line":"        if not self._check_valid_device(local_path):"},{"line_number":120,"context_line":"            msg \u003d _(\"Unable to access the backend storage via the path %s.\""},{"line_number":121,"context_line":"                    % local_path)"},{"line_number":122,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        image_utils.upload_volume(context, image_service, image_meta,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a29b11f_b4b8bce6","line":121,"updated":"2015-10-20 12:49:54.000000000","message":"ditto","commit_id":"9a48f5d66bfc2899dc78df6c340a2260d7f4e860"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"11c7116cc90fbc2a2b6eae2ed2a0bcd6a0649112","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Volume Drivers for YeeSan file system."},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_1268fdf4","line":16,"updated":"2015-10-27 14:07:52.000000000","message":"driver, not drivers","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"11c7116cc90fbc2a2b6eae2ed2a0bcd6a0649112","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            self.configuration.append_config_values(volume_opts)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def check_for_setup_error(self):"},{"line_number":62,"context_line":"        pass"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":65,"context_line":"        \"\"\"Allow connection to connector and return connection info.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_95239705","line":62,"updated":"2015-10-27 14:07:52.000000000","message":"Better to check the configuration options. What will happen if the user configures a pool which does not exist?","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"11c7116cc90fbc2a2b6eae2ed2a0bcd6a0649112","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        pass"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":65,"context_line":"        \"\"\"Allow connection to connector and return connection info.\"\"\""},{"line_number":66,"context_line":"        data \u003d {\u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":67,"context_line":"                \u0027pool\u0027: self.configuration.yfs_pool,"},{"line_number":68,"context_line":"                \u0027protocol\u0027: self.PROTOCOL}"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_558dff79","line":65,"updated":"2015-10-27 14:07:52.000000000","message":"Allows..","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"11c7116cc90fbc2a2b6eae2ed2a0bcd6a0649112","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        pass"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def create_volume(self, volume):"},{"line_number":79,"context_line":"        \"\"\"Create volume.\"\"\""},{"line_number":80,"context_line":"        LOG.debug(\"YeeSan create volume.\")"},{"line_number":81,"context_line":"        tgt \u003d \u0027%s:/%s/%s\u0027 % (self.PROTOCOL, self.configuration.yfs_pool,"},{"line_number":82,"context_line":"                             volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_75dd9b6f","line":79,"updated":"2015-10-27 14:07:52.000000000","message":"Creates..","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"fc462cf91cd9c4c00b56de9facf9f0902bf0e68e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":88,"context_line":"        \"\"\"Creates a clone of the specified volume.\"\"\""},{"line_number":89,"context_line":"        LOG.debug(\"YeeSan create cloned volume.\")"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # Create a temp snapshot first."}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_d5102fab","line":88,"updated":"2015-10-27 14:05:37.000000000","message":"s/Creates/Create to be consistent.","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"fc462cf91cd9c4c00b56de9facf9f0902bf0e68e","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                            self.configuration.yfs_pool, volume[\u0027name\u0027])"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":133,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":134,"context_line":"        LOG.debug(\"YeeSan create snapshot.\")"},{"line_number":135,"context_line":"        self._create_snapshot(snapshot[\u0027volume_name\u0027], snapshot[\u0027name\u0027])"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_f55f6b73","line":133,"updated":"2015-10-27 14:05:37.000000000","message":"s/Creates/Create to be consistent.","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"fc462cf91cd9c4c00b56de9facf9f0902bf0e68e","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":154,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":155,"context_line":"        LOG.debug(\"YeeSan delete snapshot.\")"},{"line_number":156,"context_line":"        self._delete_snapshot(snapshot[\u0027name\u0027], snapshot[\u0027volume_name\u0027])"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_d5ecaf91","line":154,"updated":"2015-10-27 14:05:37.000000000","message":"s/Deletes/Delete to be consistent.","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"fc462cf91cd9c4c00b56de9facf9f0902bf0e68e","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":178,"context_line":"        \"\"\"Creates a volume from a snapshot.\"\"\""},{"line_number":179,"context_line":"        LOG.debug(\"YeeSan create volume from snapshot.\")"},{"line_number":180,"context_line":"        self._create_volume_from_snapshot(snapshot[\u0027volume_name\u0027],"},{"line_number":181,"context_line":"                                          snapshot[\u0027name\u0027], volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_95ff1734","line":178,"updated":"2015-10-27 14:05:37.000000000","message":"s/Creates/Create to be consistent.","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"fc462cf91cd9c4c00b56de9facf9f0902bf0e68e","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _update_volume_stats(self):"},{"line_number":210,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""},{"line_number":211,"context_line":"        LOG.debug(\"Updating volume stats start\")"},{"line_number":212,"context_line":"        data \u003d {}"},{"line_number":213,"context_line":"        data[\"pools\"] \u003d []"},{"line_number":214,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_55909fec","line":211,"updated":"2015-10-27 14:05:37.000000000","message":"Add a \".\" at the EOL please.","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"11c7116cc90fbc2a2b6eae2ed2a0bcd6a0649112","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        out, info \u003d None, None"},{"line_number":262,"context_line":"        try:"},{"line_number":263,"context_line":"            out, info \u003d self._execute(*cmd, run_as_root\u003drun_as_root)"},{"line_number":264,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":265,"context_line":"            return False"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # If the info is none, the path does not exist."}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_559c1f69","line":264,"updated":"2015-10-27 14:07:52.000000000","message":"Better to have a log message here..","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"11c7116cc90fbc2a2b6eae2ed2a0bcd6a0649112","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        # If the info is none, the path does not exist."},{"line_number":268,"context_line":"        if info is None:"},{"line_number":269,"context_line":"            return False"},{"line_number":270,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_15bb07c6","line":270,"updated":"2015-10-27 14:07:52.000000000","message":"These lines can be simplified as:\n\n     return info is not None","commit_id":"13e62d706a4c1c199de5eb1f0f9bea9461941fdb"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"904176121c0d1149fc9d0d118a34a9c01d60a6de","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        try:"},{"line_number":270,"context_line":"            out, info \u003d self._execute(*cmd, run_as_root\u003drun_as_root)"},{"line_number":271,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":272,"context_line":"            LOG.error(\"Unable to access the backend storage: %s.\", path)"},{"line_number":273,"context_line":"            return False"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        # If the info is none, the path does not exist."}],"source_content_type":"text/x-python","patch_set":14,"id":"1a26ad4f_8a527212","line":272,"updated":"2015-10-28 13:33:16.000000000","message":"Please use _LE:\nLOG.error(_LE(\"Unable to access the backend storage: %s.\"), path)","commit_id":"8c08eeb355722d04893e84a9f5490cfa0291e328"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"8e8ee4cfe1796654baaa6db6e8ff6f02966151f9","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def create_volume(self, volume):"},{"line_number":86,"context_line":"        \"\"\"Creates volume.\"\"\""},{"line_number":87,"context_line":"        LOG.debug(\"YeeSan create volume.\")"},{"line_number":88,"context_line":"        tgt \u003d \u0027%s:/%s/%s\u0027 % (self.PROTOCOL, self.configuration.yfs_pool,"},{"line_number":89,"context_line":"                             volume[\u0027name\u0027])"},{"line_number":90,"context_line":"        cmd \u003d [\u0027qemu-img\u0027, \u0027create\u0027, tgt, \u0027%sG\u0027 % volume[\u0027size\u0027]]"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa80f949_99aeb8e4","line":87,"updated":"2015-11-06 19:39:41.000000000","message":"Please, add volume id to the log message here and below.","commit_id":"294a4135b96efc0dcf7ec4340b780426a026c143"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"254e1662b3abe55dcb961a9136dab6d1066bee50","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        LOG.debug(\"pool info : %s\", out_list)"},{"line_number":253,"context_line":"        bsize \u003d block \u003d bfree \u003d 0"},{"line_number":254,"context_line":"        for i in out_list:"},{"line_number":255,"context_line":"            if i.startswith(\u0027f_bsize\u0027):"},{"line_number":256,"context_line":"                bsize \u003d int(i.partition(\u0027:\u0027)[2])"},{"line_number":257,"context_line":"            elif i.startswith(\u0027f_blocks\u0027):"},{"line_number":258,"context_line":"                block \u003d int(i.partition(\u0027:\u0027)[2])"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_f7ed3826","line":255,"updated":"2015-11-06 21:58:18.000000000","message":"Could save \"int(i.partition(\u0027:\u0027)[2])\" so we don\u0027t repeat this code 3 times","commit_id":"294a4135b96efc0dcf7ec4340b780426a026c143"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"254e1662b3abe55dcb961a9136dab6d1066bee50","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            elif i.startswith(\u0027f_blocks\u0027):"},{"line_number":258,"context_line":"                block \u003d int(i.partition(\u0027:\u0027)[2])"},{"line_number":259,"context_line":"            elif i.startswith(\u0027f_bfree\u0027):"},{"line_number":260,"context_line":"                bfree \u003d int(i.partition(\u0027:\u0027)[2])"},{"line_number":261,"context_line":"        total_capacity_gb \u003d bsize * block // (1024 ** 3)"},{"line_number":262,"context_line":"        free_capacity_gb \u003d bsize * bfree // (1024 ** 3)"},{"line_number":263,"context_line":"        return (total_capacity_gb, free_capacity_gb)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_57c44491","line":260,"updated":"2015-11-06 21:58:18.000000000","message":"Should use oslo_utils/units.Gi for both of these","commit_id":"294a4135b96efc0dcf7ec4340b780426a026c143"}]}
