)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"41580c2c828154ea74f3ee317290c01953729fd0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds an exception catch to \"snapshot_volume_backed()\" of"},{"line_number":10,"context_line":"compute/api.py that catches (at the moment) _all_ exceptions from the"},{"line_number":11,"context_line":"underlying cinderclient. Previously, if the instance is queiseced ( frozen"},{"line_number":12,"context_line":"filesystem ) then the exception will break execution of the function,"},{"line_number":13,"context_line":"skipping the needed unquiesce, and leave the instance in a frozen state."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1f485f77_554b0658","line":11,"range":{"start_line":11,"start_character":56,"end_line":11,"end_character":65},"updated":"2017-11-15 02:27:55.000000000","message":"quiesced","commit_id":"ff6579cfb95f3fe9945ede9cb3fb3ad4b2de5862"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"41580c2c828154ea74f3ee317290c01953729fd0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    test_snapshot_volume_backed_with_quiesce_create_snap_fails"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I60de179c72eede6746696f29462ee9d805dace47"},{"line_number":22,"context_line":"Implements: blueprint thaw-filesystem-on-failed-snapshot"},{"line_number":23,"context_line":"Closes-bug: #1731986"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1f485f77_f579d292","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":56},"updated":"2017-11-15 02:27:55.000000000","message":"Remove this - we don\u0027t need a blueprint for a bug fix.","commit_id":"ff6579cfb95f3fe9945ede9cb3fb3ad4b2de5862"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc72d0a760eed55a3a05bb69cdd9cb42fccfe7c6","unresolved":false,"context_lines":[{"line_number":2810,"context_line":""},{"line_number":2811,"context_line":"                mapping.append(mapping_dict)"},{"line_number":2812,"context_line":""},{"line_number":2813,"context_line":"        # NOTE(tasker): No error handling is done in the above for loop. this"},{"line_number":2814,"context_line":"        #               means that if the snapshot fails and throws an excep-"},{"line_number":2815,"context_line":"        #               tion the traceback will skip right over the unquiesce"},{"line_number":2816,"context_line":"        #               needed below. Here, catch any exception, delete all"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_d4a165ab","line":2813,"range":{"start_line":2813,"start_character":73,"end_line":2813,"end_character":77},"updated":"2017-11-13 20:24:30.000000000","message":"This","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc72d0a760eed55a3a05bb69cdd9cb42fccfe7c6","unresolved":false,"context_lines":[{"line_number":2817,"context_line":"        #               completed snapshots, unquiesce the instance, and raise"},{"line_number":2818,"context_line":"        #               the error so that the calling function can do what it"},{"line_number":2819,"context_line":"        #               needs to do in order to properly treat a failed snap."},{"line_number":2820,"context_line":"        except Exception as error:"},{"line_number":2821,"context_line":"            LOG.error(\"Unhandled exception during snap: %s\", str(type(error)))"},{"line_number":2822,"context_line":""},{"line_number":2823,"context_line":"            # unquiesce the instance. leaving the instance frozen will start to"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_d48a8519","line":2820,"updated":"2017-11-13 20:24:30.000000000","message":"I think you want to do the below cleanup actions in an excutils.save_and_reraise_exception() context. That will handle re-raising the original exception, or a new exception if the cleanup block fails.","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc72d0a760eed55a3a05bb69cdd9cb42fccfe7c6","unresolved":false,"context_lines":[{"line_number":2818,"context_line":"        #               the error so that the calling function can do what it"},{"line_number":2819,"context_line":"        #               needs to do in order to properly treat a failed snap."},{"line_number":2820,"context_line":"        except Exception as error:"},{"line_number":2821,"context_line":"            LOG.error(\"Unhandled exception during snap: %s\", str(type(error)))"},{"line_number":2822,"context_line":""},{"line_number":2823,"context_line":"            # unquiesce the instance. leaving the instance frozen will start to"},{"line_number":2824,"context_line":"            #   cause problems with things attempting to write to disk."}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_149ffd5f","line":2821,"updated":"2017-11-13 20:24:30.000000000","message":"I don\u0027t think we want this, especially at ERROR level. ERROR level means the operator should get paged, but if the user hit an OverLimit in Cinder because they are out of snapshot quota, that\u0027s not the operator\u0027s problem.","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":24638,"name":"Eric M Gonzalez (tasker)","email":"eric@awnix.com","username":"egrh3"},"change_message_id":"9683225837f9c7afbb1c2bd854782ffaea6438ea","unresolved":false,"context_lines":[{"line_number":2818,"context_line":"        #               the error so that the calling function can do what it"},{"line_number":2819,"context_line":"        #               needs to do in order to properly treat a failed snap."},{"line_number":2820,"context_line":"        except Exception as error:"},{"line_number":2821,"context_line":"            LOG.error(\"Unhandled exception during snap: %s\", str(type(error)))"},{"line_number":2822,"context_line":""},{"line_number":2823,"context_line":"            # unquiesce the instance. leaving the instance frozen will start to"},{"line_number":2824,"context_line":"            #   cause problems with things attempting to write to disk."}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_d784c760","line":2821,"in_reply_to":"1f485f77_149ffd5f","updated":"2017-11-13 20:58:52.000000000","message":"WARNING level, then?","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce86a077542516884e374000befc9e1b9e56f591","unresolved":false,"context_lines":[{"line_number":2818,"context_line":"        #               the error so that the calling function can do what it"},{"line_number":2819,"context_line":"        #               needs to do in order to properly treat a failed snap."},{"line_number":2820,"context_line":"        except Exception as error:"},{"line_number":2821,"context_line":"            LOG.error(\"Unhandled exception during snap: %s\", str(type(error)))"},{"line_number":2822,"context_line":""},{"line_number":2823,"context_line":"            # unquiesce the instance. leaving the instance frozen will start to"},{"line_number":2824,"context_line":"            #   cause problems with things attempting to write to disk."}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_a357cd02","line":2821,"in_reply_to":"1f485f77_d784c760","updated":"2017-11-13 22:30:31.000000000","message":"No, I\u0027d say either debug or info at best, and I\u0027d say something like:\n\nif quiesced:\n    LOG.info(\u0027Volume snapshot creation failed. Unquiescing instance.\u0027, instance\u003dinstance)\n    self.compute_rpcapi.unquiesce_instance(...)\n\nAnd drop the LOG.error statement altogether. If we unquiesce, log that, otherwise we\u0027ll just re-raise the exception and it\u0027ll get logged later in the response log middleware handler.","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc72d0a760eed55a3a05bb69cdd9cb42fccfe7c6","unresolved":false,"context_lines":[{"line_number":2823,"context_line":"            # unquiesce the instance. leaving the instance frozen will start to"},{"line_number":2824,"context_line":"            #   cause problems with things attempting to write to disk."},{"line_number":2825,"context_line":"            if quiesced:"},{"line_number":2826,"context_line":"                LOG.info(\"unquiesce instance after snapshot failure\")"},{"line_number":2827,"context_line":"                self.compute_rpcapi.unquiesce_instance("},{"line_number":2828,"context_line":"                    context,"},{"line_number":2829,"context_line":"                    instance,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_94840d0e","line":2826,"updated":"2017-11-13 20:24:30.000000000","message":"Throw the instance\u003dinstance kwarg in here for context with the logging message.","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc72d0a760eed55a3a05bb69cdd9cb42fccfe7c6","unresolved":false,"context_lines":[{"line_number":2831,"context_line":"                )"},{"line_number":2832,"context_line":""},{"line_number":2833,"context_line":"            # however, if this happens in the middle of a list of volumes, then"},{"line_number":2834,"context_line":"            #   some of those volumes will have a proper snapshot. should those"},{"line_number":2835,"context_line":"            #   get deleted?"},{"line_number":2836,"context_line":"            #"},{"line_number":2837,"context_line":"            # On the safe side, since the user asked for a snapshot and we can"},{"line_number":2838,"context_line":"            #   not complete that request, delete all completed snaps and then"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_54a3359f","line":2835,"range":{"start_line":2834,"start_character":67,"end_line":2835,"end_character":28},"updated":"2017-11-13 20:24:30.000000000","message":"This could get dicey because the unquiesce_instance above is an rpc cast to the compute, and that waits for the snapshot status to be !creating (could be completed or error or something). So the API would have to account for that, which means managing state in two places (compute waits for cinder, api waits for compute).","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc72d0a760eed55a3a05bb69cdd9cb42fccfe7c6","unresolved":false,"context_lines":[{"line_number":2837,"context_line":"            # On the safe side, since the user asked for a snapshot and we can"},{"line_number":2838,"context_line":"            #   not complete that request, delete all completed snaps and then"},{"line_number":2839,"context_line":"            #   raise. All or nothing."},{"line_number":2840,"context_line":"            for bdm in mapping:"},{"line_number":2841,"context_line":"                LOG.info("},{"line_number":2842,"context_line":"                    \"Failed snapshot; deleteing volume snapshot: %s\","},{"line_number":2843,"context_line":"                    bdm[\"snapshot_id\"]"},{"line_number":2844,"context_line":"                )"},{"line_number":2845,"context_line":""},{"line_number":2846,"context_line":"                self.volume_api.delete_snapshot("},{"line_number":2847,"context_line":"                    context,"},{"line_number":2848,"context_line":"                    bdm[\"snapshot_id\"]"},{"line_number":2849,"context_line":"                )"},{"line_number":2850,"context_line":""},{"line_number":2851,"context_line":"            # raise the exception? depends on what should happen with the snap-"},{"line_number":2852,"context_line":"            #   shot on failure. technically, this isn\u0027t a complpete snapshot \u0026"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_d4b845c9","line":2849,"range":{"start_line":2840,"start_character":12,"end_line":2849,"end_character":17},"updated":"2017-11-13 20:24:30.000000000","message":"Per the above, you\u0027re attempting to do this while the compute is waiting for the snapshot status to change from \u0027creating\u0027. Trying to delete the snapshot while the driver in the compute could be unquiescing seems like a bad idea, especially for an NFS backend or something like that which has to call back into nova to complete the snapshot, see:\n\nhttps://developer.openstack.org/api-ref/compute/#assisted-volume-snapshots-os-assisted-volume-snapshots\n\n--\n\nRegardless of your cleanup, it would probably behoove us to, in a separate patch, do a quota usage check in cinder before we actually try to create the snapshots to avoid the OverLimit in the first place and then we wouldn\u0027t have to clean anything up. That\u0027s a potentially racy check, but worst case is the nova check for quota passes and the snapshot create fails, we\u0027ll still cleanup either way. But like I said, we\u0027d add that check in a separate patch after this.","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc72d0a760eed55a3a05bb69cdd9cb42fccfe7c6","unresolved":false,"context_lines":[{"line_number":2848,"context_line":"                    bdm[\"snapshot_id\"]"},{"line_number":2849,"context_line":"                )"},{"line_number":2850,"context_line":""},{"line_number":2851,"context_line":"            # raise the exception? depends on what should happen with the snap-"},{"line_number":2852,"context_line":"            #   shot on failure. technically, this isn\u0027t a complpete snapshot \u0026"},{"line_number":2853,"context_line":"            #   should not be created. raising will prevent that from happening"},{"line_number":2854,"context_line":"            raise error"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_b4e029ce","line":2851,"range":{"start_line":2851,"start_character":14,"end_line":2851,"end_character":33},"updated":"2017-11-13 20:24:30.000000000","message":"Yes, we definitely want to raise the original exception for the failure, we\u0027re just handling cleanup at this point.","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc72d0a760eed55a3a05bb69cdd9cb42fccfe7c6","unresolved":false,"context_lines":[{"line_number":2849,"context_line":"                )"},{"line_number":2850,"context_line":""},{"line_number":2851,"context_line":"            # raise the exception? depends on what should happen with the snap-"},{"line_number":2852,"context_line":"            #   shot on failure. technically, this isn\u0027t a complpete snapshot \u0026"},{"line_number":2853,"context_line":"            #   should not be created. raising will prevent that from happening"},{"line_number":2854,"context_line":"            raise error"},{"line_number":2855,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_14c6dd49","line":2852,"range":{"start_line":2852,"start_character":59,"end_line":2852,"end_character":68},"updated":"2017-11-13 20:24:30.000000000","message":"complete","commit_id":"ea386cc414c3e1b88acc4196530ecf8ba27a91fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"455b380ece2760b51ab826c996f50ca7802c3a5b","unresolved":false,"context_lines":[{"line_number":2793,"context_line":"                    #                 short time, it doesn\u0027t matter for now."},{"line_number":2794,"context_line":"                    name \u003d _(\u0027snapshot for %s\u0027) % image_meta[\u0027name\u0027]"},{"line_number":2795,"context_line":"                    LOG.debug("},{"line_number":2796,"context_line":"                        \u0027Creating snapshot from volume %s.\u0027,"},{"line_number":2797,"context_line":"                        volume[\u0027id\u0027],"},{"line_number":2798,"context_line":"                        instance\u003dinstance"},{"line_number":2799,"context_line":"                    )"},{"line_number":2800,"context_line":"                    snapshot \u003d self.volume_api.create_snapshot_force("},{"line_number":2801,"context_line":"                        context,"},{"line_number":2802,"context_line":"                        volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_8ba176ac","line":2799,"range":{"start_line":2796,"start_character":24,"end_line":2799,"end_character":21},"updated":"2017-11-14 14:06:28.000000000","message":"We should be able to put this on two lines.","commit_id":"b465e69ff4ca1eb94de10b7e2f0cf3d7b44de3c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"455b380ece2760b51ab826c996f50ca7802c3a5b","unresolved":false,"context_lines":[{"line_number":2798,"context_line":"                        instance\u003dinstance"},{"line_number":2799,"context_line":"                    )"},{"line_number":2800,"context_line":"                    snapshot \u003d self.volume_api.create_snapshot_force("},{"line_number":2801,"context_line":"                        context,"},{"line_number":2802,"context_line":"                        volume[\u0027id\u0027],"},{"line_number":2803,"context_line":"                        name,"},{"line_number":2804,"context_line":"                        volume[\u0027display_description\u0027]"},{"line_number":2805,"context_line":"                    )"},{"line_number":2806,"context_line":"                    mapping_dict \u003d block_device.snapshot_from_bdm("},{"line_number":2807,"context_line":"                        snapshot[\u0027id\u0027],"},{"line_number":2808,"context_line":"                        bdm"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_abc43260","line":2805,"range":{"start_line":2801,"start_character":24,"end_line":2805,"end_character":21},"updated":"2017-11-14 14:06:28.000000000","message":"We should be able to put this on two lines.","commit_id":"b465e69ff4ca1eb94de10b7e2f0cf3d7b44de3c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"455b380ece2760b51ab826c996f50ca7802c3a5b","unresolved":false,"context_lines":[{"line_number":2804,"context_line":"                        volume[\u0027display_description\u0027]"},{"line_number":2805,"context_line":"                    )"},{"line_number":2806,"context_line":"                    mapping_dict \u003d block_device.snapshot_from_bdm("},{"line_number":2807,"context_line":"                        snapshot[\u0027id\u0027],"},{"line_number":2808,"context_line":"                        bdm"},{"line_number":2809,"context_line":"                    )"},{"line_number":2810,"context_line":"                    mapping_dict \u003d mapping_dict.get_image_mapping()"},{"line_number":2811,"context_line":"                else:"},{"line_number":2812,"context_line":"                    mapping_dict \u003d bdm.get_image_mapping()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_0bd0e61e","line":2809,"range":{"start_line":2807,"start_character":24,"end_line":2809,"end_character":21},"updated":"2017-11-14 14:06:28.000000000","message":"This could all be on the same line.","commit_id":"b465e69ff4ca1eb94de10b7e2f0cf3d7b44de3c9"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"6fa0b49f9538b16ff3aa61cdc3fd4d30a91ad51b","unresolved":false,"context_lines":[{"line_number":2820,"context_line":"        #               instance, and raise the error so that the calling"},{"line_number":2821,"context_line":"        #               function can do what it needs to in order to properly"},{"line_number":2822,"context_line":"        #               treat a failed snap."},{"line_number":2823,"context_line":"        except Exception as error:"},{"line_number":2824,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2825,"context_line":"                if quiesced:"},{"line_number":2826,"context_line":"                    LOG.info("}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_493eeeda","line":2823,"range":{"start_line":2823,"start_character":28,"end_line":2823,"end_character":33},"updated":"2017-11-14 09:46:31.000000000","message":"nit","commit_id":"b465e69ff4ca1eb94de10b7e2f0cf3d7b44de3c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"455b380ece2760b51ab826c996f50ca7802c3a5b","unresolved":false,"context_lines":[{"line_number":2820,"context_line":"        #               instance, and raise the error so that the calling"},{"line_number":2821,"context_line":"        #               function can do what it needs to in order to properly"},{"line_number":2822,"context_line":"        #               treat a failed snap."},{"line_number":2823,"context_line":"        except Exception as error:"},{"line_number":2824,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2825,"context_line":"                if quiesced:"},{"line_number":2826,"context_line":"                    LOG.info("}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_8bd3b638","line":2823,"range":{"start_line":2823,"start_character":28,"end_line":2823,"end_character":33},"in_reply_to":"1f485f77_493eeeda","updated":"2017-11-14 14:06:28.000000000","message":"It\u0027s an unused variable is I think the point.","commit_id":"b465e69ff4ca1eb94de10b7e2f0cf3d7b44de3c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"455b380ece2760b51ab826c996f50ca7802c3a5b","unresolved":false,"context_lines":[{"line_number":2825,"context_line":"                if quiesced:"},{"line_number":2826,"context_line":"                    LOG.info("},{"line_number":2827,"context_line":"                        \"Unquiescing instance after volume snapshot failure.\","},{"line_number":2828,"context_line":"                        instance \u003d instance"},{"line_number":2829,"context_line":"                    )"},{"line_number":2830,"context_line":"                    self.compute_rpcapi.unquiesce_instance("},{"line_number":2831,"context_line":"                        context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_8b8a9618","line":2828,"range":{"start_line":2828,"start_character":32,"end_line":2828,"end_character":35},"updated":"2017-11-14 14:06:28.000000000","message":"nit: instance\u003dinstance for passing kwargs.","commit_id":"b465e69ff4ca1eb94de10b7e2f0cf3d7b44de3c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"455b380ece2760b51ab826c996f50ca7802c3a5b","unresolved":false,"context_lines":[{"line_number":2828,"context_line":"                        instance \u003d instance"},{"line_number":2829,"context_line":"                    )"},{"line_number":2830,"context_line":"                    self.compute_rpcapi.unquiesce_instance("},{"line_number":2831,"context_line":"                        context,"},{"line_number":2832,"context_line":"                        instance,"},{"line_number":2833,"context_line":"                        mapping"},{"line_number":2834,"context_line":"                    )"},{"line_number":2835,"context_line":""},{"line_number":2836,"context_line":"        if quiesced:"},{"line_number":2837,"context_line":"            self.compute_rpcapi.unquiesce_instance(context, instance, mapping)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_2b872212","line":2834,"range":{"start_line":2831,"start_character":24,"end_line":2834,"end_character":21},"updated":"2017-11-14 14:06:28.000000000","message":"Should be able to put this on a single line.","commit_id":"b465e69ff4ca1eb94de10b7e2f0cf3d7b44de3c9"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"079804def353a29b00786fd814784225fc9966f1","unresolved":false,"context_lines":[{"line_number":2815,"context_line":"        except Exception:"},{"line_number":2816,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2817,"context_line":"                if quiesced:"},{"line_number":2818,"context_line":"                    LOG.info("},{"line_number":2819,"context_line":"                        \"Unquiescing instance after volume snapshot failure.\","},{"line_number":2820,"context_line":"                        instance\u003dinstance"},{"line_number":2821,"context_line":"                    )"},{"line_number":2822,"context_line":"                    self.compute_rpcapi.unquiesce_instance("},{"line_number":2823,"context_line":"                        context, instance, mapping)"},{"line_number":2824,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_e46ea12d","line":2821,"range":{"start_line":2818,"start_character":20,"end_line":2821,"end_character":21},"updated":"2017-11-16 06:59:37.000000000","message":"if we add log here, better to add log when doing quiesce action","commit_id":"9b4731cfb0c082fd7f46bfab02364e99cd4a0dc1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3301d5eccd253650ffff831359a8982a3cda822e","unresolved":false,"context_lines":[{"line_number":2815,"context_line":"        except Exception:"},{"line_number":2816,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2817,"context_line":"                if quiesced:"},{"line_number":2818,"context_line":"                    LOG.info("},{"line_number":2819,"context_line":"                        \"Unquiescing instance after volume snapshot failure.\","},{"line_number":2820,"context_line":"                        instance\u003dinstance"},{"line_number":2821,"context_line":"                    )"},{"line_number":2822,"context_line":"                    self.compute_rpcapi.unquiesce_instance("},{"line_number":2823,"context_line":"                        context, instance, mapping)"},{"line_number":2824,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_5f0bc722","line":2821,"range":{"start_line":2818,"start_character":20,"end_line":2821,"end_character":21},"in_reply_to":"1f485f77_e46ea12d","updated":"2018-01-08 22:28:48.000000000","message":"Done","commit_id":"9b4731cfb0c082fd7f46bfab02364e99cd4a0dc1"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"455b380ece2760b51ab826c996f50ca7802c3a5b","unresolved":false,"context_lines":[{"line_number":2636,"context_line":""},{"line_number":2637,"context_line":"    def _test_snapshot_volume_backed(self, quiesce_required, quiesce_fails,"},{"line_number":2638,"context_line":"                                     vm_state\u003dvm_states.ACTIVE,"},{"line_number":2639,"context_line":"                                     snapshot_fails \u003d False):"},{"line_number":2640,"context_line":"        fake_sys_meta \u003d {\u0027image_min_ram\u0027: \u002711\u0027,"},{"line_number":2641,"context_line":"                         \u0027image_min_disk\u0027: \u002722\u0027,"},{"line_number":2642,"context_line":"                         \u0027image_container_format\u0027: \u0027ami\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_cb776e3a","line":2639,"range":{"start_line":2639,"start_character":51,"end_line":2639,"end_character":54},"updated":"2017-11-14 14:06:28.000000000","message":"snapshot_fails\u003dFalse for kwargs.","commit_id":"b465e69ff4ca1eb94de10b7e2f0cf3d7b44de3c9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"455b380ece2760b51ab826c996f50ca7802c3a5b","unresolved":false,"context_lines":[{"line_number":2795,"context_line":"        self._test_snapshot_volume_backed(True, False)"},{"line_number":2796,"context_line":""},{"line_number":2797,"context_line":"    def test_snapshot_volume_backed_with_quiesce_create_snap_fails(self):"},{"line_number":2798,"context_line":"        self._test_snapshot_volume_backed(True, False, snapshot_fails \u003d True)"},{"line_number":2799,"context_line":""},{"line_number":2800,"context_line":"    def test_snapshot_volume_backed_with_quiesce_skipped(self):"},{"line_number":2801,"context_line":"        self._test_snapshot_volume_backed(False, True)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_4bb25ee8","line":2798,"range":{"start_line":2798,"start_character":42,"end_line":2798,"end_character":76},"updated":"2017-11-14 14:06:28.000000000","message":"Let\u0027s use kwargs for all of these:\n\nquiesce_required\u003dTrue, quiesce_fails\u003dFalse,\nsnapshot_fails\u003dTrue","commit_id":"b465e69ff4ca1eb94de10b7e2f0cf3d7b44de3c9"}]}
