)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement function of import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. add snapshots manage/unmange action in contrib api"},{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3a961159_6817aa54","line":9,"updated":"2015-01-15 20:28:16.000000000","message":"Please, start with upper-cases","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement function of import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. add snapshots manage/unmange action in contrib api"},{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"da86d52c_ffd87ef0","line":9,"updated":"2015-02-06 07:01:21.000000000","message":"unmanage","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement function of import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. add snapshots manage/unmange action in contrib api"},{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"da86d52c_1fe472aa","line":10,"updated":"2015-02-06 07:01:21.000000000","message":"manager","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":9,"context_line":"1. add snapshots manage/unmange action in contrib api"},{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint support-import-export-snapshots"},{"line_number":15,"context_line":"Change-Id: Ib6cf8392b0bc99f803316991f31a75788677e9cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"da86d52c_7ff48e5a","line":12,"updated":"2015-02-06 07:01:21.000000000","message":"add manage/unmanage snapshots support in the LVM driver.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint support-import-export-snapshots"},{"line_number":15,"context_line":"Change-Id: Ib6cf8392b0bc99f803316991f31a75788677e9cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"da86d52c_4d10b7a8","line":13,"updated":"2015-02-15 21:36:54.000000000","message":"DocImpact","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement function of import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. add snapshots manage/unmange action in contrib api"},{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"da86d52c_81e6ce14","line":9,"updated":"2015-02-17 06:28:44.000000000","message":"typo: unmanage\n\nSuggest change \"contrib api\" to \"API extension\".","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement function of import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. add snapshots manage/unmange action in contrib api"},{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"da86d52c_61eabaad","line":10,"updated":"2015-02-17 06:28:44.000000000","message":"manager","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":9,"context_line":"1. add snapshots manage/unmange action in contrib api"},{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint support-import-export-snapshots"},{"line_number":15,"context_line":"Change-Id: Ib6cf8392b0bc99f803316991f31a75788677e9cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"da86d52c_6101da69","line":12,"updated":"2015-02-17 06:28:44.000000000","message":"Add manage/unmanage support in the LVM driver.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"562f5dc9a28216d2d9199704eaa5cd6575f77d14","unresolved":false,"context_lines":[{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint support-import-export-snapshots"},{"line_number":15,"context_line":"Change-Id: Ib6cf8392b0bc99f803316991f31a75788677e9cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"da86d52c_3bdebc3e","line":13,"updated":"2015-02-19 15:39:27.000000000","message":"DocImpact and APIImpact tags are required here.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f89476aa3fc44080e8600265aabfedf18049e8b0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint support-import-export-snapshots"},{"line_number":15,"context_line":"Change-Id: Ib6cf8392b0bc99f803316991f31a75788677e9cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"9a80dd14_e36897f7","line":13,"updated":"2015-03-05 09:58:50.000000000","message":"This is changing the API, so DocImpact and APIImpact is probably applicable here.","commit_id":"0404fa0c85eac32df61e2815a3cd6abc69564e19"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"84bb5a2d98e0572918a2ec84a05cfee003e0e64d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"2. implement manage_existing_snapshot in manger and flow"},{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint support-import-export-snapshots"},{"line_number":15,"context_line":"Change-Id: Ib6cf8392b0bc99f803316991f31a75788677e9cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"9a80dd14_aeae0c7f","line":13,"in_reply_to":"9a80dd14_e36897f7","updated":"2015-03-09 00:56:07.000000000","message":"OK, will fix it.","commit_id":"0404fa0c85eac32df61e2815a3cd6abc69564e19"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7f9b62d6d0b3339f74299a715e4e13ebe06a54aa","unresolved":false,"context_lines":[{"line_number":11,"context_line":"to import existing snapshots."},{"line_number":12,"context_line":"3. add lvm support in volume driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint support-import-export-snapshots"},{"line_number":15,"context_line":"Change-Id: Ib6cf8392b0bc99f803316991f31a75788677e9cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"9a80dd14_572d5ca7","line":14,"updated":"2015-03-06 09:58:04.000000000","message":"DocImpact and APIImpact flags should be there because the patch is changing the API.","commit_id":"78db10464541d20a81446328cbd7f3fd03b2fe97"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"532169e56c361e06bd6312cac250d62cd06b1751","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement function of import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add snapshots manage action in contrib api and unmange"},{"line_number":10,"context_line":"action in API extension."},{"line_number":11,"context_line":"2. Implement manage_existing_snapshot in manager and flow"},{"line_number":12,"context_line":"to import existing snapshots."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"9a80dd14_a638a3d5","line":9,"updated":"2015-03-10 17:15:12.000000000","message":"s/unmange/unmanage/","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement function of import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add snapshots manage action in contrib api and unmange"},{"line_number":10,"context_line":"action in API extension."},{"line_number":11,"context_line":"2. Implement manage_existing_snapshot in manager and flow"},{"line_number":12,"context_line":"to import existing snapshots."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"9a80dd14_6c4af356","line":9,"in_reply_to":"9a80dd14_a638a3d5","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"5ed3191248e6714bea4f24bd41f4b0e4372207b0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-22 10:26:14 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement function of import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add snapshots manage action in contrib api and unmanage"},{"line_number":10,"context_line":"action in API extension."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":42,"id":"dac4157f_59c044e0","line":7,"updated":"2015-04-22 13:36:48.000000000","message":"s/of/to/","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1d2f5e153a0fd16c6e15df21d89d7bbb73d61927","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-22 10:26:14 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement function of import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add snapshots manage action in contrib api and unmanage"},{"line_number":10,"context_line":"action in API extension."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":42,"id":"bab921fb_a0f2e598","line":7,"in_reply_to":"dac4157f_59c044e0","updated":"2015-04-23 12:11:04.000000000","message":"Done","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"27ba69c6b210d69478d2a839c56ead7b7de473b0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-14 10:59:55 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement function to import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add snapshots manage action in contrib api and unmanage"},{"line_number":10,"context_line":"action in API extension."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":53,"id":"7a016987_14d78424","line":7,"updated":"2015-05-15 13:29:13.000000000","message":"Should be \"Implement function to manage/unmange snapshots\" based on the functionality.  Import/export is a little confusing, but not a big deal.","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d2fa86d18814686379e4beef0b390bbee15ea2ef","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghao \u003cwanghao749@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-14 10:59:55 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement function to import/export snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add snapshots manage action in contrib api and unmanage"},{"line_number":10,"context_line":"action in API extension."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":53,"id":"7a016987_98dee93d","line":7,"in_reply_to":"7a016987_14d78424","updated":"2015-05-17 03:39:57.000000000","message":"Thanks. Fix it soon.","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"}],"cinder/api/contrib/snapshot_manage.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_a80d1242","line":1,"updated":"2015-01-15 20:28:16.000000000","message":"2015","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"7bf4ceafac7d992d20ffebffbf9fc96b72796ffa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_a5ab691c","line":1,"in_reply_to":"3a961159_a80d1242","updated":"2015-01-16 09:15:04.000000000","message":"Done","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8ad4d57c194d22c2d92297237e6b905401cdcc5b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2015 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_6df9d17f","line":1,"updated":"2015-02-03 10:48:03.000000000","message":"Should not have copyright listed as OpenStack Foundation.","commit_id":"dd43bc32d3b9d20ee8bfb052fcf5516416f957e5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        Manages an existing backend storage snapshot object (e.g. a Linux"},{"line_number":47,"context_line":"        logical volume or a SAN disk) by creating the Cinder objects required"},{"line_number":48,"context_line":"        to manage it, and possibly renaming the backend storage snapshot object"},{"line_number":49,"context_line":"        (driver dependent)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        From an API perspective, this operation behaves very much like a"},{"line_number":52,"context_line":"        snaphost creation operation."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_a69b6816","line":49,"updated":"2015-02-06 01:30:47.000000000","message":"suggest \u0027.\u0027 here.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        Manages an existing backend storage snapshot object (e.g. a Linux"},{"line_number":47,"context_line":"        logical volume or a SAN disk) by creating the Cinder objects required"},{"line_number":48,"context_line":"        to manage it, and possibly renaming the backend storage snapshot object"},{"line_number":49,"context_line":"        (driver dependent)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        From an API perspective, this operation behaves very much like a"},{"line_number":52,"context_line":"        snaphost creation operation."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_4b6435e5","line":49,"in_reply_to":"da86d52c_a69b6816","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        This API call will return with an error if any of the above elements"},{"line_number":68,"context_line":"        are missing from the request, or if the \u0027volume_id\u0027 element refers to"},{"line_number":69,"context_line":"        a cinder volume that could not be found."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        The snapshot will later enter the error state if it is discovered that"},{"line_number":72,"context_line":"        \u0027ref\u0027 is bad."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_9fb5c27f","line":69,"updated":"2015-02-06 07:01:21.000000000","message":"remove \"that\".","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        This API call will return with an error if any of the above elements"},{"line_number":68,"context_line":"        are missing from the request, or if the \u0027volume_id\u0027 element refers to"},{"line_number":69,"context_line":"        a cinder volume that could not be found."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        The snapshot will later enter the error state if it is discovered that"},{"line_number":72,"context_line":"        \u0027ref\u0027 is bad."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_eba4090a","line":69,"in_reply_to":"da86d52c_9fb5c27f","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        The snapshot will later enter the error state if it is discovered that"},{"line_number":72,"context_line":"        \u0027ref\u0027 is bad."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Optional elements to \u0027volume\u0027 are:"},{"line_number":75,"context_line":"            name               A name for the new snapshot."},{"line_number":76,"context_line":"            description        A description for the new snapshot."},{"line_number":77,"context_line":"            metadata           Key/value pairs to be associated with the new"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_3f005601","line":74,"updated":"2015-02-06 07:01:21.000000000","message":"Should be \u0027snapshot\u0027.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        The snapshot will later enter the error state if it is discovered that"},{"line_number":72,"context_line":"        \u0027ref\u0027 is bad."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Optional elements to \u0027volume\u0027 are:"},{"line_number":75,"context_line":"            name               A name for the new snapshot."},{"line_number":76,"context_line":"            description        A description for the new snapshot."},{"line_number":77,"context_line":"            metadata           Key/value pairs to be associated with the new"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_0baa3dd4","line":74,"in_reply_to":"da86d52c_3f005601","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            description        A description for the new snapshot."},{"line_number":77,"context_line":"            metadata           Key/value pairs to be associated with the new"},{"line_number":78,"context_line":"                               snapshot."},{"line_number":79,"context_line":"            host               Cinder host on which the existing volume resides"},{"line_number":80,"context_line":"        \"\"\""},{"line_number":81,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":82,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_a6c288e6","line":79,"updated":"2015-02-06 01:30:47.000000000","message":"suggest \u0027.\u0027 here.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            description        A description for the new snapshot."},{"line_number":77,"context_line":"            metadata           Key/value pairs to be associated with the new"},{"line_number":78,"context_line":"                               snapshot."},{"line_number":79,"context_line":"            host               Cinder host on which the existing volume resides"},{"line_number":80,"context_line":"        \"\"\""},{"line_number":81,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":82,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_cb866565","line":79,"in_reply_to":"da86d52c_a6c288e6","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        authorize(context)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        if not self.is_valid_body(body, \u0027snapshot\u0027):"},{"line_number":85,"context_line":"            msg \u003d _(\"Missing required element \u0027%s\u0027 in request body\") % \u0027volume\u0027"},{"line_number":86,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        snapshot \u003d body[\u0027snapshot\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_df79fac8","line":85,"updated":"2015-02-06 07:01:21.000000000","message":"Should be \u0027snapshot\u0027, not \u0027volume\u0027.  Also there\u0027s no need to substitute the string here as \u0027snapshot\u0027 is a fixed string.  Just add it to the message directly.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        authorize(context)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        if not self.is_valid_body(body, \u0027snapshot\u0027):"},{"line_number":85,"context_line":"            msg \u003d _(\"Missing required element \u0027%s\u0027 in request body\") % \u0027volume\u0027"},{"line_number":86,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        snapshot \u003d body[\u0027snapshot\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_6b8f3976","line":85,"in_reply_to":"da86d52c_df79fac8","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        missing_keys \u003d list(required_keys - set(snapshot.keys()))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        if missing_keys:"},{"line_number":96,"context_line":"            msg \u003d _(\"The following elements are required: %s\") % \\"},{"line_number":97,"context_line":"                \u0027, \u0027.join(missing_keys)"},{"line_number":98,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_e6b80077","line":96,"updated":"2015-02-06 01:30:47.000000000","message":"Please don\u0027t use \u0027\\\u0027 for line continuation.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                \u0027, \u0027.join(missing_keys)"},{"line_number":98,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # Check whether volume is existed"},{"line_number":101,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027]"},{"line_number":102,"context_line":"        try:"},{"line_number":103,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_5a2ef88c","line":100,"updated":"2015-02-06 07:01:21.000000000","message":"Check whether volume exists","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                \u0027, \u0027.join(missing_keys)"},{"line_number":98,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # Check whether volume is existed"},{"line_number":101,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027]"},{"line_number":102,"context_line":"        try:"},{"line_number":103,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_8bbaad08","line":100,"in_reply_to":"da86d52c_5a2ef88c","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027]"},{"line_number":102,"context_line":"        try:"},{"line_number":103,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":104,"context_line":"        except exception.NotFound:"},{"line_number":105,"context_line":"            msg \u003d _(\"Volume could not be found\")"},{"line_number":106,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_3a4a2455","line":104,"updated":"2015-02-06 07:01:21.000000000","message":"Should use VolumeNotFound.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        try:"},{"line_number":103,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":104,"context_line":"        except exception.NotFound:"},{"line_number":105,"context_line":"            msg \u003d _(\"Volume could not be found\")"},{"line_number":106,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        LOG.debug(\u0027Manage snapshot request body: %s\u0027, body)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_7a773ca0","line":105,"updated":"2015-02-06 07:01:21.000000000","message":"Please add volume_id to the message.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        kwargs[\u0027metadata\u0027] \u003d snapshot.get(\u0027metadata\u0027, None)"},{"line_number":114,"context_line":"        kwargs[\u0027description\u0027] \u003d snapshot.get(\u0027description\u0027, None)"},{"line_number":115,"context_line":"        host \u003d snapshot.get(\u0027host\u0027, None)"},{"line_number":116,"context_line":"        # NOTE(thingee): v2 API allows name instead of display_name"},{"line_number":117,"context_line":"        if \u0027name\u0027 in snapshot:"},{"line_number":118,"context_line":"            snapshot[\u0027display_name\u0027] \u003d snapshot.get(\u0027name\u0027)"},{"line_number":119,"context_line":"            del snapshot[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_067a74bc","line":116,"updated":"2015-02-06 01:30:47.000000000","message":"Is this from a copy paste?  If so, should \u0027snapshot[\u0027name\u0027] be used instead?","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        kwargs[\u0027metadata\u0027] \u003d snapshot.get(\u0027metadata\u0027, None)"},{"line_number":114,"context_line":"        kwargs[\u0027description\u0027] \u003d snapshot.get(\u0027description\u0027, None)"},{"line_number":115,"context_line":"        host \u003d snapshot.get(\u0027host\u0027, None)"},{"line_number":116,"context_line":"        # NOTE(thingee): v2 API allows name instead of display_name"},{"line_number":117,"context_line":"        if \u0027name\u0027 in snapshot:"},{"line_number":118,"context_line":"            snapshot[\u0027display_name\u0027] \u003d snapshot.get(\u0027name\u0027)"},{"line_number":119,"context_line":"            del snapshot[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_4bf515ca","line":116,"in_reply_to":"da86d52c_067a74bc","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        (driver dependent)."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        From an API perspective, this operation behaves very much like a"},{"line_number":52,"context_line":"        snaphost creation operation."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        Required HTTP Body:"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_212e02fb","line":52,"updated":"2015-02-17 06:28:44.000000000","message":"snapshot","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        (driver dependent)."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        From an API perspective, this operation behaves very much like a"},{"line_number":52,"context_line":"        snaphost creation operation."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        Required HTTP Body:"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_2efeafae","line":52,"in_reply_to":"da86d52c_212e02fb","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            description        A description for the new snapshot."},{"line_number":77,"context_line":"            metadata           Key/value pairs to be associated with the new"},{"line_number":78,"context_line":"                               snapshot."},{"line_number":79,"context_line":"            host               Cinder host on which the existing volume"},{"line_number":80,"context_line":"                               resides."},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_bc6139d5","line":79,"updated":"2015-02-17 06:28:44.000000000","message":"See comments below on \u0027host\u0027. I don\u0027t think this should be in the API body.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            description        A description for the new snapshot."},{"line_number":77,"context_line":"            metadata           Key/value pairs to be associated with the new"},{"line_number":78,"context_line":"                               snapshot."},{"line_number":79,"context_line":"            host               Cinder host on which the existing volume"},{"line_number":80,"context_line":"                               resides."},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_8e807bf8","line":79,"in_reply_to":"da86d52c_bc6139d5","updated":"2015-02-26 01:54:04.000000000","message":"Yes, it will be removed.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027display_name\u0027, None)"},{"line_number":114,"context_line":"        kwargs[\u0027metadata\u0027] \u003d snapshot.get(\u0027metadata\u0027, None)"},{"line_number":115,"context_line":"        kwargs[\u0027description\u0027] \u003d snapshot.get(\u0027description\u0027, None)"},{"line_number":116,"context_line":"        host \u003d snapshot.get(\u0027host\u0027, None)"},{"line_number":117,"context_line":"        # NOTE(thingee): v2 API allows name instead of display_name"},{"line_number":118,"context_line":"        if \u0027name\u0027 in snapshot:"},{"line_number":119,"context_line":"            kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_9c3475e0","line":116,"updated":"2015-02-17 06:28:44.000000000","message":"Is it really necessary to have \u0027host\u0027 in the body of the API?  Snapshot doesn\u0027t have a \u0027host\u0027 field in cinder db. It will always be on the same \u0027host\u0027 as the volume.  We should just retrieve \u0027host\u0027 from volume directly.  If user enter a different host, you don\u0027t  even have a place in db to save it.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027display_name\u0027, None)"},{"line_number":114,"context_line":"        kwargs[\u0027metadata\u0027] \u003d snapshot.get(\u0027metadata\u0027, None)"},{"line_number":115,"context_line":"        kwargs[\u0027description\u0027] \u003d snapshot.get(\u0027description\u0027, None)"},{"line_number":116,"context_line":"        host \u003d snapshot.get(\u0027host\u0027, None)"},{"line_number":117,"context_line":"        # NOTE(thingee): v2 API allows name instead of display_name"},{"line_number":118,"context_line":"        if \u0027name\u0027 in snapshot:"},{"line_number":119,"context_line":"            kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_0e9d6b66","line":116,"in_reply_to":"da86d52c_9c3475e0","updated":"2015-02-26 01:54:04.000000000","message":"Thx, you\u0027re right. I will fix it.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        try:"},{"line_number":124,"context_line":"            new_snapshot \u003d self.volume_api.manage_existing_snapshot("},{"line_number":125,"context_line":"                context,"},{"line_number":126,"context_line":"                host,"},{"line_number":127,"context_line":"                snapshot[\u0027ref\u0027],"},{"line_number":128,"context_line":"                volume,"},{"line_number":129,"context_line":"                **kwargs)"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_fc73b1b1","line":126,"updated":"2015-02-17 06:28:44.000000000","message":"we should get host in volume_api.  volume is already passed in.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        try:"},{"line_number":124,"context_line":"            new_snapshot \u003d self.volume_api.manage_existing_snapshot("},{"line_number":125,"context_line":"                context,"},{"line_number":126,"context_line":"                host,"},{"line_number":127,"context_line":"                snapshot[\u0027ref\u0027],"},{"line_number":128,"context_line":"                volume,"},{"line_number":129,"context_line":"                **kwargs)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_ae853f08","line":126,"in_reply_to":"da86d52c_fc73b1b1","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d526619604fa62dc558350c62488ef7c2c02a119","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        {"},{"line_number":57,"context_line":"         \"snapshot\":"},{"line_number":58,"context_line":"          {"},{"line_number":59,"context_line":"           \"volume_id\": \u003cCinder volume already exist in volume backend\u003e,"},{"line_number":60,"context_line":"           \"ref\":  \u003cDriver-specific reference to the existing storage object\u003e,"},{"line_number":61,"context_line":"          }"},{"line_number":62,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_aa9f8f4f","line":59,"updated":"2015-03-04 06:28:46.000000000","message":"exists","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"aa2a9216b2a761df2332b2460ab84a36b1602878","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        {"},{"line_number":57,"context_line":"         \"snapshot\":"},{"line_number":58,"context_line":"          {"},{"line_number":59,"context_line":"           \"volume_id\": \u003cCinder volume already exist in volume backend\u003e,"},{"line_number":60,"context_line":"           \"ref\":  \u003cDriver-specific reference to the existing storage object\u003e,"},{"line_number":61,"context_line":"          }"},{"line_number":62,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_5ca5f902","line":59,"in_reply_to":"9a80dd14_aa9f8f4f","updated":"2015-03-04 10:09:58.000000000","message":"Done","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"1a44f674ae950961db2b741621abde3b69e07c81","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        This API call will return with an error if any of the above elements"},{"line_number":68,"context_line":"        are missing from the request, or if the \u0027volume_id\u0027 element refers to"},{"line_number":69,"context_line":"        a cinder volume could not be found."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        The snapshot will later enter the error state if it is discovered that"},{"line_number":72,"context_line":"        \u0027ref\u0027 is bad."}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_84355748","line":69,"updated":"2015-03-04 13:03:32.000000000","message":"a non-existing Cinder volume.","commit_id":"1f5f7a93deb81fe519134f17fed6f3eb0545a231"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"1a44f674ae950961db2b741621abde3b69e07c81","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"},{"line_number":134,"context_line":"    \"\"\"Allows existing backend storage to be \u0027managed\u0027 by Cinder.\"\"\""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    name \u003d \u0027SnapshotManage\u0027"},{"line_number":137,"context_line":"    alias \u003d \u0027os-snapshot-manage\u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_64094395","line":134,"updated":"2015-03-04 13:03:32.000000000","message":"storage snapshot..","commit_id":"1f5f7a93deb81fe519134f17fed6f3eb0545a231"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"fbac771ab77907f542781160b8240bdc268ebca4","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        This API call will return with an error if any of the above elements"},{"line_number":68,"context_line":"        are missing from the request, or if the \u0027volume_id\u0027 element refers to"},{"line_number":69,"context_line":"        a cinder volume could not be found."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        The snapshot will later enter the error state if it is discovered that"},{"line_number":72,"context_line":"        \u0027ref\u0027 is bad."}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_46d9daf1","line":69,"updated":"2015-03-09 19:40:05.000000000","message":"typo \u0027volume that could not be found\u0027.","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f1e526f43e74e7ed066b80b8ca165e07eea4d0bc","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        This API call will return with an error if any of the above elements"},{"line_number":68,"context_line":"        are missing from the request, or if the \u0027volume_id\u0027 element refers to"},{"line_number":69,"context_line":"        a cinder volume could not be found."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        The snapshot will later enter the error state if it is discovered that"},{"line_number":72,"context_line":"        \u0027ref\u0027 is bad."}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_2af73bd4","line":69,"in_reply_to":"9a80dd14_46d9daf1","updated":"2015-03-10 02:30:20.000000000","message":"Done","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"599d4b9dc644ade60a8a4e7586b4a7cd48a0815f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        {"},{"line_number":57,"context_line":"         \"snapshot\":"},{"line_number":58,"context_line":"          {"},{"line_number":59,"context_line":"           \"volume_id\": \u003cCinder volume already exits in volume backend\u003e,"},{"line_number":60,"context_line":"           \"ref\":  \u003cDriver-specific reference to the existing storage object\u003e,"},{"line_number":61,"context_line":"          }"},{"line_number":62,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_f0f7b657","line":59,"updated":"2015-03-10 15:37:22.000000000","message":"exits -\u003e exists","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        {"},{"line_number":57,"context_line":"         \"snapshot\":"},{"line_number":58,"context_line":"          {"},{"line_number":59,"context_line":"           \"volume_id\": \u003cCinder volume already exits in volume backend\u003e,"},{"line_number":60,"context_line":"           \"ref\":  \u003cDriver-specific reference to the existing storage object\u003e,"},{"line_number":61,"context_line":"          }"},{"line_number":62,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_517dcdb0","line":59,"in_reply_to":"9a80dd14_f0f7b657","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"532169e56c361e06bd6312cac250d62cd06b1751","unresolved":false,"context_lines":[{"line_number":57,"context_line":"         \"snapshot\":"},{"line_number":58,"context_line":"          {"},{"line_number":59,"context_line":"           \"volume_id\": \u003cCinder volume already exits in volume backend\u003e,"},{"line_number":60,"context_line":"           \"ref\":  \u003cDriver-specific reference to the existing storage object\u003e,"},{"line_number":61,"context_line":"          }"},{"line_number":62,"context_line":"        }"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_a9c87457","line":60,"updated":"2015-03-10 17:15:12.000000000","message":"Could you give an example of what a \"ref\" is in this comment?  It is not clear.  This would help the driver maintainer better support it.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"         \"snapshot\":"},{"line_number":58,"context_line":"          {"},{"line_number":59,"context_line":"           \"volume_id\": \u003cCinder volume already exits in volume backend\u003e,"},{"line_number":60,"context_line":"           \"ref\":  \u003cDriver-specific reference to the existing storage object\u003e,"},{"line_number":61,"context_line":"          }"},{"line_number":62,"context_line":"        }"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_a68ecc25","line":60,"in_reply_to":"9a80dd14_a9c87457","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"532169e56c361e06bd6312cac250d62cd06b1751","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        kwargs[\u0027description\u0027] \u003d snapshot.get(\u0027description\u0027, None)"},{"line_number":114,"context_line":"        # NOTE(thingee): v2 API allows name instead of display_name"},{"line_number":115,"context_line":"        if \u0027name\u0027 in snapshot:"},{"line_number":116,"context_line":"            kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027name\u0027)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        try:"},{"line_number":119,"context_line":"            new_snapshot \u003d self.volume_api.manage_existing_snapshot("}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_61aa1a87","line":116,"updated":"2015-03-10 17:15:12.000000000","message":"The NOTE is a bit confusing because this code was taken from cinder/api/v2/snapshots.py - https://github.com/openstack/cinder/blob/master/cinder/api/v2/snapshots.py#L152.  Should this be kwargs[ \u0027display_name\u0027]?  Or you should update the NOTE above to say you are overriding the \u0027name\u0027.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        kwargs[\u0027description\u0027] \u003d snapshot.get(\u0027description\u0027, None)"},{"line_number":114,"context_line":"        # NOTE(thingee): v2 API allows name instead of display_name"},{"line_number":115,"context_line":"        if \u0027name\u0027 in snapshot:"},{"line_number":116,"context_line":"            kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027name\u0027)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        try:"},{"line_number":119,"context_line":"            new_snapshot \u003d self.volume_api.manage_existing_snapshot("}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_3105b914","line":116,"in_reply_to":"9a80dd14_61aa1a87","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"431aaaa4e9f66292cc5ccce25e7173ecfbb0f1e5","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"},{"line_number":136,"context_line":"    \"\"\"Allows existing backend storage to be \u0027managed\u0027 by Cinder.\"\"\""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    name \u003d \u0027SnapshotManage\u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_49369604","line":135,"updated":"2015-04-20 13:03:56.000000000","message":"I believe with naming conventions this should be SnapshotManage.","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"580f870122682a654a0d67c65555c53aab283adf","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"},{"line_number":136,"context_line":"    \"\"\"Allows existing backend storage to be \u0027managed\u0027 by Cinder.\"\"\""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    name \u003d \u0027SnapshotManage\u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_c0648be6","line":135,"in_reply_to":"dac4157f_49369604","updated":"2015-04-22 02:23:13.000000000","message":"Done","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"5ed3191248e6714bea4f24bd41f4b0e4372207b0","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"},{"line_number":136,"context_line":"    \"\"\"Allows existing backend storage to be \u0027managed\u0027 by Cinder.\"\"\""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    name \u003d \u0027SnapshotManage\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"dac4157f_a9326df0","line":135,"updated":"2015-04-22 13:36:48.000000000","message":"Should be named SnapshotManage","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7789c6469722e837d24f9a3bb09e219b3034bb97","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"},{"line_number":136,"context_line":"    \"\"\"Allows existing backend storage to be \u0027managed\u0027 by Cinder.\"\"\""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    name \u003d \u0027SnapshotManage\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"bab921fb_462757ca","line":135,"in_reply_to":"bab921fb_b2b0bb44","updated":"2015-04-24 13:23:31.000000000","message":"Sorry, you are correct.  It should be named Snapshot_manage.","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1d2f5e153a0fd16c6e15df21d89d7bbb73d61927","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"},{"line_number":136,"context_line":"    \"\"\"Allows existing backend storage to be \u0027managed\u0027 by Cinder.\"\"\""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    name \u003d \u0027SnapshotManage\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"bab921fb_804b61b0","line":135,"in_reply_to":"dac4157f_a9326df0","updated":"2015-04-23 12:11:04.000000000","message":"Done","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"54655b06e8aa5ca6d3099647d79e67b56ec0c82e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"},{"line_number":136,"context_line":"    \"\"\"Allows existing backend storage to be \u0027managed\u0027 by Cinder.\"\"\""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    name \u003d \u0027SnapshotManage\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"bab921fb_b2b0bb44","line":135,"in_reply_to":"dac4157f_a9326df0","updated":"2015-04-24 09:57:44.000000000","message":"Hi~ Thang, I test under the SnapshotManage name, it will be failed. Because cinder load extensions using python file name, so it should be Snapshot_manage.\n\nIn cinder/api/extensions.py:\n\n        for fname in filenames:\n            root, ext \u003d os.path.splitext(fname)\n\n            # Skip __init__ and anything that\u0027s not .py\n            if ext !\u003d \u0027.py\u0027 or root \u003d\u003d \u0027__init__\u0027:\n                continue\n\n            # Try loading it\n            classname \u003d \"%s%s\" % (root[0].upper(), root[1:])","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # Check that the required keys are present, return an error if they"},{"line_number":92,"context_line":"        # are not."},{"line_number":93,"context_line":"        required_keys \u003d set([\u0027ref\u0027, \u0027volume_id\u0027])"},{"line_number":94,"context_line":"        missing_keys \u003d list(required_keys - set(snapshot.keys()))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if missing_keys:"}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_bd7ef216","line":93,"updated":"2015-04-26 15:17:18.000000000","message":"Can be a tuple instead of a list","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        # Check that the required keys are present, return an error if they"},{"line_number":92,"context_line":"        # are not."},{"line_number":93,"context_line":"        required_keys \u003d set([\u0027ref\u0027, \u0027volume_id\u0027])"},{"line_number":94,"context_line":"        missing_keys \u003d list(required_keys - set(snapshot.keys()))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if missing_keys:"},{"line_number":97,"context_line":"            msg \u003d _(\"The following elements are required: \""}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_5da8f676","line":94,"updated":"2015-04-26 15:17:18.000000000","message":"Why convert back to a list?","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    \"%s\") % \u0027, \u0027.join(missing_keys)"},{"line_number":99,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        # Check whether volume exists"},{"line_number":102,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027]"},{"line_number":103,"context_line":"        try:"},{"line_number":104,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_5dbfd6a9","line":101,"updated":"2015-04-26 15:17:18.000000000","message":"can easily be moved to it\u0027s own method:\ndef validate_volume_exists(volume_id):\n   ...","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        LOG.debug(\u0027Manage snapshot request body: %s\u0027, body)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        kwargs \u003d {}"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027display_name\u0027, None)"},{"line_number":114,"context_line":"        kwargs[\u0027metadata\u0027] \u003d snapshot.get(\u0027metadata\u0027, None)"}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_7dd97a21","line":111,"updated":"2015-04-26 15:17:18.000000000","message":"This is confusing since one might assume it\u0027s this functions\u0027 kwargs.\nkwargs\\args\\self should be used only as arguments to reduce confusion.\n\nconsider a more clear name like \"snapshot_parameters\"","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027display_name\u0027, None)"},{"line_number":114,"context_line":"        kwargs[\u0027metadata\u0027] \u003d snapshot.get(\u0027metadata\u0027, None)"},{"line_number":115,"context_line":"        kwargs[\u0027description\u0027] \u003d snapshot.get(\u0027description\u0027, None)"},{"line_number":116,"context_line":"        # NOTE(wanghao) if name in request body, we are overriding the \u0027name\u0027"},{"line_number":117,"context_line":"        if \u0027name\u0027 in snapshot:"},{"line_number":118,"context_line":"            kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027name\u0027)"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_dde9a6b8","line":116,"updated":"2015-04-26 15:17:18.000000000","message":"can be changed to:\n kwargs[\u0027name\u0027] \u003d snapshot.get(\u0027name\u0027, snapshot.get(\u0027display_name))","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    def get_resources(self):"},{"line_number":145,"context_line":"        controller \u003d SnapshotManageController()"},{"line_number":146,"context_line":"        res \u003d extensions.ResourceExtension(Snapshot_manage.alias,"},{"line_number":147,"context_line":"                                           controller)"},{"line_number":148,"context_line":"        return [res]"}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_fdfb4a79","line":147,"updated":"2015-04-26 15:17:18.000000000","message":"Could easily remove res and just use return","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"27ba69c6b210d69478d2a839c56ead7b7de473b0","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        # NOTE(wanghao) if name in request body, we are overriding the \u0027name\u0027"},{"line_number":116,"context_line":"        snapshot_parameters[\u0027name\u0027] \u003d snapshot.get(\u0027name\u0027,"},{"line_number":117,"context_line":"                                                   snapshot.get(\u0027display_name\u0027)"},{"line_number":118,"context_line":"                                                   )"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        try:"},{"line_number":121,"context_line":"            new_snapshot \u003d self.volume_api.manage_existing_snapshot("}],"source_content_type":"text/x-python","patch_set":53,"id":"7a016987_549bbc72","line":118,"updated":"2015-05-15 13:29:13.000000000","message":"nit: Odd indentation.  Could be:\n    snapshot.get(snapshot.get(\u0027display_name\u0027))","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d2fa86d18814686379e4beef0b390bbee15ea2ef","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        # NOTE(wanghao) if name in request body, we are overriding the \u0027name\u0027"},{"line_number":116,"context_line":"        snapshot_parameters[\u0027name\u0027] \u003d snapshot.get(\u0027name\u0027,"},{"line_number":117,"context_line":"                                                   snapshot.get(\u0027display_name\u0027)"},{"line_number":118,"context_line":"                                                   )"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        try:"},{"line_number":121,"context_line":"            new_snapshot \u003d self.volume_api.manage_existing_snapshot("}],"source_content_type":"text/x-python","patch_set":53,"id":"7a016987_38e4950b","line":118,"in_reply_to":"7a016987_549bbc72","updated":"2015-05-17 03:39:57.000000000","message":"There is first to get name, if the key \u0027name\u0027 is not in body, then use \u0027display_name\u0027 to get. So I feel could not use snapshot.get(snapshot.get(\u0027display_name\u0027)).It will be error if snapshot.get(\u0027display_name\u0027)\u003d\u003d None.","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"5089a52188a48fdece59aaae8f01fe1163898a7b","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        retval \u003d snapshots._translate_snapshot_detail_view(context,"},{"line_number":131,"context_line":"                                                           new_snapshot)"},{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":59,"id":"3afb71cf_9c05f9c3","line":132,"updated":"2015-06-05 15:31:27.000000000","message":"could you have wsgi add the location header with the location of the new snapshot resource as described here? https://github.com/openstack/api-wg/blob/master/guidelines/http.rst","commit_id":"e8be6ba074fee0cf4a00000e6a9d74635817016d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"97476573365f4bd58626d2bfe570ae95460d3c33","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        retval \u003d snapshots._translate_snapshot_detail_view(context,"},{"line_number":131,"context_line":"                                                           new_snapshot)"},{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":59,"id":"3afb71cf_6e7a2af3","line":132,"in_reply_to":"3afb71cf_4f59cc59","updated":"2015-06-09 06:45:12.000000000","message":"Sure, here is the bug link: https://bugs.launchpad.net/cinder/+bug/1463277","commit_id":"e8be6ba074fee0cf4a00000e6a9d74635817016d"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"72db4b2ccb1cf0827893d0ac9fe540459e902c1f","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        retval \u003d snapshots._translate_snapshot_detail_view(context,"},{"line_number":131,"context_line":"                                                           new_snapshot)"},{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":59,"id":"3afb71cf_4f59cc59","line":132,"in_reply_to":"3afb71cf_532d0b45","updated":"2015-06-08 14:50:15.000000000","message":"I think that is okay, can you make a bug for fixing that later?","commit_id":"e8be6ba074fee0cf4a00000e6a9d74635817016d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"075684a553761d8ba123903f152b6242bb3957d8","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        retval \u003d snapshots._translate_snapshot_detail_view(context,"},{"line_number":131,"context_line":"                                                           new_snapshot)"},{"line_number":132,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class Snapshot_manage(extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":59,"id":"3afb71cf_532d0b45","line":132,"in_reply_to":"3afb71cf_9c05f9c3","updated":"2015-06-08 03:03:48.000000000","message":"Agree with you, but I think it\u0027s more appropriate to add the location header for more cinder resources in other patch to avoid the inconsistency of implement. Do you think it\u0027s fine?","commit_id":"e8be6ba074fee0cf4a00000e6a9d74635817016d"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"b069a3afaa91b4ee6d1b295645ff712258313e4d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        authorize(context)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if not self.is_valid_body(body, \u0027snapshot\u0027):"},{"line_number":86,"context_line":"            msg \u003d _(\"Missing required element snapshot in request body\")"},{"line_number":87,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        snapshot \u003d body[\u0027snapshot\u0027]"}],"source_content_type":"text/x-python","patch_set":61,"id":"ba3cc151_f32cddad","line":86,"updated":"2015-07-08 13:58:01.000000000","message":"\".\" at EOL","commit_id":"addae73fb44b61e06b31df74e4cab60126a758fc"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"b069a3afaa91b4ee6d1b295645ff712258313e4d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        try:"},{"line_number":104,"context_line":"            volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":105,"context_line":"        except exception.VolumeNotFound:"},{"line_number":106,"context_line":"            msg \u003d _(\"Volume: %s could not be found\") % volume_id"},{"line_number":107,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        LOG.debug(\u0027Manage snapshot request body: %s\u0027, body)"}],"source_content_type":"text/x-python","patch_set":61,"id":"ba3cc151_6e06a61d","line":106,"updated":"2015-07-08 13:58:01.000000000","message":"\".\" at EOL","commit_id":"addae73fb44b61e06b31df74e4cab60126a758fc"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"65aa81643ac9a1d2bba8df6afa3bf93f36fac80d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"class SnapshotManageController(wsgi.Controller):"},{"line_number":33,"context_line":"    \"\"\"The /os-snapshot-manage controller for the OpenStack API.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    _view_builder_class \u003d volume_views.ViewBuilder"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":38,"context_line":"        super(SnapshotManageController, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_dfe2292f","line":35,"updated":"2015-07-27 15:54:28.000000000","message":"Why do we use volumes ViewBuilder here?","commit_id":"84e8f1019e2120bef04395429e1c98c314da375d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"65aa81643ac9a1d2bba8df6afa3bf93f36fac80d","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                volume,"},{"line_number":125,"context_line":"                **snapshot_parameters)"},{"line_number":126,"context_line":"        except exception.ServiceNotFound:"},{"line_number":127,"context_line":"            msg \u003d _(\"Service not found.\")"},{"line_number":128,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        retval \u003d snapshots._translate_snapshot_detail_view(context,"}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_9f0821db","line":127,"updated":"2015-07-27 15:54:28.000000000","message":"Could you please add more user-friendly exception message here? What service is not found?","commit_id":"84e8f1019e2120bef04395429e1c98c314da375d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"29d9a587219b8be5ad261f334547afde4f43022d","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                volume,"},{"line_number":125,"context_line":"                **snapshot_parameters)"},{"line_number":126,"context_line":"        except exception.ServiceNotFound:"},{"line_number":127,"context_line":"            msg \u003d _(\"Service not found.\")"},{"line_number":128,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        retval \u003d snapshots._translate_snapshot_detail_view(context,"}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_fdc5988d","line":127,"in_reply_to":"3a50d1a3_9f0821db","updated":"2015-07-28 01:32:07.000000000","message":"Done","commit_id":"84e8f1019e2120bef04395429e1c98c314da375d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1855a6b94de98610416668cba4406122834bf121","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            msg \u003d _(\"Service %s not found.\") % CONF.volume_topic"},{"line_number":128,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        retval \u003d snapshots._translate_snapshot_detail_view(new_snapshot)"},{"line_number":131,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"fa1b9901_34248d5e","line":130,"updated":"2015-08-19 17:33:17.000000000","message":"\u0027_translate_snapshot_detail_view\u0027 was removed from snapshots.  So you need to change your code.","commit_id":"ffde3108db2a6e87aaafcecc8649979965d7f4e1"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b56a70c008b37d4aff6164363e9b23d07d923ede","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            msg \u003d _(\"Service %s not found.\") % CONF.volume_topic"},{"line_number":128,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        retval \u003d snapshots._translate_snapshot_detail_view(new_snapshot)"},{"line_number":131,"context_line":"        return {\u0027snapshot\u0027: retval}"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"fa1b9901_93ea3dab","line":130,"in_reply_to":"fa1b9901_34248d5e","updated":"2015-08-20 01:52:19.000000000","message":"Yes, will update it.","commit_id":"ffde3108db2a6e87aaafcecc8649979965d7f4e1"}],"cinder/api/contrib/snapshot_unmanage.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_28012207","line":1,"updated":"2015-01-15 20:28:16.000000000","message":"2015","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"7bf4ceafac7d992d20ffebffbf9fc96b72796ffa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_c502350b","line":1,"in_reply_to":"3a961159_28012207","updated":"2015-01-16 09:15:04.000000000","message":"Done","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8ad4d57c194d22c2d92297237e6b905401cdcc5b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2015 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_cdee3db4","line":1,"updated":"2015-02-03 10:48:03.000000000","message":"Should not have copyright listed as OpenStack Foundation.","commit_id":"dd43bc32d3b9d20ee8bfb052fcf5516416f957e5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @wsgi.response(202)"},{"line_number":35,"context_line":"    @wsgi.action(\u0027os-unmanage\u0027)"},{"line_number":36,"context_line":"    def unmanage(self, req, id, body):"},{"line_number":37,"context_line":"        \"\"\"Stop managing a volume."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        This action is very much like a delete, except that a different"},{"line_number":40,"context_line":"        method (unmanage) is called on the Cinder driver.  This has the effect"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_daf588ed","line":37,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @wsgi.response(202)"},{"line_number":35,"context_line":"    @wsgi.action(\u0027os-unmanage\u0027)"},{"line_number":36,"context_line":"    def unmanage(self, req, id, body):"},{"line_number":37,"context_line":"        \"\"\"Stop managing a volume."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        This action is very much like a delete, except that a different"},{"line_number":40,"context_line":"        method (unmanage) is called on the Cinder driver.  This has the effect"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_cb2f45f5","line":37,"in_reply_to":"da86d52c_daf588ed","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        This action is very much like a delete, except that a different"},{"line_number":40,"context_line":"        method (unmanage) is called on the Cinder driver.  This has the effect"},{"line_number":41,"context_line":"        of removing the volume from Cinder management without actually"},{"line_number":42,"context_line":"        removing the backend storage object associated with it."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        There are no required parameters."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_5ae19828","line":41,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        This action is very much like a delete, except that a different"},{"line_number":40,"context_line":"        method (unmanage) is called on the Cinder driver.  This has the effect"},{"line_number":41,"context_line":"        of removing the volume from Cinder management without actually"},{"line_number":42,"context_line":"        removing the backend storage object associated with it."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        There are no required parameters."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_eb34094c","line":41,"in_reply_to":"da86d52c_5ae19828","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        There are no required parameters."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        A Not Found error is returned if the specified volume does not exist."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        A Bad Request error is returned if the specified volume is still"},{"line_number":49,"context_line":"        attached to an instance."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_9ad6b04d","line":46,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        There are no required parameters."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        A Not Found error is returned if the specified volume does not exist."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        A Bad Request error is returned if the specified volume is still"},{"line_number":49,"context_line":"        attached to an instance."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_0b3a3d36","line":46,"in_reply_to":"da86d52c_9ad6b04d","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        A Not Found error is returned if the specified volume does not exist."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        A Bad Request error is returned if the specified volume is still"},{"line_number":49,"context_line":"        attached to an instance."},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":52,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_1ac2c084","line":49,"updated":"2015-02-06 07:01:21.000000000","message":"This sentence should be removed. A snapshot cannot be attached to an instance at the moment.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        A Not Found error is returned if the specified volume does not exist."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        A Bad Request error is returned if the specified volume is still"},{"line_number":49,"context_line":"        attached to an instance."},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":52,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_2b3e212a","line":49,"in_reply_to":"da86d52c_1ac2c084","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":52,"context_line":"        authorize(context)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        LOG.info(_(\"Unmanage snapshot with id: %s\"), id, context\u003dcontext)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            snapshot \u003d self.volume_api.get_snapshot(context, id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_06619404","line":54,"updated":"2015-02-06 01:30:47.000000000","message":"This should be _LI(","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":52,"context_line":"        authorize(context)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        LOG.info(_(\"Unmanage snapshot with id: %s\"), id, context\u003dcontext)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            snapshot \u003d self.volume_api.get_snapshot(context, id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_4b3b5538","line":54,"in_reply_to":"da86d52c_06619404","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            snapshot \u003d self.volume_api.get_snapshot(context, id)"},{"line_number":58,"context_line":"            self.volume_api.delete_snapshot(context, snapshot,"},{"line_number":59,"context_line":"                                            unmanage_only\u003dTrue)"},{"line_number":60,"context_line":"        except exception.NotFound:"},{"line_number":61,"context_line":"            msg \u003d _(\"Snapshot could not be found\")"},{"line_number":62,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":63,"context_line":"        except exception.InvalidSnapshot as ex:"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_da43c810","line":60,"updated":"2015-02-06 07:01:21.000000000","message":"Should be SnapshotNotFound","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            snapshot \u003d self.volume_api.get_snapshot(context, id)"},{"line_number":58,"context_line":"            self.volume_api.delete_snapshot(context, snapshot,"},{"line_number":59,"context_line":"                                            unmanage_only\u003dTrue)"},{"line_number":60,"context_line":"        except exception.NotFound:"},{"line_number":61,"context_line":"            msg \u003d _(\"Snapshot could not be found\")"},{"line_number":62,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":63,"context_line":"        except exception.InvalidSnapshot as ex:"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_6b4819cd","line":60,"in_reply_to":"da86d52c_da43c810","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            self.volume_api.delete_snapshot(context, snapshot,"},{"line_number":59,"context_line":"                                            unmanage_only\u003dTrue)"},{"line_number":60,"context_line":"        except exception.NotFound:"},{"line_number":61,"context_line":"            msg \u003d _(\"Snapshot could not be found\")"},{"line_number":62,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":63,"context_line":"        except exception.InvalidSnapshot as ex:"},{"line_number":64,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dex.msg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_7a61fca7","line":61,"updated":"2015-02-06 07:01:21.000000000","message":"Add snapshot_id to msg.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            self.volume_api.delete_snapshot(context, snapshot,"},{"line_number":59,"context_line":"                                            unmanage_only\u003dTrue)"},{"line_number":60,"context_line":"        except exception.NotFound:"},{"line_number":61,"context_line":"            msg \u003d _(\"Snapshot could not be found\")"},{"line_number":62,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":63,"context_line":"        except exception.InvalidSnapshot as ex:"},{"line_number":64,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dex.msg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_8b454db5","line":61,"in_reply_to":"da86d52c_7a61fca7","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.volume_api \u003d volume.API()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @wsgi.response(202)"},{"line_number":35,"context_line":"    @wsgi.action(\u0027os-unmanage\u0027)"},{"line_number":36,"context_line":"    def unmanage(self, req, id, body):"},{"line_number":37,"context_line":"        \"\"\"Stop managing a snapshot."},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_cdeca7f6","line":35,"updated":"2015-02-15 21:36:54.000000000","message":"I think this is redundant for the endpoint to be:\n\nPOST /v2/os-snapshot-unmanage/os-unmanage ...\n\nIf the volume manage/unmanage endpoint is like that, then this is bad. This should just be:\n\nPOST /v2/os-snapshot-unmanage\n\nMy vote would be to do that with this, and to volume unmanage behave like so, and deprecate the old way.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.volume_api \u003d volume.API()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @wsgi.response(202)"},{"line_number":35,"context_line":"    @wsgi.action(\u0027os-unmanage\u0027)"},{"line_number":36,"context_line":"    def unmanage(self, req, id, body):"},{"line_number":37,"context_line":"        \"\"\"Stop managing a snapshot."},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_28d0d1c8","line":35,"in_reply_to":"da86d52c_cdeca7f6","updated":"2015-02-16 02:41:26.000000000","message":"the resource in url is \u0027snapshots\u0027, it like POST /v2/snapshots/, \u0027os-unmanage \u0027is just the action in request body, like this:\n{\n  \"os-unmanage\":{}\n    \n}","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"1a44f674ae950961db2b741621abde3b69e07c81","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class Snapshot_unmanage(extensions.ExtensionDescriptor):"},{"line_number":66,"context_line":"    \"\"\"Enable volume unmanage operation.\"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    name \u003d \"SnapshotUnmanage\""},{"line_number":69,"context_line":"    alias \u003d \"os-snapshot-unmanage\""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_3f4d9273","line":66,"updated":"2015-03-04 13:03:32.000000000","message":"Please fix the doc comment.","commit_id":"1f5f7a93deb81fe519134f17fed6f3eb0545a231"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"431aaaa4e9f66292cc5ccce25e7173ecfbb0f1e5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class Snapshot_unmanage(extensions.ExtensionDescriptor):"},{"line_number":66,"context_line":"    \"\"\"Enable volume unmanage operation.\"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    name \u003d \"SnapshotUnmanage\""}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_a92f72a0","line":65,"updated":"2015-04-20 13:03:56.000000000","message":"Should be SnapshotUnmanage.","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"580f870122682a654a0d67c65555c53aab283adf","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class Snapshot_unmanage(extensions.ExtensionDescriptor):"},{"line_number":66,"context_line":"    \"\"\"Enable volume unmanage operation.\"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    name \u003d \"SnapshotUnmanage\""}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_a0e87711","line":65,"in_reply_to":"dac4157f_a92f72a0","updated":"2015-04-22 02:23:13.000000000","message":"Done","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"5ed3191248e6714bea4f24bd41f4b0e4372207b0","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class Snapshot_unmanage(extensions.ExtensionDescriptor):"},{"line_number":66,"context_line":"    \"\"\"Enable volume unmanage operation.\"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    name \u003d \"SnapshotUnmanage\""}],"source_content_type":"text/x-python","patch_set":42,"id":"dac4157f_090cb939","line":65,"updated":"2015-04-22 13:36:48.000000000","message":"Should be named SnapshotUnmanage","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1d2f5e153a0fd16c6e15df21d89d7bbb73d61927","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class Snapshot_unmanage(extensions.ExtensionDescriptor):"},{"line_number":66,"context_line":"    \"\"\"Enable volume unmanage operation.\"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    name \u003d \"SnapshotUnmanage\""}],"source_content_type":"text/x-python","patch_set":42,"id":"bab921fb_80e2419e","line":65,"in_reply_to":"dac4157f_090cb939","updated":"2015-04-23 12:11:04.000000000","message":"Done","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"5089a52188a48fdece59aaae8f01fe1163898a7b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            self.volume_api.delete_snapshot(context, snapshot,"},{"line_number":56,"context_line":"                                            unmanage_only\u003dTrue)"},{"line_number":57,"context_line":"        except exception.SnapshotNotFound:"},{"line_number":58,"context_line":"            msg \u003d _(\"Snapshot: %s could not be found\") % id"},{"line_number":59,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":60,"context_line":"        except exception.InvalidSnapshot as ex:"},{"line_number":61,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dex.msg)"}],"source_content_type":"text/x-python","patch_set":59,"id":"3afb71cf_711dc672","line":58,"updated":"2015-06-05 15:31:27.000000000","message":"is the \u0027:\u0027 needed here?","commit_id":"e8be6ba074fee0cf4a00000e6a9d74635817016d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"65aa81643ac9a1d2bba8df6afa3bf93f36fac80d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    name \u003d \"SnapshotUnmanage\""},{"line_number":69,"context_line":"    alias \u003d \"os-snapshot-unmanage\""},{"line_number":70,"context_line":"    namespace \u003d (\u0027http://docs.openstack.org/snapshot/ext/snapshot-unmanage\u0027"},{"line_number":71,"context_line":"                 \u0027/api/v1.1\u0027)"},{"line_number":72,"context_line":"    updated \u003d \"2012-05-31T00:00:00+00:00\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def get_controller_extensions(self):"}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_9f92614a","line":71,"updated":"2015-07-27 15:54:28.000000000","message":"Why do you use v1.1 here?\nFor snapshot manage  there is: namespace \u003d \u0027http://docs.openstack.org/volume/ext/os-snapshot-manage/api/v1\u0027","commit_id":"84e8f1019e2120bef04395429e1c98c314da375d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"29d9a587219b8be5ad261f334547afde4f43022d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    name \u003d \"SnapshotUnmanage\""},{"line_number":69,"context_line":"    alias \u003d \"os-snapshot-unmanage\""},{"line_number":70,"context_line":"    namespace \u003d (\u0027http://docs.openstack.org/snapshot/ext/snapshot-unmanage\u0027"},{"line_number":71,"context_line":"                 \u0027/api/v1.1\u0027)"},{"line_number":72,"context_line":"    updated \u003d \"2012-05-31T00:00:00+00:00\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def get_controller_extensions(self):"}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_3d23005a","line":71,"in_reply_to":"3a50d1a3_9f92614a","updated":"2015-07-28 01:32:07.000000000","message":"Sorry for this, perhaps copied from volume-unmanage and forgot to change it.","commit_id":"84e8f1019e2120bef04395429e1c98c314da375d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a7be9e45be400343e680f3992778f251644d6bcd","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            self.volume_api.delete_snapshot(context, snapshot,"},{"line_number":56,"context_line":"                                            unmanage_only\u003dTrue)"},{"line_number":57,"context_line":"        except exception.SnapshotNotFound:"},{"line_number":58,"context_line":"            msg \u003d _(\"Snapshot: %s could not be found\") % id"},{"line_number":59,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":60,"context_line":"        except exception.InvalidSnapshot as ex:"},{"line_number":61,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dex.msg)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_56846a5c","line":58,"updated":"2015-07-29 06:11:08.000000000","message":"When this exception is caught, the exception message already has snapshot_id in it and says it is not found.  So you can just do this:\n\nexcept exception.SnapshotNotFound as ex:\n    raise exc.HTTPNotFound(explanation\u003dex.msg)","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e25605c47719e003c9f64cf6745bf6d679a5dc94","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            self.volume_api.delete_snapshot(context, snapshot,"},{"line_number":56,"context_line":"                                            unmanage_only\u003dTrue)"},{"line_number":57,"context_line":"        except exception.SnapshotNotFound:"},{"line_number":58,"context_line":"            msg \u003d _(\"Snapshot: %s could not be found\") % id"},{"line_number":59,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":60,"context_line":"        except exception.InvalidSnapshot as ex:"},{"line_number":61,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dex.msg)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_bcfcafb5","line":58,"in_reply_to":"3a50d1a3_56846a5c","updated":"2015-07-29 07:07:29.000000000","message":"Sure.","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"}],"cinder/tests/api/contrib/test_snapshot_manage.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"599d4b9dc644ade60a8a4e7586b4a7cd48a0815f","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def api_snapshot_manage(*args, **kwargs):"},{"line_number":37,"context_line":"    \"\"\"Replacement for cinder.volume.api.API.manage_existing_snapshot."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    Overrides cinder.volume.api.API.manage_existing_snapshot to return some"},{"line_number":40,"context_line":"    fake snapshot data structure."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_db2d73aa","line":37,"updated":"2015-03-10 15:37:22.000000000","message":"I don\u0027t think cinder.volume.api.API.manage_existing_snapshot should be completed replaced. Your test should still go through the API, but mock out functions that you can\u0027t really call there.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def api_snapshot_manage(*args, **kwargs):"},{"line_number":37,"context_line":"    \"\"\"Replacement for cinder.volume.api.API.manage_existing_snapshot."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    Overrides cinder.volume.api.API.manage_existing_snapshot to return some"},{"line_number":40,"context_line":"    fake snapshot data structure."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_202fe989","line":37,"in_reply_to":"9a80dd14_db2d73aa","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"599d4b9dc644ade60a8a4e7586b4a7cd48a0815f","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        \"\"\"Test correct failure when the ref is not specified.\"\"\""},{"line_number":118,"context_line":"        body \u003d {\u0027snapshot\u0027: {\u0027volume_id\u0027: \u0027fake_volume_id\u0027}}"},{"line_number":119,"context_line":"        res \u003d self._get_resp(body)"},{"line_number":120,"context_line":"        self.assertEqual(res.status_int, 400)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_db7f33aa","line":120,"updated":"2015-03-10 15:37:22.000000000","message":"There are quite a few exceptions thrown in the API. Please add a few assertRaises tests.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        \"\"\"Test correct failure when the ref is not specified.\"\"\""},{"line_number":118,"context_line":"        body \u003d {\u0027snapshot\u0027: {\u0027volume_id\u0027: \u0027fake_volume_id\u0027}}"},{"line_number":119,"context_line":"        res \u003d self._get_resp(body)"},{"line_number":120,"context_line":"        self.assertEqual(res.status_int, 400)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_404dbd71","line":120,"in_reply_to":"9a80dd14_db7f33aa","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"431aaaa4e9f66292cc5ccce25e7173ecfbb0f1e5","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # Check the db.service_get_by_host_and_topic was called with correct"},{"line_number":88,"context_line":"        # arguments."},{"line_number":89,"context_line":"        self.assertEqual(mock_db.call_count, 1)"},{"line_number":90,"context_line":"        args \u003d mock_db.call_args[0]"},{"line_number":91,"context_line":"        self.assertEqual(\u0027fake_host\u0027, args[1])"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_c4372de2","line":89,"updated":"2015-04-20 13:03:56.000000000","message":"Please update all of these assertEqual calls to be in the argument order (expected, actual).","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"580f870122682a654a0d67c65555c53aab283adf","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # Check the db.service_get_by_host_and_topic was called with correct"},{"line_number":88,"context_line":"        # arguments."},{"line_number":89,"context_line":"        self.assertEqual(mock_db.call_count, 1)"},{"line_number":90,"context_line":"        args \u003d mock_db.call_args[0]"},{"line_number":91,"context_line":"        self.assertEqual(\u0027fake_host\u0027, args[1])"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_c0c00b7f","line":89,"in_reply_to":"dac4157f_c4372de2","updated":"2015-04-22 02:23:13.000000000","message":"Done","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"}],"cinder/tests/api/contrib/test_snapshot_unmanage.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"945de29e6ff07e86c130f59a8311e53d0618cff6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    exception if the specified snapshot ID is not in our list."},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":"    if snp_id \u003d\u003d snapshot_id:"},{"line_number":71,"context_line":"        return  FakeSnapshotObject()"},{"line_number":72,"context_line":"    else:"},{"line_number":73,"context_line":"        raise exception.SnapshotNotFound(snapshot_id\u003dsnp_id)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_5b1fc85a","line":71,"updated":"2015-03-10 13:44:29.000000000","message":"You have an extra space after \"return\" and that is causing the pep8 error.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    exception if the specified snapshot ID is not in our list."},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":"    if snp_id \u003d\u003d snapshot_id:"},{"line_number":71,"context_line":"        return  FakeSnapshotObject()"},{"line_number":72,"context_line":"    else:"},{"line_number":73,"context_line":"        raise exception.SnapshotNotFound(snapshot_id\u003dsnp_id)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_46f43087","line":71,"in_reply_to":"9a80dd14_5b1fc85a","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"599d4b9dc644ade60a8a4e7586b4a7cd48a0815f","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        \"\"\"Return success for valid and unattached volume.\"\"\""},{"line_number":111,"context_line":"        res \u003d self._get_resp(snapshot_id)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.assertEqual(mock_db.call_count, 1)"},{"line_number":114,"context_line":"        self.assertEqual(len(mock_db.call_args[0]), 2, mock_db.call_args)"},{"line_number":115,"context_line":"        self.assertEqual(mock_db.call_args[0][1], \u0027fake_volume_id\u0027)"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_db01f3b0","line":113,"updated":"2015-03-10 15:37:22.000000000","message":"The order of the parameters should be expected, actual. This is reversed. Please fix other places as well.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        \"\"\"Return success for valid and unattached volume.\"\"\""},{"line_number":111,"context_line":"        res \u003d self._get_resp(snapshot_id)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.assertEqual(mock_db.call_count, 1)"},{"line_number":114,"context_line":"        self.assertEqual(len(mock_db.call_args[0]), 2, mock_db.call_args)"},{"line_number":115,"context_line":"        self.assertEqual(mock_db.call_args[0][1], \u0027fake_volume_id\u0027)"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_861c68c3","line":113,"in_reply_to":"9a80dd14_db01f3b0","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"84c87886979ea52ae09e1e0de5936d9698662f20","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    exception if the specified snapshot ID is not in our list."},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":"    if snp_id \u003d\u003d snapshot_id:"},{"line_number":71,"context_line":"        return FakeSnapshotObject()"},{"line_number":72,"context_line":"    else:"},{"line_number":73,"context_line":"        raise exception.SnapshotNotFound(snapshot_id\u003dsnp_id)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"bab921fb_be1d5a68","line":71,"updated":"2015-04-23 14:33:09.000000000","message":"Why not use fake_snapshot.fake_snapshot_obj?  Create a fake one (via the method), and fill-in the attributes you need, e.g. progress.","commit_id":"94b3fd0ec58cfe07c33da36dddf51e8b4e241d01"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b22d28fb642080caff02acaeb09668221b45059b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    exception if the specified snapshot ID is not in our list."},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":"    if snp_id \u003d\u003d snapshot_id:"},{"line_number":71,"context_line":"        return FakeSnapshotObject()"},{"line_number":72,"context_line":"    else:"},{"line_number":73,"context_line":"        raise exception.SnapshotNotFound(snapshot_id\u003dsnp_id)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"bab921fb_317dd76e","line":71,"in_reply_to":"bab921fb_be1d5a68","updated":"2015-04-24 04:14:21.000000000","message":"Sure,I will use it.","commit_id":"94b3fd0ec58cfe07c33da36dddf51e8b4e241d01"}],"cinder/tests/fake_snapshot.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"5ed3191248e6714bea4f24bd41f4b0e4372207b0","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \u0027display_description\u0027: \u0027fake_description\u0027,"},{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027snapshot_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027volume\u0027: fake_db_volume(**volume_update)"},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    for name, field in objects.Snapshot.fields.items():"}],"source_content_type":"text/x-python","patch_set":42,"id":"dac4157f_293f7d88","line":57,"updated":"2015-04-22 13:36:48.000000000","message":"Comma needed at the end - http://docs.openstack.org/developer/hacking/#dictionaries-lists\n\nAlso, volume is usually lazy-loaded.  Having a volume in the snapshot dict is not the right way to do it.  You should (in your test, not here), override the objects.Volume.get_by_id method to return the correct volume.","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"ae3727ac3f6665dbe892acb03e451d5be3ed6243","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \u0027display_description\u0027: \u0027fake_description\u0027,"},{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027snapshot_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027volume\u0027: fake_db_volume(**volume_update)"},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    for name, field in objects.Snapshot.fields.items():"}],"source_content_type":"text/x-python","patch_set":42,"id":"bab921fb_3e3b8aed","line":57,"in_reply_to":"bab921fb_00bbd173","updated":"2015-04-23 14:44:40.000000000","message":"This is because you put \u0027volume\u0027 in expected_attrs (in your patch here).  If you do not, you can have it lazy-loaded and just override the objects.Volume.get_by_id method to return the correct volume.","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1d2f5e153a0fd16c6e15df21d89d7bbb73d61927","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \u0027display_description\u0027: \u0027fake_description\u0027,"},{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027snapshot_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027volume\u0027: fake_db_volume(**volume_update)"},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    for name, field in objects.Snapshot.fields.items():"}],"source_content_type":"text/x-python","patch_set":42,"id":"bab921fb_00bbd173","line":57,"in_reply_to":"dac4157f_293f7d88","updated":"2015-04-23 12:11:04.000000000","message":"We need the volume to get the correct snapshot object in \u0027objects.Snapshot._from_db_object\u0027. In this function, need db_volume to create \u0027snapshot.volume\u0027:\n\n        if \u0027volume\u0027 in expected_attrs:\n            volume \u003d objects.Volume(context)\n            volume._from_db_object(context, volume, db_snapshot[\u0027volume\u0027])\n            snapshot.volume \u003d volume","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"}],"cinder/tests/test_volume.py":[{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"94a782d7d6f8957abff2152155887d295765289b","unresolved":false,"context_lines":[{"line_number":3931,"context_line":"            self.assertEqual(new_name, vol[\u0027name\u0027])"},{"line_number":3932,"context_line":""},{"line_number":3933,"context_line":"        #self.stubs.Set(self.volume.driver.vg, \u0027rename_volume\u0027,"},{"line_number":3934,"context_line":"        #               _rename_volume)"},{"line_number":3935,"context_line":"        with mock.patch.object(self.volume.driver.vg, \u0027rename_volume\u0027) as \\"},{"line_number":3936,"context_line":"                mock_rename_volume:"},{"line_number":3937,"context_line":"            mock_rename_volume.return_value \u003d _rename_volume"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_81beb7ac","line":3934,"updated":"2015-01-05 14:10:51.000000000","message":"Please remove this commented code.","commit_id":"72b7d5753fa3d35f16b7aeaad30c6bfbdadd51ad"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"736dbfce4ea7173cd524691339e31a12ab77318c","unresolved":false,"context_lines":[{"line_number":3931,"context_line":"            self.assertEqual(new_name, vol[\u0027name\u0027])"},{"line_number":3932,"context_line":""},{"line_number":3933,"context_line":"        #self.stubs.Set(self.volume.driver.vg, \u0027rename_volume\u0027,"},{"line_number":3934,"context_line":"        #               _rename_volume)"},{"line_number":3935,"context_line":"        with mock.patch.object(self.volume.driver.vg, \u0027rename_volume\u0027) as \\"},{"line_number":3936,"context_line":"                mock_rename_volume:"},{"line_number":3937,"context_line":"            mock_rename_volume.return_value \u003d _rename_volume"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_5802c70c","line":3934,"in_reply_to":"3a961159_81beb7ac","updated":"2015-01-07 06:00:10.000000000","message":"sure~","commit_id":"72b7d5753fa3d35f16b7aeaad30c6bfbdadd51ad"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":3980,"context_line":"        snp \u003d {\u0027name\u0027: \u0027test\u0027, \u0027id\u0027: 1, \u0027size\u0027: 0}"},{"line_number":3981,"context_line":""},{"line_number":3982,"context_line":"        def _rename_volume(old_name, new_name):"},{"line_number":3983,"context_line":"            self.assertEqual(old_name, ref[\u0027source-name\u0027])"},{"line_number":3984,"context_line":"            self.assertEqual(new_name, snp[\u0027name\u0027])"},{"line_number":3985,"context_line":""},{"line_number":3986,"context_line":"        with mock.patch.object(self.volume.driver.vg, \u0027rename_volume\u0027) as \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_faddece0","line":3983,"updated":"2015-02-06 07:01:21.000000000","message":"self.assertEqual(ref[\u0027source-name\u0027], old_name)","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":3980,"context_line":"        snp \u003d {\u0027name\u0027: \u0027test\u0027, \u0027id\u0027: 1, \u0027size\u0027: 0}"},{"line_number":3981,"context_line":""},{"line_number":3982,"context_line":"        def _rename_volume(old_name, new_name):"},{"line_number":3983,"context_line":"            self.assertEqual(old_name, ref[\u0027source-name\u0027])"},{"line_number":3984,"context_line":"            self.assertEqual(new_name, snp[\u0027name\u0027])"},{"line_number":3985,"context_line":""},{"line_number":3986,"context_line":"        with mock.patch.object(self.volume.driver.vg, \u0027rename_volume\u0027) as \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_8be1cd9c","line":3983,"in_reply_to":"da86d52c_faddece0","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":3981,"context_line":""},{"line_number":3982,"context_line":"        def _rename_volume(old_name, new_name):"},{"line_number":3983,"context_line":"            self.assertEqual(old_name, ref[\u0027source-name\u0027])"},{"line_number":3984,"context_line":"            self.assertEqual(new_name, snp[\u0027name\u0027])"},{"line_number":3985,"context_line":""},{"line_number":3986,"context_line":"        with mock.patch.object(self.volume.driver.vg, \u0027rename_volume\u0027) as \\"},{"line_number":3987,"context_line":"                mock_rename_volume:"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_3ae4e4aa","line":3984,"updated":"2015-02-06 07:01:21.000000000","message":"self.assertEqual(snp[\u0027name\u0027], new_name)","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":3981,"context_line":""},{"line_number":3982,"context_line":"        def _rename_volume(old_name, new_name):"},{"line_number":3983,"context_line":"            self.assertEqual(old_name, ref[\u0027source-name\u0027])"},{"line_number":3984,"context_line":"            self.assertEqual(new_name, snp[\u0027name\u0027])"},{"line_number":3985,"context_line":""},{"line_number":3986,"context_line":"        with mock.patch.object(self.volume.driver.vg, \u0027rename_volume\u0027) as \\"},{"line_number":3987,"context_line":"                mock_rename_volume:"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_abedb190","line":3984,"in_reply_to":"da86d52c_3ae4e4aa","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":3995,"context_line":"            self.assertIsNone(model_update)"},{"line_number":3996,"context_line":""},{"line_number":3997,"context_line":"    def test_lvm_manage_existing_snapshot_bad_ref(self):"},{"line_number":3998,"context_line":"        \"\"\"Error case where specified LV  snapshot doesn\u0027t exist."},{"line_number":3999,"context_line":""},{"line_number":4000,"context_line":"        This test case ensures that the correct exception is raised when"},{"line_number":4001,"context_line":"        the caller attempts to manage a volume that does not exist."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_3afb0448","line":3998,"updated":"2015-02-06 07:01:21.000000000","message":"remove extra white space between \u0027LV\u0027 and \u0027snapshot\u0027.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":3995,"context_line":"            self.assertIsNone(model_update)"},{"line_number":3996,"context_line":""},{"line_number":3997,"context_line":"    def test_lvm_manage_existing_snapshot_bad_ref(self):"},{"line_number":3998,"context_line":"        \"\"\"Error case where specified LV  snapshot doesn\u0027t exist."},{"line_number":3999,"context_line":""},{"line_number":4000,"context_line":"        This test case ensures that the correct exception is raised when"},{"line_number":4001,"context_line":"        the caller attempts to manage a volume that does not exist."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_cbf2e56e","line":3998,"in_reply_to":"da86d52c_3afb0448","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":3998,"context_line":"        \"\"\"Error case where specified LV  snapshot doesn\u0027t exist."},{"line_number":3999,"context_line":""},{"line_number":4000,"context_line":"        This test case ensures that the correct exception is raised when"},{"line_number":4001,"context_line":"        the caller attempts to manage a volume that does not exist."},{"line_number":4002,"context_line":"        \"\"\""},{"line_number":4003,"context_line":"        self._setup_stubs_for_manage_existing()"},{"line_number":4004,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_1a8720b6","line":4001,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":3998,"context_line":"        \"\"\"Error case where specified LV  snapshot doesn\u0027t exist."},{"line_number":3999,"context_line":""},{"line_number":4000,"context_line":"        This test case ensures that the correct exception is raised when"},{"line_number":4001,"context_line":"        the caller attempts to manage a volume that does not exist."},{"line_number":4002,"context_line":"        \"\"\""},{"line_number":4003,"context_line":"        self._setup_stubs_for_manage_existing()"},{"line_number":4004,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_ebe7a9aa","line":4001,"in_reply_to":"da86d52c_1a8720b6","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":4024,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"},{"line_number":4025,"context_line":"                          self.volume.driver.manage_existing_snapshot_get_size,"},{"line_number":4026,"context_line":"                          snp, ref)"},{"line_number":4027,"context_line":""},{"line_number":4028,"context_line":""},{"line_number":4029,"context_line":"class LVMVolumeDriverTestCase(DriverTestCase):"},{"line_number":4030,"context_line":"    \"\"\"Test case for VolumeDriver\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_7a4d7c99","line":4027,"updated":"2015-02-06 07:01:21.000000000","message":"Should add test for unmanage.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":4024,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"},{"line_number":4025,"context_line":"                          self.volume.driver.manage_existing_snapshot_get_size,"},{"line_number":4026,"context_line":"                          snp, ref)"},{"line_number":4027,"context_line":""},{"line_number":4028,"context_line":""},{"line_number":4029,"context_line":"class LVMVolumeDriverTestCase(DriverTestCase):"},{"line_number":4030,"context_line":"    \"\"\"Test case for VolumeDriver\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_0beddd8b","line":4027,"in_reply_to":"da86d52c_7a4d7c99","updated":"2015-02-09 04:02:31.000000000","message":"OK, add it asap","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"93ffccba904d382a16fcf2076bd064730ba1303c","unresolved":false,"context_lines":[{"line_number":4183,"context_line":"        self.assertRaises(exception.ManageExistingInvalidReference,"},{"line_number":4184,"context_line":"                          self.volume.driver.manage_existing_get_size,"},{"line_number":4185,"context_line":"                          vol, ref)"},{"line_number":4186,"context_line":""},{"line_number":4187,"context_line":"    def test_lvm_manage_existing_snapshot(self):"},{"line_number":4188,"context_line":"        \"\"\"Good pass on managing an LVM snapshot."},{"line_number":4189,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_c315b39c","line":4186,"updated":"2015-02-26 06:29:04.000000000","message":"Not appropriate to change this in your patch, but I wonder if we should consider a separate test_snapshot.py setup at some point in the near future.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"fdc1843f712420d5bbc96faf8731d30d61bcdfbd","unresolved":false,"context_lines":[{"line_number":4183,"context_line":"        self.assertRaises(exception.ManageExistingInvalidReference,"},{"line_number":4184,"context_line":"                          self.volume.driver.manage_existing_get_size,"},{"line_number":4185,"context_line":"                          vol, ref)"},{"line_number":4186,"context_line":""},{"line_number":4187,"context_line":"    def test_lvm_manage_existing_snapshot(self):"},{"line_number":4188,"context_line":"        \"\"\"Good pass on managing an LVM snapshot."},{"line_number":4189,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_b63d5491","line":4186,"in_reply_to":"ba7be1f8_c315b39c","updated":"2015-02-26 10:14:20.000000000","message":"Yes, maybe it\u0027s better to move those test cases for snapshot to it.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d526619604fa62dc558350c62488ef7c2c02a119","unresolved":false,"context_lines":[{"line_number":4208,"context_line":""},{"line_number":4209,"context_line":"            size \u003d self.volume.driver.manage_existing_snapshot_get_size(snp,"},{"line_number":4210,"context_line":"                                                                        ref)"},{"line_number":4211,"context_line":"            self.assertEqual(size, 2)"},{"line_number":4212,"context_line":"            model_update \u003d self.volume.driver.manage_existing_snapshot(snp,"},{"line_number":4213,"context_line":"                                                                       ref)"},{"line_number":4214,"context_line":"            self.assertIsNone(model_update)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_ea734713","line":4211,"updated":"2015-03-04 06:28:46.000000000","message":"self.assertEqual(2, size)","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"aa2a9216b2a761df2332b2460ab84a36b1602878","unresolved":false,"context_lines":[{"line_number":4208,"context_line":""},{"line_number":4209,"context_line":"            size \u003d self.volume.driver.manage_existing_snapshot_get_size(snp,"},{"line_number":4210,"context_line":"                                                                        ref)"},{"line_number":4211,"context_line":"            self.assertEqual(size, 2)"},{"line_number":4212,"context_line":"            model_update \u003d self.volume.driver.manage_existing_snapshot(snp,"},{"line_number":4213,"context_line":"                                                                       ref)"},{"line_number":4214,"context_line":"            self.assertIsNone(model_update)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_7c81dd49","line":4211,"in_reply_to":"9a80dd14_ea734713","updated":"2015-03-04 10:09:58.000000000","message":"Done","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"599d4b9dc644ade60a8a4e7586b4a7cd48a0815f","unresolved":false,"context_lines":[{"line_number":4695,"context_line":"        \"\"\""},{"line_number":4696,"context_line":"        self._setup_stubs_for_manage_existing()"},{"line_number":4697,"context_line":""},{"line_number":4698,"context_line":"        ref \u003d {\u0027source-name\u0027: \u0027fake_lv_bad_size\u0027}"},{"line_number":4699,"context_line":"        snp \u003d {\u0027name\u0027: \u0027test\u0027, \u0027id\u0027: 1, \u0027size\u0027: 2}"},{"line_number":4700,"context_line":""},{"line_number":4701,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_567b1a7b","line":4698,"updated":"2015-03-10 15:37:22.000000000","message":"Do you mean to set \u0027source-name\u0027 to \u0027fake_lv_bad_size\u0027?  Is this a test for the wrong size or wrong source name?","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":4695,"context_line":"        \"\"\""},{"line_number":4696,"context_line":"        self._setup_stubs_for_manage_existing()"},{"line_number":4697,"context_line":""},{"line_number":4698,"context_line":"        ref \u003d {\u0027source-name\u0027: \u0027fake_lv_bad_size\u0027}"},{"line_number":4699,"context_line":"        snp \u003d {\u0027name\u0027: \u0027test\u0027, \u0027id\u0027: 1, \u0027size\u0027: 2}"},{"line_number":4700,"context_line":""},{"line_number":4701,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_c94e7196","line":4698,"in_reply_to":"9a80dd14_567b1a7b","updated":"2015-03-12 03:21:50.000000000","message":"this a test for wrong size.The lv name is called \u0027fake_lv_bad_size\u0027 which was defined at \u0027_get_manage_existing_lvs(name)\u0027","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"}],"cinder/tests/test_volume_rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f89476aa3fc44080e8600265aabfedf18049e8b0","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                              rpc_method\u003d\u0027cast\u0027,"},{"line_number":198,"context_line":"                              snapshot\u003dself.fake_snapshot_obj,"},{"line_number":199,"context_line":"                              host\u003d\u0027fake_host\u0027,"},{"line_number":200,"context_line":"                              unmanage_only\u003dFalse)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def test_attach_volume_to_instance(self):"},{"line_number":203,"context_line":"        self._test_volume_api(\u0027attach_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_0f078d1d","line":200,"updated":"2015-03-05 09:58:50.000000000","message":"Can we do a test with unmanage_only\u003dTrue?","commit_id":"0404fa0c85eac32df61e2815a3cd6abc69564e19"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"4949d7e9f6cefaeb179c61e87ff83d8ac867f3e1","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                              rpc_method\u003d\u0027cast\u0027,"},{"line_number":198,"context_line":"                              snapshot\u003dself.fake_snapshot_obj,"},{"line_number":199,"context_line":"                              host\u003d\u0027fake_host\u0027,"},{"line_number":200,"context_line":"                              unmanage_only\u003dFalse)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def test_attach_volume_to_instance(self):"},{"line_number":203,"context_line":"        self._test_volume_api(\u0027attach_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_71dc3a13","line":200,"in_reply_to":"9a80dd14_0f078d1d","updated":"2015-03-06 03:12:10.000000000","message":"OK,will add test for it.","commit_id":"0404fa0c85eac32df61e2815a3cd6abc69564e19"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"599d4b9dc644ade60a8a4e7586b4a7cd48a0815f","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                              rpc_method\u003d\u0027cast\u0027,"},{"line_number":205,"context_line":"                              snapshot\u003dself.fake_snapshot_obj,"},{"line_number":206,"context_line":"                              host\u003d\u0027fake_host\u0027,"},{"line_number":207,"context_line":"                              unmanage_only\u003dTrue)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def test_attach_volume_to_instance(self):"},{"line_number":210,"context_line":"        self._test_volume_api(\u0027attach_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_d66aaa80","line":207,"updated":"2015-03-10 15:37:22.000000000","message":"Can you also add a test for manage_existing_snapshot?","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                              rpc_method\u003d\u0027cast\u0027,"},{"line_number":205,"context_line":"                              snapshot\u003dself.fake_snapshot_obj,"},{"line_number":206,"context_line":"                              host\u003d\u0027fake_host\u0027,"},{"line_number":207,"context_line":"                              unmanage_only\u003dTrue)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def test_attach_volume_to_instance(self):"},{"line_number":210,"context_line":"        self._test_volume_api(\u0027attach_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_2c12bb58","line":207,"in_reply_to":"9a80dd14_d66aaa80","updated":"2015-03-12 03:21:50.000000000","message":"Sure","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"}],"cinder/tests/unit/api/contrib/test_snapshot_manage.py":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def setUp(self):"},{"line_number":57,"context_line":"        super(SnapshotManageTest, self).setUp()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _get_resp(self, body):"},{"line_number":60,"context_line":"        \"\"\"Helper to execute an os-snapshot-manage API call.\"\"\""}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_fd322a5d","line":57,"updated":"2015-04-26 15:17:18.000000000","message":"Just calling parent\u0027s setUp is what this does by default.\ncan be removed","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"}],"cinder/tests/unit/api/contrib/test_snapshot_unmanage.py":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def setUp(self):"},{"line_number":75,"context_line":"        super(SnapshotUnmanageTest, self).setUp()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_resp(self, snapshot_id):"},{"line_number":78,"context_line":"        \"\"\"Helper to build an os-unmanage req for the specified snapshot_id.\"\"\""}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_dd37664b","line":75,"updated":"2015-04-26 15:17:18.000000000","message":"again","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"27ba69c6b210d69478d2a839c56ead7b7de473b0","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.assertEqual(2, len(mock_db.call_args[0]), mock_db.call_args)"},{"line_number":101,"context_line":"        self.assertEqual(\u0027fake_volume_id\u0027, mock_db.call_args[0][1])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # delete_snapshot is (context, snapshot, unmanage_only\u003dTrue)"},{"line_number":104,"context_line":"        self.assertEqual(1, mock_rpcapi.call_count)"},{"line_number":105,"context_line":"        self.assertEqual(3, len(mock_rpcapi.call_args[0]))"},{"line_number":106,"context_line":"        self.assertEqual(1, len(mock_rpcapi.call_args[1]))"}],"source_content_type":"text/x-python","patch_set":53,"id":"7a016987_544a9cad","line":103,"updated":"2015-05-15 13:29:13.000000000","message":"Not sure why this comment is here.","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d2fa86d18814686379e4beef0b390bbee15ea2ef","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.assertEqual(2, len(mock_db.call_args[0]), mock_db.call_args)"},{"line_number":101,"context_line":"        self.assertEqual(\u0027fake_volume_id\u0027, mock_db.call_args[0][1])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # delete_snapshot is (context, snapshot, unmanage_only\u003dTrue)"},{"line_number":104,"context_line":"        self.assertEqual(1, mock_rpcapi.call_count)"},{"line_number":105,"context_line":"        self.assertEqual(3, len(mock_rpcapi.call_args[0]))"},{"line_number":106,"context_line":"        self.assertEqual(1, len(mock_rpcapi.call_args[1]))"}],"source_content_type":"text/x-python","patch_set":53,"id":"7a016987_18caf96d","line":103,"in_reply_to":"7a016987_544a9cad","updated":"2015-05-17 03:39:57.000000000","message":"Done","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a7be9e45be400343e680f3992778f251644d6bcd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        self.assertEqual(1, mock_rpcapi.call_count)"},{"line_number":104,"context_line":"        self.assertEqual(3, len(mock_rpcapi.call_args[0]))"},{"line_number":105,"context_line":"        self.assertEqual(1, len(mock_rpcapi.call_args[1]))"},{"line_number":106,"context_line":"        self.assertEqual(True, mock_rpcapi.call_args[1][\u0027unmanage_only\u0027])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        self.assertEqual(202, res.status_int, res)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_5606aa86","line":106,"updated":"2015-07-29 06:11:08.000000000","message":"Use assertTrue","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e25605c47719e003c9f64cf6745bf6d679a5dc94","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        self.assertEqual(1, mock_rpcapi.call_count)"},{"line_number":104,"context_line":"        self.assertEqual(3, len(mock_rpcapi.call_args[0]))"},{"line_number":105,"context_line":"        self.assertEqual(1, len(mock_rpcapi.call_args[1]))"},{"line_number":106,"context_line":"        self.assertEqual(True, mock_rpcapi.call_args[1][\u0027unmanage_only\u0027])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        self.assertEqual(202, res.status_int, res)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_9c4773bb","line":106,"in_reply_to":"3a50d1a3_5606aa86","updated":"2015-07-29 07:07:29.000000000","message":"Done","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"}],"cinder/tests/unit/fake_snapshot.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"84c87886979ea52ae09e1e0de5936d9698662f20","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \u0027display_description\u0027: \u0027fake_description\u0027,"},{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027snapshot_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027volume\u0027: fake_db_volume(**volume_update),"},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    for name, field in objects.Snapshot.fields.items():"}],"source_content_type":"text/x-python","patch_set":44,"id":"bab921fb_5e875e61","line":57,"updated":"2015-04-23 14:33:09.000000000","message":"I still do not believe this is the right place to put this, see my previous comment.  You are changing how other tests are populating volumes because it is no longer lazy-loaded.  Again, it might be better to change your specific test cases for manage/unmanage, grab the fake_db_snapshot, and update it with the volume, in your test case, instead of here.","commit_id":"94b3fd0ec58cfe07c33da36dddf51e8b4e241d01"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b22d28fb642080caff02acaeb09668221b45059b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \u0027display_description\u0027: \u0027fake_description\u0027,"},{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027snapshot_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027volume\u0027: fake_db_volume(**volume_update),"},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    for name, field in objects.Snapshot.fields.items():"}],"source_content_type":"text/x-python","patch_set":44,"id":"bab921fb_7138efa0","line":57,"in_reply_to":"bab921fb_5e875e61","updated":"2015-04-24 04:14:21.000000000","message":"Mmm, I will check the tests again. Thanks","commit_id":"94b3fd0ec58cfe07c33da36dddf51e8b4e241d01"}],"cinder/tests/unit/test_volume_rpcapi.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"84c87886979ea52ae09e1e0de5936d9698662f20","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027volume_size\u0027: 0,"},{"line_number":53,"context_line":"            \u0027display_name\u0027: \u0027fake_name\u0027,"},{"line_number":54,"context_line":"            \u0027display_description\u0027: \u0027fake_description\u0027,"},{"line_number":55,"context_line":"            \u0027expected_attrs\u0027: [\u0027volume\u0027]}"},{"line_number":56,"context_line":"        snapshot \u003d db.snapshot_create(self.context, snpshot)"},{"line_number":57,"context_line":"        self.fake_volume \u003d jsonutils.to_primitive(volume)"},{"line_number":58,"context_line":"        self.fake_volume_metadata \u003d volume[\"volume_metadata\"]"}],"source_content_type":"text/x-python","patch_set":44,"id":"bab921fb_1e468623","line":55,"updated":"2015-04-23 14:33:09.000000000","message":"Not the right way to do this, since this is not how it normally works.  It is better to extend this dict in your unit test and not have it affect ALL tests.","commit_id":"94b3fd0ec58cfe07c33da36dddf51e8b4e241d01"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"b22d28fb642080caff02acaeb09668221b45059b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027volume_size\u0027: 0,"},{"line_number":53,"context_line":"            \u0027display_name\u0027: \u0027fake_name\u0027,"},{"line_number":54,"context_line":"            \u0027display_description\u0027: \u0027fake_description\u0027,"},{"line_number":55,"context_line":"            \u0027expected_attrs\u0027: [\u0027volume\u0027]}"},{"line_number":56,"context_line":"        snapshot \u003d db.snapshot_create(self.context, snpshot)"},{"line_number":57,"context_line":"        self.fake_volume \u003d jsonutils.to_primitive(volume)"},{"line_number":58,"context_line":"        self.fake_volume_metadata \u003d volume[\"volume_metadata\"]"}],"source_content_type":"text/x-python","patch_set":44,"id":"bab921fb_d1c69b48","line":55,"in_reply_to":"bab921fb_1e468623","updated":"2015-04-24 04:14:21.000000000","message":"Ok I will fix it.","commit_id":"94b3fd0ec58cfe07c33da36dddf51e8b4e241d01"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9da2a4c4a99ba96fa7bd14b80704d6837c2d42ba","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            \u0027display_name\u0027: \u0027fake_name\u0027,"},{"line_number":330,"context_line":"            \u0027display_description\u0027: \u0027fake_description\u0027,"},{"line_number":331,"context_line":"            \u0027volume\u0027: fake_snapshot.fake_db_volume(**volume_update),"},{"line_number":332,"context_line":"            \u0027expected_attrs\u0027: [\u0027volume\u0027]}"},{"line_number":333,"context_line":"        my_fake_snapshot_obj \u003d fake_snapshot.fake_snapshot_obj(self.context,"},{"line_number":334,"context_line":"                                                               **snpshot)"},{"line_number":335,"context_line":"        self._test_volume_api(\u0027manage_existing_snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_bdfa7273","line":332,"updated":"2015-04-26 14:58:37.000000000","message":"Dictionaries over 80 characters should have a trailing comma. I don\u0027t think this is a big deal, and I just mention it in case you do another update. There are plenty of existing places where this guideline is not being followed, so I am not concerned if this patch doesn\u0027t address it.\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e856cab0bfaf3b4204e78dbf7ee166b50cc3f64d","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            \u0027display_name\u0027: \u0027fake_name\u0027,"},{"line_number":330,"context_line":"            \u0027display_description\u0027: \u0027fake_description\u0027,"},{"line_number":331,"context_line":"            \u0027volume\u0027: fake_snapshot.fake_db_volume(**volume_update),"},{"line_number":332,"context_line":"            \u0027expected_attrs\u0027: [\u0027volume\u0027], }"},{"line_number":333,"context_line":"        my_fake_snapshot_obj \u003d fake_snapshot.fake_snapshot_obj(self.context,"},{"line_number":334,"context_line":"                                                               **snpshot)"},{"line_number":335,"context_line":"        self._test_volume_api(\u0027manage_existing_snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":51,"id":"9af37de9_c3b3b609","line":332,"updated":"2015-05-10 12:46:00.000000000","message":"If you do another update, please put the closing } on the next line. I think the reasoning for the trailing comma guideline is that if the dict is added to in future patches this line wouldn\u0027t be flagged as changed because you don\u0027t need to add anything to accommodate the new line.\n\nI wouldn\u0027t do another update just for this though.","commit_id":"0206b9a65cdeb53ec9872925de2a1d994ecb7e5d"}],"cinder/volume/api.py":[{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"94a782d7d6f8957abff2152155887d295765289b","unresolved":false,"context_lines":[{"line_number":1278,"context_line":"                elevated, host, CONF.volume_topic)"},{"line_number":1279,"context_line":"        except exception.ServiceNotFound:"},{"line_number":1280,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1281,"context_line":"                LOG.error(_(\u0027Unable to find service for given host.\u0027))"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":"        # Call the scheduler to ensure that the host exists and that it can"},{"line_number":1284,"context_line":"        # accept the volume"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_8417a544","line":1281,"updated":"2015-01-05 14:10:51.000000000","message":"This should be LOG.error(_LE(\u003cError Message\u003e)) and also in below code for LOG.info use _LI.\n\nPlease read http://docs.openstack.org/developer/oslo.i18n/guidelines.html","commit_id":"72b7d5753fa3d35f16b7aeaad30c6bfbdadd51ad"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"736dbfce4ea7173cd524691339e31a12ab77318c","unresolved":false,"context_lines":[{"line_number":1278,"context_line":"                elevated, host, CONF.volume_topic)"},{"line_number":1279,"context_line":"        except exception.ServiceNotFound:"},{"line_number":1280,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1281,"context_line":"                LOG.error(_(\u0027Unable to find service for given host.\u0027))"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":"        # Call the scheduler to ensure that the host exists and that it can"},{"line_number":1284,"context_line":"        # accept the volume"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_db1cf168","line":1281,"in_reply_to":"3a961159_8417a544","updated":"2015-01-07 06:00:10.000000000","message":"OK.will fix it.","commit_id":"72b7d5753fa3d35f16b7aeaad30c6bfbdadd51ad"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                                                   force\u003dFalse,"},{"line_number":1290,"context_line":"                                                   metadata\u003dmetadata,"},{"line_number":1291,"context_line":"                                                   cgsnapshot_id\u003dNone)"},{"line_number":1292,"context_line":"        LOG.info(_LI(\"[2014-09-09] begin to send\""},{"line_number":1293,"context_line":"                     \" manage_existing_snapshot rpc\"))"},{"line_number":1294,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(ctxt\u003dcontext,"},{"line_number":1295,"context_line":"                                                    volume\u003dvolume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_e311fb53","line":1292,"updated":"2015-01-15 20:28:16.000000000","message":"What is \u0027[2014-09-09]\u0027?","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"7bf4ceafac7d992d20ffebffbf9fc96b72796ffa","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                                                   force\u003dFalse,"},{"line_number":1290,"context_line":"                                                   metadata\u003dmetadata,"},{"line_number":1291,"context_line":"                                                   cgsnapshot_id\u003dNone)"},{"line_number":1292,"context_line":"        LOG.info(_LI(\"[2014-09-09] begin to send\""},{"line_number":1293,"context_line":"                     \" manage_existing_snapshot rpc\"))"},{"line_number":1294,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(ctxt\u003dcontext,"},{"line_number":1295,"context_line":"                                                    volume\u003dvolume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_202a077e","line":1292,"in_reply_to":"3a961159_e311fb53","updated":"2015-01-16 09:15:04.000000000","message":"sorry it\u0027s test code. Will delete it.","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":1323,"context_line":"                                                   force\u003dFalse,"},{"line_number":1324,"context_line":"                                                   metadata\u003dmetadata,"},{"line_number":1325,"context_line":"                                                   cgsnapshot_id\u003dNone)"},{"line_number":1326,"context_line":"        LOG.info(_LI(\"Begin to send manage_existing_snapshot rpc\"))"},{"line_number":1327,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(ctxt\u003dcontext,"},{"line_number":1328,"context_line":"                                                    volume\u003dvolume,"},{"line_number":1329,"context_line":"                                                    snapshot\u003dsnapshot_item,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_71b3ec4c","line":1326,"updated":"2015-02-06 01:30:47.000000000","message":"This seems like a LOG.debug message.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":1323,"context_line":"                                                   force\u003dFalse,"},{"line_number":1324,"context_line":"                                                   metadata\u003dmetadata,"},{"line_number":1325,"context_line":"                                                   cgsnapshot_id\u003dNone)"},{"line_number":1326,"context_line":"        LOG.info(_LI(\"Begin to send manage_existing_snapshot rpc\"))"},{"line_number":1327,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(ctxt\u003dcontext,"},{"line_number":1328,"context_line":"                                                    volume\u003dvolume,"},{"line_number":1329,"context_line":"                                                    snapshot\u003dsnapshot_item,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_0ba4fd55","line":1326,"in_reply_to":"da86d52c_71b3ec4c","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":1328,"context_line":"                                                    volume\u003dvolume,"},{"line_number":1329,"context_line":"                                                    snapshot\u003dsnapshot_item,"},{"line_number":1330,"context_line":"                                                    ref\u003dref)"},{"line_number":1331,"context_line":"        LOG.info(_LI(\"End to send manage_existing_snapshot rpc\"))"},{"line_number":1332,"context_line":"        return snapshot_item"},{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_91d3005f","line":1331,"updated":"2015-02-06 01:30:47.000000000","message":"Also seems like debug.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":1328,"context_line":"                                                    volume\u003dvolume,"},{"line_number":1329,"context_line":"                                                    snapshot\u003dsnapshot_item,"},{"line_number":1330,"context_line":"                                                    ref\u003dref)"},{"line_number":1331,"context_line":"        LOG.info(_LI(\"End to send manage_existing_snapshot rpc\"))"},{"line_number":1332,"context_line":"        return snapshot_item"},{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_2b88e1c5","line":1331,"in_reply_to":"da86d52c_91d3005f","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":1303,"context_line":"                                              request_spec\u003drequest_spec)"},{"line_number":1304,"context_line":"        return volume"},{"line_number":1305,"context_line":""},{"line_number":1306,"context_line":"    def manage_existing_snapshot(self, context, host, ref, volume,"},{"line_number":1307,"context_line":"                                 name\u003dNone, description\u003dNone,"},{"line_number":1308,"context_line":"                                 metadata\u003dNone):"},{"line_number":1309,"context_line":"        elevated \u003d context.elevated()"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_fce81118","line":1306,"updated":"2015-02-17 06:28:44.000000000","message":"Please see my comments regarding \u0027host\u0027 in the other file.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":1303,"context_line":"                                              request_spec\u003drequest_spec)"},{"line_number":1304,"context_line":"        return volume"},{"line_number":1305,"context_line":""},{"line_number":1306,"context_line":"    def manage_existing_snapshot(self, context, host, ref, volume,"},{"line_number":1307,"context_line":"                                 name\u003dNone, description\u003dNone,"},{"line_number":1308,"context_line":"                                 metadata\u003dNone):"},{"line_number":1309,"context_line":"        elevated \u003d context.elevated()"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_cef99381","line":1306,"in_reply_to":"da86d52c_fce81118","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"                                                   description\u003ddescription,"},{"line_number":1323,"context_line":"                                                   force\u003dFalse,"},{"line_number":1324,"context_line":"                                                   metadata\u003dmetadata,"},{"line_number":1325,"context_line":"                                                   cgsnapshot_id\u003dNone)"},{"line_number":1326,"context_line":"        LOG.debug(\"Begin to send manage_existing_snapshot rpc\")"},{"line_number":1327,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(ctxt\u003dcontext,"},{"line_number":1328,"context_line":"                                                    volume\u003dvolume,"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_7c7b4129","line":1325,"updated":"2015-02-17 06:28:44.000000000","message":"Arguments in create_snapshot_in_db() are all required. Please pass them in without using the assignment.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"                                                   description\u003ddescription,"},{"line_number":1323,"context_line":"                                                   force\u003dFalse,"},{"line_number":1324,"context_line":"                                                   metadata\u003dmetadata,"},{"line_number":1325,"context_line":"                                                   cgsnapshot_id\u003dNone)"},{"line_number":1326,"context_line":"        LOG.debug(\"Begin to send manage_existing_snapshot rpc\")"},{"line_number":1327,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(ctxt\u003dcontext,"},{"line_number":1328,"context_line":"                                                    volume\u003dvolume,"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_4e14c39f","line":1325,"in_reply_to":"da86d52c_7c7b4129","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(ctxt\u003dcontext,"},{"line_number":1328,"context_line":"                                                    volume\u003dvolume,"},{"line_number":1329,"context_line":"                                                    snapshot\u003dsnapshot_item,"},{"line_number":1330,"context_line":"                                                    ref\u003dref)"},{"line_number":1331,"context_line":"        LOG.debug(\"End to send manage_existing_snapshot rpc\")"},{"line_number":1332,"context_line":"        return snapshot_item"},{"line_number":1333,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_7c942144","line":1330,"updated":"2015-02-17 06:28:44.000000000","message":"Arguments in manage_existing_snapshot in volume/rpcapi.py are all required. Please pass them in without using the assignment.\n\ndef manage_existing_snapshot(self, ctxt, volume, snapshot, ref)","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(ctxt\u003dcontext,"},{"line_number":1328,"context_line":"                                                    volume\u003dvolume,"},{"line_number":1329,"context_line":"                                                    snapshot\u003dsnapshot_item,"},{"line_number":1330,"context_line":"                                                    ref\u003dref)"},{"line_number":1331,"context_line":"        LOG.debug(\"End to send manage_existing_snapshot rpc\")"},{"line_number":1332,"context_line":"        return snapshot_item"},{"line_number":1333,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_ee24970e","line":1330,"in_reply_to":"da86d52c_7c942144","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d526619604fa62dc558350c62488ef7c2c02a119","unresolved":false,"context_lines":[{"line_number":1341,"context_line":"                LOG.error(_LE(\u0027Unable to find service for given host.\u0027))"},{"line_number":1342,"context_line":""},{"line_number":1343,"context_line":"        # Call the scheduler to ensure that the host exists and that it can"},{"line_number":1344,"context_line":"        # accept the volume"},{"line_number":1345,"context_line":"        snapshot_item \u003d self.create_snapshot_in_db(context, volume, name,"},{"line_number":1346,"context_line":"                                                   description, False,"},{"line_number":1347,"context_line":"                                                   metadata, None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_0ac7bb13","line":1344,"updated":"2015-03-04 06:28:46.000000000","message":"I don\u0027t think you need to call the scheduler for the snapshot.  This comment should be removed or changed.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"aa2a9216b2a761df2332b2460ab84a36b1602878","unresolved":false,"context_lines":[{"line_number":1341,"context_line":"                LOG.error(_LE(\u0027Unable to find service for given host.\u0027))"},{"line_number":1342,"context_line":""},{"line_number":1343,"context_line":"        # Call the scheduler to ensure that the host exists and that it can"},{"line_number":1344,"context_line":"        # accept the volume"},{"line_number":1345,"context_line":"        snapshot_item \u003d self.create_snapshot_in_db(context, volume, name,"},{"line_number":1346,"context_line":"                                                   description, False,"},{"line_number":1347,"context_line":"                                                   metadata, None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_3c0a05d3","line":1344,"in_reply_to":"9a80dd14_0ac7bb13","updated":"2015-03-04 10:09:58.000000000","message":"Done","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d526619604fa62dc558350c62488ef7c2c02a119","unresolved":false,"context_lines":[{"line_number":1348,"context_line":"        LOG.debug(\"Begin to send manage_existing_snapshot rpc\")"},{"line_number":1349,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(context, volume,"},{"line_number":1350,"context_line":"                                                    snapshot_item, ref)"},{"line_number":1351,"context_line":"        LOG.debug(\"End to send manage_existing_snapshot rpc\")"},{"line_number":1352,"context_line":"        return snapshot_item"},{"line_number":1353,"context_line":""},{"line_number":1354,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_2af39f74","line":1351,"updated":"2015-03-04 06:28:46.000000000","message":"These two begin and end debug messages are not necessary.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"aa2a9216b2a761df2332b2460ab84a36b1602878","unresolved":false,"context_lines":[{"line_number":1348,"context_line":"        LOG.debug(\"Begin to send manage_existing_snapshot rpc\")"},{"line_number":1349,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(context, volume,"},{"line_number":1350,"context_line":"                                                    snapshot_item, ref)"},{"line_number":1351,"context_line":"        LOG.debug(\"End to send manage_existing_snapshot rpc\")"},{"line_number":1352,"context_line":"        return snapshot_item"},{"line_number":1353,"context_line":""},{"line_number":1354,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_7c147df5","line":1351,"in_reply_to":"9a80dd14_2af39f74","updated":"2015-03-04 10:09:58.000000000","message":"Done","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"1a44f674ae950961db2b741621abde3b69e07c81","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            overs \u003d e.kwargs[\u0027overs\u0027]"},{"line_number":747,"context_line":"            usages \u003d e.kwargs[\u0027usages\u0027]"},{"line_number":748,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"},{"line_number":749,"context_line":"            volume_utils.process_reserve_over_quota(context, overs, usages,"},{"line_number":750,"context_line":"                                                    quotas, volume[\u0027size\u0027])"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        return reservations"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_9faafed2","line":749,"updated":"2015-03-04 13:03:32.000000000","message":"It looks like this is an unrelated change. Please revert.","commit_id":"1f5f7a93deb81fe519134f17fed6f3eb0545a231"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a6b46db1c9459f5dbf9c764bea2c844baf63190","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            overs \u003d e.kwargs[\u0027overs\u0027]"},{"line_number":747,"context_line":"            usages \u003d e.kwargs[\u0027usages\u0027]"},{"line_number":748,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"},{"line_number":749,"context_line":"            volume_utils.process_reserve_over_quota(context, overs, usages,"},{"line_number":750,"context_line":"                                                    quotas, volume[\u0027size\u0027])"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        return reservations"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_12f252d2","line":749,"in_reply_to":"9a80dd14_9faafed2","updated":"2015-03-05 10:00:21.000000000","message":"This is reused in manage_existing_snapshot flow.","commit_id":"1f5f7a93deb81fe519134f17fed6f3eb0545a231"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"1a44f674ae950961db2b741621abde3b69e07c81","unresolved":false,"context_lines":[{"line_number":781,"context_line":""},{"line_number":782,"context_line":"    @wrap_check_policy"},{"line_number":783,"context_line":"    def delete_snapshot(self, context, snapshot, force\u003dFalse,"},{"line_number":784,"context_line":"                        unmanage_only\u003dFalse):"},{"line_number":785,"context_line":"        if not force and snapshot[\u0027status\u0027] not in [\"available\", \"error\"]:"},{"line_number":786,"context_line":"            LOG.error(_LE(\u0027Unable to delete snapshot: %(snap_id)s, \u0027"},{"line_number":787,"context_line":"                          \u0027due to invalid status. \u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_7ff38a0a","line":784,"updated":"2015-03-04 13:03:32.000000000","message":"Where are we using this new flag?","commit_id":"1f5f7a93deb81fe519134f17fed6f3eb0545a231"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f89476aa3fc44080e8600265aabfedf18049e8b0","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            overs \u003d e.kwargs[\u0027overs\u0027]"},{"line_number":747,"context_line":"            usages \u003d e.kwargs[\u0027usages\u0027]"},{"line_number":748,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"},{"line_number":749,"context_line":"            volume_utils.process_reserve_over_quota(context, overs, usages,"},{"line_number":750,"context_line":"                                                    quotas, volume[\u0027size\u0027])"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        return reservations"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_b27266ab","line":749,"updated":"2015-03-05 09:58:50.000000000","message":"Answering one of the previous comments - this is reused in manage_existing_snapshot flow.","commit_id":"0404fa0c85eac32df61e2815a3cd6abc69564e19"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"8cc24a54b1f57d3e32e75bd572760d0a51db6cc5","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            overs \u003d e.kwargs[\u0027overs\u0027]"},{"line_number":747,"context_line":"            usages \u003d e.kwargs[\u0027usages\u0027]"},{"line_number":748,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"},{"line_number":749,"context_line":"            volume_utils.process_reserve_over_quota(context, overs, usages,"},{"line_number":750,"context_line":"                                                    quotas, volume[\u0027size\u0027])"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        return reservations"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_7aec05f4","line":749,"in_reply_to":"9a80dd14_b27266ab","updated":"2015-03-09 00:51:37.000000000","message":"Sorry I don\u0027t quite understand your question. I refactor this part to make it more common, and use it in api and manage_existing_snapshot both.","commit_id":"0404fa0c85eac32df61e2815a3cd6abc69564e19"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f89476aa3fc44080e8600265aabfedf18049e8b0","unresolved":false,"context_lines":[{"line_number":781,"context_line":""},{"line_number":782,"context_line":"    @wrap_check_policy"},{"line_number":783,"context_line":"    def delete_snapshot(self, context, snapshot, force\u003dFalse,"},{"line_number":784,"context_line":"                        unmanage_only\u003dFalse):"},{"line_number":785,"context_line":"        if not force and snapshot[\u0027status\u0027] not in [\"available\", \"error\"]:"},{"line_number":786,"context_line":"            LOG.error(_LE(\u0027Unable to delete snapshot: %(snap_id)s, \u0027"},{"line_number":787,"context_line":"                          \u0027due to invalid status. \u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_2ffff1ab","line":784,"updated":"2015-03-05 09:58:50.000000000","message":"I\u0027m probably missing something, but why isn\u0027t this parameter used in the method?","commit_id":"0404fa0c85eac32df61e2815a3cd6abc69564e19"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"4949d7e9f6cefaeb179c61e87ff83d8ac867f3e1","unresolved":false,"context_lines":[{"line_number":781,"context_line":""},{"line_number":782,"context_line":"    @wrap_check_policy"},{"line_number":783,"context_line":"    def delete_snapshot(self, context, snapshot, force\u003dFalse,"},{"line_number":784,"context_line":"                        unmanage_only\u003dFalse):"},{"line_number":785,"context_line":"        if not force and snapshot[\u0027status\u0027] not in [\"available\", \"error\"]:"},{"line_number":786,"context_line":"            LOG.error(_LE(\u0027Unable to delete snapshot: %(snap_id)s, \u0027"},{"line_number":787,"context_line":"                          \u0027due to invalid status. \u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_71c51a3b","line":784,"in_reply_to":"9a80dd14_2ffff1ab","updated":"2015-03-06 03:12:10.000000000","message":"Thanks, it\u0027s my fault. Forgot to add it after rebase.","commit_id":"0404fa0c85eac32df61e2815a3cd6abc69564e19"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"532169e56c361e06bd6312cac250d62cd06b1751","unresolved":false,"context_lines":[{"line_number":1338,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1339,"context_line":"                LOG.error(_LE(\u0027Unable to find service for given host.\u0027))"},{"line_number":1340,"context_line":""},{"line_number":1341,"context_line":"        snapshot_item \u003d self.create_snapshot_in_db(context, volume, name,"},{"line_number":1342,"context_line":"                                                   description, False,"},{"line_number":1343,"context_line":"                                                   metadata, None)"},{"line_number":1344,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(context, volume,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_d3d637c3","line":1341,"updated":"2015-03-10 17:15:12.000000000","message":"This is a snapshot object, just confusing with the variable name.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":1338,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1339,"context_line":"                LOG.error(_LE(\u0027Unable to find service for given host.\u0027))"},{"line_number":1340,"context_line":""},{"line_number":1341,"context_line":"        snapshot_item \u003d self.create_snapshot_in_db(context, volume, name,"},{"line_number":1342,"context_line":"                                                   description, False,"},{"line_number":1343,"context_line":"                                                   metadata, None)"},{"line_number":1344,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(context, volume,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_cae62c16","line":1341,"in_reply_to":"9a80dd14_d3d637c3","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"532169e56c361e06bd6312cac250d62cd06b1751","unresolved":false,"context_lines":[{"line_number":1341,"context_line":"        snapshot_item \u003d self.create_snapshot_in_db(context, volume, name,"},{"line_number":1342,"context_line":"                                                   description, False,"},{"line_number":1343,"context_line":"                                                   metadata, None)"},{"line_number":1344,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(context, volume,"},{"line_number":1345,"context_line":"                                                    snapshot_item, ref)"},{"line_number":1346,"context_line":"        return snapshot_item"},{"line_number":1347,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_69c91cac","line":1344,"updated":"2015-03-10 17:15:12.000000000","message":"You do not necessarily have to pass the volume across rpc because the snapshot object will have the volume embedded in it (i.e. snapshot.volume).","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":1341,"context_line":"        snapshot_item \u003d self.create_snapshot_in_db(context, volume, name,"},{"line_number":1342,"context_line":"                                                   description, False,"},{"line_number":1343,"context_line":"                                                   metadata, None)"},{"line_number":1344,"context_line":"        self.volume_rpcapi.manage_existing_snapshot(context, volume,"},{"line_number":1345,"context_line":"                                                    snapshot_item, ref)"},{"line_number":1346,"context_line":"        return snapshot_item"},{"line_number":1347,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_aae018fb","line":1344,"in_reply_to":"9a80dd14_69c91cac","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7c7bcb249c297b34cbbce4602ae2f39b820730dc","unresolved":false,"context_lines":[{"line_number":1351,"context_line":"                elevated, host, CONF.volume_topic)"},{"line_number":1352,"context_line":"        except exception.ServiceNotFound:"},{"line_number":1353,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1354,"context_line":"                LOG.error(_LE(\u0027Unable to find service for given host.\u0027))"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"        snapshot_object \u003d self.create_snapshot_in_db(context, volume, name,"},{"line_number":1357,"context_line":"                                                     description, False,"}],"source_content_type":"text/x-python","patch_set":39,"id":"fabf19d9_8e772bd4","line":1354,"updated":"2015-04-18 13:57:38.000000000","message":"Please, specify host and service in a log message","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d69369c8b831c9c5b4fb4600bc23b961bfdccf72","unresolved":false,"context_lines":[{"line_number":1351,"context_line":"                elevated, host, CONF.volume_topic)"},{"line_number":1352,"context_line":"        except exception.ServiceNotFound:"},{"line_number":1353,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1354,"context_line":"                LOG.error(_LE(\u0027Unable to find service for given host.\u0027))"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"        snapshot_object \u003d self.create_snapshot_in_db(context, volume, name,"},{"line_number":1357,"context_line":"                                                     description, False,"}],"source_content_type":"text/x-python","patch_set":39,"id":"dac4157f_6aaa7572","line":1354,"in_reply_to":"fabf19d9_8e772bd4","updated":"2015-04-20 09:54:32.000000000","message":"Done","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"431aaaa4e9f66292cc5ccce25e7173ecfbb0f1e5","unresolved":false,"context_lines":[{"line_number":1355,"context_line":"                elevated, host, CONF.volume_topic)"},{"line_number":1356,"context_line":"        except exception.ServiceNotFound:"},{"line_number":1357,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1358,"context_line":"                msg \u003d _LE(\u0027Unable to find service: %(service)s for given \u0027"},{"line_number":1359,"context_line":"                          \u0027host: %(host)s.\u0027) % {\u0027service\u0027: CONF.volume_topic,"},{"line_number":1360,"context_line":"                                                \u0027host\u0027: host}"},{"line_number":1361,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_245829fa","line":1358,"updated":"2015-04-20 13:03:56.000000000","message":"Since msg is only used in the LOG.error call, can you get rid of the two step process and just put the msg string directly in the log call? Then if you do that, please change % to , so the formatting arguments are passed in to the logger to do the formatting.","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"580f870122682a654a0d67c65555c53aab283adf","unresolved":false,"context_lines":[{"line_number":1355,"context_line":"                elevated, host, CONF.volume_topic)"},{"line_number":1356,"context_line":"        except exception.ServiceNotFound:"},{"line_number":1357,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1358,"context_line":"                msg \u003d _LE(\u0027Unable to find service: %(service)s for given \u0027"},{"line_number":1359,"context_line":"                          \u0027host: %(host)s.\u0027) % {\u0027service\u0027: CONF.volume_topic,"},{"line_number":1360,"context_line":"                                                \u0027host\u0027: host}"},{"line_number":1361,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_20ffc768","line":1358,"in_reply_to":"dac4157f_245829fa","updated":"2015-04-22 02:23:13.000000000","message":"Done","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"5ed3191248e6714bea4f24bd41f4b0e4372207b0","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        host \u003d volume_utils.extract_host(volume[\u0027host\u0027])"},{"line_number":1437,"context_line":"        try:"},{"line_number":1438,"context_line":"            self.db.service_get_by_host_and_topic("},{"line_number":1439,"context_line":"                elevated, host, CONF.volume_topic)"},{"line_number":1440,"context_line":"        except exception.ServiceNotFound:"},{"line_number":1441,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1442,"context_line":"                LOG.error(_LE(\u0027Unable to find service: %(service)s for \u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"dac4157f_a99dcd67","line":1439,"updated":"2015-04-22 13:36:48.000000000","message":"Since elevated is only used here, why not use call it directly - context.elevated()","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1d2f5e153a0fd16c6e15df21d89d7bbb73d61927","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        host \u003d volume_utils.extract_host(volume[\u0027host\u0027])"},{"line_number":1437,"context_line":"        try:"},{"line_number":1438,"context_line":"            self.db.service_get_by_host_and_topic("},{"line_number":1439,"context_line":"                elevated, host, CONF.volume_topic)"},{"line_number":1440,"context_line":"        except exception.ServiceNotFound:"},{"line_number":1441,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1442,"context_line":"                LOG.error(_LE(\u0027Unable to find service: %(service)s for \u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"bab921fb_c05b9953","line":1439,"in_reply_to":"dac4157f_a99dcd67","updated":"2015-04-23 12:11:04.000000000","message":"Done","commit_id":"f72c1b81df71bd1105166a63ecb6b9f01a5dfcd3"}],"cinder/volume/driver.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":722,"context_line":"        manage_existing_ref value, and it is up to the driver how this should"},{"line_number":723,"context_line":"        be interpreted.  It should be sufficient to identify a storage object"},{"line_number":724,"context_line":"        that the driver should somehow associate with the newly-created cinder"},{"line_number":725,"context_line":"        volume structure."},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        There are two ways to do this:"},{"line_number":728,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_1a1e400c","line":725,"updated":"2015-02-06 07:01:21.000000000","message":"volume -\u003e snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":722,"context_line":"        manage_existing_ref value, and it is up to the driver how this should"},{"line_number":723,"context_line":"        be interpreted.  It should be sufficient to identify a storage object"},{"line_number":724,"context_line":"        that the driver should somehow associate with the newly-created cinder"},{"line_number":725,"context_line":"        volume structure."},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        There are two ways to do this:"},{"line_number":728,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_cb3585f8","line":725,"in_reply_to":"da86d52c_1a1e400c","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        1. Rename the backend storage object so that it matches the,"},{"line_number":730,"context_line":"           volume[\u0027name\u0027] which is how drivers traditionally map between a"},{"line_number":731,"context_line":"           cinder volume and the associated backend storage object."},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        2. Place some metadata on the volume, or somewhere in the backend, that"},{"line_number":734,"context_line":"           allows other driver requests (e.g. delete, clone, attach, detach...)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_9ad95059","line":731,"updated":"2015-02-06 07:01:21.000000000","message":"Please fix the copy and paste error above. Should talk about snapshot instead of volume.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        1. Rename the backend storage object so that it matches the,"},{"line_number":730,"context_line":"           volume[\u0027name\u0027] which is how drivers traditionally map between a"},{"line_number":731,"context_line":"           cinder volume and the associated backend storage object."},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        2. Place some metadata on the volume, or somewhere in the backend, that"},{"line_number":734,"context_line":"           allows other driver requests (e.g. delete, clone, attach, detach...)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_eb3a49e6","line":731,"in_reply_to":"da86d52c_9ad95059","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":730,"context_line":"           volume[\u0027name\u0027] which is how drivers traditionally map between a"},{"line_number":731,"context_line":"           cinder volume and the associated backend storage object."},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        2. Place some metadata on the volume, or somewhere in the backend, that"},{"line_number":734,"context_line":"           allows other driver requests (e.g. delete, clone, attach, detach...)"},{"line_number":735,"context_line":"           to locate the backend storage object when required."},{"line_number":736,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_badc5447","line":733,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":730,"context_line":"           volume[\u0027name\u0027] which is how drivers traditionally map between a"},{"line_number":731,"context_line":"           cinder volume and the associated backend storage object."},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        2. Place some metadata on the volume, or somewhere in the backend, that"},{"line_number":734,"context_line":"           allows other driver requests (e.g. delete, clone, attach, detach...)"},{"line_number":735,"context_line":"           to locate the backend storage object when required."},{"line_number":736,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_2b2461c5","line":733,"in_reply_to":"da86d52c_badc5447","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":731,"context_line":"           cinder volume and the associated backend storage object."},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        2. Place some metadata on the volume, or somewhere in the backend, that"},{"line_number":734,"context_line":"           allows other driver requests (e.g. delete, clone, attach, detach...)"},{"line_number":735,"context_line":"           to locate the backend storage object when required."},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"        If the existing_ref doesn\u0027t make sense, or doesn\u0027t refer to an existing"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_5aeb58db","line":734,"updated":"2015-02-06 07:01:21.000000000","message":"clone, attach, detach are not snapshot operations.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":731,"context_line":"           cinder volume and the associated backend storage object."},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        2. Place some metadata on the volume, or somewhere in the backend, that"},{"line_number":734,"context_line":"           allows other driver requests (e.g. delete, clone, attach, detach...)"},{"line_number":735,"context_line":"           to locate the backend storage object when required."},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"        If the existing_ref doesn\u0027t make sense, or doesn\u0027t refer to an existing"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_4b2195b3","line":734,"in_reply_to":"da86d52c_5aeb58db","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":738,"context_line":"        backend storage object, raise a ManageExistingInvalidReference"},{"line_number":739,"context_line":"        exception."},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        The volume may have a volume_type, and the driver can inspect that and"},{"line_number":742,"context_line":"        compare against the properties of the referenced backend storage"},{"line_number":743,"context_line":"        object.  If they are incompatible, raise a"},{"line_number":744,"context_line":"        ManageExistingVolumeTypeMismatch, specifying a reason for the failure."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_7abd7cd7","line":741,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":738,"context_line":"        backend storage object, raise a ManageExistingInvalidReference"},{"line_number":739,"context_line":"        exception."},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        The volume may have a volume_type, and the driver can inspect that and"},{"line_number":742,"context_line":"        compare against the properties of the referenced backend storage"},{"line_number":743,"context_line":"        object.  If they are incompatible, raise a"},{"line_number":744,"context_line":"        ManageExistingVolumeTypeMismatch, specifying a reason for the failure."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_6b2e59a7","line":741,"in_reply_to":"da86d52c_7abd7cd7","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":755,"context_line":"        raise NotImplementedError(msg)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"    def unmanage_snapshot(self, snapshot):"},{"line_number":758,"context_line":"        \"\"\"Removes the specified volume from Cinder management."},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"        Does not delete the underlying backend storage object."},{"line_number":761,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_fa97ac45","line":758,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":755,"context_line":"        raise NotImplementedError(msg)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"    def unmanage_snapshot(self, snapshot):"},{"line_number":758,"context_line":"        \"\"\"Removes the specified volume from Cinder management."},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"        Does not delete the underlying backend storage object."},{"line_number":761,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_8b2b8d93","line":758,"in_reply_to":"da86d52c_fa97ac45","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        \"\"\""},{"line_number":757,"context_line":"        pass"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":760,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"        existing_ref is passed straight through from the API request\u0027s"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_2d0b837e","line":759,"updated":"2015-02-15 21:36:54.000000000","message":"ABC class work in the driver landed. Please update this to follow that:\n\nhttps://review.openstack.org/127455","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        \"\"\""},{"line_number":757,"context_line":"        pass"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":760,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"        existing_ref is passed straight through from the API request\u0027s"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_88fd3d3e","line":759,"in_reply_to":"da86d52c_2d0b837e","updated":"2015-02-16 02:41:26.000000000","message":"OK","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":910,"context_line":""},{"line_number":911,"context_line":"        There are two ways to do this:"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"        1. Rename the backend storage object so that it matches the,"},{"line_number":914,"context_line":"           snapshot[\u0027name\u0027] which is how drivers traditionally map between a"},{"line_number":915,"context_line":"           cinder snapshot and the associated backend storage object."},{"line_number":916,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_9c9d555a","line":913,"updated":"2015-02-17 06:28:44.000000000","message":"Remove \",\" at the end.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":910,"context_line":""},{"line_number":911,"context_line":"        There are two ways to do this:"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"        1. Rename the backend storage object so that it matches the,"},{"line_number":914,"context_line":"           snapshot[\u0027name\u0027] which is how drivers traditionally map between a"},{"line_number":915,"context_line":"           cinder snapshot and the associated backend storage object."},{"line_number":916,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_4e7be3f4","line":913,"in_reply_to":"da86d52c_9c9d555a","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"93ffccba904d382a16fcf2076bd064730ba1303c","unresolved":false,"context_lines":[{"line_number":903,"context_line":"        \"\"\""},{"line_number":904,"context_line":"        pass"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    # Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":907,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":908,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":909,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_e39b9715","line":906,"updated":"2015-02-26 06:29:04.000000000","message":"We have a number of drivers currently broken then, because there are several that don\u0027t implement manage_existing_get_size and others.\n\nMight need to raise a bug and do some fixing on the abc stuff that\u0027s been merged, appears to me that it breaks a number of drivers.\n\nFrankly this brings up one of the problems I have with the ABC stuff that has gone in already, we have a 1/2 in 1/2 out deal going right now with these \"class xxxVD\" but still have the method in the base with NotImplemented.\n\nI guess what this does is provide it as a member of the weird xxxVD class so it can be \"checked\" for support but doesn\u0027t require that inherited classes actually implement it?","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"6ba59164f4022dedd6f35b7b64bdbdf43a1f8db6","unresolved":false,"context_lines":[{"line_number":903,"context_line":"        \"\"\""},{"line_number":904,"context_line":"        pass"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    # Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":907,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":908,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":909,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_4fd45e47","line":906,"in_reply_to":"ba7be1f8_56da5817","updated":"2015-02-26 22:49:09.000000000","message":"Maybe this should be another class? My understanding is if its OK to have some parts and not others they are supposed to be split as different \"feature\" classes. Later on we can combine them once we want to enforce needing all of the methods implemented.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"fdc1843f712420d5bbc96faf8731d30d61bcdfbd","unresolved":false,"context_lines":[{"line_number":903,"context_line":"        \"\"\""},{"line_number":904,"context_line":"        pass"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    # Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":907,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":908,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":909,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_56da5817","line":906,"in_reply_to":"ba7be1f8_e39b9715","updated":"2015-02-26 10:14:20.000000000","message":"Yes,at first I use @abc.abstractmethod for those, but it need  all drivers to implement it otherwise throw exception. It\u0027s a complex work I think to do that. Maybe we should fix on the abc stuff to don\u0027t throw exception even there aren\u0027t all drivers to actually implement those methods.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"93ffccba904d382a16fcf2076bd064730ba1303c","unresolved":false,"context_lines":[{"line_number":949,"context_line":"        backend storage object."},{"line_number":950,"context_line":"        \"\"\""},{"line_number":951,"context_line":"        pass"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":955,"context_line":"class ReplicaVD(object):"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_23476f78","line":952,"updated":"2015-02-26 06:29:04.000000000","message":"Just curious, why did you use \u0027return\u0027 on the first two, and a pass on this last one?","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"fdc1843f712420d5bbc96faf8731d30d61bcdfbd","unresolved":false,"context_lines":[{"line_number":949,"context_line":"        backend storage object."},{"line_number":950,"context_line":"        \"\"\""},{"line_number":951,"context_line":"        pass"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":955,"context_line":"class ReplicaVD(object):"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_96669028","line":952,"in_reply_to":"ba7be1f8_23476f78","updated":"2015-02-26 10:14:20.000000000","message":"Oh,because most of drivers do nothing in unmanage snapshot I think, so using pass here. It\u0027s look like more rational IMO.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"1a44f674ae950961db2b741621abde3b69e07c81","unresolved":false,"context_lines":[{"line_number":942,"context_line":""},{"line_number":943,"context_line":"    # Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":944,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":945,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"        existing_ref is passed straight through from the API request\u0027s"},{"line_number":948,"context_line":"        manage_existing_ref value, and it is up to the driver how this should"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_ff021ab3","line":945,"updated":"2015-03-04 13:03:32.000000000","message":"snapshot object...","commit_id":"1f5f7a93deb81fe519134f17fed6f3eb0545a231"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"1a44f674ae950961db2b741621abde3b69e07c81","unresolved":false,"context_lines":[{"line_number":945,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"        existing_ref is passed straight through from the API request\u0027s"},{"line_number":948,"context_line":"        manage_existing_ref value, and it is up to the driver how this should"},{"line_number":949,"context_line":"        be interpreted.  It should be sufficient to identify a storage object"},{"line_number":950,"context_line":"        that the driver should somehow associate with the newly-created cinder"},{"line_number":951,"context_line":"        snapshot structure."}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_fff05acb","line":948,"updated":"2015-03-04 13:03:32.000000000","message":"It is \u0027ref\u0027 in API request.","commit_id":"1f5f7a93deb81fe519134f17fed6f3eb0545a231"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7c7bcb249c297b34cbbce4602ae2f39b820730dc","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"        \"\"\""},{"line_number":1074,"context_line":"        pass"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":"    # Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":1077,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":1078,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":1079,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"fabf19d9_6e74d7ce","line":1076,"updated":"2015-04-18 13:57:38.000000000","message":"Should be:\n# NOTE: Can\u0027t use abstractmethod before all drivers implement it.\n\nMay be we need to add ManageableSnapshotsVD class","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d69369c8b831c9c5b4fb4600bc23b961bfdccf72","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"        \"\"\""},{"line_number":1074,"context_line":"        pass"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":"    # Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":1077,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":1078,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":1079,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"dac4157f_10dd6c42","line":1076,"in_reply_to":"fabf19d9_6e74d7ce","updated":"2015-04-20 09:54:32.000000000","message":"It\u0027s reasonable.I will add it.","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7c7bcb249c297b34cbbce4602ae2f39b820730dc","unresolved":false,"context_lines":[{"line_number":1099,"context_line":"        \"\"\""},{"line_number":1100,"context_line":"        return"},{"line_number":1101,"context_line":""},{"line_number":1102,"context_line":"    # Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":1103,"context_line":"    def manage_existing_snapshot_get_size(self, snapshot, existing_ref):"},{"line_number":1104,"context_line":"        \"\"\"Return size of snapshot to be managed by manage_existing."},{"line_number":1105,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"fabf19d9_4e81138f","line":1102,"updated":"2015-04-18 13:57:38.000000000","message":"Should be:\n# NOTE: Can\u0027t use abstractmethod before all drivers implement it","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7c7bcb249c297b34cbbce4602ae2f39b820730dc","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"        \"\"\""},{"line_number":1108,"context_line":"        return"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"    # Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":1111,"context_line":"    def unmanage_snapshot(self, snapshot):"},{"line_number":1112,"context_line":"        \"\"\"Removes the specified snapshot from Cinder management."},{"line_number":1113,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"fabf19d9_2e7edfae","line":1110,"updated":"2015-04-18 13:57:38.000000000","message":"Should be:\n# NOTE: Can\u0027t use abstractmethod before all drivers implement it","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a7be9e45be400343e680f3992778f251644d6bcd","unresolved":false,"context_lines":[{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        Does not delete the underlying backend storage object."},{"line_number":1234,"context_line":""},{"line_number":1235,"context_line":"        For most drivers, this will not need to do anything.  However, some"},{"line_number":1236,"context_line":"        drivers might use this call as an opportunity to clean up any"},{"line_number":1237,"context_line":"        Cinder-specific configuration that they have associated with the"},{"line_number":1238,"context_line":"        backend storage object."}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_366e7e00","line":1235,"updated":"2015-07-29 06:11:08.000000000","message":"Remove extra space after period.","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e25605c47719e003c9f64cf6745bf6d679a5dc94","unresolved":false,"context_lines":[{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        Does not delete the underlying backend storage object."},{"line_number":1234,"context_line":""},{"line_number":1235,"context_line":"        For most drivers, this will not need to do anything.  However, some"},{"line_number":1236,"context_line":"        drivers might use this call as an opportunity to clean up any"},{"line_number":1237,"context_line":"        Cinder-specific configuration that they have associated with the"},{"line_number":1238,"context_line":"        backend storage object."}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_bc190fd3","line":1235,"in_reply_to":"3a50d1a3_366e7e00","updated":"2015-07-29 07:07:29.000000000","message":"Done","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        if type(existing_ref) !\u003d dict:"},{"line_number":517,"context_line":"            existing_ref \u003d {\"source-name\": existing_ref}"},{"line_number":518,"context_line":"        return self.manage_existing(snapshot_temp, existing_ref)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def migrate_volume(self, ctxt, volume, host, thin\u003dFalse, mirror_count\u003d0):"},{"line_number":521,"context_line":"        \"\"\"Optimize the migration if the destination is on the same server."},{"line_number":522,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_e7e15a2b","line":519,"updated":"2015-02-17 06:28:44.000000000","message":"Where is unmanage?","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        if type(existing_ref) !\u003d dict:"},{"line_number":517,"context_line":"            existing_ref \u003d {\"source-name\": existing_ref}"},{"line_number":518,"context_line":"        return self.manage_existing(snapshot_temp, existing_ref)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def migrate_volume(self, ctxt, volume, host, thin\u003dFalse, mirror_count\u003d0):"},{"line_number":521,"context_line":"        \"\"\"Optimize the migration if the destination is on the same server."},{"line_number":522,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_ce8a73be","line":519,"in_reply_to":"da86d52c_e7e15a2b","updated":"2015-02-26 01:54:04.000000000","message":"We don\u0027t need to delete snapshot in fact, so it\u0027s just pass in volume/driver.py.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"93ffccba904d382a16fcf2076bd064730ba1303c","unresolved":false,"context_lines":[{"line_number":508,"context_line":"    def manage_existing_snapshot_get_size(self, snapshot, existing_ref):"},{"line_number":509,"context_line":"        if type(existing_ref) !\u003d dict:"},{"line_number":510,"context_line":"            existing_ref \u003d {\"source-name\": existing_ref}"},{"line_number":511,"context_line":"        return self.manage_existing_get_size(snapshot, existing_ref)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":514,"context_line":"        dest_name \u003d self._escape_snapshot(snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_5e119850","line":511,"updated":"2015-02-26 06:29:04.000000000","message":"I\u0027m all for code reuse, but I\u0027d like to see the manage_existing_get_size impl refactored here so that there is a distinction between calls for snapshots vs volumes.\n\nFor example, the way you have it now all of the log messages are going to say \"xxxx for Volume xxxx\".  This also creates some issues for the logging additions I\u0027m working on that will set the \"object\" and UUID automatically in all the log messages for us.  Not to mention you\u0027re going to run into problems with \"special\" snapshot naming conventions if this ever gets picked up for something else.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"fdc1843f712420d5bbc96faf8731d30d61bcdfbd","unresolved":false,"context_lines":[{"line_number":508,"context_line":"    def manage_existing_snapshot_get_size(self, snapshot, existing_ref):"},{"line_number":509,"context_line":"        if type(existing_ref) !\u003d dict:"},{"line_number":510,"context_line":"            existing_ref \u003d {\"source-name\": existing_ref}"},{"line_number":511,"context_line":"        return self.manage_existing_get_size(snapshot, existing_ref)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":514,"context_line":"        dest_name \u003d self._escape_snapshot(snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_0ba6fdad","line":511,"in_reply_to":"ba7be1f8_5e119850","updated":"2015-02-26 10:14:20.000000000","message":"Agress with you, maybe we can refactor a new manage_existing_get_size_for_common, that have additional parameter \u0027object_type\u0027 for log messages. For snapshots and volumes to call it by passed different object_type.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":520,"context_line":"                                                    \"volume\")"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"    def manage_existing_snapshot_get_size(self, snapshot, existing_ref):"},{"line_number":523,"context_line":"        if type(existing_ref) !\u003d dict:"},{"line_number":524,"context_line":"            existing_ref \u003d {\"source-name\": existing_ref}"},{"line_number":525,"context_line":"        return self.manage_existing_object_get_size(snapshot, existing_ref,"},{"line_number":526,"context_line":"                                                    \"snapshot\")"}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_7d75faf7","line":523,"updated":"2015-04-26 15:17:18.000000000","message":"use isinstance","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":528,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":529,"context_line":"        dest_name \u003d self._escape_snapshot(snapshot[\u0027name\u0027])"},{"line_number":530,"context_line":"        snapshot_temp \u003d {\"name\": dest_name}"},{"line_number":531,"context_line":"        if type(existing_ref) !\u003d dict:"},{"line_number":532,"context_line":"            existing_ref \u003d {\"source-name\": existing_ref}"},{"line_number":533,"context_line":"        return self.manage_existing(snapshot_temp, existing_ref)"},{"line_number":534,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_5d723612","line":531,"updated":"2015-04-26 15:17:18.000000000","message":"use isinstance","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"}],"cinder/volume/flows/common.py":[{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"94a782d7d6f8957abff2152155887d295765289b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    reason \u003d _clean_reason(reason)"},{"line_number":113,"context_line":"    # TODO(harlowja): re-enable when we can support this in the database."},{"line_number":114,"context_line":"    # if reason:"},{"line_number":115,"context_line":"    #     status[\u0027details\u0027] \u003d reason"},{"line_number":116,"context_line":"    try:"},{"line_number":117,"context_line":"        LOG.debug(\u0027Updating snapshot_id: %(snapshot_id)s with %(update)s\u0027"},{"line_number":118,"context_line":"                  \u0027 due to: %(reason)s\u0027 % {\u0027snapshot_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_845c051b","line":115,"updated":"2015-01-05 14:10:51.000000000","message":"Please remove the commented code (Line: 114, 115) if that is not really necessary.","commit_id":"72b7d5753fa3d35f16b7aeaad30c6bfbdadd51ad"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    # TODO(harlowja): re-enable when we can support this in the database."},{"line_number":114,"context_line":"    try:"},{"line_number":115,"context_line":"        LOG.debug(\u0027Updating snapshot_id: %(snapshot_id)s with %(update)s\u0027"},{"line_number":116,"context_line":"                  \u0027 due to: %(reason)s\u0027 % {\u0027snapshot_id\u0027: snapshot_id,"},{"line_number":117,"context_line":"                                           \u0027reason\u0027: reason,"},{"line_number":118,"context_line":"                                           \u0027update\u0027: update})"},{"line_number":119,"context_line":"        db.snapshot_update(context, snapshot_id, update)"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_07e90e1a","line":116,"updated":"2015-02-17 06:28:44.000000000","message":"See comment below.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    # TODO(harlowja): re-enable when we can support this in the database."},{"line_number":114,"context_line":"    try:"},{"line_number":115,"context_line":"        LOG.debug(\u0027Updating snapshot_id: %(snapshot_id)s with %(update)s\u0027"},{"line_number":116,"context_line":"                  \u0027 due to: %(reason)s\u0027 % {\u0027snapshot_id\u0027: snapshot_id,"},{"line_number":117,"context_line":"                                           \u0027reason\u0027: reason,"},{"line_number":118,"context_line":"                                           \u0027update\u0027: update})"},{"line_number":119,"context_line":"        db.snapshot_update(context, snapshot_id, update)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_499d9dbb","line":116,"in_reply_to":"da86d52c_07e90e1a","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    except exception.CinderException:"},{"line_number":121,"context_line":"        # Don\u0027t let this cause further exceptions."},{"line_number":122,"context_line":"        LOG.exception(_LE(\"Failed updating snapshot_id %(snapshot_id)s with\""},{"line_number":123,"context_line":"                          \" %(update)s\") % {\u0027snapshot_id\u0027: snapshot_id,"},{"line_number":124,"context_line":"                                            \u0027update\u0027: update})"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_8795fe89","line":123,"updated":"2015-02-17 06:28:44.000000000","message":"Please use \",\" instead of \"%\" for delayed string interpolation.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    except exception.CinderException:"},{"line_number":121,"context_line":"        # Don\u0027t let this cause further exceptions."},{"line_number":122,"context_line":"        LOG.exception(_LE(\"Failed updating snapshot_id %(snapshot_id)s with\""},{"line_number":123,"context_line":"                          \" %(update)s\") % {\u0027snapshot_id\u0027: snapshot_id,"},{"line_number":124,"context_line":"                                            \u0027update\u0027: update})"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_69a261fe","line":123,"in_reply_to":"da86d52c_8795fe89","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"93ffccba904d382a16fcf2076bd064730ba1303c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                                            \u0027update\u0027: update})"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def error_out_snapshot(context, db, snapshot_id, reason\u003dNone):"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _clean_reason(reason):"},{"line_number":101,"context_line":"        if reason is None:"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_1e71e0a7","line":98,"updated":"2015-02-26 06:29:04.000000000","message":"Great candidate for refactor with \"error_out_volume\".  There\u0027s no reason to duplicate the internal \"_clean_reason\" method that I can see here, you could break that out into a private method in the class I think and share that... maybe even some fancy stuff for the rest of the code in these methods.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"fdc1843f712420d5bbc96faf8731d30d61bcdfbd","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                                            \u0027update\u0027: update})"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def error_out_snapshot(context, db, snapshot_id, reason\u003dNone):"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _clean_reason(reason):"},{"line_number":101,"context_line":"        if reason is None:"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_cb0b057b","line":98,"in_reply_to":"ba7be1f8_1e71e0a7","updated":"2015-02-26 10:14:20.000000000","message":"OK,I will try it.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"599d4b9dc644ade60a8a4e7586b4a7cd48a0815f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        if object_type \u003d\u003d \u0027volume\u0027:"},{"line_number":88,"context_line":"            db.volume_update(context, object_id, update)"},{"line_number":89,"context_line":"        elif object_type \u003d\u003d \u0027snapshot\u0027:"},{"line_number":90,"context_line":"            db.snapshot_update(context, object_id, update)"},{"line_number":91,"context_line":"    except exception.CinderException:"},{"line_number":92,"context_line":"        # Don\u0027t let this cause further exceptions."},{"line_number":93,"context_line":"        LOG.exception(_LE(\"Failed updating %(object_type)s %(object_id)s with\""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_56815afa","line":90,"updated":"2015-03-10 15:37:22.000000000","message":"I think you should use snapshot object here instead of accessing the db directly.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"532169e56c361e06bd6312cac250d62cd06b1751","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        if object_type \u003d\u003d \u0027volume\u0027:"},{"line_number":88,"context_line":"            db.volume_update(context, object_id, update)"},{"line_number":89,"context_line":"        elif object_type \u003d\u003d \u0027snapshot\u0027:"},{"line_number":90,"context_line":"            db.snapshot_update(context, object_id, update)"},{"line_number":91,"context_line":"    except exception.CinderException:"},{"line_number":92,"context_line":"        # Don\u0027t let this cause further exceptions."},{"line_number":93,"context_line":"        LOG.exception(_LE(\"Failed updating %(object_type)s %(object_id)s with\""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_f356db29","line":90,"in_reply_to":"9a80dd14_56815afa","updated":"2015-03-10 17:15:12.000000000","message":"+1","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        if object_type \u003d\u003d \u0027volume\u0027:"},{"line_number":88,"context_line":"            db.volume_update(context, object_id, update)"},{"line_number":89,"context_line":"        elif object_type \u003d\u003d \u0027snapshot\u0027:"},{"line_number":90,"context_line":"            db.snapshot_update(context, object_id, update)"},{"line_number":91,"context_line":"    except exception.CinderException:"},{"line_number":92,"context_line":"        # Don\u0027t let this cause further exceptions."},{"line_number":93,"context_line":"        LOG.exception(_LE(\"Failed updating %(object_type)s %(object_id)s with\""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_ea069020","line":90,"in_reply_to":"9a80dd14_56815afa","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"431aaaa4e9f66292cc5ccce25e7173ecfbb0f1e5","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":"    try:"},{"line_number":83,"context_line":"        LOG.debug(\u0027Updating %(object_type)s: %(object_id)s with %(update)s\u0027"},{"line_number":84,"context_line":"                  \u0027 due to: %(reason)s\u0027 % {\u0027object_type\u0027: object_type,"},{"line_number":85,"context_line":"                                           \u0027object_id\u0027: object_id,"},{"line_number":86,"context_line":"                                           \u0027reason\u0027: reason,"},{"line_number":87,"context_line":"                                           \u0027update\u0027: update})"}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_64d3c139","line":84,"updated":"2015-04-20 13:03:56.000000000","message":"If you are updating, please change % to , in logger calls. This is existing though, so I wouldn\u0027t block on this patch just for that.","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"580f870122682a654a0d67c65555c53aab283adf","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":"    try:"},{"line_number":83,"context_line":"        LOG.debug(\u0027Updating %(object_type)s: %(object_id)s with %(update)s\u0027"},{"line_number":84,"context_line":"                  \u0027 due to: %(reason)s\u0027 % {\u0027object_type\u0027: object_type,"},{"line_number":85,"context_line":"                                           \u0027object_id\u0027: object_id,"},{"line_number":86,"context_line":"                                           \u0027reason\u0027: reason,"},{"line_number":87,"context_line":"                                           \u0027update\u0027: update})"}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_407d1be6","line":84,"in_reply_to":"dac4157f_64d3c139","updated":"2015-04-22 02:23:13.000000000","message":"Done","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"431aaaa4e9f66292cc5ccce25e7173ecfbb0f1e5","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    except exception.CinderException:"},{"line_number":95,"context_line":"        # Don\u0027t let this cause further exceptions."},{"line_number":96,"context_line":"        LOG.exception(_LE(\"Failed updating %(object_type)s %(object_id)s with\""},{"line_number":97,"context_line":"                          \" %(update)s\") % {\u0027object_type\u0027: object_type,"},{"line_number":98,"context_line":"                                            \u0027object_id\u0027: object_id,"},{"line_number":99,"context_line":"                                            \u0027update\u0027: update})"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_04e2c503","line":97,"updated":"2015-04-20 13:03:56.000000000","message":"% \u003d\u003e ,","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"580f870122682a654a0d67c65555c53aab283adf","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    except exception.CinderException:"},{"line_number":95,"context_line":"        # Don\u0027t let this cause further exceptions."},{"line_number":96,"context_line":"        LOG.exception(_LE(\"Failed updating %(object_type)s %(object_id)s with\""},{"line_number":97,"context_line":"                          \" %(update)s\") % {\u0027object_type\u0027: object_type,"},{"line_number":98,"context_line":"                                            \u0027object_id\u0027: object_id,"},{"line_number":99,"context_line":"                                            \u0027update\u0027: update})"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"dac4157f_208467d2","line":97,"in_reply_to":"dac4157f_04e2c503","updated":"2015-04-22 02:23:13.000000000","message":"Done","commit_id":"c6a077807147bc38b6f38b5c2506ddf6988d7922"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"841aa614b3c846bd6b64b98ac9e906a7fe68c552","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        elif object_type \u003d\u003d \u0027snapshot\u0027:"},{"line_number":91,"context_line":"            snapshot \u003d objects.Snapshot.get_by_id(context, object_id)"},{"line_number":92,"context_line":"            snapshot.update(update)"},{"line_number":93,"context_line":"            snapshot.save(context)"},{"line_number":94,"context_line":"    except exception.CinderException:"},{"line_number":95,"context_line":"        # Don\u0027t let this cause further exceptions."},{"line_number":96,"context_line":"        LOG.exception(_LE(\"Failed updating %(object_type)s %(object_id)s with\""}],"source_content_type":"text/x-python","patch_set":52,"id":"7a016987_fadc111a","line":93,"updated":"2015-05-14 02:08:27.000000000","message":"With the latest change to use oslo_versionedobjects, we should now be using the context (i.e. self._context) that is stashed in the object, instead of using and accepting the context passed in. Please remove the context argument for save methods.  Here, just use snapshot.save().","commit_id":"4ff160b66d4f95cf41989698b74fc4ba99e9f685"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"2aff7de774aab61aa4759b07a9c530bc81ac9360","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        elif object_type \u003d\u003d \u0027snapshot\u0027:"},{"line_number":91,"context_line":"            snapshot \u003d objects.Snapshot.get_by_id(context, object_id)"},{"line_number":92,"context_line":"            snapshot.update(update)"},{"line_number":93,"context_line":"            snapshot.save(context)"},{"line_number":94,"context_line":"    except exception.CinderException:"},{"line_number":95,"context_line":"        # Don\u0027t let this cause further exceptions."},{"line_number":96,"context_line":"        LOG.exception(_LE(\"Failed updating %(object_type)s %(object_id)s with\""}],"source_content_type":"text/x-python","patch_set":52,"id":"7a016987_75cef284","line":93,"in_reply_to":"7a016987_fadc111a","updated":"2015-05-14 02:45:14.000000000","message":"Sure","commit_id":"4ff160b66d4f95cf41989698b74fc4ba99e9f685"}],"cinder/volume/flows/manager/manage_existing_snapshot.py":[{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"94a782d7d6f8957abff2152155887d295765289b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # In the future we might want to have a lock on the volume_id so that"},{"line_number":51,"context_line":"        # the volume can not be deleted while its still being created?"},{"line_number":52,"context_line":"        snapshot_ref \u003d self.db.snapshot_get(context, snapshot_id)"},{"line_number":53,"context_line":"        LOG.info(\"[2014-09-09] ExtractSnapshotRefTask return snapshot_ref: %s\","},{"line_number":54,"context_line":"                 snapshot_ref)"},{"line_number":55,"context_line":"        return snapshot_ref"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_24aef1e7","line":53,"updated":"2015-01-05 14:10:51.000000000","message":"Use _LI, _LE, _LW for log messages. As per http://docs.openstack.org/developer/oslo.i18n/guidelines.html","commit_id":"72b7d5753fa3d35f16b7aeaad30c6bfbdadd51ad"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2014 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_e3381bd6","line":1,"updated":"2015-01-15 20:28:16.000000000","message":"2015","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            # not always information that must be sent for volumes to operate"},{"line_number":90,"context_line":"            LOG.exception(_LE(\"Failed notifying about the snapshot\""},{"line_number":91,"context_line":"                              \" action %(event)s for snapshot %(snapshot_id)s\")"},{"line_number":92,"context_line":"                          % {\u0027event\u0027: self.event_suffix,"},{"line_number":93,"context_line":"                            \u0027snapshot_id\u0027: snapshot_id})"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_634c2b77","line":92,"updated":"2015-01-15 20:28:16.000000000","message":"% \u003d\u003e ,","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        if not self.driver.initialized:"},{"line_number":109,"context_line":"            driver_name \u003d self.driver.__class__.__name__"},{"line_number":110,"context_line":"            LOG.error(_LE(\"Unable to manage existing snapshot. \""},{"line_number":111,"context_line":"                          \"Volume driver %s not initialized.\") % driver_name)"},{"line_number":112,"context_line":"            flow_common.error_out_snapshot(context, self.db, snapshot_id,"},{"line_number":113,"context_line":"                                           reason\u003d_(\"Volume driver %s \""},{"line_number":114,"context_line":"                                                    \"not initialized.\") %"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_2346a350","line":111,"updated":"2015-01-15 20:28:16.000000000","message":"% \u003d\u003e ,","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":171,"context_line":"                        \"%(s_size)sG snapshot (%(d_consumed)dG \""},{"line_number":172,"context_line":"                        \"of %(d_quota)dG already consumed)\")"},{"line_number":173,"context_line":"                LOG.warn(msg % {\u0027s_pid\u0027: context.project_id,"},{"line_number":174,"context_line":"                                \u0027s_size\u0027: size,"},{"line_number":175,"context_line":"                                \u0027d_consumed\u0027: _consumed(\u0027gigabytes\u0027),"},{"line_number":176,"context_line":"                                \u0027d_quota\u0027: quotas[\u0027gigabytes\u0027]})"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_a369b3c1","line":173,"updated":"2015-01-15 20:28:16.000000000","message":"% \u003d\u003e ,","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":183,"context_line":"                        \"volume (%(d_consumed)d volumes \""},{"line_number":184,"context_line":"                        \"already consumed)\")"},{"line_number":185,"context_line":"                LOG.warn(msg % {\u0027s_pid\u0027: context.project_id,"},{"line_number":186,"context_line":"                                \u0027d_consumed\u0027: _consumed(\u0027volumes\u0027)})"},{"line_number":187,"context_line":"                raise exception.VolumeLimitExceeded(allowed\u003dquotas[\u0027volumes\u0027])"},{"line_number":188,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_235dc316","line":185,"updated":"2015-01-15 20:28:16.000000000","message":"% \u003d\u003e ,","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        except exception.CinderException:"},{"line_number":235,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(volume_id)s\""},{"line_number":236,"context_line":"                              \" with creation provided model %(model)s\") %"},{"line_number":237,"context_line":"                          {\u0027volume_id\u0027: snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                           \u0027model\u0027: model_update})"},{"line_number":239,"context_line":"            raise"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_c3a5df03","line":237,"updated":"2015-01-15 20:28:16.000000000","message":"% \u003d\u003e ,","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            super(CreateSnapshotOnFinishTask, self).execute(context, snapshot)"},{"line_number":279,"context_line":"        except exception.CinderException:"},{"line_number":280,"context_line":"            LOG.exception(_LE(\"Failed updating volume %(volume_id)s with \""},{"line_number":281,"context_line":"                              \"%(update)s\") % {\u0027volume_id\u0027: snapshot_id,"},{"line_number":282,"context_line":"                                               \u0027update\u0027: update})"},{"line_number":283,"context_line":"        # Even if the update fails, the volume is ready."},{"line_number":284,"context_line":"        msg \u003d _(\"Snapshot %(snapshot_name)s (%(snapshot_id)s):\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_63818b4c","line":281,"updated":"2015-01-15 20:28:16.000000000","message":"% \u003d\u003e ,","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        msg \u003d _(\"Snapshot %(snapshot_name)s (%(snapshot_id)s):\""},{"line_number":285,"context_line":"                \"created successfully\")"},{"line_number":286,"context_line":"        LOG.info(msg % {"},{"line_number":287,"context_line":"            \u0027snapshot_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":288,"context_line":"            \u0027snapshot_id\u0027: snapshot_id"},{"line_number":289,"context_line":"        })"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_83867763","line":287,"updated":"2015-01-15 20:28:16.000000000","message":"% \u003d\u003e ,","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    LOG.info(_LI(\"[2014-09-09] input parmeter: context\u003d%(context)s, db\u003d%(db)s,\""},{"line_number":296,"context_line":"                 \"driver\u003d%(driver)s, host\u003d%(host)s, \""},{"line_number":297,"context_line":"                 \"snapshot_id\u003d(snapshot_id)s, ref\u003d%(ref)s\") %"},{"line_number":298,"context_line":"             {\u0027context\u0027: context,"},{"line_number":299,"context_line":"              \u0027db\u0027: db,"},{"line_number":300,"context_line":"              \u0027driver\u0027: driver,"},{"line_number":301,"context_line":"              \u0027host\u0027: host,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_c37cff73","line":298,"updated":"2015-01-15 20:28:16.000000000","message":"% \u003d\u003e ,","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":324,"context_line":"                    CreateSnapshotOnFinishTask(db,"},{"line_number":325,"context_line":"                                               \"manage_existing_snapshot.end\","},{"line_number":326,"context_line":"                                               host\u003dhost))"},{"line_number":327,"context_line":"    LOG.info(_LI(\"[2014-09-09]begin to return taskflow.engines.\""},{"line_number":328,"context_line":"                 \"load(volume_flow,store\u003dcreate_what)\"))"},{"line_number":329,"context_line":"    # Now load (but do not run) the flow using the provided initial data."},{"line_number":330,"context_line":"    return taskflow.engines.load(volume_flow, store\u003dcreate_what)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_238b036a","line":327,"updated":"2015-01-15 20:28:16.000000000","message":"What is \"[2014-09-09]\"?","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                return False"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"            if _is_over(\u0027gigabytes\u0027):"},{"line_number":170,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":171,"context_line":"                        \"%(s_size)sG snapshot (%(d_consumed)dG \""},{"line_number":172,"context_line":"                        \"of %(d_quota)dG already consumed)\")"},{"line_number":173,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_cc9ebb06","line":170,"updated":"2015-02-06 01:30:47.000000000","message":"Why are you creating the message separately here?","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                return False"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"            if _is_over(\u0027gigabytes\u0027):"},{"line_number":170,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":171,"context_line":"                        \"%(s_size)sG snapshot (%(d_consumed)dG \""},{"line_number":172,"context_line":"                        \"of %(d_quota)dG already consumed)\")"},{"line_number":173,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_ee7b3779","line":170,"in_reply_to":"da86d52c_cc9ebb06","updated":"2015-02-09 04:02:31.000000000","message":"Just like message in flows.api.create_volume.QuotaReserveTask here","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                    requested\u003dsize,"},{"line_number":179,"context_line":"                    consumed\u003d_consumed(\u0027gigabytes\u0027),"},{"line_number":180,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"},{"line_number":181,"context_line":"            elif _is_over(\u0027volumes\u0027):"},{"line_number":182,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":183,"context_line":"                        \"volume (%(d_consumed)d volumes \""},{"line_number":184,"context_line":"                        \"already consumed)\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_5aec38bb","line":181,"updated":"2015-02-06 07:01:21.000000000","message":"volumes?  Should be \u0027snapshots\u0027","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                    requested\u003dsize,"},{"line_number":179,"context_line":"                    consumed\u003d_consumed(\u0027gigabytes\u0027),"},{"line_number":180,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"},{"line_number":181,"context_line":"            elif _is_over(\u0027volumes\u0027):"},{"line_number":182,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":183,"context_line":"                        \"volume (%(d_consumed)d volumes \""},{"line_number":184,"context_line":"                        \"already consumed)\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_cebe73d4","line":181,"in_reply_to":"da86d52c_5aec38bb","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    consumed\u003d_consumed(\u0027gigabytes\u0027),"},{"line_number":180,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"},{"line_number":181,"context_line":"            elif _is_over(\u0027volumes\u0027):"},{"line_number":182,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":183,"context_line":"                        \"volume (%(d_consumed)d volumes \""},{"line_number":184,"context_line":"                        \"already consumed)\")"},{"line_number":185,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_eca1bf46","line":182,"updated":"2015-02-06 01:30:47.000000000","message":"Same question as above.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    consumed\u003d_consumed(\u0027gigabytes\u0027),"},{"line_number":180,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"},{"line_number":181,"context_line":"            elif _is_over(\u0027volumes\u0027):"},{"line_number":182,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":183,"context_line":"                        \"volume (%(d_consumed)d volumes \""},{"line_number":184,"context_line":"                        \"already consumed)\")"},{"line_number":185,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_eeb33708","line":182,"in_reply_to":"da86d52c_eca1bf46","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"},{"line_number":181,"context_line":"            elif _is_over(\u0027volumes\u0027):"},{"line_number":182,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":183,"context_line":"                        \"volume (%(d_consumed)d volumes \""},{"line_number":184,"context_line":"                        \"already consumed)\")"},{"line_number":185,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":186,"context_line":"                               \u0027d_consumed\u0027: _consumed(\u0027volumes\u0027)})"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_7a2e5cfc","line":183,"updated":"2015-02-06 07:01:21.000000000","message":"volumes -\u003e snapshots","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"},{"line_number":181,"context_line":"            elif _is_over(\u0027volumes\u0027):"},{"line_number":182,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":183,"context_line":"                        \"volume (%(d_consumed)d volumes \""},{"line_number":184,"context_line":"                        \"already consumed)\")"},{"line_number":185,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":186,"context_line":"                               \u0027d_consumed\u0027: _consumed(\u0027volumes\u0027)})"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_0eb96be9","line":183,"in_reply_to":"da86d52c_7a2e5cfc","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                        \"already consumed)\")"},{"line_number":185,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":186,"context_line":"                               \u0027d_consumed\u0027: _consumed(\u0027volumes\u0027)})"},{"line_number":187,"context_line":"                raise exception.VolumeLimitExceeded(allowed\u003dquotas[\u0027volumes\u0027])"},{"line_number":188,"context_line":"            else:"},{"line_number":189,"context_line":"                # If nothing was reraised, ensure we reraise the initial error"},{"line_number":190,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_9a31505c","line":187,"updated":"2015-02-06 07:01:21.000000000","message":"snapshots","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                        \"already consumed)\")"},{"line_number":185,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":186,"context_line":"                               \u0027d_consumed\u0027: _consumed(\u0027volumes\u0027)})"},{"line_number":187,"context_line":"                raise exception.VolumeLimitExceeded(allowed\u003dquotas[\u0027volumes\u0027])"},{"line_number":188,"context_line":"            else:"},{"line_number":189,"context_line":"                # If nothing was reraised, ensure we reraise the initial error"},{"line_number":190,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_4eca836f","line":187,"in_reply_to":"da86d52c_9a31505c","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            # We are already reverting, therefore we should silence this"},{"line_number":208,"context_line":"            # exception since a second exception being active will be bad."},{"line_number":209,"context_line":"            LOG.exception(_LE(\"Failed rolling back quota for\""},{"line_number":210,"context_line":"                              \" %s reservations\"), reservations)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class ManageExistingTask(flow_utils.CinderTask):"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_ecb8df76","line":210,"updated":"2015-02-06 01:30:47.000000000","message":"suggest \u0027.\u0027 here.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            # We are already reverting, therefore we should silence this"},{"line_number":208,"context_line":"            # exception since a second exception being active will be bad."},{"line_number":209,"context_line":"            LOG.exception(_LE(\"Failed rolling back quota for\""},{"line_number":210,"context_line":"                              \" %s reservations\"), reservations)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class ManageExistingTask(flow_utils.CinderTask):"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_6ec74765","line":210,"in_reply_to":"da86d52c_ecb8df76","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class ManageExistingTask(flow_utils.CinderTask):"},{"line_number":214,"context_line":"    \"\"\"Brings an existing volume under Cinder management.\"\"\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    default_provides \u003d set([\u0027snapshot\u0027, \u0027new_status\u0027])"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_fa288ce3","line":214,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class ManageExistingTask(flow_utils.CinderTask):"},{"line_number":214,"context_line":"    \"\"\"Brings an existing volume under Cinder management.\"\"\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    default_provides \u003d set([\u0027snapshot\u0027, \u0027new_status\u0027])"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_8ec47b60","line":214,"in_reply_to":"da86d52c_fa288ce3","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                                                   snapshot_ref[\u0027id\u0027],"},{"line_number":233,"context_line":"                                                   model_update)"},{"line_number":234,"context_line":"        except exception.CinderException:"},{"line_number":235,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(volume_id)s\""},{"line_number":236,"context_line":"                              \" with creation provided model %(model)s\"),"},{"line_number":237,"context_line":"                          {\u0027volume_id\u0027: snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                           \u0027model\u0027: model_update})"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_da0e688b","line":235,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                                                   snapshot_ref[\u0027id\u0027],"},{"line_number":233,"context_line":"                                                   model_update)"},{"line_number":234,"context_line":"        except exception.CinderException:"},{"line_number":235,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(volume_id)s\""},{"line_number":236,"context_line":"                              \" with creation provided model %(model)s\"),"},{"line_number":237,"context_line":"                          {\u0027volume_id\u0027: snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                           \u0027model\u0027: model_update})"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_cea593b6","line":235,"in_reply_to":"da86d52c_da0e688b","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        except exception.CinderException:"},{"line_number":235,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(volume_id)s\""},{"line_number":236,"context_line":"                              \" with creation provided model %(model)s\"),"},{"line_number":237,"context_line":"                          {\u0027volume_id\u0027: snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                           \u0027model\u0027: model_update})"},{"line_number":239,"context_line":"            raise"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_1a24800b","line":237,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        except exception.CinderException:"},{"line_number":235,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(volume_id)s\""},{"line_number":236,"context_line":"                              \" with creation provided model %(model)s\"),"},{"line_number":237,"context_line":"                          {\u0027volume_id\u0027: snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                           \u0027model\u0027: model_update})"},{"line_number":239,"context_line":"            raise"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_6e9e6765","line":237,"in_reply_to":"da86d52c_1a24800b","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class CreateSnapshotOnFinishTask(NotifySnapshotActionTask):"},{"line_number":246,"context_line":"    \"\"\"On successful volume creation this will perform final volume actions."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    When a volume is created successfully it is expected that MQ notifications"},{"line_number":249,"context_line":"    and database updates will occur to \u0027signal\u0027 to others that the volume is"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_3a1f84b8","line":246,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class CreateSnapshotOnFinishTask(NotifySnapshotActionTask):"},{"line_number":246,"context_line":"    \"\"\"On successful volume creation this will perform final volume actions."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    When a volume is created successfully it is expected that MQ notifications"},{"line_number":249,"context_line":"    and database updates will occur to \u0027signal\u0027 to others that the volume is"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_8e9b9b71","line":246,"in_reply_to":"da86d52c_3a1f84b8","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    and database updates will occur to \u0027signal\u0027 to others that the volume is"},{"line_number":250,"context_line":"    now ready for usage. This task does those notifications and updates in a"},{"line_number":251,"context_line":"    reliable manner (not re-raising exceptions if said actions can not be"},{"line_number":252,"context_line":"    triggered)."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    Reversion strategy: N/A"},{"line_number":255,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_5a1a78c6","line":252,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    and database updates will occur to \u0027signal\u0027 to others that the volume is"},{"line_number":250,"context_line":"    now ready for usage. This task does those notifications and updates in a"},{"line_number":251,"context_line":"    reliable manner (not re-raising exceptions if said actions can not be"},{"line_number":252,"context_line":"    triggered)."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    Reversion strategy: N/A"},{"line_number":255,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_ae877f11","line":252,"in_reply_to":"da86d52c_5a1a78c6","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                                                         host)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def execute(self, context, snapshot, new_status):"},{"line_number":262,"context_line":"        LOG.info(_LI(\"Begin to call CreateSnapshotOnFinishTask\""},{"line_number":263,"context_line":"                     \"execute\"))"},{"line_number":264,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":265,"context_line":"        LOG.info(\"New status: %s\", new_status)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_cc6cfb0a","line":262,"updated":"2015-02-06 01:30:47.000000000","message":"Missing space at EOL.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            super(CreateSnapshotOnFinishTask, self).execute(context, snapshot)"},{"line_number":279,"context_line":"        except exception.CinderException:"},{"line_number":280,"context_line":"            LOG.exception(_LE(\"Failed updating volume %(volume_id)s with \""},{"line_number":281,"context_line":"                              \"%(update)s\"), {\u0027volume_id\u0027: snapshot_id,"},{"line_number":282,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":283,"context_line":"        # Even if the update fails, the volume is ready."},{"line_number":284,"context_line":"        msg \u003d _(\"Snapshot %(snapshot_name)s (%(snapshot_id)s):\""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_9a7f90df","line":281,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            super(CreateSnapshotOnFinishTask, self).execute(context, snapshot)"},{"line_number":279,"context_line":"        except exception.CinderException:"},{"line_number":280,"context_line":"            LOG.exception(_LE(\"Failed updating volume %(volume_id)s with \""},{"line_number":281,"context_line":"                              \"%(update)s\"), {\u0027volume_id\u0027: snapshot_id,"},{"line_number":282,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":283,"context_line":"        # Even if the update fails, the volume is ready."},{"line_number":284,"context_line":"        msg \u003d _(\"Snapshot %(snapshot_name)s (%(snapshot_id)s):\""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_0e9ecb56","line":281,"in_reply_to":"da86d52c_9a7f90df","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            LOG.exception(_LE(\"Failed updating volume %(volume_id)s with \""},{"line_number":281,"context_line":"                              \"%(update)s\"), {\u0027volume_id\u0027: snapshot_id,"},{"line_number":282,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":283,"context_line":"        # Even if the update fails, the volume is ready."},{"line_number":284,"context_line":"        msg \u003d _(\"Snapshot %(snapshot_name)s (%(snapshot_id)s):\""},{"line_number":285,"context_line":"                \"created successfully\")"},{"line_number":286,"context_line":"        LOG.info(msg, {"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_ba8294c5","line":283,"updated":"2015-02-06 07:01:21.000000000","message":"snapshot","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            LOG.exception(_LE(\"Failed updating volume %(volume_id)s with \""},{"line_number":281,"context_line":"                              \"%(update)s\"), {\u0027volume_id\u0027: snapshot_id,"},{"line_number":282,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":283,"context_line":"        # Even if the update fails, the volume is ready."},{"line_number":284,"context_line":"        msg \u003d _(\"Snapshot %(snapshot_name)s (%(snapshot_id)s):\""},{"line_number":285,"context_line":"                \"created successfully\")"},{"line_number":286,"context_line":"        LOG.info(msg, {"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_2ea2af9a","line":283,"in_reply_to":"da86d52c_ba8294c5","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                              \"%(update)s\"), {\u0027volume_id\u0027: snapshot_id,"},{"line_number":282,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":283,"context_line":"        # Even if the update fails, the volume is ready."},{"line_number":284,"context_line":"        msg \u003d _(\"Snapshot %(snapshot_name)s (%(snapshot_id)s):\""},{"line_number":285,"context_line":"                \"created successfully\")"},{"line_number":286,"context_line":"        LOG.info(msg, {"},{"line_number":287,"context_line":"            \u0027snapshot_name\u0027: snapshot[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_cc431b6a","line":284,"updated":"2015-02-06 01:30:47.000000000","message":"Again, why is this not just being done as LOG.info(_LI(","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                              \"%(update)s\"), {\u0027volume_id\u0027: snapshot_id,"},{"line_number":282,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":283,"context_line":"        # Even if the update fails, the volume is ready."},{"line_number":284,"context_line":"        msg \u003d _(\"Snapshot %(snapshot_name)s (%(snapshot_id)s):\""},{"line_number":285,"context_line":"                \"created successfully\")"},{"line_number":286,"context_line":"        LOG.info(msg, {"},{"line_number":287,"context_line":"            \u0027snapshot_name\u0027: snapshot[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_ce083394","line":284,"in_reply_to":"da86d52c_cc431b6a","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.db \u003d db"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def execute(self, context, snapshot_id):"},{"line_number":48,"context_line":"        # NOTE(harlowja): this will fetch the volume from the database, if"},{"line_number":49,"context_line":"        # the volume has been deleted before we got here then this should fail."},{"line_number":50,"context_line":"        #"},{"line_number":51,"context_line":"        # In the future we might want to have a lock on the volume_id so that"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_2d98e369","line":48,"updated":"2015-02-15 21:36:54.000000000","message":"This fetches a snapshot, not a volume.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.db \u003d db"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def execute(self, context, snapshot_id):"},{"line_number":48,"context_line":"        # NOTE(harlowja): this will fetch the volume from the database, if"},{"line_number":49,"context_line":"        # the volume has been deleted before we got here then this should fail."},{"line_number":50,"context_line":"        #"},{"line_number":51,"context_line":"        # In the future we might want to have a lock on the volume_id so that"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_9c32e2f0","line":48,"in_reply_to":"da86d52c_2d98e369","updated":"2015-02-16 02:41:26.000000000","message":"Done","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # In the future we might want to have a lock on the volume_id so that"},{"line_number":52,"context_line":"        # the volume can not be deleted while its still being created?"},{"line_number":53,"context_line":"        snapshot_ref \u003d self.db.snapshot_get(context, snapshot_id)"},{"line_number":54,"context_line":"        LOG.info(_LI(\"ExtractSnapshotRefTask return\""},{"line_number":55,"context_line":"                     \" snapshot_ref: %s\"), snapshot_ref)"},{"line_number":56,"context_line":"        return snapshot_ref"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_4d027770","line":54,"updated":"2015-02-15 21:36:54.000000000","message":"This should be debug. not useful to operators.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # In the future we might want to have a lock on the volume_id so that"},{"line_number":52,"context_line":"        # the volume can not be deleted while its still being created?"},{"line_number":53,"context_line":"        snapshot_ref \u003d self.db.snapshot_get(context, snapshot_id)"},{"line_number":54,"context_line":"        LOG.info(_LI(\"ExtractSnapshotRefTask return\""},{"line_number":55,"context_line":"                     \" snapshot_ref: %s\"), snapshot_ref)"},{"line_number":56,"context_line":"        return snapshot_ref"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_1c56f206","line":54,"in_reply_to":"da86d52c_4d027770","updated":"2015-02-16 02:41:26.000000000","message":"Done","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.host \u003d host"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def execute(self, context, snapshot_ref):"},{"line_number":80,"context_line":"        LOG.info(_LI(\"context: %s\"), context)"},{"line_number":81,"context_line":"        LOG.info(_LI(\"snapshot_ref: %s\"), snapshot_ref)"},{"line_number":82,"context_line":"        snapshot_id \u003d snapshot_ref[\u0027id\u0027]"},{"line_number":83,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_6df65b92","line":80,"updated":"2015-02-15 21:36:54.000000000","message":"Remove this.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.host \u003d host"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def execute(self, context, snapshot_ref):"},{"line_number":80,"context_line":"        LOG.info(_LI(\"context: %s\"), context)"},{"line_number":81,"context_line":"        LOG.info(_LI(\"snapshot_ref: %s\"), snapshot_ref)"},{"line_number":82,"context_line":"        snapshot_id \u003d snapshot_ref[\u0027id\u0027]"},{"line_number":83,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_5cc86a56","line":80,"in_reply_to":"da86d52c_6df65b92","updated":"2015-02-16 02:41:26.000000000","message":"Done","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def execute(self, context, snapshot_ref):"},{"line_number":80,"context_line":"        LOG.info(_LI(\"context: %s\"), context)"},{"line_number":81,"context_line":"        LOG.info(_LI(\"snapshot_ref: %s\"), snapshot_ref)"},{"line_number":82,"context_line":"        snapshot_id \u003d snapshot_ref[\u0027id\u0027]"},{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            volume_utils.notify_about_snapshot_usage(context, snapshot_ref,"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_8df38f9e","line":81,"updated":"2015-02-15 21:36:54.000000000","message":"Remove this.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def execute(self, context, snapshot_ref):"},{"line_number":80,"context_line":"        LOG.info(_LI(\"context: %s\"), context)"},{"line_number":81,"context_line":"        LOG.info(_LI(\"snapshot_ref: %s\"), snapshot_ref)"},{"line_number":82,"context_line":"        snapshot_id \u003d snapshot_ref[\u0027id\u0027]"},{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            volume_utils.notify_about_snapshot_usage(context, snapshot_ref,"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_7cc52e3c","line":81,"in_reply_to":"da86d52c_8df38f9e","updated":"2015-02-16 02:41:26.000000000","message":"Done","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.db \u003d db"},{"line_number":105,"context_line":"        self.driver \u003d driver"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def execute(self, context, snapshot_ref, manage_existing_ref):"},{"line_number":108,"context_line":"        snapshot_id \u003d snapshot_ref[\u0027id\u0027]"},{"line_number":109,"context_line":"        if not self.driver.initialized:"},{"line_number":110,"context_line":"            driver_name \u003d self.driver.__class__.__name__"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_edb40bd6","line":107,"updated":"2015-02-15 21:36:54.000000000","message":"How does this task get manage_existing_ref passed to it?","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.db \u003d db"},{"line_number":105,"context_line":"        self.driver \u003d driver"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def execute(self, context, snapshot_ref, manage_existing_ref):"},{"line_number":108,"context_line":"        snapshot_id \u003d snapshot_ref[\u0027id\u0027]"},{"line_number":109,"context_line":"        if not self.driver.initialized:"},{"line_number":110,"context_line":"            driver_name \u003d self.driver.__class__.__name__"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_3cb496d0","line":107,"in_reply_to":"da86d52c_edb40bd6","updated":"2015-02-16 02:41:26.000000000","message":"it came from \"create_what\" and was passed in taskflow.engines.load(snapshot_flow, store\u003dcreate_what).","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        if not self.driver.initialized:"},{"line_number":110,"context_line":"            driver_name \u003d self.driver.__class__.__name__"},{"line_number":111,"context_line":"            LOG.error(_LE(\"Unable to manage existing snapshot. \""},{"line_number":112,"context_line":"                          \"Volume driver %s not initialized.\"), driver_name)"},{"line_number":113,"context_line":"            flow_common.error_out_snapshot(context, self.db, snapshot_id,"},{"line_number":114,"context_line":"                                           reason\u003d_(\"Volume driver %s \""},{"line_number":115,"context_line":"                                                    \"not initialized.\") %"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_6dc81b57","line":112,"updated":"2015-02-15 21:36:54.000000000","message":"This is not particular useful in all cases. The cinder-volume service could be configured for multi-backend of the same driver. You wouldn\u0027t know which backend it\u0027s talking about. The configured backend name might be helpful for the operator in identifying things.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        if not self.driver.initialized:"},{"line_number":110,"context_line":"            driver_name \u003d self.driver.__class__.__name__"},{"line_number":111,"context_line":"            LOG.error(_LE(\"Unable to manage existing snapshot. \""},{"line_number":112,"context_line":"                          \"Volume driver %s not initialized.\"), driver_name)"},{"line_number":113,"context_line":"            flow_common.error_out_snapshot(context, self.db, snapshot_id,"},{"line_number":114,"context_line":"                                           reason\u003d_(\"Volume driver %s \""},{"line_number":115,"context_line":"                                                    \"not initialized.\") %"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_bce2462d","line":112,"in_reply_to":"da86d52c_6dc81b57","updated":"2015-02-16 02:41:26.000000000","message":"OK","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                                \u0027s_size\u0027: size,"},{"line_number":176,"context_line":"                                \u0027d_consumed\u0027: _consumed(\u0027gigabytes\u0027),"},{"line_number":177,"context_line":"                                \u0027d_quota\u0027: quotas[\u0027gigabytes\u0027]})"},{"line_number":178,"context_line":"                raise exception.VolumeSizeExceedsAvailableQuota("},{"line_number":179,"context_line":"                    requested\u003dsize,"},{"line_number":180,"context_line":"                    consumed\u003d_consumed(\u0027gigabytes\u0027),"},{"line_number":181,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_0de15fd0","line":178,"updated":"2015-02-15 21:36:54.000000000","message":"This is not a volume.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                                \u0027s_size\u0027: size,"},{"line_number":176,"context_line":"                                \u0027d_consumed\u0027: _consumed(\u0027gigabytes\u0027),"},{"line_number":177,"context_line":"                                \u0027d_quota\u0027: quotas[\u0027gigabytes\u0027]})"},{"line_number":178,"context_line":"                raise exception.VolumeSizeExceedsAvailableQuota("},{"line_number":179,"context_line":"                    requested\u003dsize,"},{"line_number":180,"context_line":"                    consumed\u003d_consumed(\u0027gigabytes\u0027),"},{"line_number":181,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_5c1eaa0e","line":178,"in_reply_to":"da86d52c_0de15fd0","updated":"2015-02-16 02:41:26.000000000","message":"the exception message is \"Requested volume or snapshot exceeds allowed gigabytes \", so it\u0027s alright i think.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                        \"already consumed)\")"},{"line_number":186,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":187,"context_line":"                               \u0027d_consumed\u0027: _consumed(\u0027snapshots\u0027)})"},{"line_number":188,"context_line":"                raise exception.VolumeLimitExceeded(allowed\u003d"},{"line_number":189,"context_line":"                                                    quotas[\u0027snapshots\u0027])"},{"line_number":190,"context_line":"            else:"},{"line_number":191,"context_line":"                # If nothing was reraised, ensure we reraise the initial error"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_2de623e9","line":188,"updated":"2015-02-15 21:36:54.000000000","message":"This is not a volume.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                        \"already consumed)\")"},{"line_number":186,"context_line":"                LOG.warn(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":187,"context_line":"                               \u0027d_consumed\u0027: _consumed(\u0027snapshots\u0027)})"},{"line_number":188,"context_line":"                raise exception.VolumeLimitExceeded(allowed\u003d"},{"line_number":189,"context_line":"                                                    quotas[\u0027snapshots\u0027])"},{"line_number":190,"context_line":"            else:"},{"line_number":191,"context_line":"                # If nothing was reraised, ensure we reraise the initial error"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_7c1b6e1c","line":188,"in_reply_to":"da86d52c_2de623e9","updated":"2015-02-16 02:41:26.000000000","message":"Done","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                                                         host)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def execute(self, context, snapshot, new_status):"},{"line_number":308,"context_line":"        LOG.info(_LI(\"Begin to call CreateSnapshotOnFinishTask execute\"))"},{"line_number":309,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":310,"context_line":"        LOG.info(\"New status: %s\", new_status)"},{"line_number":311,"context_line":"        update \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_cdd667f1","line":308,"updated":"2015-02-15 21:36:54.000000000","message":"This should be debug. not useful to operators.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                                                         host)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def execute(self, context, snapshot, new_status):"},{"line_number":308,"context_line":"        LOG.info(_LI(\"Begin to call CreateSnapshotOnFinishTask execute\"))"},{"line_number":309,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":310,"context_line":"        LOG.info(\"New status: %s\", new_status)"},{"line_number":311,"context_line":"        update \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_dc8d3a2c","line":308,"in_reply_to":"da86d52c_cdd667f1","updated":"2015-02-16 02:41:26.000000000","message":"Done","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    def execute(self, context, snapshot, new_status):"},{"line_number":308,"context_line":"        LOG.info(_LI(\"Begin to call CreateSnapshotOnFinishTask execute\"))"},{"line_number":309,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":310,"context_line":"        LOG.info(\"New status: %s\", new_status)"},{"line_number":311,"context_line":"        update \u003d {"},{"line_number":312,"context_line":"            \u0027status\u0027: new_status,"},{"line_number":313,"context_line":"            \u0027created_at\u0027: timeutils.utcnow(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_ed024b71","line":310,"updated":"2015-02-15 21:36:54.000000000","message":"This should be debug. not useful to operators.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    def execute(self, context, snapshot, new_status):"},{"line_number":308,"context_line":"        LOG.info(_LI(\"Begin to call CreateSnapshotOnFinishTask execute\"))"},{"line_number":309,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":310,"context_line":"        LOG.info(\"New status: %s\", new_status)"},{"line_number":311,"context_line":"        update \u003d {"},{"line_number":312,"context_line":"            \u0027status\u0027: new_status,"},{"line_number":313,"context_line":"            \u0027created_at\u0027: timeutils.utcnow(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_fc92fe49","line":310,"in_reply_to":"da86d52c_ed024b71","updated":"2015-02-16 02:41:26.000000000","message":"Done","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":332,"context_line":"def get_flow(context, db, driver, host, snapshot_id, ref):"},{"line_number":333,"context_line":"    \"\"\"Constructs and returns the manager entrypoint flow.\"\"\""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    LOG.info(_LI(\"Input parmeter: context\u003d%(context)s, db\u003d%(db)s,\""},{"line_number":336,"context_line":"                 \"driver\u003d%(driver)s, host\u003d%(host)s, \""},{"line_number":337,"context_line":"                 \"snapshot_id\u003d(snapshot_id)s, ref\u003d%(ref)s\"),"},{"line_number":338,"context_line":"             {\u0027context\u0027: context,"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_6d3d7b2c","line":335,"updated":"2015-02-15 21:36:54.000000000","message":"This should be debug. not useful to operators.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":332,"context_line":"def get_flow(context, db, driver, host, snapshot_id, ref):"},{"line_number":333,"context_line":"    \"\"\"Constructs and returns the manager entrypoint flow.\"\"\""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    LOG.info(_LI(\"Input parmeter: context\u003d%(context)s, db\u003d%(db)s,\""},{"line_number":336,"context_line":"                 \"driver\u003d%(driver)s, host\u003d%(host)s, \""},{"line_number":337,"context_line":"                 \"snapshot_id\u003d(snapshot_id)s, ref\u003d%(ref)s\"),"},{"line_number":338,"context_line":"             {\u0027context\u0027: context,"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_1c98b269","line":335,"in_reply_to":"da86d52c_6d3d7b2c","updated":"2015-02-16 02:41:26.000000000","message":"Done","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c6a2aa13d97a510946d17e4f3be4b752aac56f74","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                      QuotaCommitTask(),"},{"line_number":367,"context_line":"                      CreateSnapshotOnFinishTask(db, notify_end_msg,"},{"line_number":368,"context_line":"                                                 host\u003dhost))"},{"line_number":369,"context_line":"    LOG.info(_LI(\"Begin to return taskflow.engines.\""},{"line_number":370,"context_line":"                 \"load(snapshot_flow,store\u003dcreate_what)\"))"},{"line_number":371,"context_line":"    # Now load (but do not run) the flow using the provided initial data."},{"line_number":372,"context_line":"    return taskflow.engines.load(snapshot_flow, store\u003dcreate_what)"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_4d399740","line":369,"updated":"2015-02-15 21:36:54.000000000","message":"operators have no idea what a taskflow.engines is. This should be debug level. If you want to say manage snapshot for vol, ref, that would be far better.","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d237b29865491eb39aafd9b319d52339a319e55d","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                      QuotaCommitTask(),"},{"line_number":367,"context_line":"                      CreateSnapshotOnFinishTask(db, notify_end_msg,"},{"line_number":368,"context_line":"                                                 host\u003dhost))"},{"line_number":369,"context_line":"    LOG.info(_LI(\"Begin to return taskflow.engines.\""},{"line_number":370,"context_line":"                 \"load(snapshot_flow,store\u003dcreate_what)\"))"},{"line_number":371,"context_line":"    # Now load (but do not run) the flow using the provided initial data."},{"line_number":372,"context_line":"    return taskflow.engines.load(snapshot_flow, store\u003dcreate_what)"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_5ca14a94","line":369,"in_reply_to":"da86d52c_4d399740","updated":"2015-02-16 02:41:26.000000000","message":"Done","commit_id":"7deeb9e5b051b02b6c59fd2bd982111761f55498"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2015 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_bcf13997","line":1,"updated":"2015-02-17 06:28:44.000000000","message":"You should probably keep 2014 for IBM (that is in manage_existing.py header) and add another entry for your company in 2015.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class ExtractSnapshotRefTask(flow_utils.CinderTask):"},{"line_number":39,"context_line":"    \"\"\"Extracts volume reference for given volume id.\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    default_provides \u003d \u0027snapshot_ref\u0027"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_3c354946","line":39,"updated":"2015-02-17 06:28:44.000000000","message":"snapshot","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class ExtractSnapshotRefTask(flow_utils.CinderTask):"},{"line_number":39,"context_line":"    \"\"\"Extracts volume reference for given volume id.\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    default_provides \u003d \u0027snapshot_ref\u0027"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_bcd544e6","line":39,"in_reply_to":"da86d52c_3c354946","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # the snapshot has been deleted before we got here then this should"},{"line_number":50,"context_line":"        # fail."},{"line_number":51,"context_line":"        #"},{"line_number":52,"context_line":"        # In the future we might want to have a lock on the volume_id so that"},{"line_number":53,"context_line":"        # the volume can not be deleted while its still being created?"},{"line_number":54,"context_line":"        snapshot_ref \u003d self.db.snapshot_get(context, snapshot_id)"},{"line_number":55,"context_line":"        LOG.debug(\"ExtractSnapshotRefTask return\""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_9c39d541","line":52,"updated":"2015-02-17 06:28:44.000000000","message":"snapshot","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # the snapshot has been deleted before we got here then this should"},{"line_number":50,"context_line":"        # fail."},{"line_number":51,"context_line":"        #"},{"line_number":52,"context_line":"        # In the future we might want to have a lock on the volume_id so that"},{"line_number":53,"context_line":"        # the volume can not be deleted while its still being created?"},{"line_number":54,"context_line":"        snapshot_ref \u003d self.db.snapshot_get(context, snapshot_id)"},{"line_number":55,"context_line":"        LOG.debug(\"ExtractSnapshotRefTask return\""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_dc075880","line":52,"in_reply_to":"da86d52c_9c39d541","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # fail."},{"line_number":51,"context_line":"        #"},{"line_number":52,"context_line":"        # In the future we might want to have a lock on the volume_id so that"},{"line_number":53,"context_line":"        # the volume can not be deleted while its still being created?"},{"line_number":54,"context_line":"        snapshot_ref \u003d self.db.snapshot_get(context, snapshot_id)"},{"line_number":55,"context_line":"        LOG.debug(\"ExtractSnapshotRefTask return\""},{"line_number":56,"context_line":"                  \" snapshot_ref: %s\", snapshot_ref)"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_5c383d3d","line":53,"updated":"2015-02-17 06:28:44.000000000","message":"snapshot","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # fail."},{"line_number":51,"context_line":"        #"},{"line_number":52,"context_line":"        # In the future we might want to have a lock on the volume_id so that"},{"line_number":53,"context_line":"        # the volume can not be deleted while its still being created?"},{"line_number":54,"context_line":"        snapshot_ref \u003d self.db.snapshot_get(context, snapshot_id)"},{"line_number":55,"context_line":"        LOG.debug(\"ExtractSnapshotRefTask return\""},{"line_number":56,"context_line":"                  \" snapshot_ref: %s\", snapshot_ref)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_fc0a5c88","line":53,"in_reply_to":"da86d52c_5c383d3d","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class NotifySnapshotActionTask(flow_utils.CinderTask):"},{"line_number":68,"context_line":"    \"\"\"Performs a notification about the given volume when called."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    Reversion strategy: N/A"},{"line_number":71,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_dc434dad","line":68,"updated":"2015-02-17 06:28:44.000000000","message":"snapshot","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class NotifySnapshotActionTask(flow_utils.CinderTask):"},{"line_number":68,"context_line":"    \"\"\"Performs a notification about the given volume when called."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    Reversion strategy: N/A"},{"line_number":71,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_1cfe506b","line":68,"in_reply_to":"da86d52c_dc434dad","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                                     self.event_suffix,"},{"line_number":85,"context_line":"                                                     host\u003dself.host)"},{"line_number":86,"context_line":"        except exception.CinderException:"},{"line_number":87,"context_line":"            # If notification sending of volume database entry reading fails"},{"line_number":88,"context_line":"            # then we shouldn\u0027t error out the whole workflow since this is"},{"line_number":89,"context_line":"            # not always information that must be sent for volumes to operate"},{"line_number":90,"context_line":"            LOG.exception(_LE(\"Failed notifying about the snapshot \""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_3c0c6994","line":87,"updated":"2015-02-17 06:28:44.000000000","message":"snapshot","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                                     self.event_suffix,"},{"line_number":85,"context_line":"                                                     host\u003dself.host)"},{"line_number":86,"context_line":"        except exception.CinderException:"},{"line_number":87,"context_line":"            # If notification sending of volume database entry reading fails"},{"line_number":88,"context_line":"            # then we shouldn\u0027t error out the whole workflow since this is"},{"line_number":89,"context_line":"            # not always information that must be sent for volumes to operate"},{"line_number":90,"context_line":"            LOG.exception(_LE(\"Failed notifying about the snapshot \""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_7cf66c90","line":87,"in_reply_to":"da86d52c_3c0c6994","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        except exception.CinderException:"},{"line_number":87,"context_line":"            # If notification sending of volume database entry reading fails"},{"line_number":88,"context_line":"            # then we shouldn\u0027t error out the whole workflow since this is"},{"line_number":89,"context_line":"            # not always information that must be sent for volumes to operate"},{"line_number":90,"context_line":"            LOG.exception(_LE(\"Failed notifying about the snapshot \""},{"line_number":91,"context_line":"                              \"action %(event)s for snapshot %(snapshot_id)s\"),"},{"line_number":92,"context_line":"                          {\u0027event\u0027: self.event_suffix,"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_5c0f5d88","line":89,"updated":"2015-02-17 06:28:44.000000000","message":"snapshots","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        except exception.CinderException:"},{"line_number":87,"context_line":"            # If notification sending of volume database entry reading fails"},{"line_number":88,"context_line":"            # then we shouldn\u0027t error out the whole workflow since this is"},{"line_number":89,"context_line":"            # not always information that must be sent for volumes to operate"},{"line_number":90,"context_line":"            LOG.exception(_LE(\"Failed notifying about the snapshot \""},{"line_number":91,"context_line":"                              \"action %(event)s for snapshot %(snapshot_id)s\"),"},{"line_number":92,"context_line":"                          {\u0027event\u0027: self.event_suffix,"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_fc317c5a","line":89,"in_reply_to":"da86d52c_5c0f5d88","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class PrepareForQuotaReservationTask(flow_utils.CinderTask):"},{"line_number":97,"context_line":"    \"\"\"Gets the volume size from the driver.\"\"\""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    default_provides \u003d set([\u0027size\u0027])"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_7c250109","line":97,"updated":"2015-02-17 06:28:44.000000000","message":"snapshot","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class PrepareForQuotaReservationTask(flow_utils.CinderTask):"},{"line_number":97,"context_line":"    \"\"\"Gets the volume size from the driver.\"\"\""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    default_provides \u003d set([\u0027size\u0027])"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_3c38743c","line":97,"in_reply_to":"da86d52c_7c250109","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"562f5dc9a28216d2d9199704eaa5cd6575f77d14","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                \u0027snapshot_properties\u0027: snapshot_ref}"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class QuotaReserveTask(flow_utils.CinderTask):"},{"line_number":128,"context_line":"    \"\"\"Reserves a single volume with the given size \u0026 the given volume type."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    Reversion strategy: rollback the quota reservation."}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_0e97f43a","line":127,"updated":"2015-02-19 15:39:27.000000000","message":"More like a question - I wonder why we\u0027re reserving quotas here while there are no reservations done in create_snapshot code in volume.manager. I\u0027m probably missing something as we\u0027re freeing quotas in delete_snapshot but lets clarify that.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                \u0027snapshot_properties\u0027: snapshot_ref}"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class QuotaReserveTask(flow_utils.CinderTask):"},{"line_number":128,"context_line":"    \"\"\"Reserves a single volume with the given size \u0026 the given volume type."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    Reversion strategy: rollback the quota reservation."}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_dc98381e","line":127,"in_reply_to":"da86d52c_0e97f43a","updated":"2015-02-26 01:54:04.000000000","message":"The reservations is created in volume.api by \u0027create_snapshot_in_db\u0027 method.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class QuotaReserveTask(flow_utils.CinderTask):"},{"line_number":128,"context_line":"    \"\"\"Reserves a single volume with the given size \u0026 the given volume type."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    Reversion strategy: rollback the quota reservation."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_fc7811fa","line":128,"updated":"2015-02-17 06:28:44.000000000","message":"snapshot.\n\nvolume type is not used here.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class QuotaReserveTask(flow_utils.CinderTask):"},{"line_number":128,"context_line":"    \"\"\"Reserves a single volume with the given size \u0026 the given volume type."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    Reversion strategy: rollback the quota reservation."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_fc9b3c15","line":128,"in_reply_to":"da86d52c_fc7811fa","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"562f5dc9a28216d2d9199704eaa5cd6575f77d14","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                                \u0027s_size\u0027: size,"},{"line_number":176,"context_line":"                                \u0027d_consumed\u0027: _consumed(\u0027gigabytes\u0027),"},{"line_number":177,"context_line":"                                \u0027d_quota\u0027: quotas[\u0027gigabytes\u0027]})"},{"line_number":178,"context_line":"                raise exception.VolumeSizeExceedsAvailableQuota("},{"line_number":179,"context_line":"                    requested\u003dsize,"},{"line_number":180,"context_line":"                    consumed\u003d_consumed(\u0027gigabytes\u0027),"},{"line_number":181,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_4ed2cc00","line":178,"updated":"2015-02-19 15:39:27.000000000","message":"SnapshotLimitExceeded is probably more appropriate here.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                                \u0027s_size\u0027: size,"},{"line_number":176,"context_line":"                                \u0027d_consumed\u0027: _consumed(\u0027gigabytes\u0027),"},{"line_number":177,"context_line":"                                \u0027d_quota\u0027: quotas[\u0027gigabytes\u0027]})"},{"line_number":178,"context_line":"                raise exception.VolumeSizeExceedsAvailableQuota("},{"line_number":179,"context_line":"                    requested\u003dsize,"},{"line_number":180,"context_line":"                    consumed\u003d_consumed(\u0027gigabytes\u0027),"},{"line_number":181,"context_line":"                    quota\u003dquotas[\u0027gigabytes\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_af17c843","line":178,"in_reply_to":"da86d52c_4ed2cc00","updated":"2015-02-26 01:54:04.000000000","message":"Because here to judge whether the size of snapshot is over, and the message of VolumeSizeExceedsAvailableQuota is \u0027Requested volume or snapshot exceeds allowed gigabytes quota...\u0027. So I think it\u0027s fine in here.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d526619604fa62dc558350c62488ef7c2c02a119","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2015 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"},{"line_number":5,"context_line":"#   a copy of the License at"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_8a5d6b4b","line":2,"updated":"2015-03-04 06:28:46.000000000","message":"I think you should add your company here.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"93ffccba904d382a16fcf2076bd064730ba1303c","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"ACTION \u003d \u0027snapshot:manage_existing\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class ExtractSnapshotRefTask(flow_utils.CinderTask):"},{"line_number":39,"context_line":"    \"\"\"Extracts snapshot reference for given snapshot id.\"\"\""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_fea40c09","line":37,"updated":"2015-02-26 06:29:04.000000000","message":"This all just makes me want to cry a little, but it seems the consensus is \"more taskflow\" so I can\u0027t really recommend you do something different, especially since we implemented it for the volume version.\n\nGuess we better get moving and eliminate this part in part out of taskflow thing and fully commit to it at this point.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"fdc1843f712420d5bbc96faf8731d30d61bcdfbd","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"ACTION \u003d \u0027snapshot:manage_existing\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class ExtractSnapshotRefTask(flow_utils.CinderTask):"},{"line_number":39,"context_line":"    \"\"\"Extracts snapshot reference for given snapshot id.\"\"\""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_363fa4b5","line":37,"in_reply_to":"ba7be1f8_fea40c09","updated":"2015-02-26 10:14:20.000000000","message":"I guess you don\u0027t want the snapshot manage implemented using \u0027taskflow\u0027? I","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d526619604fa62dc558350c62488ef7c2c02a119","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        super(QuotaReserveTask, self).__init__(addons\u003d[ACTION])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def execute(self, context, size, optional_args):"},{"line_number":147,"context_line":"        try:"},{"line_number":148,"context_line":"            if CONF.no_snapshot_gb_quota:"},{"line_number":149,"context_line":"                reserve_opts \u003d {\u0027snapshots\u0027: 1, \u0027gigabytes\u0027: size}"},{"line_number":150,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_8dae65e6","line":147,"updated":"2015-03-04 06:28:46.000000000","message":"A lot of this code is a duplication of  _create_snapshots_in_db_reserve() in volume/manager.py. It will be good to reuse the same code.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"aa2a9216b2a761df2332b2460ab84a36b1602878","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        super(QuotaReserveTask, self).__init__(addons\u003d[ACTION])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def execute(self, context, size, optional_args):"},{"line_number":147,"context_line":"        try:"},{"line_number":148,"context_line":"            if CONF.no_snapshot_gb_quota:"},{"line_number":149,"context_line":"                reserve_opts \u003d {\u0027snapshots\u0027: 1, \u0027gigabytes\u0027: size}"},{"line_number":150,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_5c6ed9ca","line":147,"in_reply_to":"9a80dd14_8dae65e6","updated":"2015-03-04 10:09:58.000000000","message":"Reuse this soon:)","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8bd50827df4e2daeb9d0fde6d05c14afb1b03f86","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        #"},{"line_number":52,"context_line":"        # In the future we might want to have a lock on the snapshot_id so that"},{"line_number":53,"context_line":"        # the snapshot can not be deleted while its still being created?"},{"line_number":54,"context_line":"        snapshot_ref \u003d self.db.snapshot_get(context, snapshot_id)"},{"line_number":55,"context_line":"        LOG.debug(\"ExtractSnapshotRefTask return\""},{"line_number":56,"context_line":"                  \" snapshot_ref: %s\", snapshot_ref)"},{"line_number":57,"context_line":"        return snapshot_ref"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a80dd14_32cba054","line":54,"updated":"2015-03-06 20:31:11.000000000","message":"snapshot objects?","commit_id":"78db10464541d20a81446328cbd7f3fd03b2fe97"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8bd50827df4e2daeb9d0fde6d05c14afb1b03f86","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            model_update \u003d {}"},{"line_number":243,"context_line":"        model_update.update({\u0027size\u0027: size})"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            snapshot_ref \u003d self.db.snapshot_update(context,"},{"line_number":246,"context_line":"                                                   snapshot_ref[\u0027id\u0027],"},{"line_number":247,"context_line":"                                                   model_update)"},{"line_number":248,"context_line":"        except exception.CinderException:"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a80dd14_b22cf003","line":245,"updated":"2015-03-06 20:31:11.000000000","message":"Here too.","commit_id":"78db10464541d20a81446328cbd7f3fd03b2fe97"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8bd50827df4e2daeb9d0fde6d05c14afb1b03f86","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            # or are there other side-effects that this will cause if the"},{"line_number":288,"context_line":"            # status isn\u0027t updated correctly (aka it will likely be stuck in"},{"line_number":289,"context_line":"            # \u0027building\u0027 if this fails)??"},{"line_number":290,"context_line":"            snapshot \u003d self.db.snapshot_update(context, snapshot_id, update)"},{"line_number":291,"context_line":"            # Now use the parent to notify."},{"line_number":292,"context_line":"            super(CreateSnapshotOnFinishTask, self).execute(context, snapshot)"},{"line_number":293,"context_line":"        except exception.CinderException:"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a80dd14_41d01fc9","line":290,"updated":"2015-03-06 20:31:11.000000000","message":"Here too.","commit_id":"78db10464541d20a81446328cbd7f3fd03b2fe97"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"fbac771ab77907f542781160b8240bdc268ebca4","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            # then we shouldn\u0027t error out the whole workflow since this is"},{"line_number":90,"context_line":"            # not always information that must be sent for snapshots to operate"},{"line_number":91,"context_line":"            LOG.exception(_LE(\"Failed notifying about the snapshot \""},{"line_number":92,"context_line":"                              \"action %(event)s for snapshot %(snapshot_id)s\"),"},{"line_number":93,"context_line":"                          {\u0027event\u0027: self.event_suffix,"},{"line_number":94,"context_line":"                           \u0027snapshot_id\u0027: snapshot_id})"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_da503a0d","line":92,"updated":"2015-03-09 19:40:05.000000000","message":"Suggest \u0027.\u0027 at EOL.","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f1e526f43e74e7ed066b80b8ca165e07eea4d0bc","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            # then we shouldn\u0027t error out the whole workflow since this is"},{"line_number":90,"context_line":"            # not always information that must be sent for snapshots to operate"},{"line_number":91,"context_line":"            LOG.exception(_LE(\"Failed notifying about the snapshot \""},{"line_number":92,"context_line":"                              \"action %(event)s for snapshot %(snapshot_id)s\"),"},{"line_number":93,"context_line":"                          {\u0027event\u0027: self.event_suffix,"},{"line_number":94,"context_line":"                           \u0027snapshot_id\u0027: snapshot_id})"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_ca813ffc","line":92,"in_reply_to":"9a80dd14_da503a0d","updated":"2015-03-10 02:30:20.000000000","message":"Done","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"fbac771ab77907f542781160b8240bdc268ebca4","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                QUOTAS.commit(context, reservations,"},{"line_number":222,"context_line":"                              project_id\u003dcontext.project_id)"},{"line_number":223,"context_line":"        except Exception:"},{"line_number":224,"context_line":"            LOG.exception(_LE(\"Failed to update quota for deleting \""},{"line_number":225,"context_line":"                              \"snapshots: %s\"), snapshot[\u0027id\u0027])"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_bab3864b","line":224,"updated":"2015-03-09 19:40:05.000000000","message":"suggest changing for -\u003e while","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f1e526f43e74e7ed066b80b8ca165e07eea4d0bc","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                QUOTAS.commit(context, reservations,"},{"line_number":222,"context_line":"                              project_id\u003dcontext.project_id)"},{"line_number":223,"context_line":"        except Exception:"},{"line_number":224,"context_line":"            LOG.exception(_LE(\"Failed to update quota for deleting \""},{"line_number":225,"context_line":"                              \"snapshots: %s\"), snapshot[\u0027id\u0027])"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_ea9b6363","line":224,"in_reply_to":"9a80dd14_bab3864b","updated":"2015-03-10 02:30:20.000000000","message":"Done","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"fbac771ab77907f542781160b8240bdc268ebca4","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            snapshot_object.save(context)"},{"line_number":250,"context_line":"        except exception.CinderException:"},{"line_number":251,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(snapshot_id)s\""},{"line_number":252,"context_line":"                              \" with creation provided model %(model)s\"),"},{"line_number":253,"context_line":"                          {\u0027snapshot_id\u0027: snapshot_ref[\u0027id\u0027],"},{"line_number":254,"context_line":"                           \u0027model\u0027: model_update})"},{"line_number":255,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_5a99aac2","line":252,"updated":"2015-03-09 19:40:05.000000000","message":"suggest \u0027.\u0027 here.","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f1e526f43e74e7ed066b80b8ca165e07eea4d0bc","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            snapshot_object.save(context)"},{"line_number":250,"context_line":"        except exception.CinderException:"},{"line_number":251,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(snapshot_id)s\""},{"line_number":252,"context_line":"                              \" with creation provided model %(model)s\"),"},{"line_number":253,"context_line":"                          {\u0027snapshot_id\u0027: snapshot_ref[\u0027id\u0027],"},{"line_number":254,"context_line":"                           \u0027model\u0027: model_update})"},{"line_number":255,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_eab283e3","line":252,"in_reply_to":"9a80dd14_5a99aac2","updated":"2015-03-10 02:30:20.000000000","message":"Done","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"fbac771ab77907f542781160b8240bdc268ebca4","unresolved":false,"context_lines":[{"line_number":297,"context_line":"            super(CreateSnapshotOnFinishTask, self).execute(context, snapshot)"},{"line_number":298,"context_line":"        except exception.CinderException:"},{"line_number":299,"context_line":"            LOG.exception(_LE(\"Failed updating snapshot %(snapshot_id)s with \""},{"line_number":300,"context_line":"                              \"%(update)s\"), {\u0027snapshot_id\u0027: snapshot_id,"},{"line_number":301,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":302,"context_line":"        # Even if the update fails, the snapshot is ready."},{"line_number":303,"context_line":"        LOG.info(_LI(\"Snapshot %s created successfully\"), snapshot_id)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_fad6de4d","line":300,"updated":"2015-03-09 19:40:05.000000000","message":"Suggest \u0027.\u0027","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f1e526f43e74e7ed066b80b8ca165e07eea4d0bc","unresolved":false,"context_lines":[{"line_number":297,"context_line":"            super(CreateSnapshotOnFinishTask, self).execute(context, snapshot)"},{"line_number":298,"context_line":"        except exception.CinderException:"},{"line_number":299,"context_line":"            LOG.exception(_LE(\"Failed updating snapshot %(snapshot_id)s with \""},{"line_number":300,"context_line":"                              \"%(update)s\"), {\u0027snapshot_id\u0027: snapshot_id,"},{"line_number":301,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":302,"context_line":"        # Even if the update fails, the snapshot is ready."},{"line_number":303,"context_line":"        LOG.info(_LI(\"Snapshot %s created successfully\"), snapshot_id)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_2acf3b57","line":300,"in_reply_to":"9a80dd14_fad6de4d","updated":"2015-03-10 02:30:20.000000000","message":"Done","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"fbac771ab77907f542781160b8240bdc268ebca4","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                              \"%(update)s\"), {\u0027snapshot_id\u0027: snapshot_id,"},{"line_number":301,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":302,"context_line":"        # Even if the update fails, the snapshot is ready."},{"line_number":303,"context_line":"        LOG.info(_LI(\"Snapshot %s created successfully\"), snapshot_id)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"def get_flow(context, db, driver, host, snapshot_id, ref):"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_1acad2a0","line":303,"updated":"2015-03-09 19:40:05.000000000","message":"suggest \u0027.\u0027 here.","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f1e526f43e74e7ed066b80b8ca165e07eea4d0bc","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                              \"%(update)s\"), {\u0027snapshot_id\u0027: snapshot_id,"},{"line_number":301,"context_line":"                                              \u0027update\u0027: update})"},{"line_number":302,"context_line":"        # Even if the update fails, the snapshot is ready."},{"line_number":303,"context_line":"        LOG.info(_LI(\"Snapshot %s created successfully\"), snapshot_id)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"def get_flow(context, db, driver, host, snapshot_id, ref):"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_4adaaf17","line":303,"in_reply_to":"9a80dd14_1acad2a0","updated":"2015-03-10 02:30:20.000000000","message":"Done","commit_id":"a64d7b34fc65d473773858d22024e3c1e59063e5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7c7bcb249c297b34cbbce4602ae2f39b820730dc","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def execute(self, context, snapshot_ref, manage_existing_ref):"},{"line_number":107,"context_line":"        snapshot_id \u003d snapshot_ref[\u0027id\u0027]"},{"line_number":108,"context_line":"        if not self.driver.initialized:"},{"line_number":109,"context_line":"            driver_name \u003d\\"},{"line_number":110,"context_line":"                self.driver.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":111,"context_line":"            LOG.error(_LE(\"Unable to manage existing snapshot. \""},{"line_number":112,"context_line":"                          \"Volume driver %s not initialized.\"), driver_name)"}],"source_content_type":"text/x-python","patch_set":39,"id":"fabf19d9_ae48af88","line":109,"updated":"2015-04-18 13:57:38.000000000","message":"Please, use () instead of \\","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d69369c8b831c9c5b4fb4600bc23b961bfdccf72","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def execute(self, context, snapshot_ref, manage_existing_ref):"},{"line_number":107,"context_line":"        snapshot_id \u003d snapshot_ref[\u0027id\u0027]"},{"line_number":108,"context_line":"        if not self.driver.initialized:"},{"line_number":109,"context_line":"            driver_name \u003d\\"},{"line_number":110,"context_line":"                self.driver.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":111,"context_line":"            LOG.error(_LE(\"Unable to manage existing snapshot. \""},{"line_number":112,"context_line":"                          \"Volume driver %s not initialized.\"), driver_name)"}],"source_content_type":"text/x-python","patch_set":39,"id":"dac4157f_bb7c6121","line":109,"in_reply_to":"fabf19d9_ae48af88","updated":"2015-04-20 09:54:32.000000000","message":"Done","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7c7bcb249c297b34cbbce4602ae2f39b820730dc","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        model_update \u003d self.driver.manage_existing_snapshot("},{"line_number":240,"context_line":"            snapshot\u003dsnapshot_ref,"},{"line_number":241,"context_line":"            existing_ref\u003dmanage_existing_ref)"},{"line_number":242,"context_line":"        if not model_update:"},{"line_number":243,"context_line":"            model_update \u003d {}"},{"line_number":244,"context_line":"        model_update.update({\u0027size\u0027: size})"},{"line_number":245,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":39,"id":"fabf19d9_6e5bb755","line":242,"updated":"2015-04-18 13:57:38.000000000","message":"In which cases this statement will be true?","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d69369c8b831c9c5b4fb4600bc23b961bfdccf72","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        model_update \u003d self.driver.manage_existing_snapshot("},{"line_number":240,"context_line":"            snapshot\u003dsnapshot_ref,"},{"line_number":241,"context_line":"            existing_ref\u003dmanage_existing_ref)"},{"line_number":242,"context_line":"        if not model_update:"},{"line_number":243,"context_line":"            model_update \u003d {}"},{"line_number":244,"context_line":"        model_update.update({\u0027size\u0027: size})"},{"line_number":245,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":39,"id":"dac4157f_fb6c190a","line":242,"in_reply_to":"fabf19d9_6e5bb755","updated":"2015-04-20 09:54:32.000000000","message":"Like lvm driver, It will return None, so this statement will be true.","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"27ba69c6b210d69478d2a839c56ead7b7de473b0","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            snapshot_object \u003d objects.Snapshot.get_by_id(context,"},{"line_number":247,"context_line":"                                                         snapshot_ref[\u0027id\u0027])"},{"line_number":248,"context_line":"            snapshot_object.update(model_update)"},{"line_number":249,"context_line":"            snapshot_object.save(context)"},{"line_number":250,"context_line":"        except exception.CinderException:"},{"line_number":251,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(snapshot_id)s\""},{"line_number":252,"context_line":"                              \" with creation provided model %(model)s.\"),"}],"source_content_type":"text/x-python","patch_set":53,"id":"7a016987_375f22e7","line":249,"updated":"2015-05-15 13:29:13.000000000","message":"Please remove the context here and just use: snapshot_object.save().","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d2fa86d18814686379e4beef0b390bbee15ea2ef","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            snapshot_object \u003d objects.Snapshot.get_by_id(context,"},{"line_number":247,"context_line":"                                                         snapshot_ref[\u0027id\u0027])"},{"line_number":248,"context_line":"            snapshot_object.update(model_update)"},{"line_number":249,"context_line":"            snapshot_object.save(context)"},{"line_number":250,"context_line":"        except exception.CinderException:"},{"line_number":251,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(snapshot_id)s\""},{"line_number":252,"context_line":"                              \" with creation provided model %(model)s.\"),"}],"source_content_type":"text/x-python","patch_set":53,"id":"7a016987_98aca9a1","line":249,"in_reply_to":"7a016987_375f22e7","updated":"2015-05-17 03:39:57.000000000","message":"Done","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"27ba69c6b210d69478d2a839c56ead7b7de473b0","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            snapshot_object \u003d objects.Snapshot.get_by_id(context,"},{"line_number":291,"context_line":"                                                         snapshot_id)"},{"line_number":292,"context_line":"            snapshot_object.update(update)"},{"line_number":293,"context_line":"            snapshot_object.save(context)"},{"line_number":294,"context_line":"            # Now use the parent to notify."},{"line_number":295,"context_line":"            super(CreateSnapshotOnFinishTask, self).execute(context, snapshot)"},{"line_number":296,"context_line":"        except exception.CinderException:"}],"source_content_type":"text/x-python","patch_set":53,"id":"7a016987_b7731280","line":293,"updated":"2015-05-15 13:29:13.000000000","message":"Ditto","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d2fa86d18814686379e4beef0b390bbee15ea2ef","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            snapshot_object \u003d objects.Snapshot.get_by_id(context,"},{"line_number":291,"context_line":"                                                         snapshot_id)"},{"line_number":292,"context_line":"            snapshot_object.update(update)"},{"line_number":293,"context_line":"            snapshot_object.save(context)"},{"line_number":294,"context_line":"            # Now use the parent to notify."},{"line_number":295,"context_line":"            super(CreateSnapshotOnFinishTask, self).execute(context, snapshot)"},{"line_number":296,"context_line":"        except exception.CinderException:"}],"source_content_type":"text/x-python","patch_set":53,"id":"7a016987_78afad94","line":293,"in_reply_to":"7a016987_b7731280","updated":"2015-05-17 03:39:57.000000000","message":"Done","commit_id":"d867f3ee8316bd7e544b47256370f3f811298495"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"d089e94b1c3f310d61c921baec9c974a526fa5ed","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class CreateSnapshotOnFinishTask(NotifySnapshotActionTask):"},{"line_number":262,"context_line":"    \"\"\"On successful snapshot creation this will perform final snapshot"},{"line_number":263,"context_line":"    actions."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    When a snapshot is created successfully it is expected that MQ"},{"line_number":266,"context_line":"    notifications and database updates will occur to \u0027signal\u0027 to others that"}],"source_content_type":"text/x-python","patch_set":57,"id":"7a016987_8f986f1d","line":263,"updated":"2015-05-22 07:07:27.000000000","message":"A multi line docstring has a one-line summary, less than 80 characters.\n\nhttp://docs.openstack.org/developer/hacking/#docstrings\nhttps://review.openstack.org/184820","commit_id":"8d82c6b0f7c95a4a25ed6bacfe6c6c046cf11546"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"9b9495ef0ade33bba7f1dd043a18dabe59854e10","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class CreateSnapshotOnFinishTask(NotifySnapshotActionTask):"},{"line_number":262,"context_line":"    \"\"\"On successful snapshot creation this will perform final snapshot"},{"line_number":263,"context_line":"    actions."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    When a snapshot is created successfully it is expected that MQ"},{"line_number":266,"context_line":"    notifications and database updates will occur to \u0027signal\u0027 to others that"}],"source_content_type":"text/x-python","patch_set":57,"id":"7a016987_d2484ece","line":263,"in_reply_to":"7a016987_8f986f1d","updated":"2015-05-22 08:03:24.000000000","message":"hi~  Thanks for your review to manage/unmanage snapshots.I will fix the code according your review ASAP. But please do not commit patch. It will influence my code in local machine and it\u0027s hard to find what be modified.Thanks","commit_id":"8d82c6b0f7c95a4a25ed6bacfe6c6c046cf11546"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"e83f08630fab6d6a0df0335d815b2e82f702e68d","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        LOG.info(_LI(\"Snapshot %s created successfully.\"), snapshot_id)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"def get_flow(context, db, driver, host, snapshot_id, ref):"},{"line_number":304,"context_line":"    \"\"\"Constructs and returns the manager entrypoint flow.\"\"\""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    LOG.debug(\"Input parmeter: context\u003d%(context)s, db\u003d%(db)s,\""}],"source_content_type":"text/x-python","patch_set":58,"id":"7a016987_df5960fe","line":303,"updated":"2015-05-23 03:44:19.000000000","message":"Based on the discussion at the Summit with regards to TaskFlow, we should not be pushing this patch in until we really decided on whether to keep it in or pull it totally out.","commit_id":"f6bcac1c1cb10ac816a563d861eaa2bdae4630c0"},{"author":{"_account_id":9988,"name":"Tina Tang","email":"tina.tang@emc.com","username":"Tina"},"change_message_id":"c2c6befd9b9ff78622be35c4ae1abc643441f627","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        snapshot \u003d result[\u0027snapshot_properties\u0027]"},{"line_number":214,"context_line":"        try:"},{"line_number":215,"context_line":"            reserve_opts \u003d {\u0027snapshots\u0027: -1,"},{"line_number":216,"context_line":"                            \u0027gigabytes\u0027: -snapshot[\u0027volume_size\u0027]}"},{"line_number":217,"context_line":"            reservations \u003d QUOTAS.reserve(context,"},{"line_number":218,"context_line":"                                          project_id\u003dcontext.project_id,"},{"line_number":219,"context_line":"                                          **reserve_opts)"}],"source_content_type":"text/x-python","patch_set":59,"id":"fa32b979_2098b877","line":216,"updated":"2015-06-17 07:28:17.000000000","message":"In line 151 the size returned by manage_existing_snapshot_get_size is used, however, the snapshot[\u0027volume_size\u0027] is used here. Is this a defect?\n\nBesides, I have a question regrading to the quota reservations. The normal snapshot creation procedure assumed that the snapshot size is the source volume size and do the quota reservations in the cinder.volume.api.create_snapshot_in_db. And seems the managing existing snapshot has also invoked the method create_snapshot_in_db. Could you please elaborate on why the managing snapshot needs an additional quota handling and need retrieve the snapshot size from drivers instead of using snapshot[\u0027volume_size\u0027] compare to the normal snapshot creation?  Any special considerations?\n\nThanks,\nTina","commit_id":"e8be6ba074fee0cf4a00000e6a9d74635817016d"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"b069a3afaa91b4ee6d1b295645ff712258313e4d","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                                                         host)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def execute(self, context, snapshot, new_status):"},{"line_number":278,"context_line":"        LOG.debug(\"Begin to call CreateSnapshotOnFinishTask execute\")"},{"line_number":279,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":280,"context_line":"        LOG.debug(\"New status: %s\", new_status)"},{"line_number":281,"context_line":"        update \u003d {"}],"source_content_type":"text/x-python","patch_set":61,"id":"ba3cc151_8eb20ae4","line":278,"updated":"2015-07-08 13:58:01.000000000","message":"\".\" at EOL","commit_id":"addae73fb44b61e06b31df74e4cab60126a758fc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a7be9e45be400343e680f3992778f251644d6bcd","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.db \u003d db"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def execute(self, context, snapshot_id):"},{"line_number":48,"context_line":"        # NOTE: this will fetch the snapshot from the database, if"},{"line_number":49,"context_line":"        # the snapshot has been deleted before we got here then this should"},{"line_number":50,"context_line":"        # fail."},{"line_number":51,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_b66fee5e","line":48,"updated":"2015-07-29 06:11:08.000000000","message":"Please add  your name after the note.\n\nNOTE(wanghao)","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e25605c47719e003c9f64cf6745bf6d679a5dc94","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.db \u003d db"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def execute(self, context, snapshot_id):"},{"line_number":48,"context_line":"        # NOTE: this will fetch the snapshot from the database, if"},{"line_number":49,"context_line":"        # the snapshot has been deleted before we got here then this should"},{"line_number":50,"context_line":"        # fail."},{"line_number":51,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_1c584389","line":48,"in_reply_to":"3a50d1a3_b66fee5e","updated":"2015-07-29 07:07:29.000000000","message":"Done","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a7be9e45be400343e680f3992778f251644d6bcd","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            snapshot_object.update(model_update)"},{"line_number":249,"context_line":"            snapshot_object.save()"},{"line_number":250,"context_line":"        except exception.CinderException:"},{"line_number":251,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(snapshot_id)s\""},{"line_number":252,"context_line":"                              \" with creation provided model %(model)s.\"),"},{"line_number":253,"context_line":"                          {\u0027snapshot_id\u0027: snapshot_ref[\u0027id\u0027],"},{"line_number":254,"context_line":"                           \u0027model\u0027: model_update})"}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_709ded08","line":251,"updated":"2015-07-29 06:11:08.000000000","message":"volume -\u003e snapshot","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e25605c47719e003c9f64cf6745bf6d679a5dc94","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            snapshot_object.update(model_update)"},{"line_number":249,"context_line":"            snapshot_object.save()"},{"line_number":250,"context_line":"        except exception.CinderException:"},{"line_number":251,"context_line":"            LOG.exception(_LE(\"Failed updating model of volume %(snapshot_id)s\""},{"line_number":252,"context_line":"                              \" with creation provided model %(model)s.\"),"},{"line_number":253,"context_line":"                          {\u0027snapshot_id\u0027: snapshot_ref[\u0027id\u0027],"},{"line_number":254,"context_line":"                           \u0027model\u0027: model_update})"}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_7cc147e3","line":251,"in_reply_to":"3a50d1a3_709ded08","updated":"2015-07-29 07:07:29.000000000","message":"Done","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a7be9e45be400343e680f3992778f251644d6bcd","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"def get_flow(context, db, driver, host, snapshot_id, ref):"},{"line_number":304,"context_line":"    \"\"\"Constructs and returns the manager entrypoint flow.\"\"\""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    LOG.debug(\"Input parmeter: context\u003d%(context)s, db\u003d%(db)s,\""},{"line_number":307,"context_line":"              \"driver\u003d%(driver)s, host\u003d%(host)s, \""}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_f0a81d22","line":304,"updated":"2015-07-29 06:11:08.000000000","message":"entry point","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e25605c47719e003c9f64cf6745bf6d679a5dc94","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"def get_flow(context, db, driver, host, snapshot_id, ref):"},{"line_number":304,"context_line":"    \"\"\"Constructs and returns the manager entrypoint flow.\"\"\""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    LOG.debug(\"Input parmeter: context\u003d%(context)s, db\u003d%(db)s,\""},{"line_number":307,"context_line":"              \"driver\u003d%(driver)s, host\u003d%(host)s, \""}],"source_content_type":"text/x-python","patch_set":65,"id":"3a50d1a3_fcad5731","line":304,"in_reply_to":"3a50d1a3_f0a81d22","updated":"2015-07-29 07:07:29.000000000","message":"Done","commit_id":"fa8b3e8f6934a50a45029c67874b92e470dd312f"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7016d2606ee72a7627e8d154155fdb5865e12d81","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            model_update \u003d {}"},{"line_number":244,"context_line":"        model_update.update({\u0027size\u0027: size})"},{"line_number":245,"context_line":"        try:"},{"line_number":246,"context_line":"            snapshot_object \u003d objects.Snapshot.get_by_id(context,"},{"line_number":247,"context_line":"                                                         snapshot_ref[\u0027id\u0027])"},{"line_number":248,"context_line":"            snapshot_object.update(model_update)"},{"line_number":249,"context_line":"            snapshot_object.save()"}],"source_content_type":"text/x-python","patch_set":68,"id":"3a50d1a3_c0ecd7f5","line":246,"updated":"2015-07-30 17:20:00.000000000","message":"Why can\u0027t you use snapshot_ref, which is a versionedobject, instead of looking it up here again?","commit_id":"bdd67a81b2e823eec8992a38563bfa6d025b2d4c"}],"cinder/volume/manager.py":[{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"94a782d7d6f8957abff2152155887d295765289b","unresolved":false,"context_lines":[{"line_number":2017,"context_line":"                snapshot_id,"},{"line_number":2018,"context_line":"                ref)"},{"line_number":2019,"context_line":"        except Exception:"},{"line_number":2020,"context_line":"            LOG.exception(_(\"Failed to create manage_existing flow.\"))"},{"line_number":2021,"context_line":"            raise exception.CinderException("},{"line_number":2022,"context_line":"                _(\"Failed to create manage existing flow.\"))"},{"line_number":2023,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_84b3254c","line":2020,"updated":"2015-01-05 14:10:51.000000000","message":"Use _LE for LOG.exception","commit_id":"72b7d5753fa3d35f16b7aeaad30c6bfbdadd51ad"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":2007,"context_line":"                                  model_update)"},{"line_number":2008,"context_line":""},{"line_number":2009,"context_line":"    def manage_existing_snapshot(self, ctxt, snapshot_id, ref\u003dNone):"},{"line_number":2010,"context_line":"        LOG.debug(\u0027manage_existing: managing %s.\u0027 % ref)"},{"line_number":2011,"context_line":"        try:"},{"line_number":2012,"context_line":"            flow_engine \u003d manage_existing_snapshot.get_flow("},{"line_number":2013,"context_line":"                ctxt,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_83ed9727","line":2010,"updated":"2015-01-15 20:28:16.000000000","message":"% \u003d\u003e ,\nmanage_existing \u003d\u003e manage_existing_snapshot","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"422b9ca75ac997b23c297535d5d4662ed68ab3d6","unresolved":false,"context_lines":[{"line_number":2016,"context_line":"                self.host,"},{"line_number":2017,"context_line":"                snapshot_id,"},{"line_number":2018,"context_line":"                ref)"},{"line_number":2019,"context_line":"        except Exception:"},{"line_number":2020,"context_line":"            LOG.exception(_LE(\"Failed to create manage_existing flow.\"))"},{"line_number":2021,"context_line":"            raise exception.CinderException("},{"line_number":2022,"context_line":"                _(\"Failed to create manage existing flow.\"))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_c3f31f07","line":2019,"updated":"2015-01-15 20:28:16.000000000","message":"Can you catch more specific exception?","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"7bf4ceafac7d992d20ffebffbf9fc96b72796ffa","unresolved":false,"context_lines":[{"line_number":2016,"context_line":"                self.host,"},{"line_number":2017,"context_line":"                snapshot_id,"},{"line_number":2018,"context_line":"                ref)"},{"line_number":2019,"context_line":"        except Exception:"},{"line_number":2020,"context_line":"            LOG.exception(_LE(\"Failed to create manage_existing flow.\"))"},{"line_number":2021,"context_line":"            raise exception.CinderException("},{"line_number":2022,"context_line":"                _(\"Failed to create manage existing flow.\"))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_002c2b01","line":2019,"in_reply_to":"3a961159_c3f31f07","updated":"2015-01-16 09:15:04.000000000","message":"It\u0027s hard to find out what specific exception will throw from \"taskflow.engines.load\",so i use Exception like create_volume process.","commit_id":"f63ff35f20d7daf9d0a22cdb87c892acc7301d78"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3726264696a5f02709c3fea43d70ede6d5e25712","unresolved":false,"context_lines":[{"line_number":2007,"context_line":"                                  model_update)"},{"line_number":2008,"context_line":""},{"line_number":2009,"context_line":"    def manage_existing_snapshot(self, ctxt, snapshot_id, ref\u003dNone):"},{"line_number":2010,"context_line":"        LOG.debug(\u0027manage_existing: managing %s.\u0027, ref)"},{"line_number":2011,"context_line":"        try:"},{"line_number":2012,"context_line":"            flow_engine \u003d manage_existing_snapshot.get_flow("},{"line_number":2013,"context_line":"                ctxt,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_6c522f36","line":2010,"updated":"2015-02-06 01:30:47.000000000","message":"Shouldn\u0027t this be \u0027manage_existing_snapshot\u0027 ?","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":2007,"context_line":"                                  model_update)"},{"line_number":2008,"context_line":""},{"line_number":2009,"context_line":"    def manage_existing_snapshot(self, ctxt, snapshot_id, ref\u003dNone):"},{"line_number":2010,"context_line":"        LOG.debug(\u0027manage_existing: managing %s.\u0027, ref)"},{"line_number":2011,"context_line":"        try:"},{"line_number":2012,"context_line":"            flow_engine \u003d manage_existing_snapshot.get_flow("},{"line_number":2013,"context_line":"                ctxt,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_aeb93fee","line":2010,"in_reply_to":"da86d52c_6c522f36","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d526619604fa62dc558350c62488ef7c2c02a119","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class VolumeManager(manager.SchedulerDependentManager):"},{"line_number":162,"context_line":"    \"\"\"Manages attachable block storage devices.\"\"\""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    RPC_API_VERSION \u003d \u00271.19\u0027"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_6d469125","line":163,"updated":"2015-03-04 06:28:46.000000000","message":"This version needs to be incremented.  See the number after rebase.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"aa2a9216b2a761df2332b2460ab84a36b1602878","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class VolumeManager(manager.SchedulerDependentManager):"},{"line_number":162,"context_line":"    \"\"\"Manages attachable block storage devices.\"\"\""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    RPC_API_VERSION \u003d \u00271.19\u0027"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_9c121157","line":163,"in_reply_to":"9a80dd14_6d469125","updated":"2015-03-04 10:09:58.000000000","message":"Yes,will fix it","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"93ffccba904d382a16fcf2076bd064730ba1303c","unresolved":false,"context_lines":[{"line_number":2022,"context_line":"                snapshot_id,"},{"line_number":2023,"context_line":"                ref)"},{"line_number":2024,"context_line":"        except Exception:"},{"line_number":2025,"context_line":"            LOG.exception(_LE(\"Failed to create manage_existing flow.\"))"},{"line_number":2026,"context_line":"            raise exception.CinderException("},{"line_number":2027,"context_line":"                _(\"Failed to create manage existing flow.\"))"},{"line_number":2028,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_5e1ef80c","line":2025,"updated":"2015-02-26 06:29:04.000000000","message":"Please add something here to indicate the snapshot and it\u0027s ID.  Like I mentioned earlier eventually we\u0027ll be able to do this in a nicer way, but for now we should be explicit in the exception (yes I understand the trace will have the class, method, line etc... but I\u0027d like to have the indicator explicitly set in the LOG message.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"fdc1843f712420d5bbc96faf8731d30d61bcdfbd","unresolved":false,"context_lines":[{"line_number":2022,"context_line":"                snapshot_id,"},{"line_number":2023,"context_line":"                ref)"},{"line_number":2024,"context_line":"        except Exception:"},{"line_number":2025,"context_line":"            LOG.exception(_LE(\"Failed to create manage_existing flow.\"))"},{"line_number":2026,"context_line":"            raise exception.CinderException("},{"line_number":2027,"context_line":"                _(\"Failed to create manage existing flow.\"))"},{"line_number":2028,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_969e90b7","line":2025,"in_reply_to":"ba7be1f8_5e1ef80c","updated":"2015-02-26 10:14:20.000000000","message":"Sure,I will fix it.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7c7bcb249c297b34cbbce4602ae2f39b820730dc","unresolved":false,"context_lines":[{"line_number":2468,"context_line":"                self.host,"},{"line_number":2469,"context_line":"                snapshot.id,"},{"line_number":2470,"context_line":"                ref)"},{"line_number":2471,"context_line":"        except Exception:"},{"line_number":2472,"context_line":"            msg \u003d _LE(\"Failed to create manage_existing flow: \""},{"line_number":2473,"context_line":"                      \"%(object_type)s %(object_id)s.\")"},{"line_number":2474,"context_line":"            LOG.exception(msg, {\u0027object_type\u0027: \u0027snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":39,"id":"fabf19d9_0e31db0b","line":2471,"updated":"2015-04-18 13:57:38.000000000","message":"Could we handle more specific exception here?","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d69369c8b831c9c5b4fb4600bc23b961bfdccf72","unresolved":false,"context_lines":[{"line_number":2468,"context_line":"                self.host,"},{"line_number":2469,"context_line":"                snapshot.id,"},{"line_number":2470,"context_line":"                ref)"},{"line_number":2471,"context_line":"        except Exception:"},{"line_number":2472,"context_line":"            msg \u003d _LE(\"Failed to create manage_existing flow: \""},{"line_number":2473,"context_line":"                      \"%(object_type)s %(object_id)s.\")"},{"line_number":2474,"context_line":"            LOG.exception(msg, {\u0027object_type\u0027: \u0027snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":39,"id":"dac4157f_96f614d6","line":2471,"in_reply_to":"fabf19d9_0e31db0b","updated":"2015-04-20 09:54:32.000000000","message":"Because there are more exception raise from task flow or driver. So I think using Exception is better.:)","commit_id":"a5a81926f55dc4c8ba1206534a0bbc50ef9cdac7"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"faf326e7431c45da8add28a5a2824693fe9dcae4","unresolved":false,"context_lines":[{"line_number":696,"context_line":"        context \u003d context.elevated()"},{"line_number":697,"context_line":"        project_id \u003d snapshot.project_id"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"        LOG.info(_(\"snapshot %s: deleting\"), snapshot.id)"},{"line_number":700,"context_line":"        self._notify_about_snapshot_usage("},{"line_number":701,"context_line":"            context, snapshot, \"delete.start\")"},{"line_number":702,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"bab921fb_3dc9c226","line":699,"updated":"2015-04-26 15:17:18.000000000","message":"Maybe logging should indicate if we are deleting or unmanaging?","commit_id":"8fad40d7d71e99d5bd9cc43d9c7c13528b652c6e"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"65aa81643ac9a1d2bba8df6afa3bf93f36fac80d","unresolved":false,"context_lines":[{"line_number":2624,"context_line":"                self.host,"},{"line_number":2625,"context_line":"                snapshot.id,"},{"line_number":2626,"context_line":"                ref)"},{"line_number":2627,"context_line":"        except Exception:"},{"line_number":2628,"context_line":"            msg \u003d _LE(\"Failed to create manage_existing flow: \""},{"line_number":2629,"context_line":"                      \"%(object_type)s %(object_id)s.\")"},{"line_number":2630,"context_line":"            LOG.exception(msg, {\u0027object_type\u0027: \u0027snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_ff54c554","line":2627,"updated":"2015-07-27 15:54:28.000000000","message":"Could we handle less general exception here?","commit_id":"84e8f1019e2120bef04395429e1c98c314da375d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"29d9a587219b8be5ad261f334547afde4f43022d","unresolved":false,"context_lines":[{"line_number":2624,"context_line":"                self.host,"},{"line_number":2625,"context_line":"                snapshot.id,"},{"line_number":2626,"context_line":"                ref)"},{"line_number":2627,"context_line":"        except Exception:"},{"line_number":2628,"context_line":"            msg \u003d _LE(\"Failed to create manage_existing flow: \""},{"line_number":2629,"context_line":"                      \"%(object_type)s %(object_id)s.\")"},{"line_number":2630,"context_line":"            LOG.exception(msg, {\u0027object_type\u0027: \u0027snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_1da2c499","line":2627,"in_reply_to":"3a50d1a3_ff54c554","updated":"2015-07-28 01:32:07.000000000","message":"There could be exception.DriverNotInitialized, exception.VolumeSizeExceedsAvailableQuota, exception.SnapshotLimitExceeded, exception.CinderException, and maybe other exceptions in taskflow are here I\u0027m not sure. So, just like volume_manage, I feel Exception is better here.","commit_id":"84e8f1019e2120bef04395429e1c98c314da375d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"6877e303c50e6bf511caaaec0858ae2009cf0579","unresolved":false,"context_lines":[{"line_number":2622,"context_line":"                self.db,"},{"line_number":2623,"context_line":"                self.driver,"},{"line_number":2624,"context_line":"                self.host,"},{"line_number":2625,"context_line":"                snapshot.id,"},{"line_number":2626,"context_line":"                ref)"},{"line_number":2627,"context_line":"        except Exception:"},{"line_number":2628,"context_line":"            msg \u003d _LE(\"Failed to create manage_existing flow: \""}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_e2ffde31","line":2625,"updated":"2015-07-29 14:20:03.000000000","message":"You should pass the snapshot object into get_flow, so that you avoid another lookup in the taskflow.  Instead of having \u0027snapshot_id\u0027 in create_what (cinder/volume/flows/manager/manage_existing_snapshot.py#L325), just use \u0027snapshot\u0027 and assign it to the snapshot object.","commit_id":"41ae045ea1b272fe21eff9cdb1bdd8d445b9de5e"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"916a5ba1563781d5357eadb974863baaac6b8a6b","unresolved":false,"context_lines":[{"line_number":2622,"context_line":"                self.db,"},{"line_number":2623,"context_line":"                self.driver,"},{"line_number":2624,"context_line":"                self.host,"},{"line_number":2625,"context_line":"                snapshot.id,"},{"line_number":2626,"context_line":"                ref)"},{"line_number":2627,"context_line":"        except Exception:"},{"line_number":2628,"context_line":"            msg \u003d _LE(\"Failed to create manage_existing flow: \""}],"source_content_type":"text/x-python","patch_set":67,"id":"3a50d1a3_6b94ed8b","line":2625,"updated":"2015-07-30 00:57:14.000000000","message":"You should pass the snapshot object into get_flow, so that you avoid another lookup in the taskflow. Instead of having \u0027snapshot_id\u0027 in create_what (cinder/volume/flows/manager/manage_existing_snapshot.py#L325), just use \u0027snapshot\u0027 and assign it to the snapshot object.","commit_id":"10e49ea7c063377e7a7c5ef2cd3a65406efdf4cd"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"2f676c345c3ab3f72345567897c310b9762f8d48","unresolved":false,"context_lines":[{"line_number":2622,"context_line":"                self.db,"},{"line_number":2623,"context_line":"                self.driver,"},{"line_number":2624,"context_line":"                self.host,"},{"line_number":2625,"context_line":"                snapshot.id,"},{"line_number":2626,"context_line":"                ref)"},{"line_number":2627,"context_line":"        except Exception:"},{"line_number":2628,"context_line":"            msg \u003d _LE(\"Failed to create manage_existing flow: \""}],"source_content_type":"text/x-python","patch_set":67,"id":"1a4dcd0f_c1737d14","line":2625,"in_reply_to":"3a50d1a3_2007bb19","updated":"2015-08-10 04:37:12.000000000","message":"I tested it in my environment, when snapshot.destroy(), it still can get the snapshot.id. So it\u0027s more safer to get it again from db.","commit_id":"10e49ea7c063377e7a7c5ef2cd3a65406efdf4cd"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"9b7872f76a93070040203c5d04ccf747906a0841","unresolved":false,"context_lines":[{"line_number":2622,"context_line":"                self.db,"},{"line_number":2623,"context_line":"                self.driver,"},{"line_number":2624,"context_line":"                self.host,"},{"line_number":2625,"context_line":"                snapshot.id,"},{"line_number":2626,"context_line":"                ref)"},{"line_number":2627,"context_line":"        except Exception:"},{"line_number":2628,"context_line":"            msg \u003d _LE(\"Failed to create manage_existing flow: \""}],"source_content_type":"text/x-python","patch_set":67,"id":"3a50d1a3_2007bb19","line":2625,"in_reply_to":"3a50d1a3_4be01197","updated":"2015-07-30 17:08:21.000000000","message":"If the snapshot is deleted, then the snapshot.id here would not even exist.","commit_id":"10e49ea7c063377e7a7c5ef2cd3a65406efdf4cd"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bd44d7c3a2fee407ac6015901334ab423a792eb5","unresolved":false,"context_lines":[{"line_number":2622,"context_line":"                self.db,"},{"line_number":2623,"context_line":"                self.driver,"},{"line_number":2624,"context_line":"                self.host,"},{"line_number":2625,"context_line":"                snapshot.id,"},{"line_number":2626,"context_line":"                ref)"},{"line_number":2627,"context_line":"        except Exception:"},{"line_number":2628,"context_line":"            msg \u003d _LE(\"Failed to create manage_existing flow: \""}],"source_content_type":"text/x-python","patch_set":67,"id":"3a50d1a3_4be01197","line":2625,"in_reply_to":"3a50d1a3_6b94ed8b","updated":"2015-07-30 01:32:46.000000000","message":"We should need to get the snapshot object again, since if the snapshot has been deleted before we got in taskflow then this task should fail.","commit_id":"10e49ea7c063377e7a7c5ef2cd3a65406efdf4cd"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"94a782d7d6f8957abff2152155887d295765289b","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                   new_volume\u003dnew_volume)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def manage_existing_snapshot(self, ctxt, volume, snapshot, ref):"},{"line_number":241,"context_line":"        # LOG.info(\"[2014-09-09]begin to send manage_existing_snapshot\")"},{"line_number":242,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":243,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host)"},{"line_number":244,"context_line":"        cctxt.cast(ctxt, \u0027manage_existing_snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_24951188","line":241,"updated":"2015-01-05 14:10:51.000000000","message":"Please remove the commented code from the patch.","commit_id":"72b7d5753fa3d35f16b7aeaad30c6bfbdadd51ad"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"15241c99f738a552ae897d0c3a95db9b132e4799","unresolved":false,"context_lines":[{"line_number":56,"context_line":"               sync_replica."},{"line_number":57,"context_line":"        1.18 - Adds create_consistencygroup, delete_consistencygroup,"},{"line_number":58,"context_line":"               create_cgsnapshot, and delete_cgsnapshot. Also adds"},{"line_number":59,"context_line":"               the consistencygroup_id parameter in create_volume."},{"line_number":60,"context_line":"        1.19 - Adds update_migrated_volume"},{"line_number":61,"context_line":"    \u0027\u0027\u0027"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_da5ca87f","line":59,"updated":"2015-02-06 07:01:21.000000000","message":"Should bump the version number.","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"55b3d503c30d10db7b6baa6f6cb9ce9883f13289","unresolved":false,"context_lines":[{"line_number":56,"context_line":"               sync_replica."},{"line_number":57,"context_line":"        1.18 - Adds create_consistencygroup, delete_consistencygroup,"},{"line_number":58,"context_line":"               create_cgsnapshot, and delete_cgsnapshot. Also adds"},{"line_number":59,"context_line":"               the consistencygroup_id parameter in create_volume."},{"line_number":60,"context_line":"        1.19 - Adds update_migrated_volume"},{"line_number":61,"context_line":"    \u0027\u0027\u0027"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_4e3b6338","line":59,"in_reply_to":"da86d52c_da5ca87f","updated":"2015-02-09 04:02:31.000000000","message":"Done","commit_id":"72a6b2658c61894b5faa68893873d950b850f239"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"122396353a3b6616f6734996eec97f6956da4bfd","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                   new_volume\u003dnew_volume)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def manage_existing_snapshot(self, ctxt, volume, snapshot, ref):"},{"line_number":242,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":243,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.20\u0027)"},{"line_number":244,"context_line":"        cctxt.cast(ctxt, \u0027manage_existing_snapshot\u0027,"},{"line_number":245,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_3c262969","line":242,"updated":"2015-02-17 06:28:44.000000000","message":"You are not really using the \u0027host\u0027 passed in from API. \u0027host\u0027 should definitely removed from API body.","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bad377a8c3b30d464a5b1286ca6241fc0d4e2a9b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                   new_volume\u003dnew_volume)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def manage_existing_snapshot(self, ctxt, volume, snapshot, ref):"},{"line_number":242,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":243,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.20\u0027)"},{"line_number":244,"context_line":"        cctxt.cast(ctxt, \u0027manage_existing_snapshot\u0027,"},{"line_number":245,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba7be1f8_ef538014","line":242,"in_reply_to":"da86d52c_3c262969","updated":"2015-02-26 01:54:04.000000000","message":"Done","commit_id":"c367de8ab21b8bd04852ad5547404ac4980a6d58"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d526619604fa62dc558350c62488ef7c2c02a119","unresolved":false,"context_lines":[{"line_number":58,"context_line":"               create_cgsnapshot, and delete_cgsnapshot. Also adds"},{"line_number":59,"context_line":"               the consistencygroup_id parameter in create_volume."},{"line_number":60,"context_line":"        1.19 - Adds update_migrated_volume"},{"line_number":61,"context_line":"        1.20 - Adds manage_existing_snapshot"},{"line_number":62,"context_line":"    \u0027\u0027\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_add96985","line":61,"updated":"2015-03-04 06:28:46.000000000","message":"Need to bump the version after rebase.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"aa2a9216b2a761df2332b2460ab84a36b1602878","unresolved":false,"context_lines":[{"line_number":58,"context_line":"               create_cgsnapshot, and delete_cgsnapshot. Also adds"},{"line_number":59,"context_line":"               the consistencygroup_id parameter in create_volume."},{"line_number":60,"context_line":"        1.19 - Adds update_migrated_volume"},{"line_number":61,"context_line":"        1.20 - Adds manage_existing_snapshot"},{"line_number":62,"context_line":"    \u0027\u0027\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_9c405137","line":61,"in_reply_to":"9a80dd14_add96985","updated":"2015-03-04 10:09:58.000000000","message":"Done","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d526619604fa62dc558350c62488ef7c2c02a119","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def manage_existing_snapshot(self, ctxt, volume, snapshot, ref):"},{"line_number":242,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":243,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.20\u0027)"},{"line_number":244,"context_line":"        cctxt.cast(ctxt, \u0027manage_existing_snapshot\u0027,"},{"line_number":245,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"},{"line_number":246,"context_line":"                   ref\u003dref)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_2dd57943","line":243,"updated":"2015-03-04 06:28:46.000000000","message":"Version needs to be incremented after rebase.","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"aa2a9216b2a761df2332b2460ab84a36b1602878","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def manage_existing_snapshot(self, ctxt, volume, snapshot, ref):"},{"line_number":242,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":243,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.20\u0027)"},{"line_number":244,"context_line":"        cctxt.cast(ctxt, \u0027manage_existing_snapshot\u0027,"},{"line_number":245,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"},{"line_number":246,"context_line":"                   ref\u003dref)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_7c5c7d26","line":243,"in_reply_to":"9a80dd14_2dd57943","updated":"2015-03-04 10:09:58.000000000","message":"Done","commit_id":"ed02e390d00b5907d8ae6c486b328cbe47d93a51"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"532169e56c361e06bd6312cac250d62cd06b1751","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                   new_volume\u003dnew_volume)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def manage_existing_snapshot(self, ctxt, volume, snapshot, ref):"},{"line_number":267,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":268,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.23\u0027)"},{"line_number":269,"context_line":"        cctxt.cast(ctxt, \u0027manage_existing_snapshot\u0027,"},{"line_number":270,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_89b810e7","line":267,"updated":"2015-03-10 17:15:12.000000000","message":"If you are only using volume[\u0027host\u0027] here, why not just pass the host as one of the args instead of the whole volume.  The actual volume will be contained in the snapshot object.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                   new_volume\u003dnew_volume)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def manage_existing_snapshot(self, ctxt, volume, snapshot, ref):"},{"line_number":267,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":268,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.23\u0027)"},{"line_number":269,"context_line":"        cctxt.cast(ctxt, \u0027manage_existing_snapshot\u0027,"},{"line_number":270,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_6a8b801e","line":267,"in_reply_to":"9a80dd14_89b810e7","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"532169e56c361e06bd6312cac250d62cd06b1751","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":268,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.23\u0027)"},{"line_number":269,"context_line":"        cctxt.cast(ctxt, \u0027manage_existing_snapshot\u0027,"},{"line_number":270,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"},{"line_number":271,"context_line":"                   ref\u003dref)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_e9c6ec67","line":270,"updated":"2015-03-10 17:15:12.000000000","message":"Should send over the snapshot object instead of just the id.","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        new_host \u003d utils.extract_host(volume[\u0027host\u0027])"},{"line_number":268,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.23\u0027)"},{"line_number":269,"context_line":"        cctxt.cast(ctxt, \u0027manage_existing_snapshot\u0027,"},{"line_number":270,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"},{"line_number":271,"context_line":"                   ref\u003dref)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_aa857808","line":270,"in_reply_to":"9a80dd14_e9c6ec67","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"}],"cinder/volume/utils.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"599d4b9dc644ade60a8a4e7586b4a7cd48a0815f","unresolved":false,"context_lines":[{"line_number":501,"context_line":"    return new_host"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"def process_reserve_over_quota(context, overs, usages, quotas, size):"},{"line_number":505,"context_line":"    def _consumed(name):"},{"line_number":506,"context_line":"        return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_566cfa08","line":504,"updated":"2015-03-10 15:37:22.000000000","message":"Is there unit test for this new routine?","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"173dc4af6b60f15c7bbd60fbb4d730ffb115624c","unresolved":false,"context_lines":[{"line_number":501,"context_line":"    return new_host"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"def process_reserve_over_quota(context, overs, usages, quotas, size):"},{"line_number":505,"context_line":"    def _consumed(name):"},{"line_number":506,"context_line":"        return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_a35a0328","line":504,"in_reply_to":"9a80dd14_566cfa08","updated":"2015-03-12 03:21:50.000000000","message":"Done","commit_id":"3d0b907649cfed46d24eb3820be2ecced700e8be"}]}
