)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2a58c170c58a27352c3e803681f8e950dadf70d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     lisali \u003cxiaoyan.li@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-18 16:18:19 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add check whether cloned images are dependent on the snapshot to"},{"line_number":8,"context_line":"delete in ceph delete_snapshot function."},{"line_number":9,"context_line":"Add error message to make clear."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa32b979_ccfb0578","line":7,"updated":"2015-06-18 11:57:02.000000000","message":"Please follow commit message guidelines:\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"a7f156b4f584515241613371c6831a29058aacd5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add check whether cloned images are dependent on the snapshot to"},{"line_number":8,"context_line":"delete in ceph delete_snapshot function."},{"line_number":9,"context_line":"Add error message to make clear."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ie21ba27735d8b65560adabb92a26cd86ef328a1d"},{"line_number":12,"context_line":"Closes-Bug: #1463682"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa32b979_913f3186","line":10,"updated":"2015-06-19 02:54:31.000000000","message":"lisa, the title is too long, you cannot let this patch pass the gating.\n\nsee: https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"bc7410a5ed48c24e9f82474e56a961da590a96db"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add dependency check in RBD delete_snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Check whether there are cloned images which dependent on the snapshot"},{"line_number":10,"context_line":"to delete."},{"line_number":11,"context_line":"Meanwhile, add error message to make clear."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_a1edf5b8","line":9,"updated":"2015-06-22 12:50:17.000000000","message":"s/which dependent/which are dependent\n\nor\n\ns/which dependent/which depend","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Check whether there are cloned images which dependent on the snapshot"},{"line_number":10,"context_line":"to delete."},{"line_number":11,"context_line":"Meanwhile, add error message to make clear."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ie21ba27735d8b65560adabb92a26cd86ef328a1d"},{"line_number":14,"context_line":"Closes-Bug: #1463682"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_8149d1d2","line":11,"updated":"2015-06-22 12:50:17.000000000","message":"Meanwhile what? Are we expecting some other patch to change behavior introduced by this patch?\n\nIf so, it should be explicitly mentioned.","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"53d91f4663f4b51370e647f1030fd801c952ee50","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add dependency check in RBD delete_snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"List dependency in log when failed to delete snapshot."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ie21ba27735d8b65560adabb92a26cd86ef328a1d"},{"line_number":12,"context_line":"Closes-Bug: #1463682"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa32b979_fa2198fd","line":9,"updated":"2015-06-26 09:08:56.000000000","message":"s/dependency/dependencies","commit_id":"962eb1443840972291072521d575bef11ab362a5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2708af747d873e6350e1d234b15541d60e6807f4","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add dependency check in RBD delete_snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"List dependency in log when failed to delete snapshot."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ie21ba27735d8b65560adabb92a26cd86ef328a1d"},{"line_number":12,"context_line":"Closes-Bug: #1463682"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ba3cc151_3e5e0cea","line":9,"updated":"2015-06-29 16:15:36.000000000","message":"s/dependency/dependencies","commit_id":"46e9d83793ad23e15535520060d8a7400381a98b"}],"cinder/tests/unit/test_rbd.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2a58c170c58a27352c3e803681f8e950dadf70d","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        info \u003d self.driver._get_children_info(volume, self.volume_name, snapshot)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        self.assertEqual(info, list_children)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @common_mocks"},{"line_number":414,"context_line":"    def test_get_clone_info(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_2c37114e","line":411,"updated":"2015-06-18 11:57:02.000000000","message":"Argument order for assertEqual should be (EXPECTED, ACTUAL)","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        info \u003d self.driver._get_children_info(volume, self.volume_name, snapshot)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        self.assertEqual(info, list_children)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @common_mocks"},{"line_number":414,"context_line":"    def test_get_clone_info(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_d17619a3","line":411,"in_reply_to":"fa32b979_2c37114e","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        with mock.patch.object(self.driver, \u0027_get_children_info\u0027) as \\"},{"line_number":374,"context_line":"                mock_get_children_info:"},{"line_number":375,"context_line":"            mock_get_children_info.return_value \u003d {}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"            self.driver.delete_snapshot(self.snapshot)"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_419bc9c9","line":375,"updated":"2015-06-22 12:50:17.000000000","message":"Return value should be a list []\n\nAnd it\u0027d be cleaner to add this as a method decorator\n\n @mock.patch.object(self.driver, \u0027_get_children_info\u0027, return_value\u003d[])\n def test_delete_snapshot(self, mock_get_children_info):","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        with mock.patch.object(self.driver, \u0027_get_children_info\u0027) as \\"},{"line_number":374,"context_line":"                mock_get_children_info:"},{"line_number":375,"context_line":"            mock_get_children_info.return_value \u003d {}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"            self.driver.delete_snapshot(self.snapshot)"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_423643e8","line":375,"in_reply_to":"fa32b979_419bc9c9","updated":"2015-06-23 07:07:04.000000000","message":"Hi Gorka, thank you for your detailed review. \nAbout adding @mock.patch.object, I am wondering whether we should keep current style in the file. \nAs there are many such styles in the file: test_delete_backup_snaps etc.","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"            self.driver.delete_snapshot(self.snapshot)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            args \u003d [str(self.snapshot_name)]"},{"line_number":380,"context_line":"            proxy.remove_snap.assert_called_with(*args)"},{"line_number":381,"context_line":"            proxy.unprotect_snap.assert_called_with(*args)"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_215b25f8","line":379,"updated":"2015-06-22 12:50:17.000000000","message":"No need for str here","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"            self.driver.delete_snapshot(self.snapshot)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            args \u003d [str(self.snapshot_name)]"},{"line_number":380,"context_line":"            proxy.remove_snap.assert_called_with(*args)"},{"line_number":381,"context_line":"            proxy.unprotect_snap.assert_called_with(*args)"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_e23437df","line":379,"in_reply_to":"fa32b979_215b25f8","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            self.driver.delete_snapshot(self.snapshot)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            args \u003d [str(self.snapshot_name)]"},{"line_number":380,"context_line":"            proxy.remove_snap.assert_called_with(*args)"},{"line_number":381,"context_line":"            proxy.unprotect_snap.assert_called_with(*args)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    @common_mocks"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_61612da8","line":380,"updated":"2015-06-22 12:50:17.000000000","message":"Wouldn\u0027t it be easier to just check:\n\n proxy.remove_snap.assert_called_once_with(self.snapshot_name)","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            self.driver.delete_snapshot(self.snapshot)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            args \u003d [str(self.snapshot_name)]"},{"line_number":380,"context_line":"            proxy.remove_snap.assert_called_with(*args)"},{"line_number":381,"context_line":"            proxy.unprotect_snap.assert_called_with(*args)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    @common_mocks"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_626ee7ca","line":380,"in_reply_to":"fa32b979_61612da8","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            args \u003d [str(self.snapshot_name)]"},{"line_number":380,"context_line":"            proxy.remove_snap.assert_called_with(*args)"},{"line_number":381,"context_line":"            proxy.unprotect_snap.assert_called_with(*args)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    @common_mocks"},{"line_number":384,"context_line":"    def test_delete_busy_snapshot(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_e16d3d9a","line":381,"updated":"2015-06-22 12:50:17.000000000","message":"Same here","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            args \u003d [str(self.snapshot_name)]"},{"line_number":380,"context_line":"            proxy.remove_snap.assert_called_with(*args)"},{"line_number":381,"context_line":"            proxy.unprotect_snap.assert_called_with(*args)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    @common_mocks"},{"line_number":384,"context_line":"    def test_delete_busy_snapshot(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_2269bfbe","line":381,"in_reply_to":"fa32b979_e16d3d9a","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        with mock.patch.object(self.driver, \u0027_get_children_info\u0027) as \\"},{"line_number":389,"context_line":"                mock_get_children_info:"},{"line_number":390,"context_line":"            mock_get_children_info.return_value \u003d {(\u0027pool\u0027, \u0027volume2\u0027)}"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"            self.assertRaises(exception.SnapshotIsBusy,"},{"line_number":393,"context_line":"                              self.driver.delete_snapshot, self.snapshot)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_81ad518a","line":390,"updated":"2015-06-22 12:50:17.000000000","message":"It should be a list, not a set:\n\n mock_get_children_info.return_value \u003d [(\u0027pool\u0027, \u0027volume2\u0027)]","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        with mock.patch.object(self.driver, \u0027_get_children_info\u0027) as \\"},{"line_number":389,"context_line":"                mock_get_children_info:"},{"line_number":390,"context_line":"            mock_get_children_info.return_value \u003d {(\u0027pool\u0027, \u0027volume2\u0027)}"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"            self.assertRaises(exception.SnapshotIsBusy,"},{"line_number":393,"context_line":"                              self.driver.delete_snapshot, self.snapshot)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_a29b8fc8","line":390,"in_reply_to":"fa32b979_81ad518a","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        volume \u003d self.mock_rbd.Image()"},{"line_number":400,"context_line":"        volume.set_snap \u003d mock.Mock()"},{"line_number":401,"context_line":"        volume.list_children \u003d mock.Mock()"},{"line_number":402,"context_line":"        list_children \u003d {\u0027pool\u0027, \u0027volume2\u0027}"},{"line_number":403,"context_line":"        volume.list_children.return_value \u003d list_children"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        snapshot \u003d self.mock_rbd.ImageSnapshot()"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_0182a100","line":402,"updated":"2015-06-22 12:50:17.000000000","message":"This should be a list of tuples, not a set of strings:\n\n list_children \u003d [(\u0027pool\u0027, \u0027volume2\u0027)]","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        volume \u003d self.mock_rbd.Image()"},{"line_number":400,"context_line":"        volume.set_snap \u003d mock.Mock()"},{"line_number":401,"context_line":"        volume.list_children \u003d mock.Mock()"},{"line_number":402,"context_line":"        list_children \u003d {\u0027pool\u0027, \u0027volume2\u0027}"},{"line_number":403,"context_line":"        volume.list_children.return_value \u003d list_children"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        snapshot \u003d self.mock_rbd.ImageSnapshot()"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_62a58702","line":402,"in_reply_to":"fa32b979_0182a100","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"53d91f4663f4b51370e647f1030fd801c952ee50","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                proxy,"},{"line_number":395,"context_line":"                self.snapshot_name)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"            self.assertTrue(proxy.unprotect_snap.called)"},{"line_number":398,"context_line":"            self.assertFalse(proxy.remove_snap.called)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    @common_mocks"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_9a564c29","line":397,"updated":"2015-06-26 09:08:56.000000000","message":"Should you check that LOG.info is been called with the dependent info?  After all it\u0027s what the patch is all about.  ;-)","commit_id":"962eb1443840972291072521d575bef11ab362a5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"53ffea5712ad39096d0599c5f2fb82b0a7cdcb2e","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                proxy,"},{"line_number":395,"context_line":"                self.snapshot_name)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"            self.assertTrue(proxy.unprotect_snap.called)"},{"line_number":398,"context_line":"            self.assertFalse(proxy.remove_snap.called)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    @common_mocks"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_6272b6e7","line":397,"in_reply_to":"ba3cc151_1ee22804","updated":"2015-06-29 17:31:53.000000000","message":"I\u0027m fine with that Gorka. It does make sense to me to check that a key piece of information is included in the text. Just not matching the entire string.","commit_id":"962eb1443840972291072521d575bef11ab362a5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"985ec3e77f7395f331a109916a294cccb253b11d","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                proxy,"},{"line_number":395,"context_line":"                self.snapshot_name)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"            self.assertTrue(proxy.unprotect_snap.called)"},{"line_number":398,"context_line":"            self.assertFalse(proxy.remove_snap.called)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    @common_mocks"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_70035c74","line":397,"in_reply_to":"ba3cc151_6272b6e7","updated":"2015-06-29 18:10:13.000000000","message":"So we are in agreement. :-)","commit_id":"962eb1443840972291072521d575bef11ab362a5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"08cdffd302ec2026a34cb0590d1462a9c37b104c","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                proxy,"},{"line_number":395,"context_line":"                self.snapshot_name)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"            self.assertTrue(proxy.unprotect_snap.called)"},{"line_number":398,"context_line":"            self.assertFalse(proxy.remove_snap.called)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    @common_mocks"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_1ee22804","line":397,"in_reply_to":"fa32b979_34c861a8","updated":"2015-06-29 16:14:53.000000000","message":"Sean, I would usually agree with you, but in this case, the whole point of the patch is to log very specific information, so it should be checking that IDs for dependencies are in the output, even if we don\u0027t check the rest of the text message.","commit_id":"962eb1443840972291072521d575bef11ab362a5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4f387a5b9ad762046c1263e9fd95a1d4267134b1","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                proxy,"},{"line_number":395,"context_line":"                self.snapshot_name)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"            self.assertTrue(proxy.unprotect_snap.called)"},{"line_number":398,"context_line":"            self.assertFalse(proxy.remove_snap.called)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    @common_mocks"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_34c861a8","line":397,"in_reply_to":"fa32b979_9a564c29","updated":"2015-06-26 15:51:36.000000000","message":"I\u0027d suggest a slight variation to this suggestion.\n\nI\u0027m very much against checking specific text for mocked log calls. The main point of unit testing should be to validate the expected behavior.\n\nIf there is a desire to validate logging it should just be to verify that things like LOG.warning or LOG.error were called, but not what the specific text of the log calls were. Log text can change.","commit_id":"962eb1443840972291072521d575bef11ab362a5"}],"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"747f5190c0ac0e52880858db072110b0b5625093","unresolved":false,"context_lines":[{"line_number":606,"context_line":"            if parent_snap \u003d\u003d \"%s.clone_snap\" % volume_name:"},{"line_number":607,"context_line":"                return pool, parent, parent_snap"},{"line_number":608,"context_line":"        except self.rbd.ImageNotFound:"},{"line_number":609,"context_line":"            LOG.debug(\"volume %s is not a clone\", volume_name)"},{"line_number":610,"context_line":"            volume.set_snap(None)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"        return (None, None, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_9f50be33","line":609,"updated":"2015-06-18 13:42:54.000000000","message":"\".\" at EOL and the \"v\" in volume should be capitalized","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":606,"context_line":"            if parent_snap \u003d\u003d \"%s.clone_snap\" % volume_name:"},{"line_number":607,"context_line":"                return pool, parent, parent_snap"},{"line_number":608,"context_line":"        except self.rbd.ImageNotFound:"},{"line_number":609,"context_line":"            LOG.debug(\"volume %s is not a clone\", volume_name)"},{"line_number":610,"context_line":"            volume.set_snap(None)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"        return (None, None, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_1e057012","line":609,"in_reply_to":"fa32b979_9f50be33","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"747f5190c0ac0e52880858db072110b0b5625093","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        return (None, None, None)"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    def _get_children_info(self, volume, volume_name, snap):"},{"line_number":615,"context_line":"        \"\"\"List the clones of the volume(image) at the given snapshot."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        Returns a list of (pool, image)."},{"line_number":618,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_6222fda4","line":615,"updated":"2015-06-18 13:42:54.000000000","message":"\"for\" the given snapshot?","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2a58c170c58a27352c3e803681f8e950dadf70d","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        return (None, None, None)"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    def _get_children_info(self, volume, volume_name, snap):"},{"line_number":615,"context_line":"        \"\"\"List the clones of the volume(image) at the given snapshot."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        Returns a list of (pool, image)."},{"line_number":618,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_ac4321ae","line":615,"updated":"2015-06-18 11:57:02.000000000","message":"/at/of/ ?","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        return (None, None, None)"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    def _get_children_info(self, volume, volume_name, snap):"},{"line_number":615,"context_line":"        \"\"\"List the clones of the volume(image) at the given snapshot."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        Returns a list of (pool, image)."},{"line_number":618,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_91073117","line":615,"in_reply_to":"fa32b979_6222fda4","updated":"2015-06-19 02:46:40.000000000","message":"I use \u0027List children for the given snapshot of a volume(image).\" instead. Is it better? \nThe snapshot is generated based on a volume, and then its children are cloned from the snapshot.","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        return (None, None, None)"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    def _get_children_info(self, volume, volume_name, snap):"},{"line_number":615,"context_line":"        \"\"\"List the clones of the volume(image) at the given snapshot."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        Returns a list of (pool, image)."},{"line_number":618,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_b10a751e","line":615,"in_reply_to":"fa32b979_ac4321ae","updated":"2015-06-19 02:46:40.000000000","message":"I use \u0027List children for the given snapshot of a volume(image).\" instead. Is it better? \nThe snapshot is generated based on a volume, and then its children are cloned from the snapshot.","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2a58c170c58a27352c3e803681f8e950dadf70d","unresolved":false,"context_lines":[{"line_number":749,"context_line":"                children_list \u003d self._get_children_info(rbd_image,"},{"line_number":750,"context_line":"                                                        volume_name,"},{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if len(children_list) \u003e 0:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as\u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_ec528966","line":752,"updated":"2015-06-18 11:57:02.000000000","message":"Could be simplified to:\n\n    if children_list:","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":749,"context_line":"                children_list \u003d self._get_children_info(rbd_image,"},{"line_number":750,"context_line":"                                                        volume_name,"},{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if len(children_list) \u003e 0:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as\u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_71114d51","line":752,"in_reply_to":"fa32b979_ec528966","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2a58c170c58a27352c3e803681f8e950dadf70d","unresolved":false,"context_lines":[{"line_number":750,"context_line":"                                                        volume_name,"},{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if len(children_list) \u003e 0:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as\u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_0cd00dc8","line":753,"updated":"2015-06-18 11:57:02.000000000","message":"Need trailing space so the resulting string doesn\u0027t end up \"asfollowing\".","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":750,"context_line":"                                                        volume_name,"},{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if len(children_list) \u003e 0:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as\u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_111c8168","line":753,"in_reply_to":"fa32b979_0cd00dc8","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"747f5190c0ac0e52880858db072110b0b5625093","unresolved":false,"context_lines":[{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if len(children_list) \u003e 0:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as\u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"},{"line_number":757,"context_line":"                        LOG.info(_LI(\u0027Image %s/%s is dependent on the snapshot %s\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_a28ec52b","line":754,"updated":"2015-06-18 13:42:54.000000000","message":"I agree with Sean, \".\" at EOL","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2a58c170c58a27352c3e803681f8e950dadf70d","unresolved":false,"context_lines":[{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if len(children_list) \u003e 0:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as\u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"},{"line_number":757,"context_line":"                        LOG.info(_LI(\u0027Image %s/%s is dependent on the snapshot %s\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_4cf1356a","line":754,"updated":"2015-06-18 11:57:02.000000000","message":"Suggest ending with a period.","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if len(children_list) \u003e 0:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as\u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"},{"line_number":757,"context_line":"                        LOG.info(_LI(\u0027Image %s/%s is dependent on the snapshot %s\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_31174546","line":754,"in_reply_to":"fa32b979_4cf1356a","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if len(children_list) \u003e 0:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as\u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"},{"line_number":757,"context_line":"                        LOG.info(_LI(\u0027Image %s/%s is dependent on the snapshot %s\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_f12b1d80","line":754,"in_reply_to":"fa32b979_a28ec52b","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2a58c170c58a27352c3e803681f8e950dadf70d","unresolved":false,"context_lines":[{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"},{"line_number":757,"context_line":"                        LOG.info(_LI(\u0027Image %s/%s is dependent on the snapshot %s\u0027),"},{"line_number":758,"context_line":"                                pool, image, snap_name)"},{"line_number":759,"context_line":"                    raise exception.SnapshotIsBusy(snapshot_name\u003dsnap_name)"},{"line_number":760,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_0cb56d7c","line":757,"updated":"2015-06-18 11:57:02.000000000","message":"For more than one string format variable they should be named.\n\n\u0027Image %(pool)s/%(image)s is...\u0027, {\u0027pool\u0027: pool, \u0027image\u0027: image, ...}","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"},{"line_number":757,"context_line":"                        LOG.info(_LI(\u0027Image %s/%s is dependent on the snapshot %s\u0027),"},{"line_number":758,"context_line":"                                pool, image, snap_name)"},{"line_number":759,"context_line":"                    raise exception.SnapshotIsBusy(snapshot_name\u003dsnap_name)"},{"line_number":760,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_911e515d","line":757,"in_reply_to":"fa32b979_0cb56d7c","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"747f5190c0ac0e52880858db072110b0b5625093","unresolved":false,"context_lines":[{"line_number":779,"context_line":"                      \u0027diff\u0027: diff"},{"line_number":780,"context_line":"                  })"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        if volume[\u0027host\u0027] !\u003d host[\u0027host\u0027]:"},{"line_number":783,"context_line":"            LOG.error(_LE(\u0027Retype with host migration not supported\u0027))"},{"line_number":784,"context_line":"            return False"},{"line_number":785,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_028d31d5","line":782,"updated":"2015-06-18 13:42:54.000000000","message":"\".\" at EOL","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":779,"context_line":"                      \u0027diff\u0027: diff"},{"line_number":780,"context_line":"                  })"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        if volume[\u0027host\u0027] !\u003d host[\u0027host\u0027]:"},{"line_number":783,"context_line":"            LOG.error(_LE(\u0027Retype with host migration not supported\u0027))"},{"line_number":784,"context_line":"            return False"},{"line_number":785,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_b12115a0","line":782,"in_reply_to":"fa32b979_028d31d5","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"747f5190c0ac0e52880858db072110b0b5625093","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            LOG.error(_LE(\u0027Retype with host migration not supported\u0027))"},{"line_number":784,"context_line":"            return False"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        if diff[\u0027encryption\u0027]:"},{"line_number":787,"context_line":"            LOG.error(_LE(\u0027Retype of encryption type not supported\u0027))"},{"line_number":788,"context_line":"            return False"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_82bf0160","line":786,"updated":"2015-06-18 13:42:54.000000000","message":"\".\" at EOL","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            LOG.error(_LE(\u0027Retype with host migration not supported\u0027))"},{"line_number":784,"context_line":"            return False"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        if diff[\u0027encryption\u0027]:"},{"line_number":787,"context_line":"            LOG.error(_LE(\u0027Retype of encryption type not supported\u0027))"},{"line_number":788,"context_line":"            return False"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_71386dd3","line":786,"in_reply_to":"fa32b979_82bf0160","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"747f5190c0ac0e52880858db072110b0b5625093","unresolved":false,"context_lines":[{"line_number":787,"context_line":"            LOG.error(_LE(\u0027Retype of encryption type not supported\u0027))"},{"line_number":788,"context_line":"            return False"},{"line_number":789,"context_line":""},{"line_number":790,"context_line":"        if diff[\u0027extra_specs\u0027]:"},{"line_number":791,"context_line":"            LOG.error(_LE(\u0027Retype of extra_specs not supported\u0027))"},{"line_number":792,"context_line":"            return False"},{"line_number":793,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_a2c245e7","line":790,"updated":"2015-06-18 13:42:54.000000000","message":"\".\" at EOL","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":787,"context_line":"            LOG.error(_LE(\u0027Retype of encryption type not supported\u0027))"},{"line_number":788,"context_line":"            return False"},{"line_number":789,"context_line":""},{"line_number":790,"context_line":"        if diff[\u0027extra_specs\u0027]:"},{"line_number":791,"context_line":"            LOG.error(_LE(\u0027Retype of extra_specs not supported\u0027))"},{"line_number":792,"context_line":"            return False"},{"line_number":793,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_312e658c","line":790,"in_reply_to":"fa32b979_a2c245e7","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"747f5190c0ac0e52880858db072110b0b5625093","unresolved":false,"context_lines":[{"line_number":850,"context_line":"            LOG.debug(\u0027not cloneable: %s\u0027, six.text_type(e))"},{"line_number":851,"context_line":"            return False"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        if self._get_fsid() !\u003d fsid:"},{"line_number":854,"context_line":"            LOG.debug(\u0027%s is in a different ceph cluster\u0027, image_location)"},{"line_number":855,"context_line":"            return False"},{"line_number":856,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_550bf523","line":853,"updated":"2015-06-18 13:42:54.000000000","message":"\".\" at EOL","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":850,"context_line":"            LOG.debug(\u0027not cloneable: %s\u0027, six.text_type(e))"},{"line_number":851,"context_line":"            return False"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        if self._get_fsid() !\u003d fsid:"},{"line_number":854,"context_line":"            LOG.debug(\u0027%s is in a different ceph cluster\u0027, image_location)"},{"line_number":855,"context_line":"            return False"},{"line_number":856,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_f1523d12","line":853,"in_reply_to":"fa32b979_550bf523","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"747f5190c0ac0e52880858db072110b0b5625093","unresolved":false,"context_lines":[{"line_number":855,"context_line":"            return False"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"        if image_meta[\u0027disk_format\u0027] !\u003d \u0027raw\u0027:"},{"line_number":858,"context_line":"            LOG.debug((\"rbd image clone requires image format to be \""},{"line_number":859,"context_line":"                       \"\u0027raw\u0027 but image {0} is \u0027{1}\u0027\").format("},{"line_number":860,"context_line":"                image_location, image_meta[\u0027disk_format\u0027]))"},{"line_number":861,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_b51cc16a","line":858,"updated":"2015-06-18 13:42:54.000000000","message":"\".\" at EOL","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":855,"context_line":"            return False"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"        if image_meta[\u0027disk_format\u0027] !\u003d \u0027raw\u0027:"},{"line_number":858,"context_line":"            LOG.debug((\"rbd image clone requires image format to be \""},{"line_number":859,"context_line":"                       \"\u0027raw\u0027 but image {0} is \u0027{1}\u0027\").format("},{"line_number":860,"context_line":"                image_location, image_meta[\u0027disk_format\u0027]))"},{"line_number":861,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_9155f1fa","line":858,"in_reply_to":"fa32b979_b51cc16a","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"747f5190c0ac0e52880858db072110b0b5625093","unresolved":false,"context_lines":[{"line_number":890,"context_line":"                  tempfile.gettempdir())"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        if tmpdir \u003d\u003d self.configuration.volume_tmp_dir:"},{"line_number":893,"context_line":"            LOG.warning(_LW(\u0027volume_tmp_dir is now deprecated, please use \u0027"},{"line_number":894,"context_line":"                            \u0027image_conversion_dir\u0027))"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        # ensure temporary directory exists"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_226cf533","line":893,"updated":"2015-06-18 13:42:54.000000000","message":"\".\" at EOL","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e9ad909ee6eb88faa8cd6c5af2ce7bddad5b6303","unresolved":false,"context_lines":[{"line_number":890,"context_line":"                  tempfile.gettempdir())"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        if tmpdir \u003d\u003d self.configuration.volume_tmp_dir:"},{"line_number":893,"context_line":"            LOG.warning(_LW(\u0027volume_tmp_dir is now deprecated, please use \u0027"},{"line_number":894,"context_line":"                            \u0027image_conversion_dir\u0027))"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        # ensure temporary directory exists"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_713f0db4","line":893,"in_reply_to":"fa32b979_226cf533","updated":"2015-06-19 02:46:40.000000000","message":"Done","commit_id":"a822f997dbc72f510c06e118f9090e7c56202efe"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":611,"context_line":""},{"line_number":612,"context_line":"        return (None, None, None)"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    def _get_children_info(self, volume, volume_name, snap):"},{"line_number":615,"context_line":"        \"\"\"List children for the given snapshot of a volume(image)."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        Returns a list of (pool, image)."}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_14eae4ac","line":614,"updated":"2015-06-22 12:50:17.000000000","message":"volume should be changed to rbd_image to make it clear that it\u0027s not a Volume class instance.\n\nvolume_name is not being used in the method, should be removed.","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":611,"context_line":""},{"line_number":612,"context_line":"        return (None, None, None)"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    def _get_children_info(self, volume, volume_name, snap):"},{"line_number":615,"context_line":"        \"\"\"List children for the given snapshot of a volume(image)."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        Returns a list of (pool, image)."}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_82a8cbdc","line":614,"in_reply_to":"fa32b979_14eae4ac","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        Returns a list of (pool, image)."},{"line_number":618,"context_line":"        \"\"\""},{"line_number":619,"context_line":"        children_list \u003d {}"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        if snap:"},{"line_number":622,"context_line":"            volume.set_snap(snap)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_34b608dd","line":619,"updated":"2015-06-22 12:50:17.000000000","message":"Initialize to a list, not a dictionary.\n\n children_list \u003d []","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        Returns a list of (pool, image)."},{"line_number":618,"context_line":"        \"\"\""},{"line_number":619,"context_line":"        children_list \u003d {}"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        if snap:"},{"line_number":622,"context_line":"            volume.set_snap(snap)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_22b0df42","line":619,"in_reply_to":"fa32b979_34b608dd","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        volume_name \u003d encodeutils.safe_encode(snapshot[\u0027volume_name\u0027])"},{"line_number":742,"context_line":"        snap_name \u003d encodeutils.safe_encode(snapshot[\u0027name\u0027])"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        \u0027\u0027\u0027 Check whether there are cloned images dependent on the snapshot\u0027\u0027\u0027"},{"line_number":745,"context_line":"        with RADOSClient(self) as client:"},{"line_number":746,"context_line":"            rbd_image \u003d self.rbd.Image(client.ioctx, volume_name)"},{"line_number":747,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_b47c5821","line":744,"updated":"2015-06-22 12:50:17.000000000","message":"This looks like it should be a normal comment beginning with #","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        volume_name \u003d encodeutils.safe_encode(snapshot[\u0027volume_name\u0027])"},{"line_number":742,"context_line":"        snap_name \u003d encodeutils.safe_encode(snapshot[\u0027name\u0027])"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        \u0027\u0027\u0027 Check whether there are cloned images dependent on the snapshot\u0027\u0027\u0027"},{"line_number":745,"context_line":"        with RADOSClient(self) as client:"},{"line_number":746,"context_line":"            rbd_image \u003d self.rbd.Image(client.ioctx, volume_name)"},{"line_number":747,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_42aba3d6","line":744,"in_reply_to":"fa32b979_b47c5821","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            rbd_image \u003d self.rbd.Image(client.ioctx, volume_name)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"            try:"},{"line_number":749,"context_line":"                children_list \u003d self._get_children_info(rbd_image,"},{"line_number":750,"context_line":"                                                        volume_name,"},{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if children_list:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_3431280c","line":749,"updated":"2015-06-22 12:50:17.000000000","message":"This could raise an exception (because of list_children), don\u0027t we want to handle it here?","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            rbd_image \u003d self.rbd.Image(client.ioctx, volume_name)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"            try:"},{"line_number":749,"context_line":"                children_list \u003d self._get_children_info(rbd_image,"},{"line_number":750,"context_line":"                                                        volume_name,"},{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if children_list:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_a282af50","line":749,"in_reply_to":"fa32b979_3431280c","updated":"2015-06-23 07:07:04.000000000","message":"No exception is raised from the doc:\nhttp://ceph.com/docs/master/rbd/librbdpy/","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3f40ec9d2974bf746c273f140b49547a62125d85","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            rbd_image \u003d self.rbd.Image(client.ioctx, volume_name)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"            try:"},{"line_number":749,"context_line":"                children_list \u003d self._get_children_info(rbd_image,"},{"line_number":750,"context_line":"                                                        volume_name,"},{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if children_list:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_d9e2452f","line":749,"in_reply_to":"fa32b979_a282af50","updated":"2015-06-23 09:32:41.000000000","message":"Trusting docs is a slippery slope  ;-)\n\nTrust the code: https://github.com/ceph/ceph/blob/master/src/pybind/rbd.py#L962","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if children_list:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as \u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it.\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"},{"line_number":757,"context_line":"                        LOG.info(_LI(\u0027Image %(pool)s/%(image)s is dependent \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_cfcce563","line":754,"updated":"2015-06-22 12:50:17.000000000","message":"Logs can have interleaved entries, so using following here might not be the best idea since it gives the impression that the volumes are going to be in the following entries.","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":751,"context_line":"                                                        snap_name)"},{"line_number":752,"context_line":"                if children_list:"},{"line_number":753,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as \u0027"},{"line_number":754,"context_line":"                                 \u0027following volumes are dependent on it.\u0027),"},{"line_number":755,"context_line":"                             snap_name)"},{"line_number":756,"context_line":"                    for (pool, image) in children_list:"},{"line_number":757,"context_line":"                        LOG.info(_LI(\u0027Image %(pool)s/%(image)s is dependent \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_827f6b65","line":754,"in_reply_to":"fa32b979_cfcce563","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        try:"},{"line_number":852,"context_line":"            fsid, pool, image, snapshot \u003d self._parse_location(image_location)"},{"line_number":853,"context_line":"        except exception.ImageUnacceptable as e:"},{"line_number":854,"context_line":"            LOG.debug(\u0027not cloneable: %s.\u0027, six.text_type(e))"},{"line_number":855,"context_line":"            return False"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"        if self._get_fsid() !\u003d fsid:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_cf0e2532","line":854,"updated":"2015-06-22 12:50:17.000000000","message":"Since you already modified this line you should remove six.text_type as well","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":851,"context_line":"        try:"},{"line_number":852,"context_line":"            fsid, pool, image, snapshot \u003d self._parse_location(image_location)"},{"line_number":853,"context_line":"        except exception.ImageUnacceptable as e:"},{"line_number":854,"context_line":"            LOG.debug(\u0027not cloneable: %s.\u0027, six.text_type(e))"},{"line_number":855,"context_line":"            return False"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"        if self._get_fsid() !\u003d fsid:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_4292c3a0","line":854,"in_reply_to":"fa32b979_cf0e2532","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"48371d97834c91bfc623c6b57cdbab17f40c1dfa","unresolved":false,"context_lines":[{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        if image_meta[\u0027disk_format\u0027] !\u003d \u0027raw\u0027:"},{"line_number":862,"context_line":"            LOG.debug((\"rbd image clone requires image format to be \""},{"line_number":863,"context_line":"                       \"\u0027raw\u0027 but image {0} is \u0027{1}\u0027.\").format("},{"line_number":864,"context_line":"                image_location, image_meta[\u0027disk_format\u0027]))"},{"line_number":865,"context_line":"            return False"},{"line_number":866,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_4fa455b8","line":863,"updated":"2015-06-22 12:50:17.000000000","message":"Since you modify this line you should remove usage of format method to adhere to Logging Guidelines.","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"be7de469fb91e10f8bed0eb1308bade89b71bd0b","unresolved":false,"context_lines":[{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        if image_meta[\u0027disk_format\u0027] !\u003d \u0027raw\u0027:"},{"line_number":862,"context_line":"            LOG.debug((\"rbd image clone requires image format to be \""},{"line_number":863,"context_line":"                       \"\u0027raw\u0027 but image {0} is \u0027{1}\u0027.\").format("},{"line_number":864,"context_line":"                image_location, image_meta[\u0027disk_format\u0027]))"},{"line_number":865,"context_line":"            return False"},{"line_number":866,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_a2e94f1c","line":863,"in_reply_to":"fa32b979_4fa455b8","updated":"2015-06-23 07:07:04.000000000","message":"Done","commit_id":"5b0bb16dc174bda95f03e0332fe69da1c4343999"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"1d5bc02e65f7a29aaf5fef845fbf832dc63f1a4d","unresolved":false,"context_lines":[{"line_number":758,"context_line":"                children_list \u003d self._get_children_info(rbd_image,"},{"line_number":759,"context_line":"                                                        snap_name)"},{"line_number":760,"context_line":"                if children_list:"},{"line_number":761,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as \u0027"},{"line_number":762,"context_line":"                                 \u0027there are volumes dependent on it.\u0027),"},{"line_number":763,"context_line":"                             snap_name)"},{"line_number":764,"context_line":"                    for (pool, image) in children_list:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_13788c2a","line":761,"updated":"2015-06-23 09:04:35.000000000","message":"s/can not/can\u0027t/ or s/can not/cannot/","commit_id":"452a7b3d7a0373c9a0751f3b1967b51c18dfb0a7"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"b0f7e1b7ca73aa04ca1e3140351c13754e550247","unresolved":false,"context_lines":[{"line_number":758,"context_line":"                children_list \u003d self._get_children_info(rbd_image,"},{"line_number":759,"context_line":"                                                        snap_name)"},{"line_number":760,"context_line":"                if children_list:"},{"line_number":761,"context_line":"                    LOG.info(_LI(\u0027The snapshot %s can not be deleted as \u0027"},{"line_number":762,"context_line":"                                 \u0027there are volumes dependent on it.\u0027),"},{"line_number":763,"context_line":"                             snap_name)"},{"line_number":764,"context_line":"                    for (pool, image) in children_list:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_f105b6c1","line":761,"in_reply_to":"fa32b979_13788c2a","updated":"2015-06-24 01:49:16.000000000","message":"Done","commit_id":"452a7b3d7a0373c9a0751f3b1967b51c18dfb0a7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8f4e46e07df303d2dde9b7fecda6122270175fbb","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import encodeutils"},{"line_number":27,"context_line":"from oslo_utils import units"},{"line_number":28,"context_line":"import six"},{"line_number":29,"context_line":"from six.moves import urllib"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_b1bce7dc","line":27,"updated":"2015-06-24 17:38:56.000000000","message":"Need to remove six for PEP8 gate to pass","commit_id":"49cfce359f10f17e1c92e2cb3061e78897095cab"},{"author":{"_account_id":8151,"name":"Michal Jura","email":"mjura@suse.com","username":"mjura"},"change_message_id":"f50c66d3927c1f623121c7b445abdb4a0452ccbe","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import encodeutils"},{"line_number":27,"context_line":"from oslo_utils import units"},{"line_number":28,"context_line":"import six"},{"line_number":29,"context_line":"from six.moves import urllib"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_49f35973","line":28,"updated":"2015-06-25 08:18:25.000000000","message":"\u0027six\u0027 imported but unused","commit_id":"49cfce359f10f17e1c92e2cb3061e78897095cab"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"8d814314a6adcd065734e3066a24174776bd0b1c","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":777,"context_line":"            try:"},{"line_number":778,"context_line":"                volume.unprotect_snap(snap_name)"},{"line_number":779,"context_line":"            except self.rbd.ImageBusy:"},{"line_number":780,"context_line":"                raise exception.SnapshotIsBusy(snapshot_name\u003dsnap_name)"},{"line_number":781,"context_line":"            volume.remove_snap(snap_name)"},{"line_number":782,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_b845ca6f","line":779,"updated":"2015-06-24 07:58:29.000000000","message":"I think dumping dependency list into cinder log on every delete_snapshot() call is too much.  I\u0027d rather have a check here if upprotect_snap() raises exception.","commit_id":"49cfce359f10f17e1c92e2cb3061e78897095cab"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"8d225bd1a684f4813a7d09a6e3503a413a016f90","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":777,"context_line":"            try:"},{"line_number":778,"context_line":"                volume.unprotect_snap(snap_name)"},{"line_number":779,"context_line":"            except self.rbd.ImageBusy:"},{"line_number":780,"context_line":"                raise exception.SnapshotIsBusy(snapshot_name\u003dsnap_name)"},{"line_number":781,"context_line":"            volume.remove_snap(snap_name)"},{"line_number":782,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_5276aea4","line":779,"in_reply_to":"fa32b979_11e1132a","updated":"2015-06-24 23:53:08.000000000","message":"OK, let me rephrase: having to go through _get_children_info() on every delete_snapshot is not reasonable.","commit_id":"49cfce359f10f17e1c92e2cb3061e78897095cab"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d8ab47706e59b97170bb4a4e4472c6c4df8f54d3","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":777,"context_line":"            try:"},{"line_number":778,"context_line":"                volume.unprotect_snap(snap_name)"},{"line_number":779,"context_line":"            except self.rbd.ImageBusy:"},{"line_number":780,"context_line":"                raise exception.SnapshotIsBusy(snapshot_name\u003dsnap_name)"},{"line_number":781,"context_line":"            volume.remove_snap(snap_name)"},{"line_number":782,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_e9f02dff","line":779,"in_reply_to":"fa32b979_5276aea4","updated":"2015-06-25 07:56:08.000000000","message":"We could move that part to here in the ImageBusy exception and only request it when the unprotect_snap has failed.  That way we\u0027ll only retrieve the info on errors.","commit_id":"49cfce359f10f17e1c92e2cb3061e78897095cab"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0144d33841c9e3b9a42cb7cc59818e0b11dfb26d","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        with RBDVolumeProxy(self, volume_name) as volume:"},{"line_number":777,"context_line":"            try:"},{"line_number":778,"context_line":"                volume.unprotect_snap(snap_name)"},{"line_number":779,"context_line":"            except self.rbd.ImageBusy:"},{"line_number":780,"context_line":"                raise exception.SnapshotIsBusy(snapshot_name\u003dsnap_name)"},{"line_number":781,"context_line":"            volume.remove_snap(snap_name)"},{"line_number":782,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_11e1132a","line":779,"in_reply_to":"fa32b979_b845ca6f","updated":"2015-06-24 17:36:41.000000000","message":"Dependency list is only dumped when we cannot delete the snapshot, not on every delete_snapshot call.","commit_id":"49cfce359f10f17e1c92e2cb3061e78897095cab"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"441f0d231672587b85d698712b1de418c516f245","unresolved":false,"context_lines":[{"line_number":758,"context_line":""},{"line_number":759,"context_line":"                if children_list:"},{"line_number":760,"context_line":"                    for (pool, image) in children_list:"},{"line_number":761,"context_line":"                        LOG.info(_LI(\u0027Image %(pool)s/%(image)s is dependent \u0027"},{"line_number":762,"context_line":"                                     \u0027on the snapshot %(snap)s.\u0027),"},{"line_number":763,"context_line":"                                 {\u0027pool\u0027: pool,"},{"line_number":764,"context_line":"                                  \u0027image\u0027: image,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_8f3a7697","line":761,"updated":"2015-06-26 16:12:33.000000000","message":"I think LOG.error should be here to highlight possible fail\u0027s reason, since exception will be raised in next step,","commit_id":"962eb1443840972291072521d575bef11ab362a5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"2627861bd79a2c4afcd85a4f9a6b6f424b1e67fd","unresolved":false,"context_lines":[{"line_number":758,"context_line":""},{"line_number":759,"context_line":"                if children_list:"},{"line_number":760,"context_line":"                    for (pool, image) in children_list:"},{"line_number":761,"context_line":"                        LOG.info(_LI(\u0027Image %(pool)s/%(image)s is dependent \u0027"},{"line_number":762,"context_line":"                                     \u0027on the snapshot %(snap)s.\u0027),"},{"line_number":763,"context_line":"                                 {\u0027pool\u0027: pool,"},{"line_number":764,"context_line":"                                  \u0027image\u0027: image,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_afa897dc","line":761,"in_reply_to":"fa32b979_4a477c77","updated":"2015-06-26 17:13:06.000000000","message":"Log.info here is the for detailed reason.  There is already a volume manager level error: https://github.com/openstack/cinder/blob/master/cinder/volume/manager.py#L711 about snapshot can\u0027t be deleted.","commit_id":"962eb1443840972291072521d575bef11ab362a5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"496f7fe329584abc6e8cc813002f3c78918a5504","unresolved":false,"context_lines":[{"line_number":758,"context_line":""},{"line_number":759,"context_line":"                if children_list:"},{"line_number":760,"context_line":"                    for (pool, image) in children_list:"},{"line_number":761,"context_line":"                        LOG.info(_LI(\u0027Image %(pool)s/%(image)s is dependent \u0027"},{"line_number":762,"context_line":"                                     \u0027on the snapshot %(snap)s.\u0027),"},{"line_number":763,"context_line":"                                 {\u0027pool\u0027: pool,"},{"line_number":764,"context_line":"                                  \u0027image\u0027: image,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_eaf770d2","line":761,"in_reply_to":"fa32b979_8f3a7697","updated":"2015-06-26 16:35:47.000000000","message":"I don\u0027t think so.  A snapshot has dependent volumes thus can\u0027t be removed, in most cases, is user\u0027s fault (he/she forgot), Cinder has nothing to do with the situation.  Log.error should only be used when something goes wrong in Cinder (wrong configuration, lost network connectivity, faulty driver, etc).","commit_id":"962eb1443840972291072521d575bef11ab362a5"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"71301f4a8a4ab1e19606ee8d20fec30c00bfc369","unresolved":false,"context_lines":[{"line_number":758,"context_line":""},{"line_number":759,"context_line":"                if children_list:"},{"line_number":760,"context_line":"                    for (pool, image) in children_list:"},{"line_number":761,"context_line":"                        LOG.info(_LI(\u0027Image %(pool)s/%(image)s is dependent \u0027"},{"line_number":762,"context_line":"                                     \u0027on the snapshot %(snap)s.\u0027),"},{"line_number":763,"context_line":"                                 {\u0027pool\u0027: pool,"},{"line_number":764,"context_line":"                                  \u0027image\u0027: image,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_4a477c77","line":761,"in_reply_to":"fa32b979_eaf770d2","updated":"2015-06-26 16:45:43.000000000","message":"sure, but cinder fail with error to unable delete, why it doesn\u0027t inform about reason?","commit_id":"962eb1443840972291072521d575bef11ab362a5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"2c4a25606a0cdde849bd99342893ba5855211d3d","unresolved":false,"context_lines":[{"line_number":758,"context_line":"                if children_list:"},{"line_number":759,"context_line":"                    for (pool, image) in children_list:"},{"line_number":760,"context_line":"                        LOG.info(_LI(\u0027Image %(pool)s/%(image)s is dependent \u0027"},{"line_number":761,"context_line":"                                     \u0027on the snapshot %(snap)s.\u0027),"},{"line_number":762,"context_line":"                                 {\u0027pool\u0027: pool,"},{"line_number":763,"context_line":"                                  \u0027image\u0027: image,"},{"line_number":764,"context_line":"                                  \u0027snap\u0027: snap_name})"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_3d6a4fb4","line":761,"updated":"2015-06-30 20:39:34.000000000","message":"This message isn\u0027t overly useful actually.  It should also say that it couldn\u0027t delete the snapshot, because....","commit_id":"f930864d4b9ba1cc00db6f8527ec0b60b5305c23"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"535d9fae902442ee139297a7eb8663df5f19478f","unresolved":false,"context_lines":[{"line_number":758,"context_line":"                if children_list:"},{"line_number":759,"context_line":"                    for (pool, image) in children_list:"},{"line_number":760,"context_line":"                        LOG.info(_LI(\u0027Image %(pool)s/%(image)s is dependent \u0027"},{"line_number":761,"context_line":"                                     \u0027on the snapshot %(snap)s.\u0027),"},{"line_number":762,"context_line":"                                 {\u0027pool\u0027: pool,"},{"line_number":763,"context_line":"                                  \u0027image\u0027: image,"},{"line_number":764,"context_line":"                                  \u0027snap\u0027: snap_name})"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_5d5b9354","line":761,"in_reply_to":"ba3cc151_3d6a4fb4","updated":"2015-06-30 20:52:18.000000000","message":"I think that is covered by the manager which will immediately log \"Delete snapshot failed, due to snapshot busy.\" after this exception is raised.","commit_id":"f930864d4b9ba1cc00db6f8527ec0b60b5305c23"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"0acc8824fc002f6a9c72b077b03a45dbb85b0cb2","unresolved":false,"context_lines":[{"line_number":758,"context_line":"                if children_list:"},{"line_number":759,"context_line":"                    for (pool, image) in children_list:"},{"line_number":760,"context_line":"                        LOG.info(_LI(\u0027Image %(pool)s/%(image)s is dependent \u0027"},{"line_number":761,"context_line":"                                     \u0027on the snapshot %(snap)s.\u0027),"},{"line_number":762,"context_line":"                                 {\u0027pool\u0027: pool,"},{"line_number":763,"context_line":"                                  \u0027image\u0027: image,"},{"line_number":764,"context_line":"                                  \u0027snap\u0027: snap_name})"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_0ac1382e","line":761,"in_reply_to":"ba3cc151_5d5b9354","updated":"2015-07-01 01:26:28.000000000","message":"Yeah, Eric, that is what I thought.","commit_id":"f930864d4b9ba1cc00db6f8527ec0b60b5305c23"}]}
