)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"e47877cb4ac6ad90d284c07ae8fb315f9bb3c09c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-08 17:35:59 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Unmanage volume/snapshot reduce quota incorrectly"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When managing volume/snapshot get error, the quota"},{"line_number":10,"context_line":"usage will roll back and set the new volume/snapshot"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_0a334fac","line":7,"updated":"2015-10-08 16:40:21.000000000","message":"Suggestion:  Unmanaging volume/snapshot reduces quota incorrectly","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cc83d689c388e87588ab654f6de87c5747520a64","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-08 17:35:59 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Unmanage volume/snapshot reduce quota incorrectly"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When managing volume/snapshot get error, the quota"},{"line_number":10,"context_line":"usage will roll back and set the new volume/snapshot"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_432ec2a5","line":7,"in_reply_to":"7a2fa921_0a334fac","updated":"2015-10-10 02:17:47.000000000","message":"Done","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"e47877cb4ac6ad90d284c07ae8fb315f9bb3c09c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Unmanage volume/snapshot reduce quota incorrectly"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When managing volume/snapshot get error, the quota"},{"line_number":10,"context_line":"usage will roll back and set the new volume/snapshot"},{"line_number":11,"context_line":"status to error, but then delete/unmanage this resource,"},{"line_number":12,"context_line":"quota usage will be reduced again, it\u0027s incorrect."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_713e7329","line":9,"updated":"2015-10-08 16:40:21.000000000","message":"Are you saying managing volume/snapshot will cause the error? This line is a little confusing to me.","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cc83d689c388e87588ab654f6de87c5747520a64","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Unmanage volume/snapshot reduce quota incorrectly"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When managing volume/snapshot get error, the quota"},{"line_number":10,"context_line":"usage will roll back and set the new volume/snapshot"},{"line_number":11,"context_line":"status to error, but then delete/unmanage this resource,"},{"line_number":12,"context_line":"quota usage will be reduced again, it\u0027s incorrect."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_66450c41","line":9,"in_reply_to":"7a2fa921_713e7329","updated":"2015-10-10 02:17:47.000000000","message":"Yes, this issue is existing in revert routine when managing volume/snapshot taskflow get driver exception. In revert routine, the quota reservation will roll back and the managing volume/snapshot will be set to error status.  After that, if users unmanage/delete this volume or snapshot, Cinder will reduce the quota again as same as normal deletion. I will update this.","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"e47877cb4ac6ad90d284c07ae8fb315f9bb3c09c","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When managing volume/snapshot get error, the quota"},{"line_number":10,"context_line":"usage will roll back and set the new volume/snapshot"},{"line_number":11,"context_line":"status to error, but then delete/unmanage this resource,"},{"line_number":12,"context_line":"quota usage will be reduced again, it\u0027s incorrect."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Fix: When managing volume/snapshot get error, commit"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_51c6d79a","line":11,"updated":"2015-10-08 16:40:21.000000000","message":"Suggestion: \u0027status to error. but then delete/unmanage...\u0027 -\u003e \u0027status to error. But when attempting to delete/unmanage this resource,\u0027","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cc83d689c388e87588ab654f6de87c5747520a64","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When managing volume/snapshot get error, the quota"},{"line_number":10,"context_line":"usage will roll back and set the new volume/snapshot"},{"line_number":11,"context_line":"status to error, but then delete/unmanage this resource,"},{"line_number":12,"context_line":"quota usage will be reduced again, it\u0027s incorrect."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Fix: When managing volume/snapshot get error, commit"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_26ef141f","line":11,"in_reply_to":"7a2fa921_51c6d79a","updated":"2015-10-10 02:17:47.000000000","message":"Done","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"e47877cb4ac6ad90d284c07ae8fb315f9bb3c09c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When managing volume/snapshot get error, the quota"},{"line_number":10,"context_line":"usage will roll back and set the new volume/snapshot"},{"line_number":11,"context_line":"status to error, but then delete/unmanage this resource,"},{"line_number":12,"context_line":"quota usage will be reduced again, it\u0027s incorrect."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Fix: When managing volume/snapshot get error, commit"},{"line_number":15,"context_line":"the quota reservations in revert process, so when"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_33748634","line":12,"updated":"2015-10-08 16:40:21.000000000","message":"Suggestion: \u0027again, it\u0027s incorrect.\u0027 -\u003e \u0027 again. This is incorrect.\u0027","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cc83d689c388e87588ab654f6de87c5747520a64","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When managing volume/snapshot get error, the quota"},{"line_number":10,"context_line":"usage will roll back and set the new volume/snapshot"},{"line_number":11,"context_line":"status to error, but then delete/unmanage this resource,"},{"line_number":12,"context_line":"quota usage will be reduced again, it\u0027s incorrect."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Fix: When managing volume/snapshot get error, commit"},{"line_number":15,"context_line":"the quota reservations in revert process, so when"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_668aec65","line":12,"in_reply_to":"7a2fa921_33748634","updated":"2015-10-10 02:17:47.000000000","message":"Done","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"e47877cb4ac6ad90d284c07ae8fb315f9bb3c09c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"status to error, but then delete/unmanage this resource,"},{"line_number":12,"context_line":"quota usage will be reduced again, it\u0027s incorrect."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Fix: When managing volume/snapshot get error, commit"},{"line_number":15,"context_line":"the quota reservations in revert process, so when"},{"line_number":16,"context_line":"deleting/unmanaging this resource, it will reduce quota"},{"line_number":17,"context_line":"usage correctly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_51049748","line":14,"updated":"2015-10-08 16:40:21.000000000","message":"Are you saying managing volume/snapshot will cause the error?","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cc83d689c388e87588ab654f6de87c5747520a64","unresolved":false,"context_lines":[{"line_number":11,"context_line":"status to error, but then delete/unmanage this resource,"},{"line_number":12,"context_line":"quota usage will be reduced again, it\u0027s incorrect."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Fix: When managing volume/snapshot get error, commit"},{"line_number":15,"context_line":"the quota reservations in revert process, so when"},{"line_number":16,"context_line":"deleting/unmanaging this resource, it will reduce quota"},{"line_number":17,"context_line":"usage correctly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_66e18c29","line":14,"in_reply_to":"7a2fa921_51049748","updated":"2015-10-10 02:17:47.000000000","message":"Will make this more clearly.","commit_id":"ab4575e9819e077fa75cb7dc0fc276e66a796230"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"e22564953115910e1c364cbb3289e11dd9d4495a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When managing volume/snapshot taskflow get driver exception,"},{"line_number":10,"context_line":"the quota reservation will roll back in revert routine"},{"line_number":11,"context_line":"and set the new volume/snapshot status to error,"},{"line_number":12,"context_line":"But after that, when attempting to delete/unmanage this"},{"line_number":13,"context_line":"resource, quota usage will be reduced again."},{"line_number":14,"context_line":"This is incorrect."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"da85f559_c6e9bfb8","line":11,"updated":"2015-11-11 13:53:32.000000000","message":"\",\" -\u003e \".\"","commit_id":"77ad6ae690076469d7d64b4a82c962525849c6af"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5f0f22ac877cdfe89641cf7a89f7bf40cbeda1f0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When managing volume/snapshot taskflow get driver exception,"},{"line_number":10,"context_line":"the quota reservation will roll back in revert routine"},{"line_number":11,"context_line":"and set the new volume/snapshot status to error,"},{"line_number":12,"context_line":"But after that, when attempting to delete/unmanage this"},{"line_number":13,"context_line":"resource, quota usage will be reduced again."},{"line_number":14,"context_line":"This is incorrect."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"da85f559_fcd9c7f3","line":11,"in_reply_to":"da85f559_c6e9bfb8","updated":"2015-11-12 08:31:03.000000000","message":"Done","commit_id":"77ad6ae690076469d7d64b4a82c962525849c6af"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"34cf95e0fb3d318fe90404d54d932ddd36f4b0c4","unresolved":false,"context_lines":[{"line_number":4324,"context_line":"                          self.context, test_vol_id,"},{"line_number":4325,"context_line":"                          \u0027volume_ref\u0027)"},{"line_number":4326,"context_line":"        # Get in_use number after raising exception"},{"line_number":4327,"context_line":"        try:"},{"line_number":4328,"context_line":"            usage \u003d db.quota_usage_get(self.context, project_id, \u0027volumes\u0027)"},{"line_number":4329,"context_line":"            volumes_in_use_new \u003d usage.in_use"},{"line_number":4330,"context_line":"            self.assertEqual((volumes_in_use + 1), volumes_in_use_new)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa69d971_855f9f74","line":4327,"range":{"start_line":4327,"start_character":8,"end_line":4327,"end_character":11},"updated":"2016-01-08 05:18:29.000000000","message":"Same note here as Sean pointed out below","commit_id":"9a1e7ba451617c1ff6ee36f570e374fd58fd8636"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"905dba9002dd7e275c467d41697c4be490853417","unresolved":false,"context_lines":[{"line_number":4324,"context_line":"                          self.context, test_vol_id,"},{"line_number":4325,"context_line":"                          \u0027volume_ref\u0027)"},{"line_number":4326,"context_line":"        # Get in_use number after raising exception"},{"line_number":4327,"context_line":"        try:"},{"line_number":4328,"context_line":"            usage \u003d db.quota_usage_get(self.context, project_id, \u0027volumes\u0027)"},{"line_number":4329,"context_line":"            volumes_in_use_new \u003d usage.in_use"},{"line_number":4330,"context_line":"            self.assertEqual((volumes_in_use + 1), volumes_in_use_new)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_773132ec","line":4327,"range":{"start_line":4327,"start_character":8,"end_line":4327,"end_character":11},"in_reply_to":"fa69d971_855f9f74","updated":"2016-01-12 07:16:37.000000000","message":"Sure, will remove this.","commit_id":"9a1e7ba451617c1ff6ee36f570e374fd58fd8636"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5dfe57e6920876b7df8b9bb567d7165a4d598268","unresolved":false,"context_lines":[{"line_number":4369,"context_line":"            usage \u003d db.quota_usage_get(self.context, project_id, \u0027gigabytes\u0027)"},{"line_number":4370,"context_line":"            gigabytes_in_use_new \u003d usage.in_use"},{"line_number":4371,"context_line":"            self.assertEqual((gigabytes_in_use + 1), gigabytes_in_use_new)"},{"line_number":4372,"context_line":"        except exception.QuotaUsageNotFound:"},{"line_number":4373,"context_line":"            self.assertTrue(False)"},{"line_number":4374,"context_line":""},{"line_number":4375,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa69d971_d3ab45d5","line":4372,"updated":"2016-01-07 20:07:38.000000000","message":"I think best practice for unit tests is not to have a try/except and just let the exception bubble up. If an exception is not expected, it should not be handled in the unit test. The exception would cause the test to fail anyway.","commit_id":"9a1e7ba451617c1ff6ee36f570e374fd58fd8636"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"905dba9002dd7e275c467d41697c4be490853417","unresolved":false,"context_lines":[{"line_number":4369,"context_line":"            usage \u003d db.quota_usage_get(self.context, project_id, \u0027gigabytes\u0027)"},{"line_number":4370,"context_line":"            gigabytes_in_use_new \u003d usage.in_use"},{"line_number":4371,"context_line":"            self.assertEqual((gigabytes_in_use + 1), gigabytes_in_use_new)"},{"line_number":4372,"context_line":"        except exception.QuotaUsageNotFound:"},{"line_number":4373,"context_line":"            self.assertTrue(False)"},{"line_number":4374,"context_line":""},{"line_number":4375,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_57342edd","line":4372,"in_reply_to":"fa69d971_d3ab45d5","updated":"2016-01-12 07:16:37.000000000","message":"Make sense to me, thanks Sean.","commit_id":"9a1e7ba451617c1ff6ee36f570e374fd58fd8636"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"54d657cce37d003e64d1a6f864f551afb57dd6f4","unresolved":false,"context_lines":[{"line_number":4672,"context_line":"    def test_manage_snapshot_raise_driver_exception(self, mock_execute,"},{"line_number":4673,"context_line":"                                                    mock_driver_get_size):"},{"line_number":4674,"context_line":"        project_id \u003d self.context.project_id"},{"line_number":4675,"context_line":"        snapshot \u003d create_snapshot(\u00271234\u0027)"},{"line_number":4676,"context_line":"        mock_execute.side_effect \u003d exception.VolumeBackendAPIException("},{"line_number":4677,"context_line":"            data\u003d\"volume driver got exception\")"},{"line_number":4678,"context_line":"        mock_driver_get_size.return_value \u003d 1"}],"source_content_type":"text/x-python","patch_set":28,"id":"bab6814e_b5e098fb","line":4675,"range":{"start_line":4675,"start_character":35,"end_line":4675,"end_character":41},"updated":"2016-05-20 08:47:29.000000000","message":"fake.VOLUME_ID","commit_id":"82a19c7e655b7c81fcc3df8a673f4646642535ed"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"271a109d47f788f90cfcba7d0b9d9a2b799b8e67","unresolved":false,"context_lines":[{"line_number":4672,"context_line":"    def test_manage_snapshot_raise_driver_exception(self, mock_execute,"},{"line_number":4673,"context_line":"                                                    mock_driver_get_size):"},{"line_number":4674,"context_line":"        project_id \u003d self.context.project_id"},{"line_number":4675,"context_line":"        snapshot \u003d create_snapshot(\u00271234\u0027)"},{"line_number":4676,"context_line":"        mock_execute.side_effect \u003d exception.VolumeBackendAPIException("},{"line_number":4677,"context_line":"            data\u003d\"volume driver got exception\")"},{"line_number":4678,"context_line":"        mock_driver_get_size.return_value \u003d 1"}],"source_content_type":"text/x-python","patch_set":28,"id":"bab6814e_8f33bcaa","line":4675,"range":{"start_line":4675,"start_character":35,"end_line":4675,"end_character":41},"in_reply_to":"bab6814e_b5e098fb","updated":"2016-05-20 11:35:06.000000000","message":"Yeah, thanks, forgot this..","commit_id":"82a19c7e655b7c81fcc3df8a673f4646642535ed"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"54d657cce37d003e64d1a6f864f551afb57dd6f4","unresolved":false,"context_lines":[{"line_number":4703,"context_line":"    def test_manage_snapshot_raise_driver_size_exception(self,"},{"line_number":4704,"context_line":"                                                         mock_driver_get_size):"},{"line_number":4705,"context_line":"        project_id \u003d self.context.project_id"},{"line_number":4706,"context_line":"        snapshot \u003d create_snapshot(\u00271234\u0027)"},{"line_number":4707,"context_line":"        mock_driver_get_size.side_effect \u003d exception.VolumeBackendAPIException("},{"line_number":4708,"context_line":"            data\u003d\"volume driver got exception\")"},{"line_number":4709,"context_line":"        # Set snapshot quota usage"}],"source_content_type":"text/x-python","patch_set":28,"id":"bab6814e_55f04cc9","line":4706,"range":{"start_line":4706,"start_character":36,"end_line":4706,"end_character":41},"updated":"2016-05-20 08:47:29.000000000","message":"fake.VOLUME_ID","commit_id":"82a19c7e655b7c81fcc3df8a673f4646642535ed"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"271a109d47f788f90cfcba7d0b9d9a2b799b8e67","unresolved":false,"context_lines":[{"line_number":4703,"context_line":"    def test_manage_snapshot_raise_driver_size_exception(self,"},{"line_number":4704,"context_line":"                                                         mock_driver_get_size):"},{"line_number":4705,"context_line":"        project_id \u003d self.context.project_id"},{"line_number":4706,"context_line":"        snapshot \u003d create_snapshot(\u00271234\u0027)"},{"line_number":4707,"context_line":"        mock_driver_get_size.side_effect \u003d exception.VolumeBackendAPIException("},{"line_number":4708,"context_line":"            data\u003d\"volume driver got exception\")"},{"line_number":4709,"context_line":"        # Set snapshot quota usage"}],"source_content_type":"text/x-python","patch_set":28,"id":"bab6814e_ef240861","line":4706,"range":{"start_line":4706,"start_character":36,"end_line":4706,"end_character":41},"in_reply_to":"bab6814e_55f04cc9","updated":"2016-05-20 11:35:06.000000000","message":"Done","commit_id":"82a19c7e655b7c81fcc3df8a673f4646642535ed"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"e5e36b8fed94b32504ad88c7916351b6c30049ad","unresolved":false,"context_lines":[{"line_number":4650,"context_line":"    def test_manage_snapshot_raise_driver_exception(self, mock_execute,"},{"line_number":4651,"context_line":"                                                    mock_driver_get_size):"},{"line_number":4652,"context_line":"        project_id \u003d self.context.project_id"},{"line_number":4653,"context_line":"        snapshot \u003d create_snapshot(\u00271234\u0027)"},{"line_number":4654,"context_line":"        mock_execute.side_effect \u003d exception.VolumeBackendAPIException("},{"line_number":4655,"context_line":"            data\u003d\"volume driver got exception\")"},{"line_number":4656,"context_line":"        mock_driver_get_size.return_value \u003d 1"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_5e607a35","line":4653,"range":{"start_line":4653,"start_character":40,"end_line":4653,"end_character":42},"updated":"2016-06-17 12:51:19.000000000","message":"fake.VOLUME_ID","commit_id":"f5438f756fcddef23f4ac8ca6a9caf4561d62215"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"4fdcdc3d2c5081da4a3742c4c7be146c3cf5ee45","unresolved":false,"context_lines":[{"line_number":4650,"context_line":"    def test_manage_snapshot_raise_driver_exception(self, mock_execute,"},{"line_number":4651,"context_line":"                                                    mock_driver_get_size):"},{"line_number":4652,"context_line":"        project_id \u003d self.context.project_id"},{"line_number":4653,"context_line":"        snapshot \u003d create_snapshot(\u00271234\u0027)"},{"line_number":4654,"context_line":"        mock_execute.side_effect \u003d exception.VolumeBackendAPIException("},{"line_number":4655,"context_line":"            data\u003d\"volume driver got exception\")"},{"line_number":4656,"context_line":"        mock_driver_get_size.return_value \u003d 1"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a9d85d2_0d745233","line":4653,"range":{"start_line":4653,"start_character":40,"end_line":4653,"end_character":42},"in_reply_to":"7aa08908_5e607a35","updated":"2016-06-21 01:00:31.000000000","message":"Done","commit_id":"f5438f756fcddef23f4ac8ca6a9caf4561d62215"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"e5e36b8fed94b32504ad88c7916351b6c30049ad","unresolved":false,"context_lines":[{"line_number":4681,"context_line":"    def test_manage_snapshot_raise_driver_size_exception(self,"},{"line_number":4682,"context_line":"                                                         mock_driver_get_size):"},{"line_number":4683,"context_line":"        project_id \u003d self.context.project_id"},{"line_number":4684,"context_line":"        snapshot \u003d create_snapshot(\u00271234\u0027)"},{"line_number":4685,"context_line":"        mock_driver_get_size.side_effect \u003d exception.VolumeBackendAPIException("},{"line_number":4686,"context_line":"            data\u003d\"volume driver got exception\")"},{"line_number":4687,"context_line":"        # Set snapshot quota usage"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_fe47a6a0","line":4684,"range":{"start_line":4684,"start_character":40,"end_line":4684,"end_character":42},"updated":"2016-06-17 12:51:19.000000000","message":"fake.VOLUME_ID missed it again","commit_id":"f5438f756fcddef23f4ac8ca6a9caf4561d62215"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"4fdcdc3d2c5081da4a3742c4c7be146c3cf5ee45","unresolved":false,"context_lines":[{"line_number":4681,"context_line":"    def test_manage_snapshot_raise_driver_size_exception(self,"},{"line_number":4682,"context_line":"                                                         mock_driver_get_size):"},{"line_number":4683,"context_line":"        project_id \u003d self.context.project_id"},{"line_number":4684,"context_line":"        snapshot \u003d create_snapshot(\u00271234\u0027)"},{"line_number":4685,"context_line":"        mock_driver_get_size.side_effect \u003d exception.VolumeBackendAPIException("},{"line_number":4686,"context_line":"            data\u003d\"volume driver got exception\")"},{"line_number":4687,"context_line":"        # Set snapshot quota usage"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a9d85d2_6d8fd623","line":4684,"range":{"start_line":4684,"start_character":40,"end_line":4684,"end_character":42},"in_reply_to":"7aa08908_fe47a6a0","updated":"2016-06-21 01:00:31.000000000","message":"Done","commit_id":"f5438f756fcddef23f4ac8ca6a9caf4561d62215"}],"cinder/tests/unit/volume/flows/test_manage_snapshot_flow.py":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"5a5a556bc1c7f3fe26fb3a0c4e8f5e008d3a10c4","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(ManageSnapshotFlowTestCase, self).setUp()"},{"line_number":28,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":29,"context_line":"        self.counter \u003d float(0)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_manage_existing_snapshot_revert(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a26ad4f_ff5bbd2c","line":28,"updated":"2015-10-27 19:54:27.000000000","message":"We don\u0027t seem to use \"self.counter\"","commit_id":"6d4a270247f0f2a688e1579b16fc07045d384855"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d5061913164b0dbe9f6e58a85c799d5d3d53a944","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(ManageSnapshotFlowTestCase, self).setUp()"},{"line_number":28,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":29,"context_line":"        self.counter \u003d float(0)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_manage_existing_snapshot_revert(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_c2fa2743","line":28,"in_reply_to":"1a26ad4f_ff5bbd2c","updated":"2015-11-06 07:14:00.000000000","message":"Done","commit_id":"6d4a270247f0f2a688e1579b16fc07045d384855"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"674ba0ce9e5ec1222d714a2e277643f554193cde","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        reservations \u003d QUOTAS.reserve(self.ctxt, **reserve_opts)"},{"line_number":37,"context_line":"        result[\u0027reservations\u0027] \u003d reservations"},{"line_number":38,"context_line":"        optional_args \u003d {\u0027is_quota_committed\u0027: False}"},{"line_number":39,"context_line":"        task.revert(context, result, optional_args)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_b2b0d944","line":39,"updated":"2015-11-09 19:52:14.000000000","message":"You should also assert something. I would at least check if quota was properly reverted.","commit_id":"0d1ce177d3b5a1425278e284eb91c60622b2c790"}],"cinder/tests/unit/volume/flows/test_manage_volume_flow.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"674ba0ce9e5ec1222d714a2e277643f554193cde","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        reservations \u003d QUOTAS.reserve(self.ctxt, **reserve_opts)"},{"line_number":83,"context_line":"        result[\u0027reservations\u0027] \u003d reservations"},{"line_number":84,"context_line":"        optional_args \u003d {\u0027is_quota_committed\u0027: False}"},{"line_number":85,"context_line":"        task.revert(context, result, optional_args)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_925ef510","line":85,"updated":"2015-11-09 19:52:14.000000000","message":"You should also assert something. I would at least check if quota was properly reverted.","commit_id":"0d1ce177d3b5a1425278e284eb91c60622b2c790"}],"cinder/volume/flows/manager/manage_existing.py":[{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"e22564953115910e1c364cbb3289e11dd9d4495a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        reservations \u003d result[\u0027reservations\u0027]"},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":88,"context_line":"            # updating is_quota_committed attribute of optional_args dictionary"},{"line_number":89,"context_line":"            optional_args[\u0027is_quota_committed\u0027] \u003d True"},{"line_number":90,"context_line":"        except exception.CinderException:"},{"line_number":91,"context_line":"            # We are already reverting, therefore we should silence this"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_06cee72d","line":88,"updated":"2015-11-11 13:53:32.000000000","message":"s/updating/Updating","commit_id":"77ad6ae690076469d7d64b4a82c962525849c6af"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5f0f22ac877cdfe89641cf7a89f7bf40cbeda1f0","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        reservations \u003d result[\u0027reservations\u0027]"},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":88,"context_line":"            # updating is_quota_committed attribute of optional_args dictionary"},{"line_number":89,"context_line":"            optional_args[\u0027is_quota_committed\u0027] \u003d True"},{"line_number":90,"context_line":"        except exception.CinderException:"},{"line_number":91,"context_line":"            # We are already reverting, therefore we should silence this"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_1c6ccb06","line":88,"in_reply_to":"da85f559_06cee72d","updated":"2015-11-12 08:31:03.000000000","message":"Done","commit_id":"77ad6ae690076469d7d64b4a82c962525849c6af"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"e22564953115910e1c364cbb3289e11dd9d4495a","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # We are already reverting, therefore we should silence this"},{"line_number":92,"context_line":"            # exception since a second exception being active will be bad."},{"line_number":93,"context_line":"            LOG.exception(_LE(\"Failed commit quota for\""},{"line_number":94,"context_line":"                              \" %s reservations\"), reservations)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class ManageExistingTask(flow_utils.CinderTask):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_46a5cf44","line":94,"updated":"2015-11-11 13:53:32.000000000","message":"Please add a \".\" at the EOL.","commit_id":"77ad6ae690076469d7d64b4a82c962525849c6af"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5f0f22ac877cdfe89641cf7a89f7bf40cbeda1f0","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # We are already reverting, therefore we should silence this"},{"line_number":92,"context_line":"            # exception since a second exception being active will be bad."},{"line_number":93,"context_line":"            LOG.exception(_LE(\"Failed commit quota for\""},{"line_number":94,"context_line":"                              \" %s reservations\"), reservations)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class ManageExistingTask(flow_utils.CinderTask):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_3c6f4ffd","line":94,"in_reply_to":"da85f559_46a5cf44","updated":"2015-11-12 08:31:03.000000000","message":"Done","commit_id":"77ad6ae690076469d7d64b4a82c962525849c6af"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"ed08e76f68eb7b11b4cd4f7c7641a2636a9a4893","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            if over_name:"},{"line_number":104,"context_line":"                msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":105,"context_line":"                          \"%(s_size)sG volume (%(d_consumed)dG \""},{"line_number":106,"context_line":"                          \"of %(d_quota)dG already consumed)\")"},{"line_number":107,"context_line":"                LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":108,"context_line":"                                  \u0027s_size\u0027: size,"},{"line_number":109,"context_line":"                                  \u0027d_consumed\u0027: _consumed(over_name),"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa69d971_c65d6516","line":106,"range":{"start_line":106,"start_character":0,"end_line":106,"end_character":62},"updated":"2016-01-08 21:26:56.000000000","message":"nit: please add \".\" end of the message.","commit_id":"9a1e7ba451617c1ff6ee36f570e374fd58fd8636"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"26ae7c6c879c8aec0ad0ab76151864103f4d833f","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            if over_name:"},{"line_number":113,"context_line":"                msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":114,"context_line":"                          \"%(s_size)sG volume (%(d_consumed)dG \""},{"line_number":115,"context_line":"                          \"of %(d_quota)dG already consumed)\")"},{"line_number":116,"context_line":"                LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":117,"context_line":"                                  \u0027s_size\u0027: size,"},{"line_number":118,"context_line":"                                  \u0027d_consumed\u0027: _consumed(over_name),"}],"source_content_type":"text/x-python","patch_set":19,"id":"da6ed579_94a3529e","line":115,"range":{"start_line":115,"start_character":60,"end_line":115,"end_character":61},"updated":"2016-01-18 12:29:53.000000000","message":"Still there should be . at the end of the log message.","commit_id":"1e5706c9a3469917bcb83580180a9263904ff4ed"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5bf7ca2af148e3c2269a7aaa3879af26788eab72","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            if over_name:"},{"line_number":113,"context_line":"                msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":114,"context_line":"                          \"%(s_size)sG volume (%(d_consumed)dG \""},{"line_number":115,"context_line":"                          \"of %(d_quota)dG already consumed)\")"},{"line_number":116,"context_line":"                LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":117,"context_line":"                                  \u0027s_size\u0027: size,"},{"line_number":118,"context_line":"                                  \u0027d_consumed\u0027: _consumed(over_name),"}],"source_content_type":"text/x-python","patch_set":19,"id":"9aed3d3a_fb985dc2","line":115,"range":{"start_line":115,"start_character":60,"end_line":115,"end_character":61},"in_reply_to":"da6ed579_94a3529e","updated":"2016-02-29 12:27:53.000000000","message":"Done","commit_id":"1e5706c9a3469917bcb83580180a9263904ff4ed"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"cf4174caa6b09fefb8ff5f06eea7fda181c4e5b9","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            size \u003d self.driver.manage_existing_get_size(volume_ref,"},{"line_number":58,"context_line":"                                                        manage_existing_ref)"},{"line_number":59,"context_line":"        except Exception:"},{"line_number":60,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":61,"context_line":"                reserve_opts \u003d {\u0027volumes\u0027: 1, \u0027gigabytes\u0027: size}"},{"line_number":62,"context_line":"                QUOTAS.add_volume_type_opts(context, reserve_opts,"},{"line_number":63,"context_line":"                                            volume_ref[\u0027volume_type_id\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"7af24918_2ecb0820","line":60,"updated":"2016-03-07 05:55:03.000000000","message":"Can we add a comment here to explain why we\u0027re committing quota on error? While it looks like the right thing to do, I suspect this will not be obvious when somebody is reading the code why we are doing it. e.g.:\n\n# Note: Since quota is used even by volumes in error state, in the\n#       case of an error we need to commit the reservation so that it\n#       matches the quota decrement at delete time","commit_id":"2e1f7c56351c0b6524797dabd8b77f821bb32fcf"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"50554db2539a6b412d2f551ef1f70ea166116697","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            size \u003d self.driver.manage_existing_get_size(volume_ref,"},{"line_number":58,"context_line":"                                                        manage_existing_ref)"},{"line_number":59,"context_line":"        except Exception:"},{"line_number":60,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":61,"context_line":"                reserve_opts \u003d {\u0027volumes\u0027: 1, \u0027gigabytes\u0027: size}"},{"line_number":62,"context_line":"                QUOTAS.add_volume_type_opts(context, reserve_opts,"},{"line_number":63,"context_line":"                                            volume_ref[\u0027volume_type_id\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"7af24918_76c4c63f","line":60,"in_reply_to":"7af24918_2ecb0820","updated":"2016-03-07 06:32:52.000000000","message":"Sure, no problem.","commit_id":"2e1f7c56351c0b6524797dabd8b77f821bb32fcf"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"857500f6763b0bd05b8c6bbb4bba4b303014d0ff","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                         reason\u003d_(\"Volume driver %s \""},{"line_number":52,"context_line":"                                                  \"not initialized.\") %"},{"line_number":53,"context_line":"                                         driver_name)"},{"line_number":54,"context_line":"            raise exception.DriverNotInitialized()"},{"line_number":55,"context_line":"        size \u003d 0"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            size \u003d self.driver.manage_existing_get_size(volume_ref,"}],"source_content_type":"text/x-python","patch_set":23,"id":"5aef4532_0fb89ee4","line":54,"updated":"2016-03-08 16:32:55.000000000","message":"-1: What about when we fail here?","commit_id":"211b299d951e7f245f22b3f30b0f337a4b9c9095"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"857500f6763b0bd05b8c6bbb4bba4b303014d0ff","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                                                  \"not initialized.\") %"},{"line_number":53,"context_line":"                                         driver_name)"},{"line_number":54,"context_line":"            raise exception.DriverNotInitialized()"},{"line_number":55,"context_line":"        size \u003d 0"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            size \u003d self.driver.manage_existing_get_size(volume_ref,"},{"line_number":58,"context_line":"                                                        manage_existing_ref)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5aef4532_cf07d67f","line":55,"updated":"2016-03-08 16:32:55.000000000","message":"nit: No real need to define size here, we can just pass 0 for gigabytes on L65 like we pass 1 for volumes.","commit_id":"211b299d951e7f245f22b3f30b0f337a4b9c9095"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"0ca2d25336c1eb48fab5a053b22cc46a11c8ff91","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                                                  \"not initialized.\") %"},{"line_number":53,"context_line":"                                         driver_name)"},{"line_number":54,"context_line":"            raise exception.DriverNotInitialized()"},{"line_number":55,"context_line":"        size \u003d 0"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            size \u003d self.driver.manage_existing_get_size(volume_ref,"},{"line_number":58,"context_line":"                                                        manage_existing_ref)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3afc51ec_f64a47c4","line":55,"in_reply_to":"5aef4532_cf07d67f","updated":"2016-03-15 07:30:02.000000000","message":"Sure.","commit_id":"211b299d951e7f245f22b3f30b0f337a4b9c9095"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"857500f6763b0bd05b8c6bbb4bba4b303014d0ff","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        except exception.OverQuota as e:"},{"line_number":91,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"},{"line_number":92,"context_line":"            raise exception.VolumeSizeExceedsLimit("},{"line_number":93,"context_line":"                size\u003dsize, limit\u003dquotas[\u0027per_volume_gigabytes\u0027])"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            reserve_opts \u003d {\u0027volumes\u0027: 1, \u0027gigabytes\u0027: size}"}],"source_content_type":"text/x-python","patch_set":23,"id":"5aef4532_af21aafd","line":93,"updated":"2016-03-08 16:32:55.000000000","message":"?:  Won\u0027t we have the same quota problem when deleting if we exit here?","commit_id":"211b299d951e7f245f22b3f30b0f337a4b9c9095"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"857500f6763b0bd05b8c6bbb4bba4b303014d0ff","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            QUOTAS.add_volume_type_opts(context, reserve_opts, volume_type_id)"},{"line_number":98,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":99,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":100,"context_line":"        except exception.OverQuota as e:"},{"line_number":101,"context_line":"            overs \u003d e.kwargs[\u0027overs\u0027]"},{"line_number":102,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"},{"line_number":103,"context_line":"            usages \u003d e.kwargs[\u0027usages\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"5aef4532_4f2106b4","line":100,"updated":"2016-03-08 16:32:55.000000000","message":"?: What happens with the quota when deleting if we fail here with OverQuota?  And if we fail with any other exception?","commit_id":"211b299d951e7f245f22b3f30b0f337a4b9c9095"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"52d2be160f591c18709e5e6a50dff867de6a31d5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # delete time."},{"line_number":51,"context_line":"        reserve_opts \u003d {\u0027volumes\u0027: 1, \u0027gigabytes\u0027: size}"},{"line_number":52,"context_line":"        try:"},{"line_number":53,"context_line":"            QUOTAS.add_volume_type_opts(context, reserve_opts,"},{"line_number":54,"context_line":"                                        volume_ref[\u0027volume_type_id\u0027])"},{"line_number":55,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":56,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":57,"context_line":"        except Exception as e:"},{"line_number":58,"context_line":"            LOG.warning(_LW(\"Commit volume quota for error volume get \""},{"line_number":59,"context_line":"                            \"failure %s.\"), e)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa0719c6_d39b0371","line":56,"range":{"start_line":53,"start_character":0,"end_line":56,"end_character":48},"updated":"2016-03-22 10:24:34.000000000","message":"There\u0027s an interesting problem here that I don\u0027t really know how to approach. Imagine such scenario:\n\n1. We\u0027re issuing a manage call.\n2. c-api creates DB entry and passes control to c-vol.\n3. c-vol determines the size of the volume and tries to reserve quota. It fails with OverQuotaException.\n4. We\u0027re reverting whole flow then.\n5. In revert we\u0027re doing a reservation and a commit again.\n6. It fails as again it receives OverQuotaException.\n7. We end up with volume in ERROR state that on delete will decrease quota that weren\u0027t reserved for it.\n\nMaybe we should reconsider not decreasing or reserving quota for resources in ERROR state?","commit_id":"e599ef53db785fd9c2e2b572929c1c4b7d6b6070"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f1c21c099f78f21e2858454faa59781897b04cf1","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # delete time."},{"line_number":51,"context_line":"        reserve_opts \u003d {\u0027volumes\u0027: 1, \u0027gigabytes\u0027: size}"},{"line_number":52,"context_line":"        try:"},{"line_number":53,"context_line":"            QUOTAS.add_volume_type_opts(context, reserve_opts,"},{"line_number":54,"context_line":"                                        volume_ref[\u0027volume_type_id\u0027])"},{"line_number":55,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":56,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":57,"context_line":"        except Exception as e:"},{"line_number":58,"context_line":"            LOG.warning(_LW(\"Commit volume quota for error volume get \""},{"line_number":59,"context_line":"                            \"failure %s.\"), e)"}],"source_content_type":"text/x-python","patch_set":26,"id":"da0c15f0_db4cc372","line":56,"range":{"start_line":53,"start_character":0,"end_line":56,"end_character":48},"in_reply_to":"fa0719c6_d39b0371","updated":"2016-03-26 09:50:03.000000000","message":"Yes, Michal, this scenario really could happen, it\u0027s a little complex, since when we delete the volume or snapshot in Error state, we didn\u0027t know why it\u0027s in error, maybe quota reserve failed, maybe driver raise exception. There is an option way: if cinder commit or reserve quota failed, change the state to \"quota_error\", for this state, if we delete this volume or snapshot, don\u0027t need to decrease the quota since it didn\u0027t commit yet.\nWhat you think?","commit_id":"e599ef53db785fd9c2e2b572929c1c4b7d6b6070"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"52d2be160f591c18709e5e6a50dff867de6a31d5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":56,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":57,"context_line":"        except Exception as e:"},{"line_number":58,"context_line":"            LOG.warning(_LW(\"Commit volume quota for error volume get \""},{"line_number":59,"context_line":"                            \"failure %s.\"), e)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def execute(self, context, volume_ref, manage_existing_ref, optional_args):"},{"line_number":62,"context_line":"        volume_id \u003d volume_ref[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa0719c6_384b3e89","line":59,"range":{"start_line":58,"start_character":29,"end_line":59,"end_character":40},"updated":"2016-03-22 10:24:34.000000000","message":"This should be rephrased to something like:\n\n \"Committing volume quota for volume in ERROR state failed with %s.\"","commit_id":"e599ef53db785fd9c2e2b572929c1c4b7d6b6070"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f1c21c099f78f21e2858454faa59781897b04cf1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":56,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":57,"context_line":"        except Exception as e:"},{"line_number":58,"context_line":"            LOG.warning(_LW(\"Commit volume quota for error volume get \""},{"line_number":59,"context_line":"                            \"failure %s.\"), e)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def execute(self, context, volume_ref, manage_existing_ref, optional_args):"},{"line_number":62,"context_line":"        volume_id \u003d volume_ref[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":26,"id":"da0c15f0_bb474f4a","line":59,"range":{"start_line":58,"start_character":29,"end_line":59,"end_character":40},"in_reply_to":"fa0719c6_384b3e89","updated":"2016-03-26 09:50:03.000000000","message":"Sure","commit_id":"e599ef53db785fd9c2e2b572929c1c4b7d6b6070"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"949e4ca5ad0179d5e3d1ad17d7acd5508bb1a8e6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            QUOTAS.add_volume_type_opts(context, reserve_opts,"},{"line_number":54,"context_line":"                                        volume_ref[\u0027volume_type_id\u0027])"},{"line_number":55,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":56,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":57,"context_line":"        except Exception as e:"},{"line_number":58,"context_line":"            LOG.warning(_LW(\"Committing volume quota for volume in ERROR \""},{"line_number":59,"context_line":"                            \"state failed with %s.\"), e)"}],"source_content_type":"text/x-python","patch_set":27,"id":"ba0121b8_e562efd7","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":48},"updated":"2016-03-29 05:49:38.000000000","message":"Should we set \"optional_args[\u0027is_quota_committed\u0027] \u003d True\" after this?","commit_id":"ca5ec412636749074c7ac7b65a2a2d38874b3c11"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"0a765f82fea1c74da603521ff20b04be7654bcf4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            QUOTAS.add_volume_type_opts(context, reserve_opts,"},{"line_number":54,"context_line":"                                        volume_ref[\u0027volume_type_id\u0027])"},{"line_number":55,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":56,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":57,"context_line":"        except Exception as e:"},{"line_number":58,"context_line":"            LOG.warning(_LW(\"Committing volume quota for volume in ERROR \""},{"line_number":59,"context_line":"                            \"state failed with %s.\"), e)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bab6814e_8f1f3c6b","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":48},"in_reply_to":"ba0121b8_e562efd7","updated":"2016-05-20 11:47:47.000000000","message":"Basically, we didn\u0027t need to set it, since there\u0027s no use before this task. But I think it\u0027s no harm to add it(in case some changes that need it in future).","commit_id":"ca5ec412636749074c7ac7b65a2a2d38874b3c11"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"949e4ca5ad0179d5e3d1ad17d7acd5508bb1a8e6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            LOG.warning(_LW(\"Committing volume quota for volume in ERROR \""},{"line_number":59,"context_line":"                            \"state failed with %s.\"), e)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def execute(self, context, volume_ref, manage_existing_ref, optional_args):"},{"line_number":62,"context_line":"        volume_id \u003d volume_ref[\u0027id\u0027]"},{"line_number":63,"context_line":"        if not self.driver.initialized:"},{"line_number":64,"context_line":"            driver_name \u003d self.driver.__class__.__name__"}],"source_content_type":"text/x-python","patch_set":27,"id":"da0c15f0_ddee608a","line":61,"range":{"start_line":61,"start_character":64,"end_line":61,"end_character":77},"updated":"2016-03-29 05:49:38.000000000","message":"\"optional_args\" is not used in this function.","commit_id":"ca5ec412636749074c7ac7b65a2a2d38874b3c11"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"0a765f82fea1c74da603521ff20b04be7654bcf4","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            LOG.warning(_LW(\"Committing volume quota for volume in ERROR \""},{"line_number":59,"context_line":"                            \"state failed with %s.\"), e)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def execute(self, context, volume_ref, manage_existing_ref, optional_args):"},{"line_number":62,"context_line":"        volume_id \u003d volume_ref[\u0027id\u0027]"},{"line_number":63,"context_line":"        if not self.driver.initialized:"},{"line_number":64,"context_line":"            driver_name \u003d self.driver.__class__.__name__"}],"source_content_type":"text/x-python","patch_set":27,"id":"bab6814e_92891f78","line":61,"range":{"start_line":61,"start_character":64,"end_line":61,"end_character":77},"in_reply_to":"da0c15f0_ddee608a","updated":"2016-05-20 11:47:47.000000000","message":"Done","commit_id":"ca5ec412636749074c7ac7b65a2a2d38874b3c11"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"5ce064ac902e813d87f5b2895a13232e07b9bf12","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                         reason\u003d_(\"Volume driver %s \""},{"line_number":69,"context_line":"                                                  \"not initialized.\") %"},{"line_number":70,"context_line":"                                         driver_name)"},{"line_number":71,"context_line":"            self._commit_quota(context, volume_ref, 0)"},{"line_number":72,"context_line":"            raise exception.DriverNotInitialized()"},{"line_number":73,"context_line":"        size \u003d 0"},{"line_number":74,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"3aaa91ec_82e631b2","line":71,"updated":"2016-06-23 03:27:35.000000000","message":"Can we just do reserve 1 vol 0 GB in api flow no matter what?  And only reserve GB in mgr flow?","commit_id":"5401ef9921a2d75f913d1f6f777b9044aa214bdd"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b49f6f8a4146215ba5d4b87cd61eaf1e8ad2edf5","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                         reason\u003d_(\"Volume driver %s \""},{"line_number":69,"context_line":"                                                  \"not initialized.\") %"},{"line_number":70,"context_line":"                                         driver_name)"},{"line_number":71,"context_line":"            self._commit_quota(context, volume_ref, 0)"},{"line_number":72,"context_line":"            raise exception.DriverNotInitialized()"},{"line_number":73,"context_line":"        size \u003d 0"},{"line_number":74,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"3aaa91ec_9c4e916d","line":71,"in_reply_to":"3aaa91ec_82e631b2","updated":"2016-06-23 06:24:10.000000000","message":"That means we need to commit quota twice in api and volume. It\u0027s a little inconsistent with other quota process. And according guy\u0027s opinion in IRC meeting last night, we may need to introduce \u0027manage_error\u0027 or \u0027managing\u0027 status like what manila is using now, that would help to fix this issue.","commit_id":"5401ef9921a2d75f913d1f6f777b9044aa214bdd"}],"cinder/volume/flows/manager/manage_existing_snapshot.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7a0c52096b07c05d7ff54c1a695c11459723e00f","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class QuotaReserveTask(flow_utils.CinderTask):"},{"line_number":128,"context_line":"    \"\"\"Reserves a single snapshot with the given size."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    Reversion strategy: rollback the quota reservation."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    Warning Warning: if the process that is running this reserve and commit"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_49ca851c","line":129,"updated":"2015-11-12 12:28:44.000000000","message":"You would need to change this comment.","commit_id":"b401a3e720c9618bbe85fadc6a0741582ccf3dc0"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"58801927f16d88864af9d0f0ce09a53786300e57","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class QuotaReserveTask(flow_utils.CinderTask):"},{"line_number":128,"context_line":"    \"\"\"Reserves a single snapshot with the given size."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    Reversion strategy: rollback the quota reservation."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    Warning Warning: if the process that is running this reserve and commit"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_5fb52e2f","line":129,"in_reply_to":"da85f559_49ca851c","updated":"2015-11-13 02:07:02.000000000","message":"Done","commit_id":"b401a3e720c9618bbe85fadc6a0741582ccf3dc0"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7a0c52096b07c05d7ff54c1a695c11459723e00f","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            # committed again at this point."},{"line_number":171,"context_line":"            return"},{"line_number":172,"context_line":"        # If driver get exception, the snapshot will be set to error, so we"},{"line_number":173,"context_line":"        # add quota usage here, and when delete this snapshot, this will keep"},{"line_number":174,"context_line":"        # quota usage correct."},{"line_number":175,"context_line":"        reservations \u003d result[\u0027reservations\u0027]"},{"line_number":176,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_c99995c5","line":173,"updated":"2015-11-12 12:28:44.000000000","message":"s/delete/deleting","commit_id":"b401a3e720c9618bbe85fadc6a0741582ccf3dc0"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"58801927f16d88864af9d0f0ce09a53786300e57","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            # committed again at this point."},{"line_number":171,"context_line":"            return"},{"line_number":172,"context_line":"        # If driver get exception, the snapshot will be set to error, so we"},{"line_number":173,"context_line":"        # add quota usage here, and when delete this snapshot, this will keep"},{"line_number":174,"context_line":"        # quota usage correct."},{"line_number":175,"context_line":"        reservations \u003d result[\u0027reservations\u0027]"},{"line_number":176,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_1f9fa6b5","line":173,"in_reply_to":"da85f559_c99995c5","updated":"2015-11-13 02:07:02.000000000","message":"Done","commit_id":"b401a3e720c9618bbe85fadc6a0741582ccf3dc0"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7a0c52096b07c05d7ff54c1a695c11459723e00f","unresolved":false,"context_lines":[{"line_number":187,"context_line":"class QuotaCommitTask(flow_utils.CinderTask):"},{"line_number":188,"context_line":"    \"\"\"Commits the reservation."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    Reversion strategy: N/A (the rollback will be handled by the task that did"},{"line_number":191,"context_line":"    the initial reservation (see: QuotaReserveTask)."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    Warning Warning: if the process that is running this reserve and commit"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_e9aed92c","line":190,"updated":"2015-11-12 12:28:44.000000000","message":"This comment is wrong now.","commit_id":"b401a3e720c9618bbe85fadc6a0741582ccf3dc0"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"58801927f16d88864af9d0f0ce09a53786300e57","unresolved":false,"context_lines":[{"line_number":187,"context_line":"class QuotaCommitTask(flow_utils.CinderTask):"},{"line_number":188,"context_line":"    \"\"\"Commits the reservation."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    Reversion strategy: N/A (the rollback will be handled by the task that did"},{"line_number":191,"context_line":"    the initial reservation (see: QuotaReserveTask)."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    Warning Warning: if the process that is running this reserve and commit"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_9f6e3695","line":190,"in_reply_to":"da85f559_e9aed92c","updated":"2015-11-13 02:07:02.000000000","message":"Done","commit_id":"b401a3e720c9618bbe85fadc6a0741582ccf3dc0"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7a0c52096b07c05d7ff54c1a695c11459723e00f","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        if isinstance(result, ft.Failure):"},{"line_number":215,"context_line":"            return"},{"line_number":216,"context_line":"        snapshot \u003d result[\u0027snapshot_properties\u0027]"},{"line_number":217,"context_line":"        try:"},{"line_number":218,"context_line":"            reserve_opts \u003d {\u0027snapshots\u0027: -1,"},{"line_number":219,"context_line":"                            \u0027gigabytes\u0027: -snapshot[\u0027volume_size\u0027]}"},{"line_number":220,"context_line":"            reservations \u003d QUOTAS.reserve(context,"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_84b8542b","line":217,"updated":"2015-11-12 12:28:44.000000000","message":"Do we still want to unreserve on failure?","commit_id":"b401a3e720c9618bbe85fadc6a0741582ccf3dc0"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"58801927f16d88864af9d0f0ce09a53786300e57","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        if isinstance(result, ft.Failure):"},{"line_number":215,"context_line":"            return"},{"line_number":216,"context_line":"        snapshot \u003d result[\u0027snapshot_properties\u0027]"},{"line_number":217,"context_line":"        try:"},{"line_number":218,"context_line":"            reserve_opts \u003d {\u0027snapshots\u0027: -1,"},{"line_number":219,"context_line":"                            \u0027gigabytes\u0027: -snapshot[\u0027volume_size\u0027]}"},{"line_number":220,"context_line":"            reservations \u003d QUOTAS.reserve(context,"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_7f711277","line":217,"in_reply_to":"da85f559_84b8542b","updated":"2015-11-13 02:07:02.000000000","message":"Emm, You\u0027re right, no need to do that.","commit_id":"b401a3e720c9618bbe85fadc6a0741582ccf3dc0"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"cf4174caa6b09fefb8ff5f06eea7fda181c4e5b9","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        except Exception:"},{"line_number":123,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":124,"context_line":"                if CONF.no_snapshot_gb_quota:"},{"line_number":125,"context_line":"                    reserve_opts \u003d {\u0027snapshots\u0027: 1}"},{"line_number":126,"context_line":"                else:"},{"line_number":127,"context_line":"                    reserve_opts \u003d {\u0027snapshots\u0027: 1, \u0027gigabytes\u0027: size}"},{"line_number":128,"context_line":"                reservations \u003d QUOTAS.reserve(context, **reserve_opts)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7af24918_d624bab0","line":125,"range":{"start_line":125,"start_character":20,"end_line":125,"end_character":32},"updated":"2016-03-07 05:55:03.000000000","message":"As with managing volume, please add a comment","commit_id":"2e1f7c56351c0b6524797dabd8b77f821bb32fcf"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"50554db2539a6b412d2f551ef1f70ea166116697","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        except Exception:"},{"line_number":123,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":124,"context_line":"                if CONF.no_snapshot_gb_quota:"},{"line_number":125,"context_line":"                    reserve_opts \u003d {\u0027snapshots\u0027: 1}"},{"line_number":126,"context_line":"                else:"},{"line_number":127,"context_line":"                    reserve_opts \u003d {\u0027snapshots\u0027: 1, \u0027gigabytes\u0027: size}"},{"line_number":128,"context_line":"                reservations \u003d QUOTAS.reserve(context, **reserve_opts)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7af24918_b662ce14","line":125,"range":{"start_line":125,"start_character":20,"end_line":125,"end_character":32},"in_reply_to":"7af24918_d624bab0","updated":"2016-03-07 06:32:52.000000000","message":"Done","commit_id":"2e1f7c56351c0b6524797dabd8b77f821bb32fcf"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"52d2be160f591c18709e5e6a50dff867de6a31d5","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":118,"context_line":"            QUOTAS.commit(context, reservations)"},{"line_number":119,"context_line":"        except Exception as e:"},{"line_number":120,"context_line":"            LOG.warning(_LW(\"Commit snapshot quota for error snapshot get \""},{"line_number":121,"context_line":"                            \"failure %s.\"), e)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def execute(self, context, snapshot_ref, manage_existing_ref,"},{"line_number":124,"context_line":"                optional_args):"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa0719c6_5386d313","line":121,"range":{"start_line":120,"start_character":29,"end_line":121,"end_character":41},"updated":"2016-03-22 10:24:34.000000000","message":"This also should be rephrased similarly to volume case.","commit_id":"e599ef53db785fd9c2e2b572929c1c4b7d6b6070"}]}
