)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"1d990b696534a62f2dbad80d3f1e7cff431c5d39","unresolved":false,"context_lines":[{"line_number":26,"context_line":"stats of LVM and NFS drivers to enable efficient copy for these"},{"line_number":27,"context_line":"backends."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Implements: efficient-volume-copy-for-cinder-assisted-migration"},{"line_number":30,"context_line":"Change-Id: Ic343860d37276907724fce3a9c0f7c9d034c4aaa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_9d62b8d7","line":29,"updated":"2015-07-20 14:41:59.000000000","message":"Suggest: \"Implements: blueprint efficient-volume-copy-for-cinder-assisted-migration\"","commit_id":"b7726104ade78330bf5d08360d625afaa4ce86c6"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"5c112300176335edfd062f2e11336acfcfbf2427","unresolved":false,"context_lines":[{"line_number":26,"context_line":"stats of LVM and NFS drivers to enable efficient copy for these"},{"line_number":27,"context_line":"backends."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Implements: efficient-volume-copy-for-cinder-assisted-migration"},{"line_number":30,"context_line":"Change-Id: Ic343860d37276907724fce3a9c0f7c9d034c4aaa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_cc3170ee","line":29,"in_reply_to":"3a50d1a3_9d62b8d7","updated":"2015-07-20 16:01:35.000000000","message":"Done. Thank you.","commit_id":"b7726104ade78330bf5d08360d625afaa4ce86c6"}],"cinder/tests/unit/test_nfs.py":[{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"8652a2b82c4aa8274aa3029296024ba61f4398c4","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        self.assertEqual(30.0, drv._stats[\u0027total_capacity_gb\u0027])"},{"line_number":852,"context_line":"        self.assertEqual(5.0, drv._stats[\u0027free_capacity_gb\u0027])"},{"line_number":853,"context_line":"        self.assertEqual(0, drv._stats[\u0027reserved_percentage\u0027])"},{"line_number":854,"context_line":"        self.assertEqual(True, drv._stats[\u0027sparse_copy_volume\u0027])"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"        mox.VerifyAll()"},{"line_number":857,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a4dcd0f_f792f24a","line":854,"updated":"2015-08-14 13:49:48.000000000","message":"Why not just self.assertTrue(drv._stats[\u0027sparse_copy_volume\u0027])","commit_id":"abb66c9296914485de02de657d54408a12160336"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"fce1010f9324382ab6ebb0e76630428abba10124","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        self.assertEqual(30.0, drv._stats[\u0027total_capacity_gb\u0027])"},{"line_number":852,"context_line":"        self.assertEqual(5.0, drv._stats[\u0027free_capacity_gb\u0027])"},{"line_number":853,"context_line":"        self.assertEqual(0, drv._stats[\u0027reserved_percentage\u0027])"},{"line_number":854,"context_line":"        self.assertEqual(True, drv._stats[\u0027sparse_copy_volume\u0027])"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"        mox.VerifyAll()"},{"line_number":857,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_575b552e","line":854,"in_reply_to":"1a4dcd0f_f792f24a","updated":"2015-08-28 14:41:08.000000000","message":"Done","commit_id":"abb66c9296914485de02de657d54408a12160336"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"eb716eac5a4b535ea1e60266dc2026f12d95f765","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        self.assertEqual(30.0, drv._stats[\u0027total_capacity_gb\u0027])"},{"line_number":852,"context_line":"        self.assertEqual(5.0, drv._stats[\u0027free_capacity_gb\u0027])"},{"line_number":853,"context_line":"        self.assertEqual(0, drv._stats[\u0027reserved_percentage\u0027])"},{"line_number":854,"context_line":"        self.assertEqual(True, drv._stats[\u0027sparse_copy_volume\u0027])"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"        mox.VerifyAll()"},{"line_number":857,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a4dcd0f_6bacbb35","line":854,"in_reply_to":"1a4dcd0f_f792f24a","updated":"2015-08-14 15:00:54.000000000","message":"Thank you. If I need next patch, I will fix it.","commit_id":"abb66c9296914485de02de657d54408a12160336"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"35f936e83f73a315949263116b5ac1e8edf8f614","unresolved":false,"context_lines":[{"line_number":850,"context_line":"        self.assertEqual(30.0, drv._stats[\u0027total_capacity_gb\u0027])"},{"line_number":851,"context_line":"        self.assertEqual(5.0, drv._stats[\u0027free_capacity_gb\u0027])"},{"line_number":852,"context_line":"        self.assertEqual(0, drv._stats[\u0027reserved_percentage\u0027])"},{"line_number":853,"context_line":"        self.assertEqual(True, drv._stats[\u0027sparse_copy_volume\u0027])"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        mox.VerifyAll()"},{"line_number":856,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_9f1ca978","line":853,"updated":"2015-08-28 13:30:25.000000000","message":"Should be:\n\nself.assertTrue(srv._stats[\u0027sparse_copy_volume\u0027])","commit_id":"17a308980ad436e24cd85861c2d03c41f6228896"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"b480bd147a78ebdc04044b1635ff6b6c67aabe49","unresolved":false,"context_lines":[{"line_number":850,"context_line":"        self.assertEqual(30.0, drv._stats[\u0027total_capacity_gb\u0027])"},{"line_number":851,"context_line":"        self.assertEqual(5.0, drv._stats[\u0027free_capacity_gb\u0027])"},{"line_number":852,"context_line":"        self.assertEqual(0, drv._stats[\u0027reserved_percentage\u0027])"},{"line_number":853,"context_line":"        self.assertEqual(True, drv._stats[\u0027sparse_copy_volume\u0027])"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        mox.VerifyAll()"},{"line_number":856,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_5713550d","line":853,"in_reply_to":"da20952f_9f1ca978","updated":"2015-08-28 14:43:57.000000000","message":"Done","commit_id":"17a308980ad436e24cd85861c2d03c41f6228896"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"8652a2b82c4aa8274aa3029296024ba61f4398c4","unresolved":false,"context_lines":[{"line_number":6539,"context_line":"        self.assertEqual("},{"line_number":6540,"context_line":"            int(\u00271\u0027), stats[\u0027pools\u0027][0][\u0027total_volumes\u0027])"},{"line_number":6541,"context_line":"        self.assertEqual("},{"line_number":6542,"context_line":"            False, stats[\u0027sparse_copy_volume\u0027])"},{"line_number":6543,"context_line":""},{"line_number":6544,"context_line":"        # Check value of sparse_copy_volume for thin enabled case."},{"line_number":6545,"context_line":"        self.configuration \u003d conf.Configuration(None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a4dcd0f_17c75e65","line":6542,"updated":"2015-08-14 13:49:48.000000000","message":"Why not just self.assertFalse(stats[\u0027sparse_copy_volume\u0027])","commit_id":"abb66c9296914485de02de657d54408a12160336"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"fce1010f9324382ab6ebb0e76630428abba10124","unresolved":false,"context_lines":[{"line_number":6539,"context_line":"        self.assertEqual("},{"line_number":6540,"context_line":"            int(\u00271\u0027), stats[\u0027pools\u0027][0][\u0027total_volumes\u0027])"},{"line_number":6541,"context_line":"        self.assertEqual("},{"line_number":6542,"context_line":"            False, stats[\u0027sparse_copy_volume\u0027])"},{"line_number":6543,"context_line":""},{"line_number":6544,"context_line":"        # Check value of sparse_copy_volume for thin enabled case."},{"line_number":6545,"context_line":"        self.configuration \u003d conf.Configuration(None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_b74c3171","line":6542,"in_reply_to":"1a4dcd0f_17c75e65","updated":"2015-08-28 14:41:08.000000000","message":"Done","commit_id":"abb66c9296914485de02de657d54408a12160336"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"8652a2b82c4aa8274aa3029296024ba61f4398c4","unresolved":false,"context_lines":[{"line_number":6550,"context_line":"        lvm_driver._update_volume_stats()"},{"line_number":6551,"context_line":"        stats \u003d lvm_driver._stats"},{"line_number":6552,"context_line":"        self.assertEqual("},{"line_number":6553,"context_line":"            True, stats[\u0027sparse_copy_volume\u0027])"},{"line_number":6554,"context_line":""},{"line_number":6555,"context_line":"    def test_validate_connector(self):"},{"line_number":6556,"context_line":"        iscsi_driver \u003d\\"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a4dcd0f_17f0bec8","line":6553,"updated":"2015-08-14 13:49:48.000000000","message":"Why not just self.assertTrue(stats[\u0027sparse_copy_volume\u0027])","commit_id":"abb66c9296914485de02de657d54408a12160336"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"fce1010f9324382ab6ebb0e76630428abba10124","unresolved":false,"context_lines":[{"line_number":6550,"context_line":"        lvm_driver._update_volume_stats()"},{"line_number":6551,"context_line":"        stats \u003d lvm_driver._stats"},{"line_number":6552,"context_line":"        self.assertEqual("},{"line_number":6553,"context_line":"            True, stats[\u0027sparse_copy_volume\u0027])"},{"line_number":6554,"context_line":""},{"line_number":6555,"context_line":"    def test_validate_connector(self):"},{"line_number":6556,"context_line":"        iscsi_driver \u003d\\"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_d7476549","line":6553,"in_reply_to":"1a4dcd0f_17f0bec8","updated":"2015-08-28 14:41:08.000000000","message":"Done","commit_id":"abb66c9296914485de02de657d54408a12160336"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3a5e2c48d0893ebef0a21115255dc9893ad27e73","unresolved":false,"context_lines":[{"line_number":5900,"context_line":""},{"line_number":5901,"context_line":"        src_vol \u003d tests_utils.create_volume(self.context, size\u003d1,"},{"line_number":5902,"context_line":"                                            host\u003dCONF.host)"},{"line_number":5903,"context_line":"        dest_vol \u003d tests_utils.create_volume(self.context, size\u003d1,"},{"line_number":5904,"context_line":"                                             host\u003dCONF.host)"},{"line_number":5905,"context_line":"        mock_get_connector.return_value \u003d {}"},{"line_number":5906,"context_line":"        self.volume.driver._throttle \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa1b9901_d77acff0","line":5903,"updated":"2015-08-20 10:40:28.000000000","message":"nit: Missing volume_destroy for these 2 volumes.","commit_id":"f0eab2713e8b9a0fd0ecb101371a7b27938786b5"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"368ee22358371c14d288ce1aeff06e66273ded65","unresolved":false,"context_lines":[{"line_number":5900,"context_line":""},{"line_number":5901,"context_line":"        src_vol \u003d tests_utils.create_volume(self.context, size\u003d1,"},{"line_number":5902,"context_line":"                                            host\u003dCONF.host)"},{"line_number":5903,"context_line":"        dest_vol \u003d tests_utils.create_volume(self.context, size\u003d1,"},{"line_number":5904,"context_line":"                                             host\u003dCONF.host)"},{"line_number":5905,"context_line":"        mock_get_connector.return_value \u003d {}"},{"line_number":5906,"context_line":"        self.volume.driver._throttle \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_b7baf121","line":5903,"in_reply_to":"fa1b9901_d77acff0","updated":"2015-08-28 14:41:59.000000000","message":"Done","commit_id":"f0eab2713e8b9a0fd0ecb101371a7b27938786b5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3a5e2c48d0893ebef0a21115255dc9893ad27e73","unresolved":false,"context_lines":[{"line_number":5936,"context_line":"        mock_attach.reset_mock()"},{"line_number":5937,"context_line":"        mock_detach.reset_mock()"},{"line_number":5938,"context_line":"        mock_attach.side_effect \u003d ["},{"line_number":5939,"context_line":"            ({\u0027device\u0027: {\u0027path\u0027: \u0027bar\u0027}}, dest_vol),"},{"line_number":5940,"context_line":"            ({\u0027device\u0027: {\u0027path\u0027: \u0027foo\u0027}}, src_vol),"},{"line_number":5941,"context_line":"        ]"},{"line_number":5942,"context_line":"        mock_get_capabilities.return_value \u003d {\u0027sparse_copy_volume\u0027: True}"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa1b9901_5741dfa7","line":5939,"updated":"2015-08-20 10:40:28.000000000","message":"nit: This could have been set as a variable and used here and in line 5919","commit_id":"f0eab2713e8b9a0fd0ecb101371a7b27938786b5"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"368ee22358371c14d288ce1aeff06e66273ded65","unresolved":false,"context_lines":[{"line_number":5936,"context_line":"        mock_attach.reset_mock()"},{"line_number":5937,"context_line":"        mock_detach.reset_mock()"},{"line_number":5938,"context_line":"        mock_attach.side_effect \u003d ["},{"line_number":5939,"context_line":"            ({\u0027device\u0027: {\u0027path\u0027: \u0027bar\u0027}}, dest_vol),"},{"line_number":5940,"context_line":"            ({\u0027device\u0027: {\u0027path\u0027: \u0027foo\u0027}}, src_vol),"},{"line_number":5941,"context_line":"        ]"},{"line_number":5942,"context_line":"        mock_get_capabilities.return_value \u003d {\u0027sparse_copy_volume\u0027: True}"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_f7b06945","line":5939,"in_reply_to":"fa1b9901_5741dfa7","updated":"2015-08-28 14:41:59.000000000","message":"Done","commit_id":"f0eab2713e8b9a0fd0ecb101371a7b27938786b5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"35f936e83f73a315949263116b5ac1e8edf8f614","unresolved":false,"context_lines":[{"line_number":7070,"context_line":"        lvm_driver.vg \u003d brick_lvm.LVM(\u0027cinder-volumes\u0027, \u0027sudo\u0027)"},{"line_number":7071,"context_line":"        lvm_driver._update_volume_stats()"},{"line_number":7072,"context_line":"        stats \u003d lvm_driver._stats"},{"line_number":7073,"context_line":"        self.assertEqual("},{"line_number":7074,"context_line":"            True, stats[\u0027sparse_copy_volume\u0027])"},{"line_number":7075,"context_line":""},{"line_number":7076,"context_line":"    def test_validate_connector(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_3a580b32","line":7073,"updated":"2015-08-28 13:30:25.000000000","message":"assertTrue","commit_id":"17a308980ad436e24cd85861c2d03c41f6228896"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"b480bd147a78ebdc04044b1635ff6b6c67aabe49","unresolved":false,"context_lines":[{"line_number":7070,"context_line":"        lvm_driver.vg \u003d brick_lvm.LVM(\u0027cinder-volumes\u0027, \u0027sudo\u0027)"},{"line_number":7071,"context_line":"        lvm_driver._update_volume_stats()"},{"line_number":7072,"context_line":"        stats \u003d lvm_driver._stats"},{"line_number":7073,"context_line":"        self.assertEqual("},{"line_number":7074,"context_line":"            True, stats[\u0027sparse_copy_volume\u0027])"},{"line_number":7075,"context_line":""},{"line_number":7076,"context_line":"    def test_validate_connector(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_774e9970","line":7073,"in_reply_to":"da20952f_3a580b32","updated":"2015-08-28 14:43:57.000000000","message":"Done","commit_id":"17a308980ad436e24cd85861c2d03c41f6228896"}],"cinder/volume/driver.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"439f2a13227fab834df3345b300050978291a44e","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        capabilities \u003d rpcapi.get_capabilities(context, dest_vol[\u0027host\u0027],"},{"line_number":698,"context_line":"                                               False)"},{"line_number":699,"context_line":"        sparse_copy_volume \u003d bool(capabilities and"},{"line_number":700,"context_line":"                                  capabilities[\u0027sparse_copy_volume\u0027])"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"        copy_error \u003d True"},{"line_number":703,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa1b9901_d8555050","line":700,"updated":"2015-08-19 14:58:00.000000000","message":"Shouldn\u0027t this be?\n\n sparse_copy_volume \u003d bool(capabilities and\n                           capabilities.get(\u0027sparse_copy_volume\u0027, False)\n\nOtherwise it will crash for any other driver that is not LVM or NFS, right?","commit_id":"3d9570914b75610374566e96cae76131a01cb589"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"c6a6eb1a6b250c955b2fcf72b5cfa1290f3638a4","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        capabilities \u003d rpcapi.get_capabilities(context, dest_vol[\u0027host\u0027],"},{"line_number":698,"context_line":"                                               False)"},{"line_number":699,"context_line":"        sparse_copy_volume \u003d bool(capabilities and"},{"line_number":700,"context_line":"                                  capabilities[\u0027sparse_copy_volume\u0027])"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"        copy_error \u003d True"},{"line_number":703,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa1b9901_30290038","line":700,"in_reply_to":"fa1b9901_d8555050","updated":"2015-08-19 15:35:46.000000000","message":"Good catch, if there isn\u0027t a default set for this value it will throw a KeyError for those that don\u0027t define it.","commit_id":"3d9570914b75610374566e96cae76131a01cb589"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"300c7a18152a31efc7bcd93cbde17a7a99baab6b","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        capabilities \u003d rpcapi.get_capabilities(context, dest_vol[\u0027host\u0027],"},{"line_number":698,"context_line":"                                               False)"},{"line_number":699,"context_line":"        sparse_copy_volume \u003d bool(capabilities and"},{"line_number":700,"context_line":"                                  capabilities[\u0027sparse_copy_volume\u0027])"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"        copy_error \u003d True"},{"line_number":703,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa1b9901_ca6a53b3","line":700,"in_reply_to":"fa1b9901_d8555050","updated":"2015-08-19 15:51:17.000000000","message":"Right. Thank you for raising it.","commit_id":"3d9570914b75610374566e96cae76131a01cb589"}]}
