)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"97a818715fdb3bf8e573be5e9900e2c3857ef5a5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Aarti Kriplani \u003caarti.kriplani@RACKSPACE.COM\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-08-14 17:14:17 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Give an option to exclude CBS from snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All volumes will be backed by default if the instance is volume backed."},{"line_number":10,"context_line":"If the request has \u0027root_volume_only\u0027 set to 1, only the root volume"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAARH%2F%2F9Q0%3D","line":7,"updated":"2013-08-14 16:12:59.000000000","message":"Just FYI, using the term here CBS is confusing.  This is a Rackspace product name. I think just \u0027volume\u0027 or \u0027Cinder volume\u0027 would make more sense.","commit_id":"410f9a983dedbd32941c35b64acafcf050015fbf"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"244223a2a9a3b1f7befb3d566bfd152f1a2f92d3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Aarti Kriplani \u003caarti.kriplani@RACKSPACE.COM\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-08-14 17:14:17 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Give an option to exclude CBS from snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All volumes will be backed by default if the instance is volume backed."},{"line_number":10,"context_line":"If the request has \u0027root_volume_only\u0027 set to 1, only the root volume"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAARH%2F%2F2qg%3D","line":7,"in_reply_to":"AAAARH%2F%2F9Q0%3D","updated":"2013-08-16 06:47:21.000000000","message":"Done","commit_id":"410f9a983dedbd32941c35b64acafcf050015fbf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"76c19a0a3e24cd8f6c69afeda49fb21903f1e3ed","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Give an option to exclude volumes from snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All volumes will be backed by default if the instance is volume backed."},{"line_number":10,"context_line":"If the request has \u0027root_volume_only\u0027 set to 1, only the root volume"},{"line_number":11,"context_line":"will be backed."},{"line_number":12,"context_line":"Includes changes for v3 as well."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAASn%2F%2Fn0s%3D","line":9,"updated":"2013-09-02 10:36:37.000000000","message":"I think you mean snapshotted or backed-up rather than backed?","commit_id":"6c7d95a13954ebee1cda1470f28ae46081b53c9a"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"a49d20f51e046384991cbd184fdb9b60daf67e08","unresolved":false,"context_lines":[{"line_number":11,"context_line":"will be backed."},{"line_number":12,"context_line":"Includes changes for v3 as well."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint exclude-cbs-in-snapshot"},{"line_number":15,"context_line":"Change-Id: I0a256f63582a2559cea3911b0173af5a9dfec9b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAATn%2F%2FB44%3D","line":14,"updated":"2013-11-15 13:03:05.000000000","message":"Minot not - but assuming that the BP includes making this a user option via the API then this only partially implements the blueprint","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"b73d4168ed5f4bf637bac4f3e21f3b5c7b044ab5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"will be backed."},{"line_number":12,"context_line":"Includes changes for v3 as well."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint exclude-cbs-in-snapshot"},{"line_number":15,"context_line":"Change-Id: I0a256f63582a2559cea3911b0173af5a9dfec9b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAATn%2F%2B8Zw%3D","line":14,"in_reply_to":"AAAATn%2F%2FB44%3D","updated":"2013-11-18 09:50:02.000000000","message":"Done","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"32378a3a8c2ad9c7b30c002436b7627e9945009f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Aditi Raveesh \u003caditi.raveesh@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-01-02 10:13:03 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Give an option to exclude volumes from snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All volumes will be backed by default if the instance is volume backed."},{"line_number":10,"context_line":"If the request has query param \u0027backup_only_root_volume\u0027 set to true,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"AAAAUH%2F%2F6Ec%3D","line":7,"updated":"2014-01-06 23:29:38.000000000","message":"Can you please mention v3 API here?\n\nGive an option to exclude volumes from snapshots for v3 API","commit_id":"575c3ccb8db857f0338a4e08f6dddef9ba252161"}],"nova/api/openstack/compute/contrib/image_with_volume_backup.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"d49e95871d459c42c07524c7f92301d7d7216112","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.api.openstack import extensions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F%2Bbnk%3D","line":16,"updated":"2013-11-26 06:14:15.000000000","message":"Suggest use name extended_xxx_xx.py to keep consistent","commit_id":"f71398c7510cab8aab0fb86f32edbe251007596b"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"08a18b334f927b191bc5b7fc610ee20e0b74ed15","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.api.openstack import extensions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F%2BY%2F8%3D","line":16,"in_reply_to":"AAAATn%2F%2BbS8%3D","updated":"2013-11-26 15:57:34.000000000","message":"My fault, I mean change its name to extended_image_with_volume_backup.py, but it is nice to have. ;-)","commit_id":"f71398c7510cab8aab0fb86f32edbe251007596b"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"92014d4f142170b4a978a9f80842e0f5e8a5d3dd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.api.openstack import extensions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F%2BbS8%3D","line":16,"in_reply_to":"AAAATn%2F%2Bbnk%3D","updated":"2013-11-26 08:32:27.000000000","message":"image_with_volume_backup specifies what the extension does. extended_images.py would not indicate the intent of the extension right?","commit_id":"f71398c7510cab8aab0fb86f32edbe251007596b"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"d49e95871d459c42c07524c7f92301d7d7216112","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from nova.api.openstack import extensions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027,"},{"line_number":20,"context_line":"                                                 \u0027image_with_volume_backup\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Image_with_volume_backup(extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F%2Bbno%3D","line":20,"updated":"2013-11-26 06:14:15.000000000","message":"Do we need this?","commit_id":"f71398c7510cab8aab0fb86f32edbe251007596b"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"92014d4f142170b4a978a9f80842e0f5e8a5d3dd","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from nova.api.openstack import extensions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027,"},{"line_number":20,"context_line":"                                                 \u0027image_with_volume_backup\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Image_with_volume_backup(extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F%2BbS0%3D","line":20,"in_reply_to":"AAAATn%2F%2Bbno%3D","updated":"2013-11-26 08:32:27.000000000","message":"Done","commit_id":"f71398c7510cab8aab0fb86f32edbe251007596b"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"d49e95871d459c42c07524c7f92301d7d7216112","unresolved":false,"context_lines":[{"line_number":25,"context_line":"     in v2 API."},{"line_number":26,"context_line":"     If set to true, only the root volume will be backed up,"},{"line_number":27,"context_line":"     if false(default), all volumes will be backed up"},{"line_number":28,"context_line":"     \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    name \u003d \"ImageWithVolumeBackup\""},{"line_number":31,"context_line":"    alias \u003d \"os-image-with-volume-backup\""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F%2BboA%3D","line":28,"updated":"2013-11-26 06:14:15.000000000","message":"The doc string seems not indent","commit_id":"f71398c7510cab8aab0fb86f32edbe251007596b"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"92014d4f142170b4a978a9f80842e0f5e8a5d3dd","unresolved":false,"context_lines":[{"line_number":25,"context_line":"     in v2 API."},{"line_number":26,"context_line":"     If set to true, only the root volume will be backed up,"},{"line_number":27,"context_line":"     if false(default), all volumes will be backed up"},{"line_number":28,"context_line":"     \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    name \u003d \"ImageWithVolumeBackup\""},{"line_number":31,"context_line":"    alias \u003d \"os-image-with-volume-backup\""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F%2BbSw%3D","line":28,"in_reply_to":"AAAATn%2F%2BboA%3D","updated":"2013-11-26 08:32:27.000000000","message":"Done","commit_id":"f71398c7510cab8aab0fb86f32edbe251007596b"}],"nova/api/openstack/compute/plugins/v3/image_with_volume_backup.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"32378a3a8c2ad9c7b30c002436b7627e9945009f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2F6F0%3D","line":1,"updated":"2014-01-06 23:29:38.000000000","message":"nit: not needed","commit_id":"575c3ccb8db857f0338a4e08f6dddef9ba252161"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"09657acefe1ccbecfd53c734afdfdb1f7ad73797","unresolved":false,"context_lines":[{"line_number":21,"context_line":"authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027, \u0027v3:\u0027 + ALIAS)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ImageWithVolumeBackup(extensions.V3APIExtensionBase):"},{"line_number":25,"context_line":"    \"\"\"Add query parameter backup_only_root_volume to action_create_image."},{"line_number":26,"context_line":"       If set to true, only the root volume will be backed up,"},{"line_number":27,"context_line":"       if false(default), all volumes will be backed up"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2F6Xo%3D","line":24,"updated":"2014-01-06 21:39:10.000000000","message":"I don\u0027t see the reasoning for this extension.  It being loaded or not doesn\u0027t appear to trigger any change in behaviour elsewhere.","commit_id":"575c3ccb8db857f0338a4e08f6dddef9ba252161"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"2474fd4a0ba721368835799773fd63a1108e1a30","unresolved":false,"context_lines":[{"line_number":21,"context_line":"authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027, \u0027v3:\u0027 + ALIAS)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ImageWithVolumeBackup(extensions.V3APIExtensionBase):"},{"line_number":25,"context_line":"    \"\"\"Add query parameter backup_only_root_volume to action_create_image."},{"line_number":26,"context_line":"       If set to true, only the root volume will be backed up,"},{"line_number":27,"context_line":"       if false(default), all volumes will be backed up"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2F0VE%3D","line":24,"in_reply_to":"AAAAUH%2F%2F6Ek%3D","updated":"2014-01-08 05:01:54.000000000","message":"Done","commit_id":"575c3ccb8db857f0338a4e08f6dddef9ba252161"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"32378a3a8c2ad9c7b30c002436b7627e9945009f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027, \u0027v3:\u0027 + ALIAS)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ImageWithVolumeBackup(extensions.V3APIExtensionBase):"},{"line_number":25,"context_line":"    \"\"\"Add query parameter backup_only_root_volume to action_create_image."},{"line_number":26,"context_line":"       If set to true, only the root volume will be backed up,"},{"line_number":27,"context_line":"       if false(default), all volumes will be backed up"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2F6Ek%3D","line":24,"in_reply_to":"AAAAUH%2F%2F6Xo%3D","updated":"2014-01-06 23:29:38.000000000","message":"+1","commit_id":"575c3ccb8db857f0338a4e08f6dddef9ba252161"}],"nova/api/openstack/compute/plugins/v3/servers.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e73aba0d953e0ff10b55ad6f8d324e705b7d5d93","unresolved":false,"context_lines":[{"line_number":1397,"context_line":"        resp.headers[\u0027Location\u0027] \u003d image_ref"},{"line_number":1398,"context_line":"        return resp"},{"line_number":1399,"context_line":""},{"line_number":1400,"context_line":"    def _get_root_volume_only(self, image_create_req):"},{"line_number":1401,"context_line":"        \"\"\"Extract the root_volume_only parameter from the request.\"\"\""},{"line_number":1402,"context_line":"        try:"},{"line_number":1403,"context_line":"            root_only \u003d image_create_req.get(\u0027root_volume_only\u0027, \u0027false\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FnOg%3D","line":1400,"updated":"2013-09-02 13:57:29.000000000","message":"you need add support in xml deserializer","commit_id":"6c7d95a13954ebee1cda1470f28ae46081b53c9a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2d418489fac90d6bdd85f693cf7299281c40f0ec","unresolved":false,"context_lines":[{"line_number":1216,"context_line":"    def _get_root_volume_only(self, image_create_req):"},{"line_number":1217,"context_line":"        \"\"\"Extract the root_volume_only parameter from the request.\"\"\""},{"line_number":1218,"context_line":"        try:"},{"line_number":1219,"context_line":"            root_only \u003d image_create_req.get(\u0027backupOnlyRootVolume\u0027, \u0027false\u0027)"},{"line_number":1220,"context_line":"            return strutils.bool_from_string(root_only, strict\u003dTrue)"},{"line_number":1221,"context_line":"        except ValueError:"},{"line_number":1222,"context_line":"            msg \u003d _(\"Invalid value for backupOnlyRootVolume\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FQJM%3D","line":1219,"updated":"2013-11-12 08:36:16.000000000","message":"This isn\u0027t v3 style. for v3, it should be \u0027backup_only_root_volume\u0027","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"67852375fd9962f02c2da70097d4c08d5ee7b3ff","unresolved":false,"context_lines":[{"line_number":1216,"context_line":"    def _get_root_volume_only(self, image_create_req):"},{"line_number":1217,"context_line":"        \"\"\"Extract the root_volume_only parameter from the request.\"\"\""},{"line_number":1218,"context_line":"        try:"},{"line_number":1219,"context_line":"            root_only \u003d image_create_req.get(\u0027backupOnlyRootVolume\u0027, \u0027false\u0027)"},{"line_number":1220,"context_line":"            return strutils.bool_from_string(root_only, strict\u003dTrue)"},{"line_number":1221,"context_line":"        except ValueError:"},{"line_number":1222,"context_line":"            msg \u003d _(\"Invalid value for backupOnlyRootVolume\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FCTI%3D","line":1219,"in_reply_to":"AAAATn%2F%2FQJM%3D","updated":"2013-11-15 11:08:08.000000000","message":"Done","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"09657acefe1ccbecfd53c734afdfdb1f7ad73797","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"    def _get_root_volume_only(self, image_create_req):"},{"line_number":1260,"context_line":"        \"\"\"Extract the root_volume_only parameter from the request.\"\"\""},{"line_number":1261,"context_line":"        try:"},{"line_number":1262,"context_line":"            root_only \u003d image_create_req.get(\u0027backup_only_root_volume\u0027,"},{"line_number":1263,"context_line":"                                             \u0027false\u0027)"},{"line_number":1264,"context_line":"            return strutils.bool_from_string(root_only, strict\u003dTrue)"},{"line_number":1265,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2F6WQ%3D","line":1262,"updated":"2014-01-06 21:39:10.000000000","message":"I think the backup prefix is redundant here.  It\u0027s a parameter to a backup/snapshot call so just call it root_volume_only.","commit_id":"575c3ccb8db857f0338a4e08f6dddef9ba252161"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"2474fd4a0ba721368835799773fd63a1108e1a30","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"    def _get_root_volume_only(self, image_create_req):"},{"line_number":1260,"context_line":"        \"\"\"Extract the root_volume_only parameter from the request.\"\"\""},{"line_number":1261,"context_line":"        try:"},{"line_number":1262,"context_line":"            root_only \u003d image_create_req.get(\u0027backup_only_root_volume\u0027,"},{"line_number":1263,"context_line":"                                             \u0027false\u0027)"},{"line_number":1264,"context_line":"            return strutils.bool_from_string(root_only, strict\u003dTrue)"},{"line_number":1265,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2F3%2Fs%3D","line":1262,"in_reply_to":"AAAAUH%2F%2F6WQ%3D","updated":"2014-01-08 05:01:54.000000000","message":"Done","commit_id":"575c3ccb8db857f0338a4e08f6dddef9ba252161"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"32378a3a8c2ad9c7b30c002436b7627e9945009f","unresolved":false,"context_lines":[{"line_number":1264,"context_line":"            return strutils.bool_from_string(root_only, strict\u003dTrue)"},{"line_number":1265,"context_line":"        except ValueError:"},{"line_number":1266,"context_line":"            msg \u003d _(\"Invalid value for backup_only_root_volume\")"},{"line_number":1267,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":1268,"context_line":""},{"line_number":1269,"context_line":"    def _get_server_admin_password(self, server):"},{"line_number":1270,"context_line":"        \"\"\"Determine the admin password for a server on creation.\"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2F6E8%3D","line":1267,"updated":"2014-01-06 23:29:38.000000000","message":"I think that you can use the exception directly\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/contrib/admin_actions.py#L318","commit_id":"575c3ccb8db857f0338a4e08f6dddef9ba252161"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"2474fd4a0ba721368835799773fd63a1108e1a30","unresolved":false,"context_lines":[{"line_number":1264,"context_line":"            return strutils.bool_from_string(root_only, strict\u003dTrue)"},{"line_number":1265,"context_line":"        except ValueError:"},{"line_number":1266,"context_line":"            msg \u003d _(\"Invalid value for backup_only_root_volume\")"},{"line_number":1267,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":1268,"context_line":""},{"line_number":1269,"context_line":"    def _get_server_admin_password(self, server):"},{"line_number":1270,"context_line":"        \"\"\"Determine the admin password for a server on creation.\"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2F0VA%3D","line":1267,"in_reply_to":"AAAAUH%2F%2F6E8%3D","updated":"2014-01-08 05:01:54.000000000","message":"Done","commit_id":"575c3ccb8db857f0338a4e08f6dddef9ba252161"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c3f13152a16914db8b9dd72938bc12f29a7d7552","unresolved":false,"context_lines":[{"line_number":1400,"context_line":"                               image_meta,"},{"line_number":1401,"context_line":"                               image_name,"},{"line_number":1402,"context_line":"                               extra_properties\u003dprops,"},{"line_number":1403,"context_line":"                               root_volume_only\u003dint(root_volume_only))"},{"line_number":1404,"context_line":"            else:"},{"line_number":1405,"context_line":"                image \u003d self.compute_api.snapshot(context,"},{"line_number":1406,"context_line":"                                                  instance,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2B6qo%3D","line":1403,"updated":"2013-08-09 22:09:27.000000000","message":"Why call int() on the same value twice?","commit_id":"36bd1b065a57fe8d9631b444229de13321df518b"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c3f13152a16914db8b9dd72938bc12f29a7d7552","unresolved":false,"context_lines":[{"line_number":1406,"context_line":"                                                  instance,"},{"line_number":1407,"context_line":"                                                  image_name,"},{"line_number":1408,"context_line":"                                                  extra_properties\u003dprops)"},{"line_number":1409,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":1410,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":1411,"context_line":"                        \u0027createImage\u0027)"},{"line_number":1412,"context_line":"        except exception.Invalid as err:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2B6pM%3D","line":1409,"updated":"2013-08-09 22:09:27.000000000","message":"You\u0027re not catching ValueError anywhere; what happens if someone passes in a non-integer root_volume_only value?","commit_id":"36bd1b065a57fe8d9631b444229de13321df518b"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c82bea9ef6a7acf15aaa8fcd52c809b6534b485e","unresolved":false,"context_lines":[{"line_number":1413,"context_line":"        except exception.Invalid as err:"},{"line_number":1414,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derr.format_message())"},{"line_number":1415,"context_line":"        except ValueError:"},{"line_number":1416,"context_line":"            msg \u003d \"Invalid value for root_volume_only\""},{"line_number":1417,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":1418,"context_line":""},{"line_number":1419,"context_line":"        # build location of newly-created image entity"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQ3%2F%2F8HM%3D","line":1416,"updated":"2013-08-12 18:44:17.000000000","message":"This needs to be internationalized, i.e., wrapped in _()…","commit_id":"f8812fb1356af76b030c8588509995b58277a0a2"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"63860d80d599b33fd808c62844bc5b8d02c95328","unresolved":false,"context_lines":[{"line_number":1391,"context_line":"        try:"},{"line_number":1392,"context_line":"            if self.compute_api.is_volume_backed_instance(context, instance,"},{"line_number":1393,"context_line":"                                                          bdms):"},{"line_number":1394,"context_line":"                root_volume_only \u003d int(entity.get(\u0027root_volume_only\u0027, 0))"},{"line_number":1395,"context_line":"                img \u003d instance[\u0027image_ref\u0027]"},{"line_number":1396,"context_line":"                src_image \u003d self.compute_api.image_service.show(context, img)"},{"line_number":1397,"context_line":"                image_meta \u003d dict(src_image)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARH%2F%2F0oI%3D","line":1394,"updated":"2013-08-16 18:17:38.000000000","message":"This should be converted to a bool.  0/1 are good for passing data through the API but internally we should be using True/False.","commit_id":"cd4cd24713fea5dc0caef205e99c24978de965c0"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"63860d80d599b33fd808c62844bc5b8d02c95328","unresolved":false,"context_lines":[{"line_number":1412,"context_line":"                        \u0027createImage\u0027)"},{"line_number":1413,"context_line":"        except exception.Invalid as err:"},{"line_number":1414,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derr.format_message())"},{"line_number":1415,"context_line":"        except ValueError:"},{"line_number":1416,"context_line":"            msg \u003d _(\"Invalid value for root_volume_only\")"},{"line_number":1417,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":1418,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARH%2F%2F0ok%3D","line":1415,"updated":"2013-08-16 18:17:38.000000000","message":"Getting the root_volume_only data from the request and catching any exceptions for that action should be in its own try/except block.  The way it is right now is too broad.  There is a lot of code that could raise a ValueError at some point and inadvertently look like a root_volume_only error.","commit_id":"cd4cd24713fea5dc0caef205e99c24978de965c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2ec4fcbd61436d188b95d4b780838d8fa1f122d3","unresolved":false,"context_lines":[{"line_number":1374,"context_line":"        try:"},{"line_number":1375,"context_line":"            if self.compute_api.is_volume_backed_instance(context, instance,"},{"line_number":1376,"context_line":"                                                          bdms):"},{"line_number":1377,"context_line":"                root_volume_only \u003d self._get_root_volume_only(entity)"},{"line_number":1378,"context_line":"                img \u003d instance[\u0027image_ref\u0027]"},{"line_number":1379,"context_line":"                if not img:"},{"line_number":1380,"context_line":"                    # NOTE(Vincent Hou) The private method"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2Fn2Q%3D","line":1377,"updated":"2013-09-02 10:36:00.000000000","message":"I think these changes require extra extensions in the v2 API","commit_id":"6c7d95a13954ebee1cda1470f28ae46081b53c9a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e73aba0d953e0ff10b55ad6f8d324e705b7d5d93","unresolved":false,"context_lines":[{"line_number":1374,"context_line":"        try:"},{"line_number":1375,"context_line":"            if self.compute_api.is_volume_backed_instance(context, instance,"},{"line_number":1376,"context_line":"                                                          bdms):"},{"line_number":1377,"context_line":"                root_volume_only \u003d self._get_root_volume_only(entity)"},{"line_number":1378,"context_line":"                img \u003d instance[\u0027image_ref\u0027]"},{"line_number":1379,"context_line":"                if not img:"},{"line_number":1380,"context_line":"                    # NOTE(Vincent Hou) The private method"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FnOU%3D","line":1377,"in_reply_to":"AAAASn%2F%2Fn2Q%3D","updated":"2013-09-02 13:57:29.000000000","message":"+1","commit_id":"6c7d95a13954ebee1cda1470f28ae46081b53c9a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e73aba0d953e0ff10b55ad6f8d324e705b7d5d93","unresolved":false,"context_lines":[{"line_number":1417,"context_line":"        resp.headers[\u0027Location\u0027] \u003d image_ref"},{"line_number":1418,"context_line":"        return resp"},{"line_number":1419,"context_line":""},{"line_number":1420,"context_line":"    def _get_root_volume_only(self, image_create_req):"},{"line_number":1421,"context_line":"        \"\"\"Extract the root_volume_only parameter from the request.\"\"\""},{"line_number":1422,"context_line":"        try:"},{"line_number":1423,"context_line":"            root_only \u003d image_create_req.get(\u0027root_volume_only\u0027, \u0027false\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FnOc%3D","line":1420,"updated":"2013-09-02 13:57:29.000000000","message":"you need add support in xml deserializer","commit_id":"6c7d95a13954ebee1cda1470f28ae46081b53c9a"}],"nova/compute/api.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c3f13152a16914db8b9dd72938bc12f29a7d7552","unresolved":false,"context_lines":[{"line_number":1801,"context_line":"        for bdm in bdms:"},{"line_number":1802,"context_line":"            if bdm[\u0027no_device\u0027]:"},{"line_number":1803,"context_line":"                continue"},{"line_number":1804,"context_line":"            if(root_volume_only and"},{"line_number":1805,"context_line":"                   block_device.strip_dev(bdm[\u0027device_name\u0027]) !\u003d"},{"line_number":1806,"context_line":"                        block_device.strip_dev(instance[\u0027root_device_name\u0027])):"},{"line_number":1807,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2B6qg%3D","line":1804,"updated":"2013-08-09 22:09:27.000000000","message":"Please add a space between the \u0027if\u0027 and the parenthesis.","commit_id":"36bd1b065a57fe8d9631b444229de13321df518b"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"63860d80d599b33fd808c62844bc5b8d02c95328","unresolved":false,"context_lines":[{"line_number":1794,"context_line":""},{"line_number":1795,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.STOPPED])"},{"line_number":1796,"context_line":"    def snapshot_volume_backed(self, context, instance, image_meta, name,"},{"line_number":1797,"context_line":"                               extra_properties\u003dNone, root_volume_only\u003d0):"},{"line_number":1798,"context_line":"        \"\"\"Snapshot the given volume-backed instance."},{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"        :param instance: nova.db.sqlalchemy.models.Instance"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARH%2F%2F0n4%3D","line":1797,"updated":"2013-08-16 18:17:38.000000000","message":"Should default to False rather than 0.","commit_id":"cd4cd24713fea5dc0caef205e99c24978de965c0"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4e0ed599082dc3a860ff8efc9a031aad11934b76","unresolved":false,"context_lines":[{"line_number":1794,"context_line":""},{"line_number":1795,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.STOPPED])"},{"line_number":1796,"context_line":"    def snapshot_volume_backed(self, context, instance, image_meta, name,"},{"line_number":1797,"context_line":"                               extra_properties\u003dNone, root_volume_only\u003dFalse):"},{"line_number":1798,"context_line":"        \"\"\"Snapshot the given volume-backed instance."},{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"        :param instance: nova.db.sqlalchemy.models.Instance"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASX%2F%2F6To%3D","line":1797,"updated":"2013-08-23 20:47:40.000000000","message":"Does this need a RPC API version bump?","commit_id":"7280ce89a88f3ace0da05aa263ffdd8fb8ba6f28"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"e68df8ae32d6d5e54b9cb24385689d1352efe3dd","unresolved":false,"context_lines":[{"line_number":1794,"context_line":""},{"line_number":1795,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.STOPPED])"},{"line_number":1796,"context_line":"    def snapshot_volume_backed(self, context, instance, image_meta, name,"},{"line_number":1797,"context_line":"                               extra_properties\u003dNone, root_volume_only\u003dFalse):"},{"line_number":1798,"context_line":"        \"\"\"Snapshot the given volume-backed instance."},{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"        :param instance: nova.db.sqlalchemy.models.Instance"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F%2FYU%3D","line":1797,"in_reply_to":"AAAASX%2F%2F6To%3D","updated":"2013-08-27 05:33:04.000000000","message":"compute/api is not versioned as its not an RPC call.","commit_id":"7280ce89a88f3ace0da05aa263ffdd8fb8ba6f28"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"483f6ae0d7e2981e46bdae6d38c949fd66363a16","unresolved":false,"context_lines":[{"line_number":1927,"context_line":"            if bdm[\u0027no_device\u0027]:"},{"line_number":1928,"context_line":"                continue"},{"line_number":1929,"context_line":"            if (root_volume_only and"},{"line_number":1930,"context_line":"                        block_device.strip_dev("},{"line_number":1931,"context_line":"                                bdm[\u0027device_name\u0027]) !\u003d block_device.strip_dev("},{"line_number":1932,"context_line":"                            instance[\u0027root_device_name\u0027])):"},{"line_number":1933,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FYcY%3D","line":1930,"updated":"2013-11-07 17:03:33.000000000","message":"That\u0027s a lot of indentation.  I would typically only indent the second line an additional 4 spaces to differentiate it from the following code.  (femtonit)","commit_id":"8745ed6f22019d5e276b67a7e097d926995fb1cb"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"483f6ae0d7e2981e46bdae6d38c949fd66363a16","unresolved":false,"context_lines":[{"line_number":1948,"context_line":"            mapping.append(bdm)"},{"line_number":1949,"context_line":""},{"line_number":1950,"context_line":"        for m in block_device.mappings_prepend_dev(properties.get(\u0027mappings\u0027,"},{"line_number":1951,"context_line":"                [])):"},{"line_number":1952,"context_line":"            virtual_name \u003d m[\u0027virtual\u0027]"},{"line_number":1953,"context_line":"            if virtual_name in (\u0027ami\u0027, \u0027root\u0027):"},{"line_number":1954,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FYcs%3D","line":1951,"updated":"2013-11-07 17:03:33.000000000","message":"femtonit: Unnecessary whitespace change","commit_id":"8745ed6f22019d5e276b67a7e097d926995fb1cb"}],"nova/tests/api/openstack/compute/plugins/v3/test_server_actions.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4e0ed599082dc3a860ff8efc9a031aad11934b76","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import mox"},{"line_number":2,"context_line":"import webob"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from nova.api.openstack.compute import plugins"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASX%2F%2F6UI%3D","line":1,"updated":"2013-08-23 20:47:40.000000000","message":"You\u0027ve left out a license header.","commit_id":"7280ce89a88f3ace0da05aa263ffdd8fb8ba6f28"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"e68df8ae32d6d5e54b9cb24385689d1352efe3dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import mox"},{"line_number":2,"context_line":"import webob"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from nova.api.openstack.compute import plugins"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F%2Fa8%3D","line":1,"in_reply_to":"AAAASX%2F%2F6UI%3D","updated":"2013-08-27 05:33:04.000000000","message":"Done","commit_id":"7280ce89a88f3ace0da05aa263ffdd8fb8ba6f28"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e73aba0d953e0ff10b55ad6f8d324e705b7d5d93","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    return (inst, inst)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class ServerActionsControllerTest(test.TestCase):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def setUp(self):"},{"line_number":45,"context_line":"        super(ServerActionsControllerTest, self).setUp()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FnN8%3D","line":42,"updated":"2013-09-02 13:57:29.000000000","message":"Erm....this test didn\u0027t port to v3 yet....maybe you can base on this https://review.openstack.org/#/c/42523/2 ?","commit_id":"6c7d95a13954ebee1cda1470f28ae46081b53c9a"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"483f6ae0d7e2981e46bdae6d38c949fd66363a16","unresolved":false,"context_lines":[{"line_number":714,"context_line":"        instance \u003d {\u0027image_ref\u0027: image_ref}"},{"line_number":715,"context_line":"        bdms \u003d [\u0027bdm1\u0027, \u0027bdm2\u0027]"},{"line_number":716,"context_line":"        api \u003d self.controller.compute_api"},{"line_number":717,"context_line":"        api.get \u003d mock.Mock(return_value\u003dinstance)"},{"line_number":718,"context_line":"        req.cache_db_instance \u003d mock.Mock()"},{"line_number":719,"context_line":"        api.get_instance_bdms \u003d mock.Mock(return_value\u003dbdms)"},{"line_number":720,"context_line":"        api.is_volume_backed_instance \u003d mock.Mock(return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FYbY%3D","line":717,"updated":"2013-11-07 17:03:33.000000000","message":"I would slightly prefer using mock.patch.  You may want to consider using the decorator mode, i.e.:\n\n    @mock.patch(…)\n    @mock.patch(…)\n    def test_create_image_with_volume_backed_instance(self, mock_…, mock_…):\n        …\n\n(femtonit)","commit_id":"8745ed6f22019d5e276b67a7e097d926995fb1cb"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"483f6ae0d7e2981e46bdae6d38c949fd66363a16","unresolved":false,"context_lines":[{"line_number":732,"context_line":"                                                         bdms)"},{"line_number":733,"context_line":"        api.image_service.show.assert_called_with(context, image_ref)"},{"line_number":734,"context_line":"        api.snapshot_volume_backed. \\"},{"line_number":735,"context_line":"            assert_called_with(context, instance,"},{"line_number":736,"context_line":"                               mock.ANY, image_name,"},{"line_number":737,"context_line":"                               extra_properties\u003dmock.ANY,"},{"line_number":738,"context_line":"                               root_volume_only\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FYbw%3D","line":735,"updated":"2013-11-07 17:03:33.000000000","message":"You can eliminate the backslash by moving the \"assert_called_with(\" to the line, then starting the arguments on the line following with an indentation of 4 additional spaces.  (femtonit)","commit_id":"8745ed6f22019d5e276b67a7e097d926995fb1cb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5848f02bf182b38d121043eed6e4f501ee193f1b","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                          self.controller._action_revert_resize,"},{"line_number":700,"context_line":"                          req, FAKE_UUID, body)"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    def test_create_image_with_volume_backed_instance(self):"},{"line_number":703,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"},{"line_number":704,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FP%2B0%3D","line":702,"updated":"2013-11-12 09:15:41.000000000","message":"This name is similar meaning with test_create_volume_backed_image_no_metadata. Maybe call \u0027test_create_image_with_root_volume\u0027 is better? And is there any change for reuse \u0027_do_test_create_volume_backed_image\u0027?","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"bfbca2c1f18e5286249d07c2576d2017bc039253","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                          self.controller._action_revert_resize,"},{"line_number":700,"context_line":"                          req, FAKE_UUID, body)"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    def test_create_image_with_volume_backed_instance(self):"},{"line_number":703,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"},{"line_number":704,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FPo0%3D","line":702,"in_reply_to":"AAAATn%2F%2FP%2B0%3D","updated":"2013-11-12 11:01:52.000000000","message":"In these tests, I am only testing if the snapshot_volume_backed method is called with root_volume_only True or False.\n\nThe test for checking the actual backing up of only root volume or all volumes is done in compute api tests.","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5848f02bf182b38d121043eed6e4f501ee193f1b","unresolved":false,"context_lines":[{"line_number":738,"context_line":"        location \u003d response.headers[\u0027Location\u0027]"},{"line_number":739,"context_line":"        self.assertEqual(glance.generate_image_url(\u0027123\u0027), location)"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def test_create_image_without_volume_backed_instance(self):"},{"line_number":742,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"},{"line_number":743,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":744,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FP%2Bs%3D","line":741,"updated":"2013-11-12 09:15:41.000000000","message":"ditto","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"bfbca2c1f18e5286249d07c2576d2017bc039253","unresolved":false,"context_lines":[{"line_number":738,"context_line":"        location \u003d response.headers[\u0027Location\u0027]"},{"line_number":739,"context_line":"        self.assertEqual(glance.generate_image_url(\u0027123\u0027), location)"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def test_create_image_without_volume_backed_instance(self):"},{"line_number":742,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"},{"line_number":743,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":744,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FPos%3D","line":741,"in_reply_to":"AAAATn%2F%2FP%2Bs%3D","updated":"2013-11-12 11:01:52.000000000","message":"Done","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"a49d20f51e046384991cbd184fdb9b60daf67e08","unresolved":false,"context_lines":[{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def test_create_image_without_volume_backed_instance(self):"},{"line_number":742,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"},{"line_number":743,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"        image_name \u003d \u0027Snapshot 1\u0027"},{"line_number":746,"context_line":"        body \u003d {\u0027create_image\u0027: {\u0027name\u0027: image_name}}"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FB5U%3D","line":743,"updated":"2013-11-15 13:03:05.000000000","message":"There is too much duplication between these two test cases for my liking - a single common _do_test_...    method that takes an option would be much clearer in showing where the code paths are expected to be different.","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"b73d4168ed5f4bf637bac4f3e21f3b5c7b044ab5","unresolved":false,"context_lines":[{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def test_create_image_without_volume_backed_instance(self):"},{"line_number":742,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"},{"line_number":743,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"        image_name \u003d \u0027Snapshot 1\u0027"},{"line_number":746,"context_line":"        body \u003d {\u0027create_image\u0027: {\u0027name\u0027: image_name}}"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2B8Zk%3D","line":743,"in_reply_to":"AAAATn%2F%2FB5U%3D","updated":"2013-11-18 09:50:02.000000000","message":"Done","commit_id":"1187220b2e476a910df796e8110b7c1c17899cd2"}],"nova/tests/api/openstack/compute/test_server_actions.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c3f13152a16914db8b9dd72938bc12f29a7d7552","unresolved":false,"context_lines":[{"line_number":910,"context_line":""},{"line_number":911,"context_line":"        image_service \u003d glance.get_default_image_service()"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"        bdm \u003d [dict(volume_id\u003d_fake_id(\u0027a\u0027),"},{"line_number":914,"context_line":"                    volume_size\u003d1,"},{"line_number":915,"context_line":"                    device_name\u003d\u0027vda\u0027,"},{"line_number":916,"context_line":"                    delete_on_termination\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2B6p8%3D","line":913,"updated":"2013-08-09 22:09:27.000000000","message":"I\u0027m going to suggest using a dict literal here (\"{\u0027volume_id\u0027: _fake_id(\u0027a\u0027), …}\"); it turns out that building a dict literal is a bit more efficient than using the dict() constructor.  (femtonit)","commit_id":"36bd1b065a57fe8d9631b444229de13321df518b"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c3f13152a16914db8b9dd72938bc12f29a7d7552","unresolved":false,"context_lines":[{"line_number":984,"context_line":"        self._do_test_create_image_volume_backup()"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":"    def test_create_image_snapshot_root_volume_only_when_specified(self):"},{"line_number":987,"context_line":"        self._do_test_create_image_volume_backup(root_volume_only\u003d1)"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def test_create_image_snapshots_disabled(self):"},{"line_number":990,"context_line":"        \"\"\"Don\u0027t permit a snapshot if the allow_instance_snapshots flag is"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2B6pE%3D","line":987,"updated":"2013-08-09 22:09:27.000000000","message":"I don\u0027t see any tests on non-integer values of root_volume_only; you go to the trouble of using int() to convert it to an int, but that can raise a ValueError (which you aren\u0027t catching anywhere)…","commit_id":"36bd1b065a57fe8d9631b444229de13321df518b"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"63860d80d599b33fd808c62844bc5b8d02c95328","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                                                      ImageVersion\u003d\u00272.0\u0027))"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"    def _fake_id(self, x):"},{"line_number":903,"context_line":"        return \u0027%s-%s-%s-%s\u0027 % (x * 8, x * 4, x * 4, x * 12)"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"    def _create_volume_backed_instance(self):"},{"line_number":906,"context_line":"        image_service \u003d glance.get_default_image_service()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARH%2F%2F0m8%3D","line":903,"updated":"2013-08-16 18:17:38.000000000","message":"use openstack/common/uuidutils.py:generate_uuid() to create an id.","commit_id":"cd4cd24713fea5dc0caef205e99c24978de965c0"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"6c39ec5e2837a9137deb45afea151fd5cd2b9391","unresolved":false,"context_lines":[{"line_number":813,"context_line":"    def _do_set_mocks_for_create_image_with_volume_backup(self, req, instance):"},{"line_number":814,"context_line":"        bdms \u003d [\u0027bdm1\u0027, \u0027bdm2\u0027]"},{"line_number":815,"context_line":"        api \u003d self.controller.compute_api"},{"line_number":816,"context_line":"        api.get \u003d mock.Mock(return_value\u003dinstance)"},{"line_number":817,"context_line":"        req.cache_db_instance \u003d mock.Mock()"},{"line_number":818,"context_line":"        api.get_instance_bdms \u003d mock.Mock(return_value\u003dbdms)"},{"line_number":819,"context_line":"        api.is_volume_backed_instance \u003d mock.Mock(return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAATn%2F9nWI%3D","line":816,"updated":"2013-12-09 16:52:13.000000000","message":"You might want to look into the use of the mock.patch helpers…(suggestion)","commit_id":"610bbf2e82001c163c703220c8d81165536bb9e5"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"48479a08648091d7eb1d6ef3862e85121a38d211","unresolved":false,"context_lines":[{"line_number":813,"context_line":"    def _do_set_mocks_for_create_image_with_volume_backup(self, req, instance):"},{"line_number":814,"context_line":"        bdms \u003d [\u0027bdm1\u0027, \u0027bdm2\u0027]"},{"line_number":815,"context_line":"        api \u003d self.controller.compute_api"},{"line_number":816,"context_line":"        api.get \u003d mock.Mock(return_value\u003dinstance)"},{"line_number":817,"context_line":"        req.cache_db_instance \u003d mock.Mock()"},{"line_number":818,"context_line":"        api.get_instance_bdms \u003d mock.Mock(return_value\u003dbdms)"},{"line_number":819,"context_line":"        api.is_volume_backed_instance \u003d mock.Mock(return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAATn%2F9kiU%3D","line":816,"in_reply_to":"AAAATn%2F9nWI%3D","updated":"2013-12-10 04:45:01.000000000","message":"This looks cleaner than using mock.patch, since there are many methods that have been mocked. Also, this method is used just to set the mocks alone and nothing else.","commit_id":"610bbf2e82001c163c703220c8d81165536bb9e5"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"878f6225129ffedc479094065bade63b59ea69b2","unresolved":false,"context_lines":[{"line_number":813,"context_line":"    def _do_set_mocks_for_create_image_with_volume_backup(self, req, instance):"},{"line_number":814,"context_line":"        bdms \u003d [\u0027bdm1\u0027, \u0027bdm2\u0027]"},{"line_number":815,"context_line":"        api \u003d self.controller.compute_api"},{"line_number":816,"context_line":"        api.get \u003d mock.Mock(return_value\u003dinstance)"},{"line_number":817,"context_line":"        req.cache_db_instance \u003d mock.Mock()"},{"line_number":818,"context_line":"        api.get_instance_bdms \u003d mock.Mock(return_value\u003dbdms)"},{"line_number":819,"context_line":"        api.is_volume_backed_instance \u003d mock.Mock(return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAATn%2F9hqQ%3D","line":816,"updated":"2013-12-10 15:38:34.000000000","message":"I disagree.  The mock.patch helpers will reset the original value once you\u0027re done with the patch, which this idiom won\u0027t do…","commit_id":"462aa9b1c1cd8c04d8f293aa17ec60b90f758e11"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"96177b8c76fc9489229409593676ed0d45116bc5","unresolved":false,"context_lines":[{"line_number":813,"context_line":"    def _do_set_mocks_for_create_image_with_volume_backup(self, req, instance):"},{"line_number":814,"context_line":"        bdms \u003d [\u0027bdm1\u0027, \u0027bdm2\u0027]"},{"line_number":815,"context_line":"        api \u003d self.controller.compute_api"},{"line_number":816,"context_line":"        api.get \u003d mock.Mock(return_value\u003dinstance)"},{"line_number":817,"context_line":"        req.cache_db_instance \u003d mock.Mock()"},{"line_number":818,"context_line":"        api.get_instance_bdms \u003d mock.Mock(return_value\u003dbdms)"},{"line_number":819,"context_line":"        api.is_volume_backed_instance \u003d mock.Mock(return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAATn%2F8yYA%3D","line":816,"in_reply_to":"AAAATn%2F9hqQ%3D","updated":"2013-12-20 10:08:55.000000000","message":"Done","commit_id":"462aa9b1c1cd8c04d8f293aa17ec60b90f758e11"}],"nova/tests/compute/test_compute_api.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"6c39ec5e2837a9137deb45afea151fd5cd2b9391","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"import iso8601"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"import mox"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAATn%2F9nUs%3D","line":18,"updated":"2013-12-09 16:52:13.000000000","message":"If you have to upload another patch, would you mind adding a blank line before the iso8601 import to fix up the import grouping?  Just an ask…","commit_id":"610bbf2e82001c163c703220c8d81165536bb9e5"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"48479a08648091d7eb1d6ef3862e85121a38d211","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"import iso8601"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"import mox"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAATn%2F9kjE%3D","line":18,"in_reply_to":"AAAATn%2F9nUs%3D","updated":"2013-12-10 04:45:01.000000000","message":"Done","commit_id":"610bbf2e82001c163c703220c8d81165536bb9e5"}],"nova/tests/integrated/api_samples/os-image-with-volume-backup/create-image-with-volume-backup.xml.tpl":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"6c39ec5e2837a9137deb45afea151fd5cd2b9391","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003ccreateImage"},{"line_number":3,"context_line":"    xmlns\u003d\"http://docs.openstack.org/compute/api/v1.1\""},{"line_number":4,"context_line":"    name\u003d%(name)s\u003e"},{"line_number":5,"context_line":"    backupOnlyRootVolume\u003d%(root_volume_only)s"},{"line_number":6,"context_line":"\u003c/createImage\u003e"}],"source_content_type":"text/x-smarty","patch_set":23,"id":"AAAATn%2F9nT4%3D","line":5,"updated":"2013-12-09 16:52:13.000000000","message":"Something seems off about this template: the value \"name\" attribute isn\u0027t quoted, and the text of the element looks like it\u0027s supposed to be an attribute.  It also doesn\u0027t match the sample in the documentation…","commit_id":"610bbf2e82001c163c703220c8d81165536bb9e5"},{"author":{"_account_id":7532,"name":"Aditi Raveesh","email":"aditi.raveesh@gmail.com","username":"aditiraveesh"},"change_message_id":"48479a08648091d7eb1d6ef3862e85121a38d211","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003ccreateImage"},{"line_number":3,"context_line":"    xmlns\u003d\"http://docs.openstack.org/compute/api/v1.1\""},{"line_number":4,"context_line":"    name\u003d%(name)s\u003e"},{"line_number":5,"context_line":"    backupOnlyRootVolume\u003d%(root_volume_only)s"},{"line_number":6,"context_line":"\u003c/createImage\u003e"}],"source_content_type":"text/x-smarty","patch_set":23,"id":"AAAATn%2F9kik%3D","line":5,"in_reply_to":"AAAATn%2F9nT4%3D","updated":"2013-12-10 04:45:01.000000000","message":"Yes, it has to be an attribute. And the test still passed since it took the default value of backupOnlyRootVolume to be false. Will fix this.","commit_id":"610bbf2e82001c163c703220c8d81165536bb9e5"}]}
