)]}'
{"nova/compute/api.py":[{"author":{"_account_id":24638,"name":"Eric M Gonzalez (tasker)","email":"eric@awnix.com","username":"egrh3"},"change_message_id":"63e635cb9106a2ec6f4c3ed2f85d4701b3aa0b9c","unresolved":false,"context_lines":[{"line_number":2808,"context_line":"                          \u0027snapshots, with a limit of %s.\u0027,"},{"line_number":2809,"context_line":"                          total_snapshots_used, len(volume_bdms),"},{"line_number":2810,"context_line":"                          max_snapshots, instance\u003dinstance)"},{"line_number":2811,"context_line":"                raise exception.OverQuota(overs\u003d\u0027snapshots\u0027)"},{"line_number":2812,"context_line":""},{"line_number":2813,"context_line":"        try:"},{"line_number":2814,"context_line":"            for bdm in volume_bdms:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_7249612f","line":2811,"updated":"2017-11-15 18:21:11.000000000","message":"Will break function leaving the instance quiesced. Maybe place this inside of the \"try\" so that the catch below can unquiesce it? That\u0027s probably too much code in a try block, though.","commit_id":"9c48c8797019ca9ac18b7c752a049d7da3d8b373"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf805e300316b6302c5591d2a5c45e858ec982f7","unresolved":false,"context_lines":[{"line_number":2808,"context_line":"                          \u0027snapshots, with a limit of %s.\u0027,"},{"line_number":2809,"context_line":"                          total_snapshots_used, len(volume_bdms),"},{"line_number":2810,"context_line":"                          max_snapshots, instance\u003dinstance)"},{"line_number":2811,"context_line":"                raise exception.OverQuota(overs\u003d\u0027snapshots\u0027)"},{"line_number":2812,"context_line":""},{"line_number":2813,"context_line":"        try:"},{"line_number":2814,"context_line":"            for bdm in volume_bdms:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_04ecef8c","line":2811,"in_reply_to":"1f485f77_44d9f57c","updated":"2017-11-17 14:43:36.000000000","message":"Yeah, I totally missed this, good point.","commit_id":"9c48c8797019ca9ac18b7c752a049d7da3d8b373"},{"author":{"_account_id":24638,"name":"Eric M Gonzalez (tasker)","email":"eric@awnix.com","username":"egrh3"},"change_message_id":"6e69dd8c632136ba3f1d0fa49a5b3ed26880f73e","unresolved":false,"context_lines":[{"line_number":2808,"context_line":"                          \u0027snapshots, with a limit of %s.\u0027,"},{"line_number":2809,"context_line":"                          total_snapshots_used, len(volume_bdms),"},{"line_number":2810,"context_line":"                          max_snapshots, instance\u003dinstance)"},{"line_number":2811,"context_line":"                raise exception.OverQuota(overs\u003d\u0027snapshots\u0027)"},{"line_number":2812,"context_line":""},{"line_number":2813,"context_line":"        try:"},{"line_number":2814,"context_line":"            for bdm in volume_bdms:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_f2c2f158","line":2811,"in_reply_to":"1f485f77_7249612f","updated":"2017-11-15 18:24:17.000000000","message":"or swap the quota check and quiesce in the order of operations?","commit_id":"9c48c8797019ca9ac18b7c752a049d7da3d8b373"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"149a48788327779ffd605d46ccb68532168de2e2","unresolved":false,"context_lines":[{"line_number":2808,"context_line":"                          \u0027snapshots, with a limit of %s.\u0027,"},{"line_number":2809,"context_line":"                          total_snapshots_used, len(volume_bdms),"},{"line_number":2810,"context_line":"                          max_snapshots, instance\u003dinstance)"},{"line_number":2811,"context_line":"                raise exception.OverQuota(overs\u003d\u0027snapshots\u0027)"},{"line_number":2812,"context_line":""},{"line_number":2813,"context_line":"        try:"},{"line_number":2814,"context_line":"            for bdm in volume_bdms:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_44d9f57c","line":2811,"in_reply_to":"1f485f77_f2c2f158","updated":"2017-11-16 06:25:44.000000000","message":"yes, seems d04b8a3a21de20682a6d2bff5879efde5e2bbc0f mentioned the snapshot need instance to be quisenced, so \ncheck quota before quiesce seems reasonable","commit_id":"9c48c8797019ca9ac18b7c752a049d7da3d8b373"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"f498b6f86de89a6df9b70b07e4ec204cba4625a2","unresolved":false,"context_lines":[{"line_number":2821,"context_line":"                    name \u003d _(\u0027snapshot for %s\u0027) % image_meta[\u0027name\u0027]"},{"line_number":2822,"context_line":"                    LOG.debug(\u0027Creating snapshot from volume %s.\u0027,"},{"line_number":2823,"context_line":"                              volume[\u0027id\u0027], instance\u003dinstance)"},{"line_number":2824,"context_line":"                    snapshot \u003d self.volume_api.create_snapshot_force("},{"line_number":2825,"context_line":"                        context, volume[\u0027id\u0027],"},{"line_number":2826,"context_line":"                        name, volume[\u0027display_description\u0027])"},{"line_number":2827,"context_line":"                    mapping_dict \u003d block_device.snapshot_from_bdm("},{"line_number":2828,"context_line":"                        snapshot[\u0027id\u0027], bdm)"},{"line_number":2829,"context_line":"                    mapping_dict \u003d mapping_dict.get_image_mapping()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_84ef03af","line":2826,"range":{"start_line":2824,"start_character":0,"end_line":2826,"end_character":60},"updated":"2018-01-15 12:50:50.000000000","message":"If we kept these in a list we could delete them all in the except block below in the event of an error. This would have the advantage of also covering the overlapping request race, because you\u0027d have no partial failures.","commit_id":"8c48974a238593e5fa0877d5caeaf6b355e7bd6e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7d2816d52e26a5994c8e3ed785fc0bee888ac413","unresolved":false,"context_lines":[{"line_number":2821,"context_line":"                    name \u003d _(\u0027snapshot for %s\u0027) % image_meta[\u0027name\u0027]"},{"line_number":2822,"context_line":"                    LOG.debug(\u0027Creating snapshot from volume %s.\u0027,"},{"line_number":2823,"context_line":"                              volume[\u0027id\u0027], instance\u003dinstance)"},{"line_number":2824,"context_line":"                    snapshot \u003d self.volume_api.create_snapshot_force("},{"line_number":2825,"context_line":"                        context, volume[\u0027id\u0027],"},{"line_number":2826,"context_line":"                        name, volume[\u0027display_description\u0027])"},{"line_number":2827,"context_line":"                    mapping_dict \u003d block_device.snapshot_from_bdm("},{"line_number":2828,"context_line":"                        snapshot[\u0027id\u0027], bdm)"},{"line_number":2829,"context_line":"                    mapping_dict \u003d mapping_dict.get_image_mapping()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_64f3d39f","line":2826,"range":{"start_line":2824,"start_character":0,"end_line":2826,"end_character":60},"in_reply_to":"3fa0c359_44e017cd","updated":"2018-02-20 01:44:26.000000000","message":"To be clear, it looks like the lack of complete cleanup behavior is latent and not caused by this patch.","commit_id":"8c48974a238593e5fa0877d5caeaf6b355e7bd6e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"129bd2c602199445111d645f6d2264109e0c263c","unresolved":false,"context_lines":[{"line_number":2821,"context_line":"                    name \u003d _(\u0027snapshot for %s\u0027) % image_meta[\u0027name\u0027]"},{"line_number":2822,"context_line":"                    LOG.debug(\u0027Creating snapshot from volume %s.\u0027,"},{"line_number":2823,"context_line":"                              volume[\u0027id\u0027], instance\u003dinstance)"},{"line_number":2824,"context_line":"                    snapshot \u003d self.volume_api.create_snapshot_force("},{"line_number":2825,"context_line":"                        context, volume[\u0027id\u0027],"},{"line_number":2826,"context_line":"                        name, volume[\u0027display_description\u0027])"},{"line_number":2827,"context_line":"                    mapping_dict \u003d block_device.snapshot_from_bdm("},{"line_number":2828,"context_line":"                        snapshot[\u0027id\u0027], bdm)"},{"line_number":2829,"context_line":"                    mapping_dict \u003d mapping_dict.get_image_mapping()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_44e017cd","line":2826,"range":{"start_line":2824,"start_character":0,"end_line":2826,"end_character":60},"in_reply_to":"7f96bb07_17bd67d7","updated":"2018-02-20 01:42:03.000000000","message":"It looks like the cleanup you\u0027re discussing is an improvement we could work on in a separate patch, that is, it\u0027s not directly related to this patch to check volume quota in the api.","commit_id":"8c48974a238593e5fa0877d5caeaf6b355e7bd6e"},{"author":{"_account_id":24638,"name":"Eric M Gonzalez (tasker)","email":"eric@awnix.com","username":"egrh3"},"change_message_id":"3dc47724bc108f30f8531f554af31cf088049b37","unresolved":false,"context_lines":[{"line_number":2821,"context_line":"                    name \u003d _(\u0027snapshot for %s\u0027) % image_meta[\u0027name\u0027]"},{"line_number":2822,"context_line":"                    LOG.debug(\u0027Creating snapshot from volume %s.\u0027,"},{"line_number":2823,"context_line":"                              volume[\u0027id\u0027], instance\u003dinstance)"},{"line_number":2824,"context_line":"                    snapshot \u003d self.volume_api.create_snapshot_force("},{"line_number":2825,"context_line":"                        context, volume[\u0027id\u0027],"},{"line_number":2826,"context_line":"                        name, volume[\u0027display_description\u0027])"},{"line_number":2827,"context_line":"                    mapping_dict \u003d block_device.snapshot_from_bdm("},{"line_number":2828,"context_line":"                        snapshot[\u0027id\u0027], bdm)"},{"line_number":2829,"context_line":"                    mapping_dict \u003d mapping_dict.get_image_mapping()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_17bd67d7","line":2826,"range":{"start_line":2824,"start_character":0,"end_line":2826,"end_character":60},"in_reply_to":"7f96bb07_84ef03af","updated":"2018-01-15 13:15:47.000000000","message":"My original idea and patch took advantage of the fact that any successful snapshots were contained in the \"bdm\". In the exception handling, I cycled through the list and deleted any that had succeeded. Matt Riedemann thought that there might be a race condition on the part of Cinder trying to delete a snapshot while it was still \"creating\".\n\nAfter some deeper code reading, I realize that \"unquiesce_instance\" in the compute.manager will \"._wait_for_snapshots_completion\". So maybe we can handle the snapshot deletions after the rpcapi.unqueisce_instance?","commit_id":"8c48974a238593e5fa0877d5caeaf6b355e7bd6e"}]}
